prettier-plugin-curly-and-jsdoc
Version:
Make prettier-plugin-curly and prttier-plugin-jsdoc work together.
2,352 lines (2,329 loc) • 276 kB
JavaScript
import { format } from "prettier";
import parserBabel from "prettier/plugins/babel";
import parserFlow from "prettier/plugins/flow";
import parserTypescript from "prettier/plugins/typescript";
//#region rolldown:runtime
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __commonJS = (cb, mod) => function() {
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
var __export = (target, all$1) => {
for (var name in all$1) __defProp(target, name, {
get: all$1[name],
enumerable: true
});
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
key = keys[i];
if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
get: ((k) => from[k]).bind(null, key),
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
});
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
value: mod,
enumerable: true
}) : target, mod));
//#endregion
//#region ../../node_modules/.pnpm/comment-parser@1.4.0/node_modules/comment-parser/es6/primitives.js
/** @deprecated */
var Markers;
(function(Markers$1) {
Markers$1["start"] = "/**";
Markers$1["nostart"] = "/***";
Markers$1["delim"] = "*";
Markers$1["end"] = "*/";
})(Markers = Markers || (Markers = {}));
//#endregion
//#region ../../node_modules/.pnpm/comment-parser@1.4.0/node_modules/comment-parser/es6/util.js
function isSpace(source) {
return /^\s+$/.test(source);
}
function splitCR(source) {
const matches = source.match(/\r+$/);
return matches == null ? ["", source] : [source.slice(-matches[0].length), source.slice(0, -matches[0].length)];
}
function splitSpace(source) {
const matches = source.match(/^\s+/);
return matches == null ? ["", source] : [source.slice(0, matches[0].length), source.slice(matches[0].length)];
}
function splitLines(source) {
return source.split(/\n/);
}
function seedSpec(spec = {}) {
return Object.assign({
tag: "",
name: "",
type: "",
optional: false,
description: "",
problems: [],
source: []
}, spec);
}
function seedTokens(tokens = {}) {
return Object.assign({
start: "",
delimiter: "",
postDelimiter: "",
tag: "",
postTag: "",
name: "",
postName: "",
type: "",
postType: "",
description: "",
end: "",
lineEnd: ""
}, tokens);
}
//#endregion
//#region ../../node_modules/.pnpm/comment-parser@1.4.0/node_modules/comment-parser/es6/parser/block-parser.js
const reTag = /^@\S+/;
/**
* Creates configured `Parser`
* @param {Partial<Options>} options
*/
function getParser$2({ fence = "```" } = {}) {
const fencer = getFencer(fence);
const toggleFence = (source, isFenced) => fencer(source) ? !isFenced : isFenced;
return function parseBlock(source) {
const sections = [[]];
let isFenced = false;
for (const line of source) {
if (reTag.test(line.tokens.description) && !isFenced) sections.push([line]);
else sections[sections.length - 1].push(line);
isFenced = toggleFence(line.tokens.description, isFenced);
}
return sections;
};
}
function getFencer(fence) {
if (typeof fence === "string") return (source) => source.split(fence).length % 2 === 0;
return fence;
}
//#endregion
//#region ../../node_modules/.pnpm/comment-parser@1.4.0/node_modules/comment-parser/es6/parser/source-parser.js
function getParser$3({ startLine = 0, markers = Markers } = {}) {
let block = null;
let num = startLine;
return function parseSource(source) {
let rest = source;
const tokens = seedTokens();
[tokens.lineEnd, rest] = splitCR(rest);
[tokens.start, rest] = splitSpace(rest);
if (block === null && rest.startsWith(markers.start) && !rest.startsWith(markers.nostart)) {
block = [];
tokens.delimiter = rest.slice(0, markers.start.length);
rest = rest.slice(markers.start.length);
[tokens.postDelimiter, rest] = splitSpace(rest);
}
if (block === null) {
num++;
return null;
}
const isClosed = rest.trimRight().endsWith(markers.end);
if (tokens.delimiter === "" && rest.startsWith(markers.delim) && !rest.startsWith(markers.end)) {
tokens.delimiter = markers.delim;
rest = rest.slice(markers.delim.length);
[tokens.postDelimiter, rest] = splitSpace(rest);
}
if (isClosed) {
const trimmed = rest.trimRight();
tokens.end = rest.slice(trimmed.length - markers.end.length);
rest = trimmed.slice(0, -markers.end.length);
}
tokens.description = rest;
block.push({
number: num,
source,
tokens
});
num++;
if (isClosed) {
const result = block.slice();
block = null;
return result;
}
return null;
};
}
//#endregion
//#region ../../node_modules/.pnpm/comment-parser@1.4.0/node_modules/comment-parser/es6/parser/spec-parser.js
function getParser$4({ tokenizers: tokenizers$1 }) {
return function parseSpec(source) {
var _a;
let spec = seedSpec({ source });
for (const tokenize of tokenizers$1) {
spec = tokenize(spec);
if ((_a = spec.problems[spec.problems.length - 1]) === null || _a === void 0 ? void 0 : _a.critical) break;
}
return spec;
};
}
//#endregion
//#region ../../node_modules/.pnpm/comment-parser@1.4.0/node_modules/comment-parser/es6/parser/tokenizers/tag.js
/**
* Splits the `@prefix` from remaining `Spec.lines[].token.description` into the `tag` token,
* and populates `spec.tag`
*/
function tagTokenizer$1() {
return (spec) => {
const { tokens } = spec.source[0];
const match = tokens.description.match(/\s*(@(\S+))(\s*)/);
if (match === null) {
spec.problems.push({
code: "spec:tag:prefix",
message: "tag should start with \"@\" symbol",
line: spec.source[0].number,
critical: true
});
return spec;
}
tokens.tag = match[1];
tokens.postTag = match[3];
tokens.description = tokens.description.slice(match[0].length);
spec.tag = match[2];
return spec;
};
}
//#endregion
//#region ../../node_modules/.pnpm/comment-parser@1.4.0/node_modules/comment-parser/es6/parser/tokenizers/type.js
/**
* Sets splits remaining `Spec.lines[].tokes.description` into `type` and `description`
* tokens and populates Spec.type`
*
* @param {Spacing} spacing tells how to deal with a whitespace
* for type values going over multiple lines
*/
function typeTokenizer$1(spacing = "compact") {
const join$1 = getJoiner$1(spacing);
return (spec) => {
let curlies = 0;
let lines = [];
for (const [i, { tokens }] of spec.source.entries()) {
let type = "";
if (i === 0 && tokens.description[0] !== "{") return spec;
for (const ch of tokens.description) {
if (ch === "{") curlies++;
if (ch === "}") curlies--;
type += ch;
if (curlies === 0) break;
}
lines.push([tokens, type]);
if (curlies === 0) break;
}
if (curlies !== 0) {
spec.problems.push({
code: "spec:type:unpaired-curlies",
message: "unpaired curlies",
line: spec.source[0].number,
critical: true
});
return spec;
}
const parts = [];
const offset = lines[0][0].postDelimiter.length;
for (const [i, [tokens, type]] of lines.entries()) {
tokens.type = type;
if (i > 0) {
tokens.type = tokens.postDelimiter.slice(offset) + type;
tokens.postDelimiter = tokens.postDelimiter.slice(0, offset);
}
[tokens.postType, tokens.description] = splitSpace(tokens.description.slice(type.length));
parts.push(tokens.type);
}
parts[0] = parts[0].slice(1);
parts[parts.length - 1] = parts[parts.length - 1].slice(0, -1);
spec.type = join$1(parts);
return spec;
};
}
const trim = (x) => x.trim();
function getJoiner$1(spacing) {
if (spacing === "compact") return (t) => t.map(trim).join("");
else if (spacing === "preserve") return (t) => t.join("\n");
else return spacing;
}
//#endregion
//#region ../../node_modules/.pnpm/comment-parser@1.4.0/node_modules/comment-parser/es6/parser/tokenizers/name.js
const isQuoted = (s) => s && s.startsWith("\"") && s.endsWith("\"");
/**
* Splits remaining `spec.lines[].tokens.description` into `name` and `descriptions` tokens,
* and populates the `spec.name`
*/
function nameTokenizer$1() {
const typeEnd = (num, { tokens }, i) => tokens.type === "" ? num : i;
return (spec) => {
const { tokens } = spec.source[spec.source.reduce(typeEnd, 0)];
const source = tokens.description.trimLeft();
const quotedGroups = source.split("\"");
if (quotedGroups.length > 1 && quotedGroups[0] === "" && quotedGroups.length % 2 === 1) {
spec.name = quotedGroups[1];
tokens.name = `"${quotedGroups[1]}"`;
[tokens.postName, tokens.description] = splitSpace(source.slice(tokens.name.length));
return spec;
}
let brackets = 0;
let name = "";
let optional = false;
let defaultValue;
for (const ch of source) {
if (brackets === 0 && isSpace(ch)) break;
if (ch === "[") brackets++;
if (ch === "]") brackets--;
name += ch;
}
if (brackets !== 0) {
spec.problems.push({
code: "spec:name:unpaired-brackets",
message: "unpaired brackets",
line: spec.source[0].number,
critical: true
});
return spec;
}
const nameToken = name;
if (name[0] === "[" && name[name.length - 1] === "]") {
optional = true;
name = name.slice(1, -1);
const parts = name.split("=");
name = parts[0].trim();
if (parts[1] !== void 0) defaultValue = parts.slice(1).join("=").trim();
if (name === "") {
spec.problems.push({
code: "spec:name:empty-name",
message: "empty name",
line: spec.source[0].number,
critical: true
});
return spec;
}
if (defaultValue === "") {
spec.problems.push({
code: "spec:name:empty-default",
message: "empty default value",
line: spec.source[0].number,
critical: true
});
return spec;
}
if (!isQuoted(defaultValue) && /=(?!>)/.test(defaultValue)) {
spec.problems.push({
code: "spec:name:invalid-default",
message: "invalid default value syntax",
line: spec.source[0].number,
critical: true
});
return spec;
}
}
spec.optional = optional;
spec.name = name;
tokens.name = nameToken;
if (defaultValue !== void 0) spec.default = defaultValue;
[tokens.postName, tokens.description] = splitSpace(source.slice(tokens.name.length));
return spec;
};
}
//#endregion
//#region ../../node_modules/.pnpm/comment-parser@1.4.0/node_modules/comment-parser/es6/parser/tokenizers/description.js
/**
* Makes no changes to `spec.lines[].tokens` but joins them into `spec.description`
* following given spacing srtategy
* @param {Spacing} spacing tells how to handle the whitespace
* @param {BlockMarkers} markers tells how to handle comment block delimitation
*/
function descriptionTokenizer$1(spacing = "compact", markers = Markers) {
const join$1 = getJoiner(spacing);
return (spec) => {
spec.description = join$1(spec.source, markers);
return spec;
};
}
function getJoiner(spacing) {
if (spacing === "compact") return compactJoiner;
if (spacing === "preserve") return preserveJoiner;
return spacing;
}
function compactJoiner(lines, markers = Markers) {
return lines.map(({ tokens: { description } }) => description.trim()).filter((description) => description !== "").join(" ");
}
const lineNo = (num, { tokens }, i) => tokens.type === "" ? num : i;
const getDescription = ({ tokens }) => (tokens.delimiter === "" ? tokens.start : tokens.postDelimiter.slice(1)) + tokens.description;
function preserveJoiner(lines, markers = Markers) {
if (lines.length === 0) return "";
if (lines[0].tokens.description === "" && lines[0].tokens.delimiter === markers.start) lines = lines.slice(1);
const lastLine = lines[lines.length - 1];
if (lastLine !== void 0 && lastLine.tokens.description === "" && lastLine.tokens.end.endsWith(markers.end)) lines = lines.slice(0, -1);
lines = lines.slice(lines.reduce(lineNo, 0));
return lines.map(getDescription).join("\n");
}
//#endregion
//#region ../../node_modules/.pnpm/comment-parser@1.4.0/node_modules/comment-parser/es6/parser/index.js
function getParser$1({ startLine = 0, fence = "```", spacing = "compact", markers = Markers, tokenizers: tokenizers$1 = [
tagTokenizer$1(),
typeTokenizer$1(spacing),
nameTokenizer$1(),
descriptionTokenizer$1(spacing)
] } = {}) {
if (startLine < 0 || startLine % 1 > 0) throw new Error("Invalid startLine");
const parseSource = getParser$3({
startLine,
markers
});
const parseBlock = getParser$2({ fence });
const parseSpec = getParser$4({ tokenizers: tokenizers$1 });
const joinDescription = getJoiner(spacing);
return function(source) {
const blocks = [];
for (const line of splitLines(source)) {
const lines = parseSource(line);
if (lines === null) continue;
const sections = parseBlock(lines);
const specs = sections.slice(1).map(parseSpec);
blocks.push({
description: joinDescription(sections[0], markers),
tags: specs,
source: lines,
problems: specs.reduce((acc, spec) => acc.concat(spec.problems), [])
});
}
return blocks;
};
}
//#endregion
//#region ../../node_modules/.pnpm/comment-parser@1.4.0/node_modules/comment-parser/es6/stringifier/index.js
function join(tokens) {
return tokens.start + tokens.delimiter + tokens.postDelimiter + tokens.tag + tokens.postTag + tokens.type + tokens.postType + tokens.name + tokens.postName + tokens.description + tokens.end + tokens.lineEnd;
}
function getStringifier() {
return (block) => block.source.map(({ tokens }) => join(tokens)).join("\n");
}
//#endregion
//#region ../../node_modules/.pnpm/comment-parser@1.4.0/node_modules/comment-parser/es6/transforms/align.js
var __rest$2 = void 0 && (void 0).__rest || function(s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function") {
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
}
return t;
};
//#endregion
//#region ../../node_modules/.pnpm/comment-parser@1.4.0/node_modules/comment-parser/es6/transforms/indent.js
var __rest$1 = void 0 && (void 0).__rest || function(s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function") {
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
}
return t;
};
//#endregion
//#region ../../node_modules/.pnpm/comment-parser@1.4.0/node_modules/comment-parser/es6/transforms/crlf.js
var __rest = void 0 && (void 0).__rest || function(s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function") {
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
}
return t;
};
//#endregion
//#region ../../node_modules/.pnpm/comment-parser@1.4.0/node_modules/comment-parser/es6/stringifier/inspect.js
const zeroWidth = {
line: 0,
start: 0,
delimiter: 0,
postDelimiter: 0,
tag: 0,
postTag: 0,
name: 0,
postName: 0,
type: 0,
postType: 0,
description: 0,
end: 0,
lineEnd: 0
};
const fields = Object.keys(zeroWidth);
//#endregion
//#region ../../node_modules/.pnpm/comment-parser@1.4.0/node_modules/comment-parser/es6/index.js
function parse(source, options$1 = {}) {
return getParser$1(options$1)(source);
}
const stringify$1 = getStringifier();
const tokenizers = {
tag: tagTokenizer$1,
type: typeTokenizer$1,
name: nameTokenizer$1,
description: descriptionTokenizer$1
};
//#endregion
//#region ../../node_modules/.pnpm/binary-searching@2.0.5/node_modules/binary-searching/search-bounds.js
var require_search_bounds = __commonJS({ "../../node_modules/.pnpm/binary-searching@2.0.5/node_modules/binary-searching/search-bounds.js"(exports, module) {
function ge(a, y, c, l, h) {
var i = h + 1;
while (l <= h) {
var m = l + h >>> 1, x = a[m];
var p = c !== void 0 ? c(x, y) : x - y;
if (p >= 0) {
i = m;
h = m - 1;
} else l = m + 1;
}
return i;
}
function gt(a, y, c, l, h) {
var i = h + 1;
while (l <= h) {
var m = l + h >>> 1, x = a[m];
var p = c !== void 0 ? c(x, y) : x - y;
if (p > 0) {
i = m;
h = m - 1;
} else l = m + 1;
}
return i;
}
function lt(a, y, c, l, h) {
var i = l - 1;
while (l <= h) {
var m = l + h >>> 1, x = a[m];
var p = c !== void 0 ? c(x, y) : x - y;
if (p < 0) {
i = m;
l = m + 1;
} else h = m - 1;
}
return i;
}
function le(a, y, c, l, h) {
var i = l - 1;
while (l <= h) {
var m = l + h >>> 1, x = a[m];
var p = c !== void 0 ? c(x, y) : x - y;
if (p <= 0) {
i = m;
l = m + 1;
} else h = m - 1;
}
return i;
}
function eq(a, y, c, l, h) {
while (l <= h) {
var m = l + h >>> 1, x = a[m];
var p = c !== void 0 ? c(x, y) : x - y;
if (p === 0) return m;
if (p <= 0) l = m + 1;
else h = m - 1;
}
return -1;
}
function norm(a, y, c, l, h, f) {
if (typeof c === "function") return f(a, y, c, l === void 0 ? 0 : l | 0, h === void 0 ? a.length - 1 : h | 0);
return f(a, y, void 0, c === void 0 ? 0 : c | 0, l === void 0 ? a.length - 1 : l | 0);
}
module.exports = {
ge: function(a, y, c, l, h) {
return norm(a, y, c, l, h, ge);
},
gt: function(a, y, c, l, h) {
return norm(a, y, c, l, h, gt);
},
lt: function(a, y, c, l, h) {
return norm(a, y, c, l, h, lt);
},
le: function(a, y, c, l, h) {
return norm(a, y, c, l, h, le);
},
eq: function(a, y, c, l, h) {
return norm(a, y, c, l, h, eq);
}
};
} });
//#endregion
//#region ../../node_modules/.pnpm/prettier-plugin-jsdoc@1.3.2_prettier@3.0.3/node_modules/prettier-plugin-jsdoc/dist/tags.js
const ABSTRACT = "abstract";
const ASYNC = "async";
const AUGMENTS = "augments";
const AUTHOR = "author";
const BORROWS = "borrows";
const CALLBACK = "callback";
const CATEGORY = "category";
const CLASS = "class";
const CONSTANT = "constant";
const DEFAULT = "default";
const DEFAULT_VALUE = "defaultValue";
const DEPRECATED = "deprecated";
const DESCRIPTION = "description";
const EXAMPLE = "example";
const EXTENDS = "extends";
const EXTERNAL = "external";
const FILE = "file";
const FIRES = "fires";
const FLOW = "flow";
const FUNCTION = "function";
const IGNORE = "ignore";
const LICENSE = "license";
const MEMBER = "member";
const MEMBEROF = "memberof";
const MODULE = "module";
const NAMESPACE = "namespace";
const OVERLOAD = "overload";
const OVERRIDE = "override";
const PARAM = "param";
const PRIVATE = "private";
const PRIVATE_REMARKS = "privateRemarks";
const PROPERTY = "property";
const PROVIDES_MODULE = "providesModule";
const REMARKS = "remarks";
const RETURNS = "returns";
const SEE = "see";
const SINCE = "since";
const TEMPLATE = "template";
const THROWS = "throws";
const TODO = "todo";
const TYPE = "type";
const TYPE_PARAM = "typeParam";
const TYPEDEF = "typedef";
const SATISFIES = "satisfies";
const VERSION = "version";
const YIELDS = "yields";
const SPACE_TAG_DATA = {
tag: "this_is_for_space",
name: "",
optional: false,
type: "",
description: "",
source: [],
problems: []
};
//#endregion
//#region ../../node_modules/.pnpm/prettier-plugin-jsdoc@1.3.2_prettier@3.0.3/node_modules/prettier-plugin-jsdoc/dist/roles.js
const TAGS_SYNONYMS = {
arg: PARAM,
argument: PARAM,
const: CONSTANT,
constructor: CLASS,
desc: DESCRIPTION,
emits: FIRES,
examples: EXAMPLE,
exception: THROWS,
fileoverview: FILE,
func: FUNCTION,
host: EXTERNAL,
method: FUNCTION,
overview: FILE,
params: PARAM,
prop: PROPERTY,
return: RETURNS,
var: MEMBER,
virtual: ABSTRACT,
yield: YIELDS,
hidden: IGNORE
};
const TAGS_DEFAULT = [DEFAULT, DEFAULT_VALUE];
const TAGS_NAMELESS = [
BORROWS,
CATEGORY,
DEPRECATED,
DESCRIPTION,
EXAMPLE,
EXTENDS,
LICENSE,
MODULE,
NAMESPACE,
OVERLOAD,
OVERRIDE,
PRIVATE_REMARKS,
REMARKS,
RETURNS,
SINCE,
THROWS,
TODO,
YIELDS,
FILE,
...TAGS_DEFAULT
];
const TAGS_TYPELESS = [
BORROWS,
BORROWS,
DEPRECATED,
DESCRIPTION,
EXAMPLE,
IGNORE,
LICENSE,
MODULE,
NAMESPACE,
OVERLOAD,
OVERRIDE,
PRIVATE_REMARKS,
REMARKS,
SINCE,
TODO,
FILE
];
const TAGS_PEV_FORMATE_DESCRIPTION = [
BORROWS,
...TAGS_DEFAULT,
MEMBEROF,
MODULE,
SEE
];
const TAGS_DESCRIPTION_NEEDED = [
BORROWS,
CATEGORY,
DESCRIPTION,
EXAMPLE,
PRIVATE_REMARKS,
REMARKS,
SINCE,
TODO
];
const TAGS_VERTICALLY_ALIGN_ABLE = [
EXTENDS,
PARAM,
PROPERTY,
RETURNS,
THROWS,
TYPE,
SATISFIES,
TYPEDEF,
YIELDS
];
const TAGS_GROUP_HEAD = [CALLBACK, TYPEDEF];
const TAGS_GROUP_CONDITION = [
...TAGS_GROUP_HEAD,
TYPE,
PROPERTY,
PARAM,
RETURNS,
YIELDS,
THROWS
];
const TAGS_ORDER = {
[REMARKS]: 1,
[PRIVATE_REMARKS]: 2,
[PROVIDES_MODULE]: 3,
[MODULE]: 4,
[LICENSE]: 5,
[FLOW]: 6,
[ASYNC]: 7,
[PRIVATE]: 8,
[IGNORE]: 9,
[MEMBEROF]: 10,
[VERSION]: 11,
[FILE]: 12,
[AUTHOR]: 13,
[DEPRECATED]: 14,
[SINCE]: 15,
[CATEGORY]: 16,
[DESCRIPTION]: 17,
[EXAMPLE]: 18,
[ABSTRACT]: 19,
[AUGMENTS]: 20,
[CONSTANT]: 21,
[DEFAULT]: 22,
[DEFAULT_VALUE]: 23,
[EXTERNAL]: 24,
[OVERLOAD]: 25,
[FIRES]: 26,
[TEMPLATE]: 27,
[TYPE_PARAM]: 28,
[FUNCTION]: 29,
[NAMESPACE]: 30,
[BORROWS]: 31,
[CLASS]: 32,
[EXTENDS]: 33,
[MEMBER]: 34,
[TYPEDEF]: 35,
[TYPE]: 36,
[SATISFIES]: 37,
[PROPERTY]: 38,
[CALLBACK]: 39,
[PARAM]: 40,
[YIELDS]: 41,
[RETURNS]: 42,
[THROWS]: 43,
other: 44,
[SEE]: 45,
[TODO]: 46
};
//#endregion
//#region ../../node_modules/.pnpm/prettier-plugin-jsdoc@1.3.2_prettier@3.0.3/node_modules/prettier-plugin-jsdoc/dist/utils.js
var import_search_bounds = __toESM(require_search_bounds(), 1);
function convertToModernType(oldType) {
return withoutStrings(oldType, (type) => {
type = type.trim();
type = type.replace(/\.</g, "<");
type = type.replace(/\*/g, " any ");
type = type.replace(/^\?\s*(\w+)$/, "$1 | null").replace(/^(\w+)\s*\?$/, "$1 | null");
let changed = true;
while (changed) {
changed = false;
type = type.replace(/(^|[^$\w\xA0-\uFFFF])Array\s*<((?:[^<>=]|=>|=(?!>)|<(?:[^<>=]|=>|=(?!>))+>)+)>/g, (_, prefix, inner) => {
changed = true;
return `${prefix}(${inner})[]`;
});
}
return type;
});
}
function withoutStrings(type, mapFn) {
const strings = [];
let modifiedType = type.replace(/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/g, (m) => {
strings.push(m);
return `String$${strings.length - 1}$`;
});
if (modifiedType.includes("`")) return type;
modifiedType = mapFn(modifiedType);
return modifiedType.replace(/String\$(\d+)\$/g, (_, index$1) => strings[index$1]);
}
async function formatType(type, options$1) {
try {
const TYPE_START = "type name = ";
let pretty = type;
let rest = false;
if (pretty.startsWith("...")) {
rest = true;
pretty = `(${pretty.slice(3)})[]`;
}
pretty = await format(`${TYPE_START}${pretty}`, {
...options$1,
parser: "typescript",
plugins: [],
filepath: "file.ts"
});
pretty = pretty.slice(TYPE_START.length);
pretty = pretty.replace(/^\s*/g, "").replace(/[;\n]*$/g, "").replace(/^\|/g, "").trim();
if (rest) pretty = "..." + pretty.replace(/\[\s*\]$/, "");
return pretty;
} catch (error) {
return type;
}
}
function addStarsToTheBeginningOfTheLines(originalComment, comment, options$1) {
if (options$1.jsdocCommentLineStrategy === "singleLine" && numberOfAStringInString(comment.trim(), "\n") === 0 || options$1.jsdocCommentLineStrategy === "keep" && numberOfAStringInString(originalComment, "\n") === 0) return `* ${comment.trim()} `;
return `*${comment.replace(/(\n(?!$))/g, "\n * ")}\n `;
}
function numberOfAStringInString(string$2, search$1) {
return (string$2.match(new RegExp(search$1, "g")) || []).length;
}
function capitalizer(str) {
if (!str) return str;
if (str.match(/^https?:\/\//i)) return str;
if (str.startsWith("- ")) return str.slice(0, 2) + capitalizer(str.slice(2));
return str[0].toUpperCase() + str.slice(1);
}
function detectEndOfLine(text$2) {
const counter = {
"\r": 0,
"\r\n": 0,
"\n": 0
};
const lineEndPattern = /\r\n?|\n/g;
let m;
while (m = lineEndPattern.exec(text$2)) counter[m[0]]++;
const cr = counter["\r"];
const crlf = counter["\r\n"];
const lf = counter["\n"];
const max = Math.max(cr, crlf, lf);
if (lf === max) return "lf";
else if (crlf === max) return "crlf";
else return "cr";
}
function findTokenIndex(tokens, token) {
return import_search_bounds.default.eq(tokens, token, (a, b) => {
if (a.loc.start.line === b.loc.start.line) return a.loc.start.column - b.loc.start.column;
else return a.loc.start.line - b.loc.start.line;
});
}
async function formatCode(result, beginningSpace, options$1) {
const { printWidth, jsdocKeepUnParseAbleExampleIndent } = options$1;
if (result.split("\n").slice(1).every((v) => !v.trim() || v.startsWith(beginningSpace))) result = result.replace(new RegExp(`\n${beginningSpace.replace(/[\t]/g, "[\\t]")}`, "g"), "\n");
try {
let formattedExample = "";
const examplePrintWith = printWidth - 4;
if (result.trim().startsWith("{")) formattedExample = await format(result || "", {
...options$1,
parser: "json",
printWidth: examplePrintWith
});
else formattedExample = await format(result || "", {
...options$1,
printWidth: examplePrintWith
});
result = formattedExample.replace(/(^|\n)/g, `\n${beginningSpace}`);
} catch (err) {
result = `\n${result.split("\n").map((l) => `${beginningSpace}${jsdocKeepUnParseAbleExampleIndent ? l : l.trim()}`).join("\n")}\n`;
result = result.replace(/^\n[\s]+\n/g, "\n");
}
return result;
}
const findPluginByParser = (parserName, options$1) => {
const tsPlugin = options$1.plugins.find((plugin) => {
return typeof plugin === "object" && plugin.name && plugin.parsers && plugin.parsers.hasOwnProperty(parserName);
});
return !tsPlugin || tsPlugin.name === "prettier-plugin-jsdoc" || tsPlugin.parsers?.hasOwnProperty("jsdoc-parser") ? void 0 : tsPlugin.parsers?.[parserName];
};
const isDefaultTag = (tag) => TAGS_DEFAULT.includes(tag);
//#endregion
//#region ../../node_modules/.pnpm/mdast-util-to-string@4.0.0/node_modules/mdast-util-to-string/lib/index.js
/**
* @typedef {import('mdast').Nodes} Nodes
*
* @typedef Options
* Configuration (optional).
* @property {boolean | null | undefined} [includeImageAlt=true]
* Whether to use `alt` for `image`s (default: `true`).
* @property {boolean | null | undefined} [includeHtml=true]
* Whether to use `value` of HTML (default: `true`).
*/
/** @type {Options} */
const emptyOptions = {};
/**
* Get the text content of a node or list of nodes.
*
* Prefers the node’s plain-text fields, otherwise serializes its children,
* and if the given value is an array, serialize the nodes in it.
*
* @param {unknown} [value]
* Thing to serialize, typically `Node`.
* @param {Options | null | undefined} [options]
* Configuration (optional).
* @returns {string}
* Serialized `value`.
*/
function toString(value, options$1) {
const settings = options$1 || emptyOptions;
const includeImageAlt = typeof settings.includeImageAlt === "boolean" ? settings.includeImageAlt : true;
const includeHtml = typeof settings.includeHtml === "boolean" ? settings.includeHtml : true;
return one(value, includeImageAlt, includeHtml);
}
/**
* One node or several nodes.
*
* @param {unknown} value
* Thing to serialize.
* @param {boolean} includeImageAlt
* Include image `alt`s.
* @param {boolean} includeHtml
* Include HTML.
* @returns {string}
* Serialized node.
*/
function one(value, includeImageAlt, includeHtml) {
if (node(value)) {
if ("value" in value) return value.type === "html" && !includeHtml ? "" : value.value;
if (includeImageAlt && "alt" in value && value.alt) return value.alt;
if ("children" in value) return all(value.children, includeImageAlt, includeHtml);
}
if (Array.isArray(value)) return all(value, includeImageAlt, includeHtml);
return "";
}
/**
* Serialize a list of nodes.
*
* @param {Array<unknown>} values
* Thing to serialize.
* @param {boolean} includeImageAlt
* Include image `alt`s.
* @param {boolean} includeHtml
* Include HTML.
* @returns {string}
* Serialized nodes.
*/
function all(values, includeImageAlt, includeHtml) {
/** @type {Array<string>} */
const result = [];
let index$1 = -1;
while (++index$1 < values.length) result[index$1] = one(values[index$1], includeImageAlt, includeHtml);
return result.join("");
}
/**
* Check if `value` looks like a node.
*
* @param {unknown} value
* Thing.
* @returns {value is Nodes}
* Whether `value` is a node.
*/
function node(value) {
return Boolean(value && typeof value === "object");
}
//#endregion
//#region ../../node_modules/.pnpm/character-entities@2.0.2/node_modules/character-entities/index.js
/**
* Map of named character references.
*
* @type {Record<string, string>}
*/
const characterEntities = {
AElig: "Æ",
AMP: "&",
Aacute: "Á",
Abreve: "Ă",
Acirc: "Â",
Acy: "А",
Afr: "𝔄",
Agrave: "À",
Alpha: "Α",
Amacr: "Ā",
And: "⩓",
Aogon: "Ą",
Aopf: "𝔸",
ApplyFunction: "",
Aring: "Å",
Ascr: "𝒜",
Assign: "≔",
Atilde: "Ã",
Auml: "Ä",
Backslash: "∖",
Barv: "⫧",
Barwed: "⌆",
Bcy: "Б",
Because: "∵",
Bernoullis: "ℬ",
Beta: "Β",
Bfr: "𝔅",
Bopf: "𝔹",
Breve: "˘",
Bscr: "ℬ",
Bumpeq: "≎",
CHcy: "Ч",
COPY: "©",
Cacute: "Ć",
Cap: "⋒",
CapitalDifferentialD: "ⅅ",
Cayleys: "ℭ",
Ccaron: "Č",
Ccedil: "Ç",
Ccirc: "Ĉ",
Cconint: "∰",
Cdot: "Ċ",
Cedilla: "¸",
CenterDot: "·",
Cfr: "ℭ",
Chi: "Χ",
CircleDot: "⊙",
CircleMinus: "⊖",
CirclePlus: "⊕",
CircleTimes: "⊗",
ClockwiseContourIntegral: "∲",
CloseCurlyDoubleQuote: "”",
CloseCurlyQuote: "’",
Colon: "∷",
Colone: "⩴",
Congruent: "≡",
Conint: "∯",
ContourIntegral: "∮",
Copf: "ℂ",
Coproduct: "∐",
CounterClockwiseContourIntegral: "∳",
Cross: "⨯",
Cscr: "𝒞",
Cup: "⋓",
CupCap: "≍",
DD: "ⅅ",
DDotrahd: "⤑",
DJcy: "Ђ",
DScy: "Ѕ",
DZcy: "Џ",
Dagger: "‡",
Darr: "↡",
Dashv: "⫤",
Dcaron: "Ď",
Dcy: "Д",
Del: "∇",
Delta: "Δ",
Dfr: "𝔇",
DiacriticalAcute: "´",
DiacriticalDot: "˙",
DiacriticalDoubleAcute: "˝",
DiacriticalGrave: "`",
DiacriticalTilde: "˜",
Diamond: "⋄",
DifferentialD: "ⅆ",
Dopf: "𝔻",
Dot: "¨",
DotDot: "⃜",
DotEqual: "≐",
DoubleContourIntegral: "∯",
DoubleDot: "¨",
DoubleDownArrow: "⇓",
DoubleLeftArrow: "⇐",
DoubleLeftRightArrow: "⇔",
DoubleLeftTee: "⫤",
DoubleLongLeftArrow: "⟸",
DoubleLongLeftRightArrow: "⟺",
DoubleLongRightArrow: "⟹",
DoubleRightArrow: "⇒",
DoubleRightTee: "⊨",
DoubleUpArrow: "⇑",
DoubleUpDownArrow: "⇕",
DoubleVerticalBar: "∥",
DownArrow: "↓",
DownArrowBar: "⤓",
DownArrowUpArrow: "⇵",
DownBreve: "̑",
DownLeftRightVector: "⥐",
DownLeftTeeVector: "⥞",
DownLeftVector: "↽",
DownLeftVectorBar: "⥖",
DownRightTeeVector: "⥟",
DownRightVector: "⇁",
DownRightVectorBar: "⥗",
DownTee: "⊤",
DownTeeArrow: "↧",
Downarrow: "⇓",
Dscr: "𝒟",
Dstrok: "Đ",
ENG: "Ŋ",
ETH: "Ð",
Eacute: "É",
Ecaron: "Ě",
Ecirc: "Ê",
Ecy: "Э",
Edot: "Ė",
Efr: "𝔈",
Egrave: "È",
Element: "∈",
Emacr: "Ē",
EmptySmallSquare: "◻",
EmptyVerySmallSquare: "▫",
Eogon: "Ę",
Eopf: "𝔼",
Epsilon: "Ε",
Equal: "⩵",
EqualTilde: "≂",
Equilibrium: "⇌",
Escr: "ℰ",
Esim: "⩳",
Eta: "Η",
Euml: "Ë",
Exists: "∃",
ExponentialE: "ⅇ",
Fcy: "Ф",
Ffr: "𝔉",
FilledSmallSquare: "◼",
FilledVerySmallSquare: "▪",
Fopf: "𝔽",
ForAll: "∀",
Fouriertrf: "ℱ",
Fscr: "ℱ",
GJcy: "Ѓ",
GT: ">",
Gamma: "Γ",
Gammad: "Ϝ",
Gbreve: "Ğ",
Gcedil: "Ģ",
Gcirc: "Ĝ",
Gcy: "Г",
Gdot: "Ġ",
Gfr: "𝔊",
Gg: "⋙",
Gopf: "𝔾",
GreaterEqual: "≥",
GreaterEqualLess: "⋛",
GreaterFullEqual: "≧",
GreaterGreater: "⪢",
GreaterLess: "≷",
GreaterSlantEqual: "⩾",
GreaterTilde: "≳",
Gscr: "𝒢",
Gt: "≫",
HARDcy: "Ъ",
Hacek: "ˇ",
Hat: "^",
Hcirc: "Ĥ",
Hfr: "ℌ",
HilbertSpace: "ℋ",
Hopf: "ℍ",
HorizontalLine: "─",
Hscr: "ℋ",
Hstrok: "Ħ",
HumpDownHump: "≎",
HumpEqual: "≏",
IEcy: "Е",
IJlig: "IJ",
IOcy: "Ё",
Iacute: "Í",
Icirc: "Î",
Icy: "И",
Idot: "İ",
Ifr: "ℑ",
Igrave: "Ì",
Im: "ℑ",
Imacr: "Ī",
ImaginaryI: "ⅈ",
Implies: "⇒",
Int: "∬",
Integral: "∫",
Intersection: "⋂",
InvisibleComma: "",
InvisibleTimes: "",
Iogon: "Į",
Iopf: "𝕀",
Iota: "Ι",
Iscr: "ℐ",
Itilde: "Ĩ",
Iukcy: "І",
Iuml: "Ï",
Jcirc: "Ĵ",
Jcy: "Й",
Jfr: "𝔍",
Jopf: "𝕁",
Jscr: "𝒥",
Jsercy: "Ј",
Jukcy: "Є",
KHcy: "Х",
KJcy: "Ќ",
Kappa: "Κ",
Kcedil: "Ķ",
Kcy: "К",
Kfr: "𝔎",
Kopf: "𝕂",
Kscr: "𝒦",
LJcy: "Љ",
LT: "<",
Lacute: "Ĺ",
Lambda: "Λ",
Lang: "⟪",
Laplacetrf: "ℒ",
Larr: "↞",
Lcaron: "Ľ",
Lcedil: "Ļ",
Lcy: "Л",
LeftAngleBracket: "⟨",
LeftArrow: "←",
LeftArrowBar: "⇤",
LeftArrowRightArrow: "⇆",
LeftCeiling: "⌈",
LeftDoubleBracket: "⟦",
LeftDownTeeVector: "⥡",
LeftDownVector: "⇃",
LeftDownVectorBar: "⥙",
LeftFloor: "⌊",
LeftRightArrow: "↔",
LeftRightVector: "⥎",
LeftTee: "⊣",
LeftTeeArrow: "↤",
LeftTeeVector: "⥚",
LeftTriangle: "⊲",
LeftTriangleBar: "⧏",
LeftTriangleEqual: "⊴",
LeftUpDownVector: "⥑",
LeftUpTeeVector: "⥠",
LeftUpVector: "↿",
LeftUpVectorBar: "⥘",
LeftVector: "↼",
LeftVectorBar: "⥒",
Leftarrow: "⇐",
Leftrightarrow: "⇔",
LessEqualGreater: "⋚",
LessFullEqual: "≦",
LessGreater: "≶",
LessLess: "⪡",
LessSlantEqual: "⩽",
LessTilde: "≲",
Lfr: "𝔏",
Ll: "⋘",
Lleftarrow: "⇚",
Lmidot: "Ŀ",
LongLeftArrow: "⟵",
LongLeftRightArrow: "⟷",
LongRightArrow: "⟶",
Longleftarrow: "⟸",
Longleftrightarrow: "⟺",
Longrightarrow: "⟹",
Lopf: "𝕃",
LowerLeftArrow: "↙",
LowerRightArrow: "↘",
Lscr: "ℒ",
Lsh: "↰",
Lstrok: "Ł",
Lt: "≪",
Map: "⤅",
Mcy: "М",
MediumSpace: " ",
Mellintrf: "ℳ",
Mfr: "𝔐",
MinusPlus: "∓",
Mopf: "𝕄",
Mscr: "ℳ",
Mu: "Μ",
NJcy: "Њ",
Nacute: "Ń",
Ncaron: "Ň",
Ncedil: "Ņ",
Ncy: "Н",
NegativeMediumSpace: "",
NegativeThickSpace: "",
NegativeThinSpace: "",
NegativeVeryThinSpace: "",
NestedGreaterGreater: "≫",
NestedLessLess: "≪",
NewLine: "\n",
Nfr: "𝔑",
NoBreak: "",
NonBreakingSpace: "\xA0",
Nopf: "ℕ",
Not: "⫬",
NotCongruent: "≢",
NotCupCap: "≭",
NotDoubleVerticalBar: "∦",
NotElement: "∉",
NotEqual: "≠",
NotEqualTilde: "≂̸",
NotExists: "∄",
NotGreater: "≯",
NotGreaterEqual: "≱",
NotGreaterFullEqual: "≧̸",
NotGreaterGreater: "≫̸",
NotGreaterLess: "≹",
NotGreaterSlantEqual: "⩾̸",
NotGreaterTilde: "≵",
NotHumpDownHump: "≎̸",
NotHumpEqual: "≏̸",
NotLeftTriangle: "⋪",
NotLeftTriangleBar: "⧏̸",
NotLeftTriangleEqual: "⋬",
NotLess: "≮",
NotLessEqual: "≰",
NotLessGreater: "≸",
NotLessLess: "≪̸",
NotLessSlantEqual: "⩽̸",
NotLessTilde: "≴",
NotNestedGreaterGreater: "⪢̸",
NotNestedLessLess: "⪡̸",
NotPrecedes: "⊀",
NotPrecedesEqual: "⪯̸",
NotPrecedesSlantEqual: "⋠",
NotReverseElement: "∌",
NotRightTriangle: "⋫",
NotRightTriangleBar: "⧐̸",
NotRightTriangleEqual: "⋭",
NotSquareSubset: "⊏̸",
NotSquareSubsetEqual: "⋢",
NotSquareSuperset: "⊐̸",
NotSquareSupersetEqual: "⋣",
NotSubset: "⊂⃒",
NotSubsetEqual: "⊈",
NotSucceeds: "⊁",
NotSucceedsEqual: "⪰̸",
NotSucceedsSlantEqual: "⋡",
NotSucceedsTilde: "≿̸",
NotSuperset: "⊃⃒",
NotSupersetEqual: "⊉",
NotTilde: "≁",
NotTildeEqual: "≄",
NotTildeFullEqual: "≇",
NotTildeTilde: "≉",
NotVerticalBar: "∤",
Nscr: "𝒩",
Ntilde: "Ñ",
Nu: "Ν",
OElig: "Œ",
Oacute: "Ó",
Ocirc: "Ô",
Ocy: "О",
Odblac: "Ő",
Ofr: "𝔒",
Ograve: "Ò",
Omacr: "Ō",
Omega: "Ω",
Omicron: "Ο",
Oopf: "𝕆",
OpenCurlyDoubleQuote: "“",
OpenCurlyQuote: "‘",
Or: "⩔",
Oscr: "𝒪",
Oslash: "Ø",
Otilde: "Õ",
Otimes: "⨷",
Ouml: "Ö",
OverBar: "‾",
OverBrace: "⏞",
OverBracket: "⎴",
OverParenthesis: "⏜",
PartialD: "∂",
Pcy: "П",
Pfr: "𝔓",
Phi: "Φ",
Pi: "Π",
PlusMinus: "±",
Poincareplane: "ℌ",
Popf: "ℙ",
Pr: "⪻",
Precedes: "≺",
PrecedesEqual: "⪯",
PrecedesSlantEqual: "≼",
PrecedesTilde: "≾",
Prime: "″",
Product: "∏",
Proportion: "∷",
Proportional: "∝",
Pscr: "𝒫",
Psi: "Ψ",
QUOT: "\"",
Qfr: "𝔔",
Qopf: "ℚ",
Qscr: "𝒬",
RBarr: "⤐",
REG: "®",
Racute: "Ŕ",
Rang: "⟫",
Rarr: "↠",
Rarrtl: "⤖",
Rcaron: "Ř",
Rcedil: "Ŗ",
Rcy: "Р",
Re: "ℜ",
ReverseElement: "∋",
ReverseEquilibrium: "⇋",
ReverseUpEquilibrium: "⥯",
Rfr: "ℜ",
Rho: "Ρ",
RightAngleBracket: "⟩",
RightArrow: "→",
RightArrowBar: "⇥",
RightArrowLeftArrow: "⇄",
RightCeiling: "⌉",
RightDoubleBracket: "⟧",
RightDownTeeVector: "⥝",
RightDownVector: "⇂",
RightDownVectorBar: "⥕",
RightFloor: "⌋",
RightTee: "⊢",
RightTeeArrow: "↦",
RightTeeVector: "⥛",
RightTriangle: "⊳",
RightTriangleBar: "⧐",
RightTriangleEqual: "⊵",
RightUpDownVector: "⥏",
RightUpTeeVector: "⥜",
RightUpVector: "↾",
RightUpVectorBar: "⥔",
RightVector: "⇀",
RightVectorBar: "⥓",
Rightarrow: "⇒",
Ropf: "ℝ",
RoundImplies: "⥰",
Rrightarrow: "⇛",
Rscr: "ℛ",
Rsh: "↱",
RuleDelayed: "⧴",
SHCHcy: "Щ",
SHcy: "Ш",
SOFTcy: "Ь",
Sacute: "Ś",
Sc: "⪼",
Scaron: "Š",
Scedil: "Ş",
Scirc: "Ŝ",
Scy: "С",
Sfr: "𝔖",
ShortDownArrow: "↓",
ShortLeftArrow: "←",
ShortRightArrow: "→",
ShortUpArrow: "↑",
Sigma: "Σ",
SmallCircle: "∘",
Sopf: "𝕊",
Sqrt: "√",
Square: "□",
SquareIntersection: "⊓",
SquareSubset: "⊏",
SquareSubsetEqual: "⊑",
SquareSuperset: "⊐",
SquareSupersetEqual: "⊒",
SquareUnion: "⊔",
Sscr: "𝒮",
Star: "⋆",
Sub: "⋐",
Subset: "⋐",
SubsetEqual: "⊆",
Succeeds: "≻",
SucceedsEqual: "⪰",
SucceedsSlantEqual: "≽",
SucceedsTilde: "≿",
SuchThat: "∋",
Sum: "∑",
Sup: "⋑",
Superset: "⊃",
SupersetEqual: "⊇",
Supset: "⋑",
THORN: "Þ",
TRADE: "™",
TSHcy: "Ћ",
TScy: "Ц",
Tab: " ",
Tau: "Τ",
Tcaron: "Ť",
Tcedil: "Ţ",
Tcy: "Т",
Tfr: "𝔗",
Therefore: "∴",
Theta: "Θ",
ThickSpace: " ",
ThinSpace: " ",
Tilde: "∼",
TildeEqual: "≃",
TildeFullEqual: "≅",
TildeTilde: "≈",
Topf: "𝕋",
TripleDot: "⃛",
Tscr: "𝒯",
Tstrok: "Ŧ",
Uacute: "Ú",
Uarr: "↟",
Uarrocir: "⥉",
Ubrcy: "Ў",
Ubreve: "Ŭ",
Ucirc: "Û",
Ucy: "У",
Udblac: "Ű",
Ufr: "𝔘",
Ugrave: "Ù",
Umacr: "Ū",
UnderBar: "_",
UnderBrace: "⏟",
UnderBracket: "⎵",
UnderParenthesis: "⏝",
Union: "⋃",
UnionPlus: "⊎",
Uogon: "Ų",
Uopf: "𝕌",
UpArrow: "↑",
UpArrowBar: "⤒",
UpArrowDownArrow: "⇅",
UpDownArrow: "↕",
UpEquilibrium: "⥮",
UpTee: "⊥",
UpTeeArrow: "↥",
Uparrow: "⇑",
Updownarrow: "⇕",
UpperLeftArrow: "↖",
UpperRightArrow: "↗",
Upsi: "ϒ",
Upsilon: "Υ",
Uring: "Ů",
Uscr: "𝒰",
Utilde: "Ũ",
Uuml: "Ü",
VDash: "⊫",
Vbar: "⫫",
Vcy: "В",
Vdash: "⊩",
Vdashl: "⫦",
Vee: "⋁",
Verbar: "‖",
Vert: "‖",
VerticalBar: "∣",
VerticalLine: "|",
VerticalSeparator: "❘",
VerticalTilde: "≀",
VeryThinSpace: " ",
Vfr: "𝔙",
Vopf: "𝕍",
Vscr: "𝒱",
Vvdash: "⊪",
Wcirc: "Ŵ",
Wedge: "⋀",
Wfr: "𝔚",
Wopf: "𝕎",
Wscr: "𝒲",
Xfr: "𝔛",
Xi: "Ξ",
Xopf: "𝕏",
Xscr: "𝒳",
YAcy: "Я",
YIcy: "Ї",
YUcy: "Ю",
Yacute: "Ý",
Ycirc: "Ŷ",
Ycy: "Ы",
Yfr: "𝔜",
Yopf: "𝕐",
Yscr: "𝒴",
Yuml: "Ÿ",
ZHcy: "Ж",
Zacute: "Ź",
Zcaron: "Ž",
Zcy: "З",
Zdot: "Ż",
ZeroWidthSpace: "",
Zeta: "Ζ",
Zfr: "ℨ",
Zopf: "ℤ",
Zscr: "𝒵",
aacute: "á",
abreve: "ă",
ac: "∾",
acE: "∾̳",
acd: "∿",
acirc: "â",
acute: "´",
acy: "а",
aelig: "æ",
af: "",
afr: "𝔞",
agrave: "à",
alefsym: "ℵ",
aleph: "ℵ",
alpha: "α",
amacr: "ā",
amalg: "⨿",
amp: "&",
and: "∧",
andand: "⩕",
andd: "⩜",
andslope: "⩘",
andv: "⩚",
ang: "∠",
ange: "⦤",
angle: "∠",
angmsd: "∡",
angmsdaa: "⦨",
angmsdab: "⦩",
angmsdac: "⦪",
angmsdad: "⦫",
angmsdae: "⦬",
angmsdaf: "⦭",
angmsdag: "⦮",
angmsdah: "⦯",
angrt: "∟",
angrtvb: "⊾",
angrtvbd: "⦝",
angsph: "∢",
angst: "Å",
angzarr: "⍼",
aogon: "ą",
aopf: "𝕒",
ap: "≈",
apE: "⩰",
apacir: "⩯",
ape: "≊",
apid: "≋",
apos: "'",
approx: "≈",
approxeq: "≊",
aring: "å",
ascr: "𝒶",
ast: "*",
asymp: "≈",
asympeq: "≍",
atilde: "ã",
auml: "ä",
awconint: "∳",
awint: "⨑",
bNot: "⫭",
backcong: "≌",
backepsilon: "϶",
backprime: "‵",
backsim: "∽",
backsimeq: "⋍",
barvee: "⊽",
barwed: "⌅",
barwedge: "⌅",
bbrk: "⎵",
bbrktbrk: "⎶",
bcong: "≌",
bcy: "б",
bdquo: "„",
becaus: "∵",
because: "∵",
bemptyv: "⦰",
bepsi: "϶",
bernou: "ℬ",
beta: "β",
beth: "ℶ",
between: "≬",
bfr: "𝔟",
bigcap: "⋂",
bigcirc: "◯",
bigcup: "⋃",
bigodot: "⨀",
bigoplus: "⨁",
bigotimes: "⨂",
bigsqcup: "⨆",
bigstar: "★",
bigtriangledown: "▽",
bigtriangleup: "△",
biguplus: "⨄",
bigvee: "⋁",
bigwedge: "⋀",
bkarow: "⤍",
blacklozenge: "⧫",
blacksquare: "▪",
blacktriangle: "▴",
blacktriangledown: "▾",
blacktriangleleft: "◂",
blacktriangleright: "▸",
blank: "␣",
blk12: "▒",
blk14: "░",
blk34: "▓",
block: "█",
bne: "=⃥",
bnequiv: "≡⃥",
bnot: "⌐",
bopf: "𝕓",
bot: "⊥",
bottom: "⊥",
bowtie: "⋈",
boxDL: "╗",
boxDR: "╔",
boxDl: "╖",
boxDr: "╓",
boxH: "═",
boxHD: "╦",
boxHU: "╩",
boxHd: "╤",
boxHu: "╧",
boxUL: "╝",
boxUR: "╚",
boxUl: "╜",
boxUr: "╙",
boxV: "║",
boxVH: "╬",
boxVL: "╣",
boxVR: "╠",
boxVh: "╫",
boxVl: "╢",
boxVr: "╟",
boxbox: "⧉",
boxdL: "╕",
boxdR: "╒",
boxdl: "┐",
boxdr: "┌",
boxh: "─",
boxhD: "╥",
boxhU: "╨",
boxhd: "┬",
boxhu: "┴",
boxminus: "⊟",
boxplus: "⊞",
boxtimes: "⊠",
boxuL: "╛",
boxuR: "╘",
boxul: "┘",
boxur: "└",
boxv: "│",
boxvH: "╪",
boxvL: "╡",
boxvR: "╞",
boxvh: "┼",
boxvl: "┤",
boxvr: "├",
bprime: "‵",
breve: "˘",
brvbar: "¦",
bscr: "𝒷",
bsemi: "⁏",
bsim: "∽",
bsime: "⋍",
bsol: "\\",
bsolb: "⧅",
bsolhsub: "⟈",
bull: "•",
bullet: "•",
bump: "≎",
bumpE: "⪮",
bumpe: "≏",
bumpeq: "≏",
cacute: "ć",
cap: "∩",
capand: "⩄",
capbrcup: "⩉",
capcap: "⩋",
capcup: "⩇",
capdot: "⩀",
caps: "∩︀",
caret: "⁁",
caron: "ˇ",
ccaps: "⩍",
ccaron: "č",
ccedil: "ç",
ccirc: "ĉ",
ccups: "⩌",
ccupssm: "⩐",
cdot: "ċ",
cedil: "¸",
cemptyv: "⦲",
cent: "¢",
centerdot: "·",
cfr: "𝔠",
chcy: "ч",
check: "✓",
checkmark: "✓",
chi: "χ",
cir: "○",
cirE: "⧃",
circ: "ˆ",
circeq: "≗",
circlearrowleft: "↺",
circlearrowright: "↻",
circledR: "®",
circledS: "Ⓢ",
circledast: "⊛",
circledcirc: "⊚",
circleddash: "⊝",
cire: "≗",
cirfnint: "⨐",
cirmid: "⫯",
cirscir: "⧂",
clubs: "♣",
clubsuit: "♣",
colon: ":",
colone: "≔",
coloneq: "≔",
comma: ",",
commat: "@",
comp: "∁",
compfn: "∘",
complement: "∁",
complexes: "ℂ",
cong: "≅",
congdot: "⩭",
conint: "∮",
copf: "𝕔",
coprod: "∐",
copy: "©",
copysr: "℗",
crarr: "↵",
cross: "✗",
cscr: "𝒸",
csub: "⫏",
csube: "⫑",
csup: "⫐",
csupe: "⫒",
ctdot: "⋯",
cudarrl: "⤸",
cudarrr: "⤵",
cuepr: "⋞",
cuesc: "⋟",
cularr: "↶",
cularrp: "⤽",
cup: "∪",
cupbrcap: "⩈",
cupcap: "⩆",
cupcup: "⩊",
cupdot: "⊍",
cupor: "⩅",
cups: "∪︀",
curarr: "↷",
curarrm: "⤼",
curlyeqprec: "⋞",
curlyeqsucc: "⋟",
curlyvee: "⋎",
curlywedge: "⋏",
curren: "¤",
curvearrowleft: "↶",
curvearrowright: "↷",
cuvee: "⋎",
cuwed: "⋏",
cwconint: "∲",
cwint: "∱",
cylcty: "⌭",
dArr: "⇓",
dHar: "⥥",
dagger: "†",
daleth: "ℸ",
darr: "↓",
dash: "‐",
dashv: "⊣",
dbkarow: "⤏",
dblac: "˝",
dcaron: "ď",
dcy: "д",
dd: "ⅆ",
ddagger: "‡",
ddarr: "⇊",
ddotseq: "⩷",
deg: "°",
delta: "δ",
demptyv: "⦱",
dfisht: "⥿",
dfr: "𝔡",
dharl: "⇃",
dharr: "⇂",
diam: "⋄",
diamond: "⋄",
diamondsuit: "♦",
diams: "♦",
die: "¨",
digamma: "ϝ",
disin: "⋲",
div: "÷",
divide: "÷",
divideontimes: "⋇",
divonx: "⋇",
djcy: "ђ",
dlcorn: "⌞",
dlcrop: "⌍",
dollar: "$",
dopf: "𝕕",
dot: "˙",
doteq: "≐",
doteqdot: "≑",
dotminus: "∸",
dotplus: "∔",
dotsquare: "⊡",
doublebarwedge: "⌆",
downarrow: "↓",
downdownarrows: "⇊",
downharpoonleft: "⇃",
downharpoonright: "⇂",
drbkarow: "⤐",
drcorn: "⌟",
drcrop: "⌌",
dscr: "𝒹",
dscy: "ѕ",
dsol: "⧶",
dstrok: "đ",
dtdot: "⋱",
dtri: "▿",
dtrif: "▾",
duarr: "⇵",
duhar: "⥯",
dwangle: "⦦",
dzcy: "џ",
dzigrarr: "⟿",
eDDot: "⩷",
eDot: "≑",
eacute: "é",
easter: "⩮",
ecaron: "ě",
ecir: "≖",
ecirc: "ê",
ecolon: "≕",
ecy: "э",
edot: "ė",
ee: "ⅇ",
efDot: "≒",
efr: "𝔢",
eg: "⪚",
egrave: "è",
egs: "⪖",
egsdot: "⪘",
el: "⪙",
elinters: "⏧",
ell: "ℓ",
els: "⪕",
elsdot: "⪗",
emacr: "ē",
empty: "∅",
emptyset: "∅",
emptyv: "∅",
emsp13: " ",
emsp14: " ",
emsp: " ",
eng: "ŋ",
ensp: " ",
eogon: "ę",
eopf: "𝕖",
epar: "⋕",
eparsl: "⧣",
eplus: "⩱",
epsi: "ε",
epsilon: "ε",
epsiv: "ϵ",
eqcirc: "≖",
eqcolon: "≕",
eqsim: "≂",
eqslantgtr: "⪖",
eqslantless: "⪕",
equals: "=",
equest: "≟",
equiv: "≡",
equivDD: "⩸",
eqvparsl: "⧥",
erDot: "≓",
erarr: "⥱",
escr: "ℯ",
esdot: "≐",
esim: "≂",
eta: "η",
eth: "ð",
euml: "ë",
euro: "€",
excl: "!",
exist: "∃",
expectation: "ℰ",
exponentiale: "ⅇ",
fallingdotseq: "≒",
fcy: "ф",
female: "♀",
ffilig: "ffi",
fflig: "ff",
ffllig: "ffl",
ffr: "𝔣",
filig: "fi",
fjlig: "fj",
flat: "♭",
fllig: "fl",
fltns: "▱",
fnof: "ƒ",
fopf: "𝕗",
forall: "∀",
fork: "⋔",
forkv: "⫙",
fpartint: "⨍",
frac12: "½",
frac13: "⅓",
frac14: "¼",
frac15: "⅕",
frac16: "⅙",
frac18: "⅛",
frac23: "⅔",
frac25: "⅖",
frac34: "¾",
frac35: "⅗",
frac38: "⅜",
frac45: "⅘",
frac56: "⅚",
frac58: "⅝",
frac78: "⅞",
frasl: "⁄",
frown: "⌢",
fscr: "𝒻",
gE: "≧",
gEl: "⪌",
gacute: "ǵ",
gamma: "γ",
gammad: "ϝ",
gap: "⪆",
gbreve: "ğ",
gcirc: "ĝ",
gcy: "г",
gdot: "ġ",
ge: "≥",
gel: "⋛",
geq: "≥",
geqq: "≧",
geqslant: "⩾",
ges: "⩾",
gescc: "⪩",
gesdot: "⪀",
gesdoto: "⪂",
gesdotol: "⪄",
gesl: "⋛︀",
gesles: "⪔",
gfr: "𝔤",
gg: "≫",
ggg: "⋙",
gimel: "ℷ",
gjcy: "ѓ",
gl: "≷",
glE: "⪒",
gla: "⪥",
glj: "⪤",
gnE: "≩",
gnap: "⪊",
gnapprox: "⪊",
gne: "⪈",
gneq: "⪈",
gneqq: "≩",
gnsim: "⋧",
gopf: "𝕘",
grave: "`",
gscr: "ℊ",
gsim: "≳",
gsime: "⪎",
gsiml: "⪐",
gt: ">",
gtcc: "⪧",
gtcir: "⩺",
gtdot: "⋗",
gtlPar: "⦕",
gtquest: "⩼",
gtrapprox: "⪆",
gtrarr: "⥸",
gtrdot: "⋗",
gtreqless: "⋛",
gtreqqless: "⪌",
gtrless: "≷",
gtrsim: "≳",
gvertneqq: "≩︀",
gvnE: "≩︀",
hArr: "⇔",
hairsp: " ",
half: "½",
hamilt: "ℋ",
hardcy: "ъ",
harr: "↔",
harrcir: "⥈",
harrw: "↭",
hbar: "ℏ",
hcirc: "ĥ",
hearts: "♥",
heartsuit: "♥",
hellip: "…",
hercon: "⊹",
hfr: "𝔥",
hksearow: "⤥",
hkswarow: "⤦",
hoarr: "⇿",
homtht: "∻",
hookleftarrow: "↩",
hookrightarrow: "↪",
hopf: "𝕙",
horbar: "―",
hscr: "𝒽",
hslash: "ℏ",
hstrok: "ħ",
hybull: "⁃",
hyphen: "‐",
iacute: "í",
ic: "",
icirc: "î",
icy: "и",
iecy: "е",
iexcl: "¡",
iff: "⇔",
ifr: "𝔦",
igrave: "ì",
ii: "ⅈ",
iiiint: "⨌",
iiint: "∭",
iinfin: "⧜",
iiota: "℩",
ijlig: "ij",
imacr: "ī",
image: "ℑ",
imagline: "ℐ",
imagpart: "ℑ",
imath: "ı",
imof: "⊷",
imped: "Ƶ",
in: "∈",
incare: "℅",
infin: "∞",
infintie: "⧝",
inodot: "ı",
int: "∫",
intcal: "⊺",
integers: "ℤ",
intercal: "⊺",
intlarhk: "⨗",
intprod: "⨼",
iocy: "ё",
iogon: "į",
iopf: "𝕚",
iota: "ι",
iprod: "⨼",
iquest: "¿",
iscr: "𝒾",
isin: "∈",
isinE: "⋹",
isindot: "⋵",
isins: "⋴",
isinsv: "⋳",
isinv: "∈",
it: "",
itilde: "ĩ",
iukcy: "і",
iuml: "ï",
jcirc: "ĵ",
jcy: "й",
jfr: "𝔧",
jmath: "ȷ",
jopf: "𝕛",
jscr: "𝒿",
jsercy: "ј",
jukcy: "є",
kappa: "κ",
kappav: "ϰ",
kcedil: "ķ",
kcy: "к",
kfr: "𝔨",
kgreen: "ĸ",
khcy: "х",
kjcy: "ќ",
kopf: "𝕜",
kscr: "𝓀",
lAarr: "⇚",
lArr: "⇐",
lAtail: "⤛",
lBarr: "⤎",
lE: "≦",
lEg: "⪋",
lHar: "⥢",
lacute: "ĺ",
laemptyv: "⦴",
lagran: "ℒ",
lambda: "λ",
lang: "⟨",
langd: "⦑",
langle: "⟨",
lap: "⪅",
laquo: "«",
larr: "←",
larrb: "⇤",
larrbfs: "⤟",
larrfs: "⤝",
larrhk: "↩",
larrlp: "↫",
larrpl: "⤹",
larrsim: "⥳",
larrtl: "↢",
lat: "⪫",
latail: "⤙",
late: "⪭",
lates: "⪭︀",
lbarr: "⤌",
lbbrk: "❲",
lbrace: "{",
lbrack: "[",
lbrke: "⦋",
lbrksld: "⦏",
lbrkslu: "⦍",
lcaron: "ľ",
lcedil: "ļ",
lceil: "⌈",
lcub: "{",
lcy: "л",
ldca: "⤶",
ldquo: "“",
ldquor: "„",
ldrdhar: "⥧",
ldrushar: "⥋",
ldsh: "↲",
le: "≤",
leftarrow: "←",
leftarrowtail: "↢",
leftharpoondown: "↽",
leftharpoonup: "↼",
leftleftarrows: "⇇",
leftrightarrow: "↔",
leftrightarrows: "⇆",
leftrightharpoons: "⇋",
leftrightsquigarrow: "↭",
leftthreetimes: "⋋",
leg: "⋚",
leq: "≤",
leqq: "≦",
leqslant: "⩽",
les: "⩽",
lescc: "⪨",
lesdot: "⩿",
lesdoto: "⪁",
lesdotor: "⪃",
lesg: "⋚︀",
lesges: "⪓",
lessapprox: "⪅",
lessdot: "⋖",
lesseqgtr: "⋚",
lesseqqgtr: "⪋",
lessgtr: "≶",
lesssim: "≲",
lfisht: "⥼",
lfloor: "⌊",
lfr: "𝔩",
lg: "≶",
lgE: "⪑",
lhard: "↽",
lharu: "↼",
lharul: "⥪",
lhblk: "▄",
ljcy: "љ",
ll: "≪",
llarr: "⇇",
llcorner: "⌞",
llhard: "⥫",
lltri: "◺",
lmidot: "ŀ",
lmoust: "⎰",
lmoustache: "⎰",
lnE: "≨",
lnap: "⪉",
lnapprox: "⪉",
lne: "⪇",
lneq: "⪇",
lneqq: "≨",
lnsim: "⋦",
loang: "⟬",
loarr: "⇽",
lobrk: "⟦",
longleftarrow: "⟵",
longleftrightarrow: "⟷",
longmapsto: "⟼",
longrightarrow: "⟶",
looparrowleft: "↫",
looparrowright: "↬",
lopar: "⦅",
lopf: "𝕝",
loplus: "⨭",
lotimes: "⨴",
lowast: "∗",
lowbar: "_",
loz: "◊",
lozenge: "◊",
lozf: "⧫",
lpar: "(",
lparlt: "⦓",
lrarr: "⇆",
lrcorner: "⌟",
lrhar: "⇋",
lrhard: "⥭",
lrm: "",
lrtri: "⊿",
lsaquo: "‹",
lscr: "𝓁",
lsh: "↰",
lsim: "≲",
lsime: "⪍",
lsimg: "⪏",
lsqb: "[",
lsquo: "‘",
lsquor: "‚",
lstrok: "ł",
lt: "<",
ltcc: "⪦",
ltcir: "⩹",
ltdot: "⋖",
lthree: "⋋",
ltimes: "⋉",
ltlarr: "⥶",
ltquest: "⩻",
ltrPar: "⦖",
ltri: "◃",
ltrie: "⊴",
ltrif: "◂",
lurdshar: "⥊",
luruhar: "⥦",
lvertneqq: "≨︀",
lvnE: "≨︀",
mDDot: "∺",
macr: "¯",
male: "♂",
malt: "✠",
maltese: "✠",
map: "↦",
mapsto: "↦",
mapstodown: "↧",
mapstoleft: "↤",
mapstoup: "↥",
marker: "▮",
mcomma: "⨩",
mcy: "м",
mdash: "—",
measuredangle: "∡",
mfr: "𝔪",
mho: "℧",
micro: "µ",
mid: "∣",
midast: "*",
midcir: "⫰",
middot: "·