UNPKG

mwn

Version:

JavaScript & TypeScript MediaWiki bot framework for Node.js

1,121 lines 28 kB
"use strict"; /** * * This class is a substantial copy of mw.Title in the MediaWiki on-site * JS interface. * * Adapted from <https://gerrit.wikimedia.org/r/plugins/gitiles/mediawiki/core/+/master/resources/src/mediawiki.Title/> * (GNU GPL v2) * */ Object.defineProperty(exports, "__esModule", { value: true }); exports.default = default_1; function default_1() { let NS_MAIN = 0; let NS_TALK = 1; let NS_SPECIAL = -1; class Title { static processNamespaceData(json) { let namespaceNorm = (ns) => (ns || '').toLowerCase().replace(/ /g, '_'); // Analog of mw.config.get('wgFormattedNamespaces') Title.idNameMap = {}; // Analag of mw.config.get('wgNamespaceIds') Title.nameIdMap = {}; Object.values(json.query.namespaces).forEach((ns) => { Title.idNameMap[ns.id] = ns.name; Title.nameIdMap[namespaceNorm(ns.name)] = ns.id; Title.nameIdMap[namespaceNorm(ns.canonical)] = ns.id; }); json.query.namespacealiases.forEach((ns) => { Title.nameIdMap[namespaceNorm(ns.alias)] = ns.id; }); // Analog of mw.config.get('wgLegalTitleChars') Title.legaltitlechars = json.query.general.legaltitlechars; // Analog of mw.config.get('wgCaseSensitiveNamespaces') Title.caseSensitiveNamespaces = Object.values(json.query.namespaces) .filter((ns) => ns.case === 'case-sensitive') .map((ns) => ns.id); } static checkData() { if (!Title.nameIdMap || !Title.idNameMap || !Title.legaltitlechars) { throw new Error('namespace data unavailable: run getSiteInfo() or login() first on the mwn object'); } } constructor(title, namespace) { let parsed = parse(title, namespace); if (!parsed) { throw new Error('Unable to parse title'); } this.namespace = parsed.namespace; this.title = parsed.title; this.fragment = parsed.fragment; } /** @inheritDoc */ getNamespaceId() { return this.namespace; } /** @inheritDoc */ getNamespacePrefix() { return getNamespacePrefix(this.namespace); } /** @inheritDoc */ getMain() { if (Title.caseSensitiveNamespaces.indexOf(this.namespace) !== -1 || !this.title.length) { return this.title; } return Title.phpCharToUpper(this.title[0]) + this.title.slice(1); } /** @inheritDoc */ getMainText() { return this.getMain().replace(/_/g, ' '); } /** @inheritDoc */ getPrefixedDb() { return this.getNamespacePrefix() + this.getMain(); } /** @inheritDoc */ getPrefixedText() { return this.getPrefixedDb().replace(/_/g, ' '); } /** @inheritDoc */ getFragment() { return this.fragment; } /** @inheritDoc */ isTalkPage() { return Title.isTalkNamespace(this.getNamespaceId()); } /** @inheritDoc */ getTalkPage() { if (!this.canHaveTalkPage()) { return null; } return this.isTalkPage() ? this : Title.makeTitle(this.getNamespaceId() + 1, this.getMainText()); } /** @inheritDoc */ getSubjectPage() { return this.isTalkPage() ? Title.makeTitle(this.getNamespaceId() - 1, this.getMainText()) : this; } /** @inheritDoc */ canHaveTalkPage() { return this.getNamespaceId() >= NS_MAIN; } /** @inheritDoc */ getExtension() { let lastDot = this.title.lastIndexOf('.'); if (lastDot === -1) { return null; } return this.title.slice(lastDot + 1) || null; } /** @inheritDoc */ getDotExtension() { let ext = this.getExtension(); return ext === null ? '' : '.' + ext; } /** * Constructor for Title objects with a null return instead of an exception for invalid titles. * * Note that `namespace` is the **default** namespace only, and can be overridden by a namespace * prefix in `title`. If you do not want this behavior, use #makeTitle. See #constructor for * details. * @return {Title|null} A valid Title object or null if the title is invalid */ static newFromText(title, namespace = 0) { let t, parsed = parse(title, namespace); if (!parsed) { return null; } t = Object.create(Title.prototype); t.namespace = parsed.namespace; t.title = parsed.title; t.fragment = parsed.fragment; return t; } /** * Constructor for Title objects with predefined namespace. * * Unlike #newFromText or #constructor, this function doesn't allow the given `namespace` to be * overridden by a namespace prefix in `title`. See #constructor for details about this behavior. * * The single exception to this is when `namespace` is 0, indicating the main namespace. The * function behaves like #newFromText in that case. * @return {Title|null} A valid Title object or null if the title is invalid */ static makeTitle(namespace, title) { return Title.newFromText(getNamespacePrefix(namespace) + title); } /** * Check if a given namespace is a talk namespace */ static isTalkNamespace(namespaceId) { return !!(namespaceId > NS_MAIN && namespaceId % 2); } /** * PHP's strtoupper differs from String.toUpperCase in a number of cases (T147646). * * @param {string} chr Unicode character * @return {string} Unicode character, in upper case, according to the same rules as in PHP */ static phpCharToUpper(chr) { // @ts-ignore if (toUpperMap[chr] === '') { // Optimisation: When the override is to keep the character unchanged, // we use an empty string in JSON. This reduces the data by 50%. return chr; } // @ts-ignore return toUpperMap[chr] || chr.toUpperCase(); } /** @inheritDoc */ toString() { return this.getPrefixedDb(); } /** @inheritDoc */ toText() { return this.getPrefixedText(); } } /** * Private members */ let parse = function (title, defaultNamespace) { Title.checkData(); let namespace, m, id, i, fragment; let rUnicodeBidi = /[\u200E\u200F\u202A-\u202E]+/g, rWhitespace = /[ _\u00A0\u1680\u180E\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]+/g, rUnderscoreTrim = /^_+|_+$/g, rSplit = /^(.+?)_*:_*(.*)$/, rInvalid = new RegExp('[^' + ' %!"$&\'()*,\\-./0-9:;=?@A-Z\\\\\\^_`a-z~+\\u0080-\\uFFFF' + ']' + // URL percent encoding sequences interfere with the ability // to round-trip titles -- you can't link to them consistently. '|%[\\dA-Fa-f]{2}' + // XML/HTML character references produce similar issues. '|&[\\dA-Za-z\u0080-\uFFFF]+;' + '|&#\\d+;' + '|&#x[\\dA-Fa-f]+;'); namespace = defaultNamespace === undefined ? NS_MAIN : defaultNamespace; title = title // Strip Unicode bidi override characters .replace(rUnicodeBidi, '') // Normalise whitespace to underscores and remove duplicates .replace(rWhitespace, '_') // Trim underscores .replace(rUnderscoreTrim, ''); // Process initial colon if (title !== '' && title[0] === ':') { // Initial colon means main namespace instead of specified default namespace = NS_MAIN; title = title // Strip colon .slice(1) // Trim underscores .replace(rUnderscoreTrim, ''); } if (title === '') { return false; } // Process namespace prefix (if any) m = title.match(rSplit); if (m) { id = getNsIdByName(m[1]); if (id !== false) { // Ordinary namespace namespace = id; title = m[2]; // For Talk:X pages, make sure X has no "namespace" prefix if (namespace === NS_TALK && (m = title.match(rSplit))) { // Disallow titles like Talk:File:x (subject should roundtrip: talk:file:x -> file:x -> file_talk:x) if (getNsIdByName(m[1]) !== false) { return false; } } } } // Process fragment i = title.indexOf('#'); if (i === -1) { fragment = null; } else { fragment = title // Get segment starting after the hash .slice(i + 1) // Convert to text // NB: Must not be trimmed ("Example#_foo" is not the same as "Example#foo") .replace(/_/g, ' '); title = title // Strip hash .slice(0, i) // Trim underscores, again (strips "_" from "bar" in "Foo_bar_#quux") .replace(rUnderscoreTrim, ''); } // Reject illegal characters if (rInvalid.test(title)) { return false; } // Disallow titles that browsers or servers might resolve as directory navigation if (title.indexOf('.') !== -1 && (title === '.' || title === '..' || title.indexOf('./') === 0 || title.indexOf('../') === 0 || title.indexOf('/./') !== -1 || title.indexOf('/../') !== -1 || title.slice(-2) === '/.' || title.slice(-3) === '/..')) { return false; } // Disallow magic tilde sequence if (title.indexOf('~~~') !== -1) { return false; } // Disallow titles exceeding the TITLE_MAX_BYTES byte size limit (size of underlying database field) // Except for special pages, e.g. [[Special:Block/Long name]] // Note: The PHP implementation also asserts that even in NS_SPECIAL, the title should // be less than 512 bytes. if (namespace !== NS_SPECIAL && byteLength(title) > 255) { return false; } // Can't make a link to a namespace alone. if (title === '' && namespace !== NS_MAIN) { return false; } // Any remaining initial :s are illegal. if (title[0] === ':') { return false; } return { namespace: namespace, title: title, fragment: fragment, }; }; let getNamespacePrefix = function (namespace) { return namespace === NS_MAIN ? '' : Title.idNameMap[namespace].replace(/ /g, '_') + ':'; }; let getNsIdByName = function (ns) { let id; // Don't cast non-strings to strings, because null or undefined should not result in // returning the id of a potential namespace called "Null:" (e.g. on null.example.org/wiki) // Also, toLowerCase throws exception on null/undefined, because it is a String method. if (typeof ns !== 'string') { return false; } id = Title.nameIdMap[ns.toLowerCase()]; if (id === undefined) { return false; } return id; }; // From https://gerrit.wikimedia.org/r/plugins/gitiles/mediawiki/core/+/master/resources/src/mediawiki.String.js let byteLength = function (str) { return str.replace(/[\u0080-\u07FF\uD800-\uDFFF]/g, '**').replace(/[\u0800-\uD7FF\uE000-\uFFFF]/g, '***') .length; }; // XXX: put this in a separate file, like in mw.Title source code? let toUpperMap = { 'ß': '', 'ʼn': '', 'ƀ': '', 'ƚ': '', 'Dž': '', 'dž': 'Dž', 'Lj': '', 'lj': 'Lj', 'Nj': '', 'nj': 'Nj', 'ǰ': '', 'Dz': '', 'dz': 'Dz', 'ȼ': '', 'ȿ': '', 'ɀ': '', 'ɂ': '', 'ɇ': '', 'ɉ': '', 'ɋ': '', 'ɍ': '', 'ɏ': '', 'ɐ': '', 'ɑ': '', 'ɒ': '', 'ɜ': '', 'ɡ': '', 'ɥ': '', 'ɦ': '', 'ɪ': '', 'ɫ': '', 'ɬ': '', 'ɱ': '', 'ɽ': '', 'ʂ': '', 'ʇ': '', 'ʉ': '', 'ʌ': '', 'ʝ': '', 'ʞ': '', 'ͅ': '', 'ͱ': '', 'ͳ': '', 'ͷ': '', 'ͻ': '', 'ͼ': '', 'ͽ': '', 'ΐ': '', 'ΰ': '', 'ϗ': '', 'ϲ': 'Σ', 'ϳ': '', 'ϸ': '', 'ϻ': '', 'ӏ': '', 'ӷ': '', 'ӻ': '', 'ӽ': '', 'ӿ': '', 'ԑ': '', 'ԓ': '', 'ԕ': '', 'ԗ': '', 'ԙ': '', 'ԛ': '', 'ԝ': '', 'ԟ': '', 'ԡ': '', 'ԣ': '', 'ԥ': '', 'ԧ': '', 'ԩ': '', 'ԫ': '', 'ԭ': '', 'ԯ': '', 'և': '', 'ა': '', 'ბ': '', 'გ': '', 'დ': '', 'ე': '', 'ვ': '', 'ზ': '', 'თ': '', 'ი': '', 'კ': '', 'ლ': '', 'მ': '', 'ნ': '', 'ო': '', 'პ': '', 'ჟ': '', 'რ': '', 'ს': '', 'ტ': '', 'უ': '', 'ფ': '', 'ქ': '', 'ღ': '', 'ყ': '', 'შ': '', 'ჩ': '', 'ც': '', 'ძ': '', 'წ': '', 'ჭ': '', 'ხ': '', 'ჯ': '', 'ჰ': '', 'ჱ': '', 'ჲ': '', 'ჳ': '', 'ჴ': '', 'ჵ': '', 'ჶ': '', 'ჷ': '', 'ჸ': '', 'ჹ': '', 'ჺ': '', 'ჽ': '', 'ჾ': '', 'ჿ': '', 'ᏸ': '', 'ᏹ': '', 'ᏺ': '', 'ᏻ': '', 'ᏼ': '', 'ᏽ': '', 'ᲀ': '', 'ᲁ': '', 'ᲂ': '', 'ᲃ': '', 'ᲄ': '', 'ᲅ': '', 'ᲆ': '', 'ᲇ': '', 'ᲈ': '', 'ᵹ': '', 'ᵽ': '', 'ᶎ': '', 'ẖ': '', 'ẗ': '', 'ẘ': '', 'ẙ': '', 'ẚ': '', 'ỻ': '', 'ỽ': '', 'ỿ': '', 'ὐ': '', 'ὒ': '', 'ὔ': '', 'ὖ': '', 'ᾀ': 'ᾈ', 'ᾁ': 'ᾉ', 'ᾂ': 'ᾊ', 'ᾃ': 'ᾋ', 'ᾄ': 'ᾌ', 'ᾅ': 'ᾍ', 'ᾆ': 'ᾎ', 'ᾇ': 'ᾏ', 'ᾈ': '', 'ᾉ': '', 'ᾊ': '', 'ᾋ': '', 'ᾌ': '', 'ᾍ': '', 'ᾎ': '', 'ᾏ': '', 'ᾐ': 'ᾘ', 'ᾑ': 'ᾙ', 'ᾒ': 'ᾚ', 'ᾓ': 'ᾛ', 'ᾔ': 'ᾜ', 'ᾕ': 'ᾝ', 'ᾖ': 'ᾞ', 'ᾗ': 'ᾟ', 'ᾘ': '', 'ᾙ': '', 'ᾚ': '', 'ᾛ': '', 'ᾜ': '', 'ᾝ': '', 'ᾞ': '', 'ᾟ': '', 'ᾠ': 'ᾨ', 'ᾡ': 'ᾩ', 'ᾢ': 'ᾪ', 'ᾣ': 'ᾫ', 'ᾤ': 'ᾬ', 'ᾥ': 'ᾭ', 'ᾦ': 'ᾮ', 'ᾧ': 'ᾯ', 'ᾨ': '', 'ᾩ': '', 'ᾪ': '', 'ᾫ': '', 'ᾬ': '', 'ᾭ': '', 'ᾮ': '', 'ᾯ': '', 'ᾲ': '', 'ᾳ': 'ᾼ', 'ᾴ': '', 'ᾶ': '', 'ᾷ': '', 'ᾼ': '', 'ῂ': '', 'ῃ': 'ῌ', 'ῄ': '', 'ῆ': '', 'ῇ': '', 'ῌ': '', 'ῒ': '', 'ΐ': '', 'ῖ': '', 'ῗ': '', 'ῢ': '', 'ΰ': '', 'ῤ': '', 'ῦ': '', 'ῧ': '', 'ῲ': '', 'ῳ': 'ῼ', 'ῴ': '', 'ῶ': '', 'ῷ': '', 'ῼ': '', 'ⅎ': '', 'ⅰ': '', 'ⅱ': '', 'ⅲ': '', 'ⅳ': '', 'ⅴ': '', 'ⅵ': '', 'ⅶ': '', 'ⅷ': '', 'ⅸ': '', 'ⅹ': '', 'ⅺ': '', 'ⅻ': '', 'ⅼ': '', 'ⅽ': '', 'ⅾ': '', 'ⅿ': '', 'ↄ': '', 'ⓐ': '', 'ⓑ': '', 'ⓒ': '', 'ⓓ': '', 'ⓔ': '', 'ⓕ': '', 'ⓖ': '', 'ⓗ': '', 'ⓘ': '', 'ⓙ': '', 'ⓚ': '', 'ⓛ': '', 'ⓜ': '', 'ⓝ': '', 'ⓞ': '', 'ⓟ': '', 'ⓠ': '', 'ⓡ': '', 'ⓢ': '', 'ⓣ': '', 'ⓤ': '', 'ⓥ': '', 'ⓦ': '', 'ⓧ': '', 'ⓨ': '', 'ⓩ': '', 'ⰰ': '', 'ⰱ': '', 'ⰲ': '', 'ⰳ': '', 'ⰴ': '', 'ⰵ': '', 'ⰶ': '', 'ⰷ': '', 'ⰸ': '', 'ⰹ': '', 'ⰺ': '', 'ⰻ': '', 'ⰼ': '', 'ⰽ': '', 'ⰾ': '', 'ⰿ': '', 'ⱀ': '', 'ⱁ': '', 'ⱂ': '', 'ⱃ': '', 'ⱄ': '', 'ⱅ': '', 'ⱆ': '', 'ⱇ': '', 'ⱈ': '', 'ⱉ': '', 'ⱊ': '', 'ⱋ': '', 'ⱌ': '', 'ⱍ': '', 'ⱎ': '', 'ⱏ': '', 'ⱐ': '', 'ⱑ': '', 'ⱒ': '', 'ⱓ': '', 'ⱔ': '', 'ⱕ': '', 'ⱖ': '', 'ⱗ': '', 'ⱘ': '', 'ⱙ': '', 'ⱚ': '', 'ⱛ': '', 'ⱜ': '', 'ⱝ': '', 'ⱞ': '', 'ⱡ': '', 'ⱥ': '', 'ⱦ': '', 'ⱨ': '', 'ⱪ': '', 'ⱬ': '', 'ⱳ': '', 'ⱶ': '', 'ⲁ': '', 'ⲃ': '', 'ⲅ': '', 'ⲇ': '', 'ⲉ': '', 'ⲋ': '', 'ⲍ': '', 'ⲏ': '', 'ⲑ': '', 'ⲓ': '', 'ⲕ': '', 'ⲗ': '', 'ⲙ': '', 'ⲛ': '', 'ⲝ': '', 'ⲟ': '', 'ⲡ': '', 'ⲣ': '', 'ⲥ': '', 'ⲧ': '', 'ⲩ': '', 'ⲫ': '', 'ⲭ': '', 'ⲯ': '', 'ⲱ': '', 'ⲳ': '', 'ⲵ': '', 'ⲷ': '', 'ⲹ': '', 'ⲻ': '', 'ⲽ': '', 'ⲿ': '', 'ⳁ': '', 'ⳃ': '', 'ⳅ': '', 'ⳇ': '', 'ⳉ': '', 'ⳋ': '', 'ⳍ': '', 'ⳏ': '', 'ⳑ': '', 'ⳓ': '', 'ⳕ': '', 'ⳗ': '', 'ⳙ': '', 'ⳛ': '', 'ⳝ': '', 'ⳟ': '', 'ⳡ': '', 'ⳣ': '', 'ⳬ': '', 'ⳮ': '', 'ⳳ': '', 'ⴀ': '', 'ⴁ': '', 'ⴂ': '', 'ⴃ': '', 'ⴄ': '', 'ⴅ': '', 'ⴆ': '', 'ⴇ': '', 'ⴈ': '', 'ⴉ': '', 'ⴊ': '', 'ⴋ': '', 'ⴌ': '', 'ⴍ': '', 'ⴎ': '', 'ⴏ': '', 'ⴐ': '', 'ⴑ': '', 'ⴒ': '', 'ⴓ': '', 'ⴔ': '', 'ⴕ': '', 'ⴖ': '', 'ⴗ': '', 'ⴘ': '', 'ⴙ': '', 'ⴚ': '', 'ⴛ': '', 'ⴜ': '', 'ⴝ': '', 'ⴞ': '', 'ⴟ': '', 'ⴠ': '', 'ⴡ': '', 'ⴢ': '', 'ⴣ': '', 'ⴤ': '', 'ⴥ': '', 'ⴧ': '', 'ⴭ': '', 'ꙁ': '', 'ꙃ': '', 'ꙅ': '', 'ꙇ': '', 'ꙉ': '', 'ꙋ': '', 'ꙍ': '', 'ꙏ': '', 'ꙑ': '', 'ꙓ': '', 'ꙕ': '', 'ꙗ': '', 'ꙙ': '', 'ꙛ': '', 'ꙝ': '', 'ꙟ': '', 'ꙡ': '', 'ꙣ': '', 'ꙥ': '', 'ꙧ': '', 'ꙩ': '', 'ꙫ': '', 'ꙭ': '', 'ꚁ': '', 'ꚃ': '', 'ꚅ': '', 'ꚇ': '', 'ꚉ': '', 'ꚋ': '', 'ꚍ': '', 'ꚏ': '', 'ꚑ': '', 'ꚓ': '', 'ꚕ': '', 'ꚗ': '', 'ꚙ': '', 'ꚛ': '', 'ꜣ': '', 'ꜥ': '', 'ꜧ': '', 'ꜩ': '', 'ꜫ': '', 'ꜭ': '', 'ꜯ': '', 'ꜳ': '', 'ꜵ': '', 'ꜷ': '', 'ꜹ': '', 'ꜻ': '', 'ꜽ': '', 'ꜿ': '', 'ꝁ': '', 'ꝃ': '', 'ꝅ': '', 'ꝇ': '', 'ꝉ': '', 'ꝋ': '', 'ꝍ': '', 'ꝏ': '', 'ꝑ': '', 'ꝓ': '', 'ꝕ': '', 'ꝗ': '', 'ꝙ': '', 'ꝛ': '', 'ꝝ': '', 'ꝟ': '', 'ꝡ': '', 'ꝣ': '', 'ꝥ': '', 'ꝧ': '', 'ꝩ': '', 'ꝫ': '', 'ꝭ': '', 'ꝯ': '', 'ꝺ': '', 'ꝼ': '', 'ꝿ': '', 'ꞁ': '', 'ꞃ': '', 'ꞅ': '', 'ꞇ': '', 'ꞌ': '', 'ꞑ': '', 'ꞓ': '', 'ꞔ': '', 'ꞗ': '', 'ꞙ': '', 'ꞛ': '', 'ꞝ': '', 'ꞟ': '', 'ꞡ': '', 'ꞣ': '', 'ꞥ': '', 'ꞧ': '', 'ꞩ': '', 'ꞵ': '', 'ꞷ': '', 'ꞹ': '', 'ꞻ': '', 'ꞽ': '', 'ꞿ': '', 'ꟃ': '', 'ꭓ': '', 'ꭰ': '', 'ꭱ': '', 'ꭲ': '', 'ꭳ': '', 'ꭴ': '', 'ꭵ': '', 'ꭶ': '', 'ꭷ': '', 'ꭸ': '', 'ꭹ': '', 'ꭺ': '', 'ꭻ': '', 'ꭼ': '', 'ꭽ': '', 'ꭾ': '', 'ꭿ': '', 'ꮀ': '', 'ꮁ': '', 'ꮂ': '', 'ꮃ': '', 'ꮄ': '', 'ꮅ': '', 'ꮆ': '', 'ꮇ': '', 'ꮈ': '', 'ꮉ': '', 'ꮊ': '', 'ꮋ': '', 'ꮌ': '', 'ꮍ': '', 'ꮎ': '', 'ꮏ': '', 'ꮐ': '', 'ꮑ': '', 'ꮒ': '', 'ꮓ': '', 'ꮔ': '', 'ꮕ': '', 'ꮖ': '', 'ꮗ': '', 'ꮘ': '', 'ꮙ': '', 'ꮚ': '', 'ꮛ': '', 'ꮜ': '', 'ꮝ': '', 'ꮞ': '', 'ꮟ': '', 'ꮠ': '', 'ꮡ': '', 'ꮢ': '', 'ꮣ': '', 'ꮤ': '', 'ꮥ': '', 'ꮦ': '', 'ꮧ': '', 'ꮨ': '', 'ꮩ': '', 'ꮪ': '', 'ꮫ': '', 'ꮬ': '', 'ꮭ': '', 'ꮮ': '', 'ꮯ': '', 'ꮰ': '', 'ꮱ': '', 'ꮲ': '', 'ꮳ': '', 'ꮴ': '', 'ꮵ': '', 'ꮶ': '', 'ꮷ': '', 'ꮸ': '', 'ꮹ': '', 'ꮺ': '', 'ꮻ': '', 'ꮼ': '', 'ꮽ': '', 'ꮾ': '', 'ꮿ': '', 'ff': '', 'fi': '', 'fl': '', 'ffi': '', 'ffl': '', 'ſt': '', 'st': '', 'ﬓ': '', 'ﬔ': '', 'ﬕ': '', 'ﬖ': '', 'ﬗ': '', '𐑎': '', '𐑏': '', '𐓘': '', '𐓙': '', '𐓚': '', '𐓛': '', '𐓜': '', '𐓝': '', '𐓞': '', '𐓟': '', '𐓠': '', '𐓡': '', '𐓢': '', '𐓣': '', '𐓤': '', '𐓥': '', '𐓦': '', '𐓧': '', '𐓨': '', '𐓩': '', '𐓪': '', '𐓫': '', '𐓬': '', '𐓭': '', '𐓮': '', '𐓯': '', '𐓰': '', '𐓱': '', '𐓲': '', '𐓳': '', '𐓴': '', '𐓵': '', '𐓶': '', '𐓷': '', '𐓸': '', '𐓹': '', '𐓺': '', '𐓻': '', '𐳀': '', '𐳁': '', '𐳂': '', '𐳃': '', '𐳄': '', '𐳅': '', '𐳆': '', '𐳇': '', '𐳈': '', '𐳉': '', '𐳊': '', '𐳋': '', '𐳌': '', '𐳍': '', '𐳎': '', '𐳏': '', '𐳐': '', '𐳑': '', '𐳒': '', '𐳓': '', '𐳔': '', '𐳕': '', '𐳖': '', '𐳗': '', '𐳘': '', '𐳙': '', '𐳚': '', '𐳛': '', '𐳜': '', '𐳝': '', '𐳞': '', '𐳟': '', '𐳠': '', '𐳡': '', '𐳢': '', '𐳣': '', '𐳤': '', '𐳥': '', '𐳦': '', '𐳧': '', '𐳨': '', '𐳩': '', '𐳪': '', '𐳫': '', '𐳬': '', '𐳭': '', '𐳮': '', '𐳯': '', '𐳰': '', '𐳱': '', '𐳲': '', '𑣀': '', '𑣁': '', '𑣂': '', '𑣃': '', '𑣄': '', '𑣅': '', '𑣆': '', '𑣇': '', '𑣈': '', '𑣉': '', '𑣊': '', '𑣋': '', '𑣌': '', '𑣍': '', '𑣎': '', '𑣏': '', '𑣐': '', '𑣑': '', '𑣒': '', '𑣓': '', '𑣔': '', '𑣕': '', '𑣖': '', '𑣗': '', '𑣘': '', '𑣙': '', '𑣚': '', '𑣛': '', '𑣜': '', '𑣝': '', '𑣞': '', '𑣟': '', '𖹠': '', '𖹡': '', '𖹢': '', '𖹣': '', '𖹤': '', '𖹥': '', '𖹦': '', '𖹧': '', '𖹨': '', '𖹩': '', '𖹪': '', '𖹫': '', '𖹬': '', '𖹭': '', '𖹮': '', '𖹯': '', '𖹰': '', '𖹱': '', '𖹲': '', '𖹳': '', '𖹴': '', '𖹵': '', '𖹶': '', '𖹷': '', '𖹸': '', '𖹹': '', '𖹺': '', '𖹻': '', '𖹼': '', '𖹽': '', '𖹾': '', '𖹿': '', '𞤢': '', '𞤣': '', '𞤤': '', '𞤥': '', '𞤦': '', '𞤧': '', '𞤨': '', '𞤩': '', '𞤪': '', '𞤫': '', '𞤬': '', '𞤭': '', '𞤮': '', '𞤯': '', '𞤰': '', '𞤱': '', '𞤲': '', '𞤳': '', '𞤴': '', '𞤵': '', '𞤶': '', '𞤷': '', '𞤸': '', '𞤹': '', '𞤺': '', '𞤻': '', '𞤼': '', '𞤽': '', '𞤾': '', '𞤿': '', '𞥀': '', '𞥁': '', '𞥂': '', '𞥃': '', }; return Title; } //# sourceMappingURL=title.js.map