@readme/markdown 13.3.0 → 13.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/Code/style.scss +1 -1
- package/dist/lib/mdast-util/empty-task-list-item/index.d.ts +2 -0
- package/dist/lib/micromark/loose-html-entities/index.d.ts +9 -0
- package/dist/lib/micromark/loose-html-entities/syntax.d.ts +9 -0
- package/dist/lib/plain.d.ts +6 -3
- package/dist/main.css +1 -1
- package/dist/main.css.map +1 -1
- package/dist/main.js +662 -157
- package/dist/main.node.js +662 -157
- package/dist/main.node.js.map +1 -1
- package/dist/processor/compile/list-item.d.ts +12 -0
- package/dist/processor/plugin/flatten-table-cell-paragraphs.d.ts +13 -0
- package/dist/processor/transform/mdxish/preprocess-jsx-expressions.d.ts +12 -0
- package/dist/processor/transform/mdxish/variables-text.d.ts +6 -2
- package/package.json +5 -2
package/dist/main.js
CHANGED
|
@@ -34347,21 +34347,8 @@ function syntax_tokenizeIndent(effects, ok, nok) {
|
|
|
34347
34347
|
|
|
34348
34348
|
;// ./node_modules/micromark-extension-gfm-strikethrough/lib/syntax.js
|
|
34349
34349
|
/**
|
|
34350
|
-
* @
|
|
34351
|
-
* @
|
|
34352
|
-
* @typedef {import('micromark-util-types').Resolver} Resolver
|
|
34353
|
-
* @typedef {import('micromark-util-types').State} State
|
|
34354
|
-
* @typedef {import('micromark-util-types').Token} Token
|
|
34355
|
-
* @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext
|
|
34356
|
-
* @typedef {import('micromark-util-types').Tokenizer} Tokenizer
|
|
34357
|
-
*
|
|
34358
|
-
* @typedef Options
|
|
34359
|
-
* Configuration (optional).
|
|
34360
|
-
* @property {boolean | null | undefined} [singleTilde=true]
|
|
34361
|
-
* Whether to support strikethrough with a single tilde (default: `true`).
|
|
34362
|
-
*
|
|
34363
|
-
* Single tildes work on github.com, but are technically prohibited by the
|
|
34364
|
-
* GFM spec.
|
|
34350
|
+
* @import {Options} from 'micromark-extension-gfm-strikethrough'
|
|
34351
|
+
* @import {Event, Extension, Resolver, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'
|
|
34365
34352
|
*/
|
|
34366
34353
|
|
|
34367
34354
|
|
|
@@ -34377,14 +34364,15 @@ function syntax_tokenizeIndent(effects, ok, nok) {
|
|
|
34377
34364
|
* enable GFM strikethrough syntax.
|
|
34378
34365
|
*/
|
|
34379
34366
|
function gfmStrikethrough(options) {
|
|
34380
|
-
const options_ = options || {}
|
|
34381
|
-
let single = options_.singleTilde
|
|
34367
|
+
const options_ = options || {};
|
|
34368
|
+
let single = options_.singleTilde;
|
|
34382
34369
|
const tokenizer = {
|
|
34370
|
+
name: 'strikethrough',
|
|
34383
34371
|
tokenize: tokenizeStrikethrough,
|
|
34384
34372
|
resolveAll: resolveAllStrikethrough
|
|
34385
|
-
}
|
|
34373
|
+
};
|
|
34386
34374
|
if (single === null || single === undefined) {
|
|
34387
|
-
single = true
|
|
34375
|
+
single = true;
|
|
34388
34376
|
}
|
|
34389
34377
|
return {
|
|
34390
34378
|
text: {
|
|
@@ -34396,7 +34384,7 @@ function gfmStrikethrough(options) {
|
|
|
34396
34384
|
attentionMarkers: {
|
|
34397
34385
|
null: [126]
|
|
34398
34386
|
}
|
|
34399
|
-
}
|
|
34387
|
+
};
|
|
34400
34388
|
|
|
34401
34389
|
/**
|
|
34402
34390
|
* Take events and resolve strikethrough.
|
|
@@ -34404,86 +34392,62 @@ function gfmStrikethrough(options) {
|
|
|
34404
34392
|
* @type {Resolver}
|
|
34405
34393
|
*/
|
|
34406
34394
|
function resolveAllStrikethrough(events, context) {
|
|
34407
|
-
let index = -1
|
|
34395
|
+
let index = -1;
|
|
34408
34396
|
|
|
34409
34397
|
// Walk through all events.
|
|
34410
34398
|
while (++index < events.length) {
|
|
34411
34399
|
// Find a token that can close.
|
|
34412
|
-
if (
|
|
34413
|
-
|
|
34414
|
-
events[index][1].type === 'strikethroughSequenceTemporary' &&
|
|
34415
|
-
events[index][1]._close
|
|
34416
|
-
) {
|
|
34417
|
-
let open = index
|
|
34400
|
+
if (events[index][0] === 'enter' && events[index][1].type === 'strikethroughSequenceTemporary' && events[index][1]._close) {
|
|
34401
|
+
let open = index;
|
|
34418
34402
|
|
|
34419
34403
|
// Now walk back to find an opener.
|
|
34420
34404
|
while (open--) {
|
|
34421
34405
|
// Find a token that can open the closer.
|
|
34422
|
-
if (
|
|
34423
|
-
|
|
34424
|
-
|
|
34425
|
-
events[
|
|
34426
|
-
|
|
34427
|
-
events[index][1].end.offset - events[index][1].start.offset ===
|
|
34428
|
-
events[open][1].end.offset - events[open][1].start.offset
|
|
34429
|
-
) {
|
|
34430
|
-
events[index][1].type = 'strikethroughSequence'
|
|
34431
|
-
events[open][1].type = 'strikethroughSequence'
|
|
34406
|
+
if (events[open][0] === 'exit' && events[open][1].type === 'strikethroughSequenceTemporary' && events[open][1]._open &&
|
|
34407
|
+
// If the sizes are the same:
|
|
34408
|
+
events[index][1].end.offset - events[index][1].start.offset === events[open][1].end.offset - events[open][1].start.offset) {
|
|
34409
|
+
events[index][1].type = 'strikethroughSequence';
|
|
34410
|
+
events[open][1].type = 'strikethroughSequence';
|
|
34432
34411
|
|
|
34433
34412
|
/** @type {Token} */
|
|
34434
34413
|
const strikethrough = {
|
|
34435
34414
|
type: 'strikethrough',
|
|
34436
34415
|
start: Object.assign({}, events[open][1].start),
|
|
34437
34416
|
end: Object.assign({}, events[index][1].end)
|
|
34438
|
-
}
|
|
34417
|
+
};
|
|
34439
34418
|
|
|
34440
34419
|
/** @type {Token} */
|
|
34441
34420
|
const text = {
|
|
34442
34421
|
type: 'strikethroughText',
|
|
34443
34422
|
start: Object.assign({}, events[open][1].end),
|
|
34444
34423
|
end: Object.assign({}, events[index][1].start)
|
|
34445
|
-
}
|
|
34424
|
+
};
|
|
34446
34425
|
|
|
34447
34426
|
// Opening.
|
|
34448
34427
|
/** @type {Array<Event>} */
|
|
34449
|
-
const nextEvents = [
|
|
34450
|
-
|
|
34451
|
-
['enter', events[open][1], context],
|
|
34452
|
-
['exit', events[open][1], context],
|
|
34453
|
-
['enter', text, context]
|
|
34454
|
-
]
|
|
34455
|
-
const insideSpan = context.parser.constructs.insideSpan.null
|
|
34428
|
+
const nextEvents = [['enter', strikethrough, context], ['enter', events[open][1], context], ['exit', events[open][1], context], ['enter', text, context]];
|
|
34429
|
+
const insideSpan = context.parser.constructs.insideSpan.null;
|
|
34456
34430
|
if (insideSpan) {
|
|
34457
34431
|
// Between.
|
|
34458
|
-
splice(
|
|
34459
|
-
nextEvents,
|
|
34460
|
-
nextEvents.length,
|
|
34461
|
-
0,
|
|
34462
|
-
resolveAll(insideSpan, events.slice(open + 1, index), context)
|
|
34463
|
-
)
|
|
34432
|
+
splice(nextEvents, nextEvents.length, 0, resolveAll(insideSpan, events.slice(open + 1, index), context));
|
|
34464
34433
|
}
|
|
34465
34434
|
|
|
34466
34435
|
// Closing.
|
|
34467
|
-
splice(nextEvents, nextEvents.length, 0, [
|
|
34468
|
-
|
|
34469
|
-
|
|
34470
|
-
|
|
34471
|
-
['exit', strikethrough, context]
|
|
34472
|
-
])
|
|
34473
|
-
splice(events, open - 1, index - open + 3, nextEvents)
|
|
34474
|
-
index = open + nextEvents.length - 2
|
|
34475
|
-
break
|
|
34436
|
+
splice(nextEvents, nextEvents.length, 0, [['exit', text, context], ['enter', events[index][1], context], ['exit', events[index][1], context], ['exit', strikethrough, context]]);
|
|
34437
|
+
splice(events, open - 1, index - open + 3, nextEvents);
|
|
34438
|
+
index = open + nextEvents.length - 2;
|
|
34439
|
+
break;
|
|
34476
34440
|
}
|
|
34477
34441
|
}
|
|
34478
34442
|
}
|
|
34479
34443
|
}
|
|
34480
|
-
index = -1
|
|
34444
|
+
index = -1;
|
|
34481
34445
|
while (++index < events.length) {
|
|
34482
34446
|
if (events[index][1].type === 'strikethroughSequenceTemporary') {
|
|
34483
|
-
events[index][1].type =
|
|
34447
|
+
events[index][1].type = "data";
|
|
34484
34448
|
}
|
|
34485
34449
|
}
|
|
34486
|
-
return events
|
|
34450
|
+
return events;
|
|
34487
34451
|
}
|
|
34488
34452
|
|
|
34489
34453
|
/**
|
|
@@ -34491,43 +34455,39 @@ function gfmStrikethrough(options) {
|
|
|
34491
34455
|
* @type {Tokenizer}
|
|
34492
34456
|
*/
|
|
34493
34457
|
function tokenizeStrikethrough(effects, ok, nok) {
|
|
34494
|
-
const previous = this.previous
|
|
34495
|
-
const events = this.events
|
|
34496
|
-
let size = 0
|
|
34497
|
-
return start
|
|
34458
|
+
const previous = this.previous;
|
|
34459
|
+
const events = this.events;
|
|
34460
|
+
let size = 0;
|
|
34461
|
+
return start;
|
|
34498
34462
|
|
|
34499
34463
|
/** @type {State} */
|
|
34500
34464
|
function start(code) {
|
|
34501
|
-
if (
|
|
34502
|
-
|
|
34503
|
-
events[events.length - 1][1].type !== 'characterEscape'
|
|
34504
|
-
) {
|
|
34505
|
-
return nok(code)
|
|
34465
|
+
if (previous === 126 && events[events.length - 1][1].type !== "characterEscape") {
|
|
34466
|
+
return nok(code);
|
|
34506
34467
|
}
|
|
34507
|
-
effects.enter('strikethroughSequenceTemporary')
|
|
34508
|
-
return more(code)
|
|
34468
|
+
effects.enter('strikethroughSequenceTemporary');
|
|
34469
|
+
return more(code);
|
|
34509
34470
|
}
|
|
34510
34471
|
|
|
34511
34472
|
/** @type {State} */
|
|
34512
34473
|
function more(code) {
|
|
34513
|
-
const before = classifyCharacter(previous)
|
|
34474
|
+
const before = classifyCharacter(previous);
|
|
34514
34475
|
if (code === 126) {
|
|
34515
34476
|
// If this is the third marker, exit.
|
|
34516
|
-
if (size > 1) return nok(code)
|
|
34517
|
-
effects.consume(code)
|
|
34518
|
-
size
|
|
34519
|
-
return more
|
|
34520
|
-
}
|
|
34521
|
-
if (size < 2 && !single) return nok(code)
|
|
34522
|
-
const token = effects.exit('strikethroughSequenceTemporary')
|
|
34523
|
-
const after = classifyCharacter(code)
|
|
34524
|
-
token._open = !after ||
|
|
34525
|
-
token._close = !before ||
|
|
34526
|
-
return ok(code)
|
|
34477
|
+
if (size > 1) return nok(code);
|
|
34478
|
+
effects.consume(code);
|
|
34479
|
+
size++;
|
|
34480
|
+
return more;
|
|
34481
|
+
}
|
|
34482
|
+
if (size < 2 && !single) return nok(code);
|
|
34483
|
+
const token = effects.exit('strikethroughSequenceTemporary');
|
|
34484
|
+
const after = classifyCharacter(code);
|
|
34485
|
+
token._open = !after || after === 2 && Boolean(before);
|
|
34486
|
+
token._close = !before || before === 2 && Boolean(after);
|
|
34487
|
+
return ok(code);
|
|
34527
34488
|
}
|
|
34528
34489
|
}
|
|
34529
34490
|
}
|
|
34530
|
-
|
|
34531
34491
|
;// ./node_modules/micromark-extension-gfm-table/lib/edit-map.js
|
|
34532
34492
|
/**
|
|
34533
34493
|
* @typedef {import('micromark-util-types').Event} Event
|
|
@@ -44027,7 +43987,7 @@ var EntityDecoderState;
|
|
|
44027
43987
|
EntityDecoderState[EntityDecoderState["NumericHex"] = 3] = "NumericHex";
|
|
44028
43988
|
EntityDecoderState[EntityDecoderState["NamedEntity"] = 4] = "NamedEntity";
|
|
44029
43989
|
})(EntityDecoderState || (EntityDecoderState = {}));
|
|
44030
|
-
var
|
|
43990
|
+
var decode_DecodingMode;
|
|
44031
43991
|
(function (DecodingMode) {
|
|
44032
43992
|
/** Entities in text nodes that can end with any character. */
|
|
44033
43993
|
DecodingMode[DecodingMode["Legacy"] = 0] = "Legacy";
|
|
@@ -44035,7 +43995,7 @@ var DecodingMode;
|
|
|
44035
43995
|
DecodingMode[DecodingMode["Strict"] = 1] = "Strict";
|
|
44036
43996
|
/** Entities in attributes have limitations on ending characters. */
|
|
44037
43997
|
DecodingMode[DecodingMode["Attribute"] = 2] = "Attribute";
|
|
44038
|
-
})(
|
|
43998
|
+
})(decode_DecodingMode || (decode_DecodingMode = {}));
|
|
44039
43999
|
/**
|
|
44040
44000
|
* Token decoder with support of writing partial entities.
|
|
44041
44001
|
*/
|
|
@@ -44074,7 +44034,7 @@ class EntityDecoder {
|
|
|
44074
44034
|
/** The number of characters that were consumed in excess. */
|
|
44075
44035
|
this.excess = 1;
|
|
44076
44036
|
/** The mode in which the decoder is operating. */
|
|
44077
|
-
this.decodeMode =
|
|
44037
|
+
this.decodeMode = decode_DecodingMode.Strict;
|
|
44078
44038
|
}
|
|
44079
44039
|
/** Resets the instance to make it reusable. */
|
|
44080
44040
|
startEntity(decodeMode) {
|
|
@@ -44223,7 +44183,7 @@ class EntityDecoder {
|
|
|
44223
44183
|
if (lastCp === CharCodes.SEMI) {
|
|
44224
44184
|
this.consumed += 1;
|
|
44225
44185
|
}
|
|
44226
|
-
else if (this.decodeMode ===
|
|
44186
|
+
else if (this.decodeMode === decode_DecodingMode.Strict) {
|
|
44227
44187
|
return 0;
|
|
44228
44188
|
}
|
|
44229
44189
|
this.emitCodePoint(replaceCodePoint(this.result), this.consumed);
|
|
@@ -44255,7 +44215,7 @@ class EntityDecoder {
|
|
|
44255
44215
|
if (this.treeIndex < 0) {
|
|
44256
44216
|
return this.result === 0 ||
|
|
44257
44217
|
// If we are parsing an attribute
|
|
44258
|
-
(this.decodeMode ===
|
|
44218
|
+
(this.decodeMode === decode_DecodingMode.Attribute &&
|
|
44259
44219
|
// We shouldn't have consumed any characters after the entity,
|
|
44260
44220
|
(valueLength === 0 ||
|
|
44261
44221
|
// And there should be no invalid characters.
|
|
@@ -44272,7 +44232,7 @@ class EntityDecoder {
|
|
|
44272
44232
|
return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
|
|
44273
44233
|
}
|
|
44274
44234
|
// If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.
|
|
44275
|
-
if (this.decodeMode !==
|
|
44235
|
+
if (this.decodeMode !== decode_DecodingMode.Strict) {
|
|
44276
44236
|
this.result = this.treeIndex;
|
|
44277
44237
|
this.consumed += this.excess;
|
|
44278
44238
|
this.excess = 0;
|
|
@@ -44327,7 +44287,7 @@ class EntityDecoder {
|
|
|
44327
44287
|
case EntityDecoderState.NamedEntity: {
|
|
44328
44288
|
// Emit a named entity if we have one.
|
|
44329
44289
|
return this.result !== 0 &&
|
|
44330
|
-
(this.decodeMode !==
|
|
44290
|
+
(this.decodeMode !== decode_DecodingMode.Attribute ||
|
|
44331
44291
|
this.result === this.treeIndex)
|
|
44332
44292
|
? this.emitNotTerminatedNamedEntity()
|
|
44333
44293
|
: 0;
|
|
@@ -44434,7 +44394,7 @@ const xmlDecoder = getDecoder(decode_data_xml);
|
|
|
44434
44394
|
* @param mode The decoding mode.
|
|
44435
44395
|
* @returns The decoded string.
|
|
44436
44396
|
*/
|
|
44437
|
-
function
|
|
44397
|
+
function decode_decodeHTML(str, mode = decode_DecodingMode.Legacy) {
|
|
44438
44398
|
return htmlDecoder(str, mode);
|
|
44439
44399
|
}
|
|
44440
44400
|
/**
|
|
@@ -44444,7 +44404,7 @@ function decodeHTML(str, mode = DecodingMode.Legacy) {
|
|
|
44444
44404
|
* @returns The decoded string.
|
|
44445
44405
|
*/
|
|
44446
44406
|
function decodeHTMLAttribute(str) {
|
|
44447
|
-
return htmlDecoder(str,
|
|
44407
|
+
return htmlDecoder(str, decode_DecodingMode.Attribute);
|
|
44448
44408
|
}
|
|
44449
44409
|
/**
|
|
44450
44410
|
* Decodes an HTML string, requiring all entities to be terminated by a semicolon.
|
|
@@ -44453,7 +44413,7 @@ function decodeHTMLAttribute(str) {
|
|
|
44453
44413
|
* @returns The decoded string.
|
|
44454
44414
|
*/
|
|
44455
44415
|
function decodeHTMLStrict(str) {
|
|
44456
|
-
return htmlDecoder(str,
|
|
44416
|
+
return htmlDecoder(str, decode_DecodingMode.Strict);
|
|
44457
44417
|
}
|
|
44458
44418
|
/**
|
|
44459
44419
|
* Decodes an XML string, requiring all entities to be terminated by a semicolon.
|
|
@@ -44461,8 +44421,8 @@ function decodeHTMLStrict(str) {
|
|
|
44461
44421
|
* @param str The string to decode.
|
|
44462
44422
|
* @returns The decoded string.
|
|
44463
44423
|
*/
|
|
44464
|
-
function
|
|
44465
|
-
return xmlDecoder(str,
|
|
44424
|
+
function decode_decodeXML(str) {
|
|
44425
|
+
return xmlDecoder(str, decode_DecodingMode.Strict);
|
|
44466
44426
|
}
|
|
44467
44427
|
//# sourceMappingURL=decode.js.map
|
|
44468
44428
|
;// ./node_modules/parse5/dist/common/html.js
|
|
@@ -52011,7 +51971,7 @@ function endTagInForeignContent(p, token) {
|
|
|
52011
51971
|
}
|
|
52012
51972
|
//# sourceMappingURL=index.js.map
|
|
52013
51973
|
;// ./node_modules/entities/lib/esm/escape.js
|
|
52014
|
-
const
|
|
51974
|
+
const escape_xmlReplacer = /["&'<>$\x80-\uFFFF]/g;
|
|
52015
51975
|
const xmlCodeMap = new Map([
|
|
52016
51976
|
[34, """],
|
|
52017
51977
|
[38, "&"],
|
|
@@ -52020,7 +51980,7 @@ const xmlCodeMap = new Map([
|
|
|
52020
51980
|
[62, ">"],
|
|
52021
51981
|
]);
|
|
52022
51982
|
// For compatibility with node < 4, we wrap `codePointAt`
|
|
52023
|
-
const
|
|
51983
|
+
const escape_getCodePoint =
|
|
52024
51984
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
52025
51985
|
String.prototype.codePointAt != null
|
|
52026
51986
|
? (str, index) => str.codePointAt(index)
|
|
@@ -52038,11 +51998,11 @@ String.prototype.codePointAt != null
|
|
|
52038
51998
|
* If a character has no equivalent entity, a
|
|
52039
51999
|
* numeric hexadecimal reference (eg. `ü`) will be used.
|
|
52040
52000
|
*/
|
|
52041
|
-
function
|
|
52001
|
+
function escape_encodeXML(str) {
|
|
52042
52002
|
let ret = "";
|
|
52043
52003
|
let lastIdx = 0;
|
|
52044
52004
|
let match;
|
|
52045
|
-
while ((match =
|
|
52005
|
+
while ((match = escape_xmlReplacer.exec(str)) !== null) {
|
|
52046
52006
|
const i = match.index;
|
|
52047
52007
|
const char = str.charCodeAt(i);
|
|
52048
52008
|
const next = xmlCodeMap.get(char);
|
|
@@ -52051,9 +52011,9 @@ function encodeXML(str) {
|
|
|
52051
52011
|
lastIdx = i + 1;
|
|
52052
52012
|
}
|
|
52053
52013
|
else {
|
|
52054
|
-
ret += `${str.substring(lastIdx, i)}&#x${
|
|
52014
|
+
ret += `${str.substring(lastIdx, i)}&#x${escape_getCodePoint(str, i).toString(16)};`;
|
|
52055
52015
|
// Increase by 1 if we have a surrogate pair
|
|
52056
|
-
lastIdx =
|
|
52016
|
+
lastIdx = escape_xmlReplacer.lastIndex += Number((char & 0xfc00) === 0xd800);
|
|
52057
52017
|
}
|
|
52058
52018
|
}
|
|
52059
52019
|
return ret + str.substr(lastIdx);
|
|
@@ -52067,7 +52027,7 @@ function encodeXML(str) {
|
|
|
52067
52027
|
*
|
|
52068
52028
|
* @param data String to escape.
|
|
52069
52029
|
*/
|
|
52070
|
-
const escape_escape = (/* unused pure expression or super */ null && (
|
|
52030
|
+
const escape_escape = (/* unused pure expression or super */ null && (escape_encodeXML));
|
|
52071
52031
|
/**
|
|
52072
52032
|
* Creates a function that escapes all characters matched by the given regular
|
|
52073
52033
|
* expression using the given map of characters to escape to their entities.
|
|
@@ -52102,7 +52062,7 @@ function getEscaper(regex, map) {
|
|
|
52102
52062
|
*
|
|
52103
52063
|
* @param data String to escape.
|
|
52104
52064
|
*/
|
|
52105
|
-
const
|
|
52065
|
+
const escape_escapeUTF8 = getEscaper(/[&<>'"]/g, xmlCodeMap);
|
|
52106
52066
|
/**
|
|
52107
52067
|
* Encodes all characters that have to be escaped in HTML attributes,
|
|
52108
52068
|
* following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
|
|
@@ -52928,6 +52888,12 @@ const stripCommentsTransformer = () => {
|
|
|
52928
52888
|
|
|
52929
52889
|
|
|
52930
52890
|
const STRIP_TAGS = ['script', 'style'];
|
|
52891
|
+
/** Valid JS identifier: starts with $, _, or a letter; followed by $, _, letters, digits, etc. */
|
|
52892
|
+
const JS_IDENTIFIER_RE = /^[$_\p{L}][$_\p{L}\p{Mn}\p{Mc}\p{Nd}\p{Pc}\u200C\u200D]*$/u;
|
|
52893
|
+
/** Format a variable key as MDX syntax, using bracket notation for non-identifier keys (e.g. hyphens). */
|
|
52894
|
+
function toMdxVariableSyntax(key) {
|
|
52895
|
+
return JS_IDENTIFIER_RE.test(key) ? `{user.${key}}` : `{user["${key}"]}`;
|
|
52896
|
+
}
|
|
52931
52897
|
/**
|
|
52932
52898
|
* Extract variable key from MDX expression AST (e.g., {user.name} → 'name')
|
|
52933
52899
|
* Uses ESTree AST inspection, matching the approach in processor/transform/variables.ts
|
|
@@ -52986,8 +52952,9 @@ function plain_one(node, opts) {
|
|
|
52986
52952
|
case 'variable':
|
|
52987
52953
|
case 'Variable': {
|
|
52988
52954
|
const key = node.properties.name.toString();
|
|
52989
|
-
if (opts.preserveVariableSyntax)
|
|
52990
|
-
return
|
|
52955
|
+
if (opts.preserveVariableSyntax) {
|
|
52956
|
+
return node.properties.isLegacy ? `<<${key}>>` : toMdxVariableSyntax(key);
|
|
52957
|
+
}
|
|
52991
52958
|
const val = 'variables' in opts && opts.variables[key];
|
|
52992
52959
|
return val || key;
|
|
52993
52960
|
}
|
|
@@ -53012,7 +52979,7 @@ function plain_one(node, opts) {
|
|
|
53012
52979
|
const key = extractMdxVariableKey(node);
|
|
53013
52980
|
if (key) {
|
|
53014
52981
|
if (opts.preserveVariableSyntax)
|
|
53015
|
-
return
|
|
52982
|
+
return toMdxVariableSyntax(key);
|
|
53016
52983
|
return ('variables' in opts && opts.variables[key]) || key;
|
|
53017
52984
|
}
|
|
53018
52985
|
}
|
|
@@ -53352,7 +53319,7 @@ const divTransformer = () => tree => {
|
|
|
53352
53319
|
;// ./processor/transform/embeds.ts
|
|
53353
53320
|
|
|
53354
53321
|
|
|
53355
|
-
const isEmbed = (node) => 'title' in node && node.title === '@embed';
|
|
53322
|
+
const isEmbed = (node) => Boolean(node && 'title' in node && node.title === '@embed');
|
|
53356
53323
|
const embedTransformer = () => {
|
|
53357
53324
|
return (tree) => {
|
|
53358
53325
|
visit(tree, 'paragraph', (node, i, parent) => {
|
|
@@ -53360,7 +53327,7 @@ const embedTransformer = () => {
|
|
|
53360
53327
|
if (!isEmbed(child))
|
|
53361
53328
|
return;
|
|
53362
53329
|
const { url, title } = child;
|
|
53363
|
-
const label = child.children[0]
|
|
53330
|
+
const label = child.children[0]?.value;
|
|
53364
53331
|
const newNode = {
|
|
53365
53332
|
type: NodeTypes.embedBlock,
|
|
53366
53333
|
label,
|
|
@@ -70837,6 +70804,55 @@ const mdxToHast = () => tree => {
|
|
|
70837
70804
|
};
|
|
70838
70805
|
/* harmony default export */ const mdx_to_hast = (mdxToHast);
|
|
70839
70806
|
|
|
70807
|
+
;// ./lib/mdast-util/empty-task-list-item/index.ts
|
|
70808
|
+
/**
|
|
70809
|
+
* Normalizes list items that are written as only `[ ]` or `[x]` into GFM task
|
|
70810
|
+
* list items during parse, but only when at least one whitespace character
|
|
70811
|
+
* follows the closing bracket (`]`). This matches legacy behaviour for checkboxes
|
|
70812
|
+
*
|
|
70813
|
+
* The issue is `remark-gfm` does not actually classify these as task items when they have no content
|
|
70814
|
+
* after the checkbox, which leaves them as plain text (`"[ ]"`). So a custom extension is needed to
|
|
70815
|
+
* treat these as task items
|
|
70816
|
+
*/
|
|
70817
|
+
function exitListItemWithEmptyTaskListItem(token) {
|
|
70818
|
+
const node = this.stack[this.stack.length - 1];
|
|
70819
|
+
if (node &&
|
|
70820
|
+
node.type === 'listItem' &&
|
|
70821
|
+
typeof node.checked !== 'boolean') {
|
|
70822
|
+
const listItem = node;
|
|
70823
|
+
const head = listItem.children[0];
|
|
70824
|
+
if (head && head.type === 'paragraph' && head.children.length === 1) {
|
|
70825
|
+
const text = head.children[0];
|
|
70826
|
+
if (text.type === 'text') {
|
|
70827
|
+
const hasTrailingWhitespace = typeof head.position?.end.offset === 'number' &&
|
|
70828
|
+
typeof text.position?.end.offset === 'number' &&
|
|
70829
|
+
head.position.end.offset > text.position.end.offset;
|
|
70830
|
+
if (!hasTrailingWhitespace) {
|
|
70831
|
+
this.exit(token);
|
|
70832
|
+
return;
|
|
70833
|
+
}
|
|
70834
|
+
const value = text.value;
|
|
70835
|
+
if (value === '[ ]') {
|
|
70836
|
+
listItem.checked = false;
|
|
70837
|
+
head.children = [];
|
|
70838
|
+
}
|
|
70839
|
+
else if (value === '[x]' || value === '[X]') {
|
|
70840
|
+
listItem.checked = true;
|
|
70841
|
+
head.children = [];
|
|
70842
|
+
}
|
|
70843
|
+
}
|
|
70844
|
+
}
|
|
70845
|
+
}
|
|
70846
|
+
this.exit(token);
|
|
70847
|
+
}
|
|
70848
|
+
function emptyTaskListItemFromMarkdown() {
|
|
70849
|
+
return {
|
|
70850
|
+
exit: {
|
|
70851
|
+
listItem: exitListItemWithEmptyTaskListItem,
|
|
70852
|
+
},
|
|
70853
|
+
};
|
|
70854
|
+
}
|
|
70855
|
+
|
|
70840
70856
|
;// ./lib/mdast-util/legacy-variable/index.ts
|
|
70841
70857
|
|
|
70842
70858
|
const contextMap = new WeakMap();
|
|
@@ -71151,6 +71167,8 @@ function legacyVariable() {
|
|
|
71151
71167
|
|
|
71152
71168
|
|
|
71153
71169
|
|
|
71170
|
+
|
|
71171
|
+
|
|
71154
71172
|
const pascalCaseTagPattern = /^<([A-Z][A-Za-z0-9_]*)([^>]*?)(\/?)>([\s\S]*)?$/;
|
|
71155
71173
|
const tagAttributePattern = /([a-zA-Z_:][-a-zA-Z0-9_:.]*)(?:\s*=\s*("[^"]*"|'[^']*'|[^\s"'>]+))?/g;
|
|
71156
71174
|
/**
|
|
@@ -71169,8 +71187,9 @@ const MAX_LOOKAHEAD = 30;
|
|
|
71169
71187
|
const EXCLUDED_TAGS = new Set(['HTMLBlock', 'Table', 'Glossary', 'Anchor']);
|
|
71170
71188
|
const inlineMdProcessor = unified()
|
|
71171
71189
|
.data('micromarkExtensions', [legacyVariable()])
|
|
71172
|
-
.data('fromMarkdownExtensions', [legacyVariableFromMarkdown()])
|
|
71173
|
-
.use(remarkParse)
|
|
71190
|
+
.data('fromMarkdownExtensions', [legacyVariableFromMarkdown(), emptyTaskListItemFromMarkdown()])
|
|
71191
|
+
.use(remarkParse)
|
|
71192
|
+
.use(remarkGfm);
|
|
71174
71193
|
const isClosingTag = (value, tag) => value.trim() === `</${tag}>`;
|
|
71175
71194
|
/**
|
|
71176
71195
|
* Parse markdown content into mdast children nodes.
|
|
@@ -92094,6 +92113,46 @@ ${reformatHTML(html)}
|
|
|
92094
92113
|
};
|
|
92095
92114
|
/* harmony default export */ const html_block = (htmlBlock);
|
|
92096
92115
|
|
|
92116
|
+
;// ./processor/compile/list-item.ts
|
|
92117
|
+
|
|
92118
|
+
// Matches '*', '-', '+', '1.', '2.', '3.', etc. followed by a newline or 1-3 spaces
|
|
92119
|
+
// to be replaced with the marker and a space like `- [ ]`
|
|
92120
|
+
const listMarkerRegex = /^(?:[*+-]|\d+\.)(?:([\r\n]| {1,3})|$)/;
|
|
92121
|
+
/**
|
|
92122
|
+
* List-item serializer intended for checklist items
|
|
92123
|
+
* Uses the default listItem handler for formatting, then patches the output to inject the checkbox and preserve empty items
|
|
92124
|
+
*
|
|
92125
|
+
* The current aim is to ensure checklist items that have no text after the checkbox are serialized
|
|
92126
|
+
* with their checkbox intact (for example, `- [ ]`) instead of dropping it
|
|
92127
|
+
* We can add more adjustments if needed
|
|
92128
|
+
*/
|
|
92129
|
+
const compile_list_item_listItem = (node, parent, state, info) => {
|
|
92130
|
+
const head = node.children[0];
|
|
92131
|
+
const isCheckbox = typeof node.checked === 'boolean' && head && head.type === 'paragraph';
|
|
92132
|
+
if (!isCheckbox) {
|
|
92133
|
+
return handle.listItem(node, parent, state, info);
|
|
92134
|
+
}
|
|
92135
|
+
const checkbox = `[${node.checked ? 'x' : ' '}] `;
|
|
92136
|
+
// `tracker` keeps current column/offset for downstream line wrapping/indent
|
|
92137
|
+
// We move it by checkbox length so wrapped lines align after `[ ] ` / `[x] `
|
|
92138
|
+
const tracker = state.createTracker(info);
|
|
92139
|
+
tracker.move(checkbox);
|
|
92140
|
+
// Initialize the checkbox item with the default listItem serializer as the source of truth for spacing,
|
|
92141
|
+
// indentation, ordered marker formatting, and wrapping behavior
|
|
92142
|
+
let value = handle.listItem(node, parent, state, {
|
|
92143
|
+
...info,
|
|
92144
|
+
...tracker.current(),
|
|
92145
|
+
});
|
|
92146
|
+
// Patch and inject checkbox after the list marker token
|
|
92147
|
+
value = value.replace(listMarkerRegex, (match, separator) => {
|
|
92148
|
+
const marker = match.trim();
|
|
92149
|
+
const actualSeparator = separator || ' ';
|
|
92150
|
+
return `${marker}${actualSeparator}${checkbox}`;
|
|
92151
|
+
});
|
|
92152
|
+
return value;
|
|
92153
|
+
};
|
|
92154
|
+
/* harmony default export */ const list_item = (compile_list_item_listItem);
|
|
92155
|
+
|
|
92097
92156
|
;// ./processor/compile/plain.ts
|
|
92098
92157
|
const plain_plain = (node) => node.value;
|
|
92099
92158
|
/* harmony default export */ const compile_plain = (plain_plain);
|
|
@@ -92112,6 +92171,7 @@ const variable = (node) => `{user.${node.data?.hProperties?.name || ''}}`;
|
|
|
92112
92171
|
|
|
92113
92172
|
|
|
92114
92173
|
|
|
92174
|
+
|
|
92115
92175
|
function compilers(mdxish = false) {
|
|
92116
92176
|
const data = this.data();
|
|
92117
92177
|
const toMarkdownExtensions = data.toMarkdownExtensions || (data.toMarkdownExtensions = []);
|
|
@@ -92129,6 +92189,7 @@ function compilers(mdxish = false) {
|
|
|
92129
92189
|
figure: compile_compatibility,
|
|
92130
92190
|
html: compile_compatibility,
|
|
92131
92191
|
i: compile_compatibility,
|
|
92192
|
+
...(mdxish && { listItem: list_item }),
|
|
92132
92193
|
plain: compile_plain,
|
|
92133
92194
|
yaml: compile_compatibility,
|
|
92134
92195
|
};
|
|
@@ -93660,6 +93721,76 @@ function remarkBreaks() {
|
|
|
93660
93721
|
}
|
|
93661
93722
|
}
|
|
93662
93723
|
|
|
93724
|
+
;// ./processor/plugin/flatten-table-cell-paragraphs.ts
|
|
93725
|
+
|
|
93726
|
+
/** List elements that cause margin issues when adjacent to paragraphs */
|
|
93727
|
+
const LIST_ELEMENTS = new Set(['ul', 'ol']);
|
|
93728
|
+
/**
|
|
93729
|
+
* Check if a child is a whitespace-only text node
|
|
93730
|
+
*/
|
|
93731
|
+
function isWhitespaceText(child) {
|
|
93732
|
+
return child.type === 'text' && !child.value.trim();
|
|
93733
|
+
}
|
|
93734
|
+
/**
|
|
93735
|
+
* Check if a child is an element with the given tag name
|
|
93736
|
+
*/
|
|
93737
|
+
function isElementWithTag(child, tags) {
|
|
93738
|
+
return child.type === 'element' && tags.has(child.tagName);
|
|
93739
|
+
}
|
|
93740
|
+
/**
|
|
93741
|
+
* Rehype plugin that flattens paragraph elements that are adjacent to lists in table cells.
|
|
93742
|
+
*
|
|
93743
|
+
* When markdown content is parsed inside JSX table cells, text before/after lists
|
|
93744
|
+
* gets wrapped in `<p>` tags. This causes unwanted spacing because both `<p>` and
|
|
93745
|
+
* list elements have margins.
|
|
93746
|
+
*
|
|
93747
|
+
* This plugin selectively unwraps only `<p>` elements that are immediately before
|
|
93748
|
+
* or after a list (`<ul>` or `<ol>`), preserving paragraphs in other contexts.
|
|
93749
|
+
*/
|
|
93750
|
+
const rehypeFlattenTableCellParagraphs = () => {
|
|
93751
|
+
return (tree) => {
|
|
93752
|
+
visit(tree, 'element', (node) => {
|
|
93753
|
+
// Only process table cells
|
|
93754
|
+
if (node.tagName !== 'td' && node.tagName !== 'th')
|
|
93755
|
+
return;
|
|
93756
|
+
const children = node.children;
|
|
93757
|
+
const newChildren = [];
|
|
93758
|
+
for (let i = 0; i < children.length; i += 1) {
|
|
93759
|
+
const child = children[i];
|
|
93760
|
+
// If not a paragraph, keep as-is
|
|
93761
|
+
if (child.type !== 'element' || child.tagName !== 'p') {
|
|
93762
|
+
newChildren.push(child);
|
|
93763
|
+
}
|
|
93764
|
+
else {
|
|
93765
|
+
// Check if this paragraph is adjacent to a list
|
|
93766
|
+
// Look at previous non-whitespace sibling
|
|
93767
|
+
let prevIndex = i - 1;
|
|
93768
|
+
while (prevIndex >= 0 && isWhitespaceText(children[prevIndex])) {
|
|
93769
|
+
prevIndex -= 1;
|
|
93770
|
+
}
|
|
93771
|
+
const prevIsNewChild = newChildren.length > 0 && newChildren[newChildren.length - 1];
|
|
93772
|
+
const prevIsList = (prevIndex >= 0 && isElementWithTag(children[prevIndex], LIST_ELEMENTS)) ||
|
|
93773
|
+
(prevIsNewChild && prevIsNewChild.type === 'element' && LIST_ELEMENTS.has(prevIsNewChild.tagName));
|
|
93774
|
+
// Look at next non-whitespace sibling
|
|
93775
|
+
let nextIndex = i + 1;
|
|
93776
|
+
while (nextIndex < children.length && isWhitespaceText(children[nextIndex])) {
|
|
93777
|
+
nextIndex += 1;
|
|
93778
|
+
}
|
|
93779
|
+
const nextIsList = nextIndex < children.length && isElementWithTag(children[nextIndex], LIST_ELEMENTS);
|
|
93780
|
+
// If adjacent to a list, flatten the paragraph
|
|
93781
|
+
if (prevIsList || nextIsList) {
|
|
93782
|
+
newChildren.push(...child.children);
|
|
93783
|
+
}
|
|
93784
|
+
else {
|
|
93785
|
+
newChildren.push(child);
|
|
93786
|
+
}
|
|
93787
|
+
}
|
|
93788
|
+
}
|
|
93789
|
+
node.children = newChildren;
|
|
93790
|
+
});
|
|
93791
|
+
};
|
|
93792
|
+
};
|
|
93793
|
+
|
|
93663
93794
|
;// ./lib/utils/mdxish/mdxish-get-component-name.ts
|
|
93664
93795
|
/** Convert a string to PascalCase */
|
|
93665
93796
|
function toPascalCase(str) {
|
|
@@ -94157,12 +94288,20 @@ function extractBalancedBraces(content, start) {
|
|
|
94157
94288
|
* Handles: already-escaped braces, string literals inside expressions, nested balanced braces.
|
|
94158
94289
|
*/
|
|
94159
94290
|
function escapeUnbalancedBraces(content) {
|
|
94291
|
+
// Skip HTML elements — their content should never be escaped because
|
|
94292
|
+
// rehypeRaw parses them into hast elements, making `\` literal text in output
|
|
94293
|
+
const htmlElements = [];
|
|
94294
|
+
const safe = content.replace(/<([a-z][a-zA-Z0-9]*)(?:\s[^>]*)?>[\s\S]*?<\/\1>/g, match => {
|
|
94295
|
+
const idx = htmlElements.length;
|
|
94296
|
+
htmlElements.push(match);
|
|
94297
|
+
return `___HTML_ELEM_${idx}___`;
|
|
94298
|
+
});
|
|
94160
94299
|
const opens = [];
|
|
94161
94300
|
const unbalanced = new Set();
|
|
94162
94301
|
let strDelim = null;
|
|
94163
94302
|
let strEscaped = false;
|
|
94164
94303
|
// Convert to array of Unicode code points to handle emojis and multi-byte characters correctly
|
|
94165
|
-
const chars = Array.from(
|
|
94304
|
+
const chars = Array.from(safe);
|
|
94166
94305
|
for (let i = 0; i < chars.length; i += 1) {
|
|
94167
94306
|
const ch = chars[i];
|
|
94168
94307
|
// Track strings inside expressions to ignore braces within them
|
|
@@ -94203,11 +94342,15 @@ function escapeUnbalancedBraces(content) {
|
|
|
94203
94342
|
}
|
|
94204
94343
|
}
|
|
94205
94344
|
opens.forEach(pos => unbalanced.add(pos));
|
|
94206
|
-
|
|
94207
|
-
|
|
94208
|
-
|
|
94209
|
-
|
|
94210
|
-
.join('');
|
|
94345
|
+
// If there are no unbalanced braces, return content as-is;
|
|
94346
|
+
// otherwise, escape each unbalanced `{` or `}` so MDX doesn't treat them as expressions.
|
|
94347
|
+
let result = unbalanced.size === 0
|
|
94348
|
+
? safe
|
|
94349
|
+
: chars.map((ch, i) => (unbalanced.has(i) ? `\\${ch}` : ch)).join('');
|
|
94350
|
+
if (htmlElements.length > 0) {
|
|
94351
|
+
result = result.replace(/___HTML_ELEM_(\d+)___/g, (_m, idx) => htmlElements[parseInt(idx, 10)]);
|
|
94352
|
+
}
|
|
94353
|
+
return result;
|
|
94211
94354
|
}
|
|
94212
94355
|
/**
|
|
94213
94356
|
* Converts JSX attribute expressions (attribute={expression}) to HTML attributes (attribute="value").
|
|
@@ -94297,15 +94440,13 @@ function preprocessJSXExpressions(content, context = {}) {
|
|
|
94297
94440
|
let processed = protectHTMLBlockContent(content);
|
|
94298
94441
|
// Step 1: Protect code blocks and inline code
|
|
94299
94442
|
const { protectedCode, protectedContent } = protectCodeBlocks(processed);
|
|
94300
|
-
// Step 2:
|
|
94301
|
-
processed = removeJSXComments(protectedContent);
|
|
94302
|
-
// Step 3: Evaluate attribute expressions (JSX attribute syntax: href={baseUrl})
|
|
94443
|
+
// Step 2: Evaluate attribute expressions (JSX attribute syntax: href={baseUrl})
|
|
94303
94444
|
// For inline expressions, we use a library to parse the expression & evaluate it later
|
|
94304
94445
|
// For attribute expressions, it was difficult to use a library to parse them, so do it manually
|
|
94305
|
-
processed = evaluateAttributeExpressions(
|
|
94306
|
-
// Step
|
|
94446
|
+
processed = evaluateAttributeExpressions(protectedContent, context, protectedCode);
|
|
94447
|
+
// Step 3: Escape unbalanced braces to prevent MDX expression parsing errors
|
|
94307
94448
|
processed = escapeUnbalancedBraces(processed);
|
|
94308
|
-
// Step
|
|
94449
|
+
// Step 4: Restore protected code blocks
|
|
94309
94450
|
processed = restoreCodeBlocks(processed, protectedCode);
|
|
94310
94451
|
return processed;
|
|
94311
94452
|
}
|
|
@@ -94401,6 +94542,9 @@ const generateSlugForHeadings = () => (tree) => {
|
|
|
94401
94542
|
};
|
|
94402
94543
|
/* harmony default export */ const heading_slugs = (generateSlugForHeadings);
|
|
94403
94544
|
|
|
94545
|
+
// EXTERNAL MODULE: external "@readme/variable"
|
|
94546
|
+
var variable_ = __webpack_require__(8167);
|
|
94547
|
+
var variable_default = /*#__PURE__*/__webpack_require__.n(variable_);
|
|
94404
94548
|
;// ./node_modules/rehype-parse/lib/index.js
|
|
94405
94549
|
/**
|
|
94406
94550
|
* @import {Root} from 'hast'
|
|
@@ -94466,6 +94610,311 @@ function rehypeParse(options) {
|
|
|
94466
94610
|
}
|
|
94467
94611
|
}
|
|
94468
94612
|
|
|
94613
|
+
;// ./node_modules/entities/lib/esm/generated/encode-html.js
|
|
94614
|
+
// Generated using scripts/write-encode-map.ts
|
|
94615
|
+
function restoreDiff(arr) {
|
|
94616
|
+
for (let i = 1; i < arr.length; i++) {
|
|
94617
|
+
arr[i][0] += arr[i - 1][0] + 1;
|
|
94618
|
+
}
|
|
94619
|
+
return arr;
|
|
94620
|
+
}
|
|
94621
|
+
// prettier-ignore
|
|
94622
|
+
/* harmony default export */ const encode_html = (new Map(/* #__PURE__ */ restoreDiff([[9, "	"], [0, "
"], [22, "!"], [0, """], [0, "#"], [0, "$"], [0, "%"], [0, "&"], [0, "'"], [0, "("], [0, ")"], [0, "*"], [0, "+"], [0, ","], [1, "."], [0, "/"], [10, ":"], [0, ";"], [0, { v: "<", n: 8402, o: "<⃒" }], [0, { v: "=", n: 8421, o: "=⃥" }], [0, { v: ">", n: 8402, o: ">⃒" }], [0, "?"], [0, "@"], [26, "["], [0, "\"], [0, "]"], [0, "^"], [0, "_"], [0, "`"], [5, { n: 106, o: "fj" }], [20, "{"], [0, "|"], [0, "}"], [34, " "], [0, "¡"], [0, "¢"], [0, "£"], [0, "¤"], [0, "¥"], [0, "¦"], [0, "§"], [0, "¨"], [0, "©"], [0, "ª"], [0, "«"], [0, "¬"], [0, "­"], [0, "®"], [0, "¯"], [0, "°"], [0, "±"], [0, "²"], [0, "³"], [0, "´"], [0, "µ"], [0, "¶"], [0, "·"], [0, "¸"], [0, "¹"], [0, "º"], [0, "»"], [0, "¼"], [0, "½"], [0, "¾"], [0, "¿"], [0, "À"], [0, "Á"], [0, "Â"], [0, "Ã"], [0, "Ä"], [0, "Å"], [0, "Æ"], [0, "Ç"], [0, "È"], [0, "É"], [0, "Ê"], [0, "Ë"], [0, "Ì"], [0, "Í"], [0, "Î"], [0, "Ï"], [0, "Ð"], [0, "Ñ"], [0, "Ò"], [0, "Ó"], [0, "Ô"], [0, "Õ"], [0, "Ö"], [0, "×"], [0, "Ø"], [0, "Ù"], [0, "Ú"], [0, "Û"], [0, "Ü"], [0, "Ý"], [0, "Þ"], [0, "ß"], [0, "à"], [0, "á"], [0, "â"], [0, "ã"], [0, "ä"], [0, "å"], [0, "æ"], [0, "ç"], [0, "è"], [0, "é"], [0, "ê"], [0, "ë"], [0, "ì"], [0, "í"], [0, "î"], [0, "ï"], [0, "ð"], [0, "ñ"], [0, "ò"], [0, "ó"], [0, "ô"], [0, "õ"], [0, "ö"], [0, "÷"], [0, "ø"], [0, "ù"], [0, "ú"], [0, "û"], [0, "ü"], [0, "ý"], [0, "þ"], [0, "ÿ"], [0, "Ā"], [0, "ā"], [0, "Ă"], [0, "ă"], [0, "Ą"], [0, "ą"], [0, "Ć"], [0, "ć"], [0, "Ĉ"], [0, "ĉ"], [0, "Ċ"], [0, "ċ"], [0, "Č"], [0, "č"], [0, "Ď"], [0, "ď"], [0, "Đ"], [0, "đ"], [0, "Ē"], [0, "ē"], [2, "Ė"], [0, "ė"], [0, "Ę"], [0, "ę"], [0, "Ě"], [0, "ě"], [0, "Ĝ"], [0, "ĝ"], [0, "Ğ"], [0, "ğ"], [0, "Ġ"], [0, "ġ"], [0, "Ģ"], [1, "Ĥ"], [0, "ĥ"], [0, "Ħ"], [0, "ħ"], [0, "Ĩ"], [0, "ĩ"], [0, "Ī"], [0, "ī"], [2, "Į"], [0, "į"], [0, "İ"], [0, "ı"], [0, "IJ"], [0, "ij"], [0, "Ĵ"], [0, "ĵ"], [0, "Ķ"], [0, "ķ"], [0, "ĸ"], [0, "Ĺ"], [0, "ĺ"], [0, "Ļ"], [0, "ļ"], [0, "Ľ"], [0, "ľ"], [0, "Ŀ"], [0, "ŀ"], [0, "Ł"], [0, "ł"], [0, "Ń"], [0, "ń"], [0, "Ņ"], [0, "ņ"], [0, "Ň"], [0, "ň"], [0, "ʼn"], [0, "Ŋ"], [0, "ŋ"], [0, "Ō"], [0, "ō"], [2, "Ő"], [0, "ő"], [0, "Œ"], [0, "œ"], [0, "Ŕ"], [0, "ŕ"], [0, "Ŗ"], [0, "ŗ"], [0, "Ř"], [0, "ř"], [0, "Ś"], [0, "ś"], [0, "Ŝ"], [0, "ŝ"], [0, "Ş"], [0, "ş"], [0, "Š"], [0, "š"], [0, "Ţ"], [0, "ţ"], [0, "Ť"], [0, "ť"], [0, "Ŧ"], [0, "ŧ"], [0, "Ũ"], [0, "ũ"], [0, "Ū"], [0, "ū"], [0, "Ŭ"], [0, "ŭ"], [0, "Ů"], [0, "ů"], [0, "Ű"], [0, "ű"], [0, "Ų"], [0, "ų"], [0, "Ŵ"], [0, "ŵ"], [0, "Ŷ"], [0, "ŷ"], [0, "Ÿ"], [0, "Ź"], [0, "ź"], [0, "Ż"], [0, "ż"], [0, "Ž"], [0, "ž"], [19, "ƒ"], [34, "Ƶ"], [63, "ǵ"], [65, "ȷ"], [142, "ˆ"], [0, "ˇ"], [16, "˘"], [0, "˙"], [0, "˚"], [0, "˛"], [0, "˜"], [0, "˝"], [51, "̑"], [127, "Α"], [0, "Β"], [0, "Γ"], [0, "Δ"], [0, "Ε"], [0, "Ζ"], [0, "Η"], [0, "Θ"], [0, "Ι"], [0, "Κ"], [0, "Λ"], [0, "Μ"], [0, "Ν"], [0, "Ξ"], [0, "Ο"], [0, "Π"], [0, "Ρ"], [1, "Σ"], [0, "Τ"], [0, "Υ"], [0, "Φ"], [0, "Χ"], [0, "Ψ"], [0, "Ω"], [7, "α"], [0, "β"], [0, "γ"], [0, "δ"], [0, "ε"], [0, "ζ"], [0, "η"], [0, "θ"], [0, "ι"], [0, "κ"], [0, "λ"], [0, "μ"], [0, "ν"], [0, "ξ"], [0, "ο"], [0, "π"], [0, "ρ"], [0, "ς"], [0, "σ"], [0, "τ"], [0, "υ"], [0, "φ"], [0, "χ"], [0, "ψ"], [0, "ω"], [7, "ϑ"], [0, "ϒ"], [2, "ϕ"], [0, "ϖ"], [5, "Ϝ"], [0, "ϝ"], [18, "ϰ"], [0, "ϱ"], [3, "ϵ"], [0, "϶"], [10, "Ё"], [0, "Ђ"], [0, "Ѓ"], [0, "Є"], [0, "Ѕ"], [0, "І"], [0, "Ї"], [0, "Ј"], [0, "Љ"], [0, "Њ"], [0, "Ћ"], [0, "Ќ"], [1, "Ў"], [0, "Џ"], [0, "А"], [0, "Б"], [0, "В"], [0, "Г"], [0, "Д"], [0, "Е"], [0, "Ж"], [0, "З"], [0, "И"], [0, "Й"], [0, "К"], [0, "Л"], [0, "М"], [0, "Н"], [0, "О"], [0, "П"], [0, "Р"], [0, "С"], [0, "Т"], [0, "У"], [0, "Ф"], [0, "Х"], [0, "Ц"], [0, "Ч"], [0, "Ш"], [0, "Щ"], [0, "Ъ"], [0, "Ы"], [0, "Ь"], [0, "Э"], [0, "Ю"], [0, "Я"], [0, "а"], [0, "б"], [0, "в"], [0, "г"], [0, "д"], [0, "е"], [0, "ж"], [0, "з"], [0, "и"], [0, "й"], [0, "к"], [0, "л"], [0, "м"], [0, "н"], [0, "о"], [0, "п"], [0, "р"], [0, "с"], [0, "т"], [0, "у"], [0, "ф"], [0, "х"], [0, "ц"], [0, "ч"], [0, "ш"], [0, "щ"], [0, "ъ"], [0, "ы"], [0, "ь"], [0, "э"], [0, "ю"], [0, "я"], [1, "ё"], [0, "ђ"], [0, "ѓ"], [0, "є"], [0, "ѕ"], [0, "і"], [0, "ї"], [0, "ј"], [0, "љ"], [0, "њ"], [0, "ћ"], [0, "ќ"], [1, "ў"], [0, "џ"], [7074, " "], [0, " "], [0, " "], [0, " "], [1, " "], [0, " "], [0, " "], [0, " "], [0, "​"], [0, "‌"], [0, "‍"], [0, "‎"], [0, "‏"], [0, "‐"], [2, "–"], [0, "—"], [0, "―"], [0, "‖"], [1, "‘"], [0, "’"], [0, "‚"], [1, "“"], [0, "”"], [0, "„"], [1, "†"], [0, "‡"], [0, "•"], [2, "‥"], [0, "…"], [9, "‰"], [0, "‱"], [0, "′"], [0, "″"], [0, "‴"], [0, "‵"], [3, "‹"], [0, "›"], [3, "‾"], [2, "⁁"], [1, "⁃"], [0, "⁄"], [10, "⁏"], [7, "⁗"], [7, { v: " ", n: 8202, o: "  " }], [0, "⁠"], [0, "⁡"], [0, "⁢"], [0, "⁣"], [72, "€"], [46, "⃛"], [0, "⃜"], [37, "ℂ"], [2, "℅"], [4, "ℊ"], [0, "ℋ"], [0, "ℌ"], [0, "ℍ"], [0, "ℎ"], [0, "ℏ"], [0, "ℐ"], [0, "ℑ"], [0, "ℒ"], [0, "ℓ"], [1, "ℕ"], [0, "№"], [0, "℗"], [0, "℘"], [0, "ℙ"], [0, "ℚ"], [0, "ℛ"], [0, "ℜ"], [0, "ℝ"], [0, "℞"], [3, "™"], [1, "ℤ"], [2, "℧"], [0, "ℨ"], [0, "℩"], [2, "ℬ"], [0, "ℭ"], [1, "ℯ"], [0, "ℰ"], [0, "ℱ"], [1, "ℳ"], [0, "ℴ"], [0, "ℵ"], [0, "ℶ"], [0, "ℷ"], [0, "ℸ"], [12, "ⅅ"], [0, "ⅆ"], [0, "ⅇ"], [0, "ⅈ"], [10, "⅓"], [0, "⅔"], [0, "⅕"], [0, "⅖"], [0, "⅗"], [0, "⅘"], [0, "⅙"], [0, "⅚"], [0, "⅛"], [0, "⅜"], [0, "⅝"], [0, "⅞"], [49, "←"], [0, "↑"], [0, "→"], [0, "↓"], [0, "↔"], [0, "↕"], [0, "↖"], [0, "↗"], [0, "↘"], [0, "↙"], [0, "↚"], [0, "↛"], [1, { v: "↝", n: 824, o: "↝̸" }], [0, "↞"], [0, "↟"], [0, "↠"], [0, "↡"], [0, "↢"], [0, "↣"], [0, "↤"], [0, "↥"], [0, "↦"], [0, "↧"], [1, "↩"], [0, "↪"], [0, "↫"], [0, "↬"], [0, "↭"], [0, "↮"], [1, "↰"], [0, "↱"], [0, "↲"], [0, "↳"], [1, "↵"], [0, "↶"], [0, "↷"], [2, "↺"], [0, "↻"], [0, "↼"], [0, "↽"], [0, "↾"], [0, "↿"], [0, "⇀"], [0, "⇁"], [0, "⇂"], [0, "⇃"], [0, "⇄"], [0, "⇅"], [0, "⇆"], [0, "⇇"], [0, "⇈"], [0, "⇉"], [0, "⇊"], [0, "⇋"], [0, "⇌"], [0, "⇍"], [0, "⇎"], [0, "⇏"], [0, "⇐"], [0, "⇑"], [0, "⇒"], [0, "⇓"], [0, "⇔"], [0, "⇕"], [0, "⇖"], [0, "⇗"], [0, "⇘"], [0, "⇙"], [0, "⇚"], [0, "⇛"], [1, "⇝"], [6, "⇤"], [0, "⇥"], [15, "⇵"], [7, "⇽"], [0, "⇾"], [0, "⇿"], [0, "∀"], [0, "∁"], [0, { v: "∂", n: 824, o: "∂̸" }], [0, "∃"], [0, "∄"], [0, "∅"], [1, "∇"], [0, "∈"], [0, "∉"], [1, "∋"], [0, "∌"], [2, "∏"], [0, "∐"], [0, "∑"], [0, "−"], [0, "∓"], [0, "∔"], [1, "∖"], [0, "∗"], [0, "∘"], [1, "√"], [2, "∝"], [0, "∞"], [0, "∟"], [0, { v: "∠", n: 8402, o: "∠⃒" }], [0, "∡"], [0, "∢"], [0, "∣"], [0, "∤"], [0, "∥"], [0, "∦"], [0, "∧"], [0, "∨"], [0, { v: "∩", n: 65024, o: "∩︀" }], [0, { v: "∪", n: 65024, o: "∪︀" }], [0, "∫"], [0, "∬"], [0, "∭"], [0, "∮"], [0, "∯"], [0, "∰"], [0, "∱"], [0, "∲"], [0, "∳"], [0, "∴"], [0, "∵"], [0, "∶"], [0, "∷"], [0, "∸"], [1, "∺"], [0, "∻"], [0, { v: "∼", n: 8402, o: "∼⃒" }], [0, { v: "∽", n: 817, o: "∽̱" }], [0, { v: "∾", n: 819, o: "∾̳" }], [0, "∿"], [0, "≀"], [0, "≁"], [0, { v: "≂", n: 824, o: "≂̸" }], [0, "≃"], [0, "≄"], [0, "≅"], [0, "≆"], [0, "≇"], [0, "≈"], [0, "≉"], [0, "≊"], [0, { v: "≋", n: 824, o: "≋̸" }], [0, "≌"], [0, { v: "≍", n: 8402, o: "≍⃒" }], [0, { v: "≎", n: 824, o: "≎̸" }], [0, { v: "≏", n: 824, o: "≏̸" }], [0, { v: "≐", n: 824, o: "≐̸" }], [0, "≑"], [0, "≒"], [0, "≓"], [0, "≔"], [0, "≕"], [0, "≖"], [0, "≗"], [1, "≙"], [0, "≚"], [1, "≜"], [2, "≟"], [0, "≠"], [0, { v: "≡", n: 8421, o: "≡⃥" }], [0, "≢"], [1, { v: "≤", n: 8402, o: "≤⃒" }], [0, { v: "≥", n: 8402, o: "≥⃒" }], [0, { v: "≦", n: 824, o: "≦̸" }], [0, { v: "≧", n: 824, o: "≧̸" }], [0, { v: "≨", n: 65024, o: "≨︀" }], [0, { v: "≩", n: 65024, o: "≩︀" }], [0, { v: "≪", n: new Map(/* #__PURE__ */ restoreDiff([[824, "≪̸"], [7577, "≪⃒"]])) }], [0, { v: "≫", n: new Map(/* #__PURE__ */ restoreDiff([[824, "≫̸"], [7577, "≫⃒"]])) }], [0, "≬"], [0, "≭"], [0, "≮"], [0, "≯"], [0, "≰"], [0, "≱"], [0, "≲"], [0, "≳"], [0, "≴"], [0, "≵"], [0, "≶"], [0, "≷"], [0, "≸"], [0, "≹"], [0, "≺"], [0, "≻"], [0, "≼"], [0, "≽"], [0, "≾"], [0, { v: "≿", n: 824, o: "≿̸" }], [0, "⊀"], [0, "⊁"], [0, { v: "⊂", n: 8402, o: "⊂⃒" }], [0, { v: "⊃", n: 8402, o: "⊃⃒" }], [0, "⊄"], [0, "⊅"], [0, "⊆"], [0, "⊇"], [0, "⊈"], [0, "⊉"], [0, { v: "⊊", n: 65024, o: "⊊︀" }], [0, { v: "⊋", n: 65024, o: "⊋︀" }], [1, "⊍"], [0, "⊎"], [0, { v: "⊏", n: 824, o: "⊏̸" }], [0, { v: "⊐", n: 824, o: "⊐̸" }], [0, "⊑"], [0, "⊒"], [0, { v: "⊓", n: 65024, o: "⊓︀" }], [0, { v: "⊔", n: 65024, o: "⊔︀" }], [0, "⊕"], [0, "⊖"], [0, "⊗"], [0, "⊘"], [0, "⊙"], [0, "⊚"], [0, "⊛"], [1, "⊝"], [0, "⊞"], [0, "⊟"], [0, "⊠"], [0, "⊡"], [0, "⊢"], [0, "⊣"], [0, "⊤"], [0, "⊥"], [1, "⊧"], [0, "⊨"], [0, "⊩"], [0, "⊪"], [0, "⊫"], [0, "⊬"], [0, "⊭"], [0, "⊮"], [0, "⊯"], [0, "⊰"], [1, "⊲"], [0, "⊳"], [0, { v: "⊴", n: 8402, o: "⊴⃒" }], [0, { v: "⊵", n: 8402, o: "⊵⃒" }], [0, "⊶"], [0, "⊷"], [0, "⊸"], [0, "⊹"], [0, "⊺"], [0, "⊻"], [1, "⊽"], [0, "⊾"], [0, "⊿"], [0, "⋀"], [0, "⋁"], [0, "⋂"], [0, "⋃"], [0, "⋄"], [0, "⋅"], [0, "⋆"], [0, "⋇"], [0, "⋈"], [0, "⋉"], [0, "⋊"], [0, "⋋"], [0, "⋌"], [0, "⋍"], [0, "⋎"], [0, "⋏"], [0, "⋐"], [0, "⋑"], [0, "⋒"], [0, "⋓"], [0, "⋔"], [0, "⋕"], [0, "⋖"], [0, "⋗"], [0, { v: "⋘", n: 824, o: "⋘̸" }], [0, { v: "⋙", n: 824, o: "⋙̸" }], [0, { v: "⋚", n: 65024, o: "⋚︀" }], [0, { v: "⋛", n: 65024, o: "⋛︀" }], [2, "⋞"], [0, "⋟"], [0, "⋠"], [0, "⋡"], [0, "⋢"], [0, "⋣"], [2, "⋦"], [0, "⋧"], [0, "⋨"], [0, "⋩"], [0, "⋪"], [0, "⋫"], [0, "⋬"], [0, "⋭"], [0, "⋮"], [0, "⋯"], [0, "⋰"], [0, "⋱"], [0, "⋲"], [0, "⋳"], [0, "⋴"], [0, { v: "⋵", n: 824, o: "⋵̸" }], [0, "⋶"], [0, "⋷"], [1, { v: "⋹", n: 824, o: "⋹̸" }], [0, "⋺"], [0, "⋻"], [0, "⋼"], [0, "⋽"], [0, "⋾"], [6, "⌅"], [0, "⌆"], [1, "⌈"], [0, "⌉"], [0, "⌊"], [0, "⌋"], [0, "⌌"], [0, "⌍"], [0, "⌎"], [0, "⌏"], [0, "⌐"], [1, "⌒"], [0, "⌓"], [1, "⌕"], [0, "⌖"], [5, "⌜"], [0, "⌝"], [0, "⌞"], [0, "⌟"], [2, "⌢"], [0, "⌣"], [9, "⌭"], [0, "⌮"], [7, "⌶"], [6, "⌽"], [1, "⌿"], [60, "⍼"], [51, "⎰"], [0, "⎱"], [2, "⎴"], [0, "⎵"], [0, "⎶"], [37, "⏜"], [0, "⏝"], [0, "⏞"], [0, "⏟"], [2, "⏢"], [4, "⏧"], [59, "␣"], [164, "Ⓢ"], [55, "─"], [1, "│"], [9, "┌"], [3, "┐"], [3, "└"], [3, "┘"], [3, "├"], [7, "┤"], [7, "┬"], [7, "┴"], [7, "┼"], [19, "═"], [0, "║"], [0, "╒"], [0, "╓"], [0, "╔"], [0, "╕"], [0, "╖"], [0, "╗"], [0, "╘"], [0, "╙"], [0, "╚"], [0, "╛"], [0, "╜"], [0, "╝"], [0, "╞"], [0, "╟"], [0, "╠"], [0, "╡"], [0, "╢"], [0, "╣"], [0, "╤"], [0, "╥"], [0, "╦"], [0, "╧"], [0, "╨"], [0, "╩"], [0, "╪"], [0, "╫"], [0, "╬"], [19, "▀"], [3, "▄"], [3, "█"], [8, "░"], [0, "▒"], [0, "▓"], [13, "□"], [8, "▪"], [0, "▫"], [1, "▭"], [0, "▮"], [2, "▱"], [1, "△"], [0, "▴"], [0, "▵"], [2, "▸"], [0, "▹"], [3, "▽"], [0, "▾"], [0, "▿"], [2, "◂"], [0, "◃"], [6, "◊"], [0, "○"], [32, "◬"], [2, "◯"], [8, "◸"], [0, "◹"], [0, "◺"], [0, "◻"], [0, "◼"], [8, "★"], [0, "☆"], [7, "☎"], [49, "♀"], [1, "♂"], [29, "♠"], [2, "♣"], [1, "♥"], [0, "♦"], [3, "♪"], [2, "♭"], [0, "♮"], [0, "♯"], [163, "✓"], [3, "✗"], [8, "✠"], [21, "✶"], [33, "❘"], [25, "❲"], [0, "❳"], [84, "⟈"], [0, "⟉"], [28, "⟦"], [0, "⟧"], [0, "⟨"], [0, "⟩"], [0, "⟪"], [0, "⟫"], [0, "⟬"], [0, "⟭"], [7, "⟵"], [0, "⟶"], [0, "⟷"], [0, "⟸"], [0, "⟹"], [0, "⟺"], [1, "⟼"], [2, "⟿"], [258, "⤂"], [0, "⤃"], [0, "⤄"], [0, "⤅"], [6, "⤌"], [0, "⤍"], [0, "⤎"], [0, "⤏"], [0, "⤐"], [0, "⤑"], [0, "⤒"], [0, "⤓"], [2, "⤖"], [2, "⤙"], [0, "⤚"], [0, "⤛"], [0, "⤜"], [0, "⤝"], [0, "⤞"], [0, "⤟"], [0, "⤠"], [2, "⤣"], [0, "⤤"], [0, "⤥"], [0, "⤦"], [0, "⤧"], [0, "⤨"], [0, "⤩"], [0, "⤪"], [8, { v: "⤳", n: 824, o: "⤳̸" }], [1, "⤵"], [0, "⤶"], [0, "⤷"], [0, "⤸"], [0, "⤹"], [2, "⤼"], [0, "⤽"], [7, "⥅"], [2, "⥈"], [0, "⥉"], [0, "⥊"], [0, "⥋"], [2, "⥎"], [0, "⥏"], [0, "⥐"], [0, "⥑"], [0, "⥒"], [0, "⥓"], [0, "⥔"], [0, "⥕"], [0, "⥖"], [0, "⥗"], [0, "⥘"], [0, "⥙"], [0, "⥚"], [0, "⥛"], [0, "⥜"], [0, "⥝"], [0, "⥞"], [0, "⥟"], [0, "⥠"], [0, "⥡"], [0, "⥢"], [0, "⥣"], [0, "⥤"], [0, "⥥"], [0, "⥦"], [0, "⥧"], [0, "⥨"], [0, "⥩"], [0, "⥪"], [0, "⥫"], [0, "⥬"], [0, "⥭"], [0, "⥮"], [0, "⥯"], [0, "⥰"], [0, "⥱"], [0, "⥲"], [0, "⥳"], [0, "⥴"], [0, "⥵"], [0, "⥶"], [1, "⥸"], [0, "⥹"], [1, "⥻"], [0, "⥼"], [0, "⥽"], [0, "⥾"], [0, "⥿"], [5, "⦅"], [0, "⦆"], [4, "⦋"], [0, "⦌"], [0, "⦍"], [0, "⦎"], [0, "⦏"], [0, "⦐"], [0, "⦑"], [0, "⦒"], [0, "⦓"], [0, "⦔"], [0, "⦕"], [0, "⦖"], [3, "⦚"], [1, "⦜"], [0, "⦝"], [6, "⦤"], [0, "⦥"], [0, "⦦"], [0, "⦧"], [0, "⦨"], [0, "⦩"], [0, "⦪"], [0, "⦫"], [0, "⦬"], [0, "⦭"], [0, "⦮"], [0, "⦯"], [0, "⦰"], [0, "⦱"], [0, "⦲"], [0, "⦳"], [0, "⦴"], [0, "⦵"], [0, "⦶"], [0, "⦷"], [1, "⦹"], [1, "⦻"], [0, "⦼"], [1, "⦾"], [0, "⦿"], [0, "⧀"], [0, "⧁"], [0, "⧂"], [0, "⧃"], [0, "⧄"], [0, "⧅"], [3, "⧉"], [3, "⧍"], [0, "⧎"], [0, { v: "⧏", n: 824, o: "⧏̸" }], [0, { v: "⧐", n: 824, o: "⧐̸" }], [11, "⧜"], [0, "⧝"], [0, "⧞"], [4, "⧣"], [0, "⧤"], [0, "⧥"], [5, "⧫"], [8, "⧴"], [1, "⧶"], [9, "⨀"], [0, "⨁"], [0, "⨂"], [1, "⨄"], [1, "⨆"], [5, "⨌"], [0, "⨍"], [2, "⨐"], [0, "⨑"], [0, "⨒"], [0, "⨓"], [0, "⨔"], [0, "⨕"], [0, "⨖"], [0, "⨗"], [10, "⨢"], [0, "⨣"], [0, "⨤"], [0, "⨥"], [0, "⨦"], [0, "⨧"], [1, "⨩"], [0, "⨪"], [2, "⨭"], [0, "⨮"], [0, "⨯"], [0, "⨰"], [0, "⨱"], [1, "⨳"], [0, "⨴"], [0, "⨵"], [0, "⨶"], [0, "⨷"], [0, "⨸"], [0, "⨹"], [0, "⨺"], [0, "⨻"], [0, "⨼"], [2, "⨿"], [0, "⩀"], [1, "⩂"], [0, "⩃"], [0, "⩄"], [0, "⩅"], [0, "⩆"], [0, "⩇"], [0, "⩈"], [0, "⩉"], [0, "⩊"], [0, "⩋"], [0, "⩌"], [0, "⩍"], [2, "⩐"], [2, "⩓"], [0, "⩔"], [0, "⩕"], [0, "⩖"], [0, "⩗"], [0, "⩘"], [1, "⩚"], [0, "⩛"], [0, "⩜"], [0, "⩝"], [1, "⩟"], [6, "⩦"], [3, "⩪"], [2, { v: "⩭", n: 824, o: "⩭̸" }], [0, "⩮"], [0, "⩯"], [0, { v: "⩰", n: 824, o: "⩰̸" }], [0, "⩱"], [0, "⩲"], [0, "⩳"], [0, "⩴"], [0, "⩵"], [1, "⩷"], [0, "⩸"], [0, "⩹"], [0, "⩺"], [0, "⩻"], [0, "⩼"], [0, { v: "⩽", n: 824, o: "⩽̸" }], [0, { v: "⩾", n: 824, o: "⩾̸" }], [0, "⩿"], [0, "⪀"], [0, "⪁"], [0, "⪂"], [0, "⪃"], [0, "⪄"], [0, "⪅"], [0, "⪆"], [0, "⪇"], [0, "⪈"], [0, "⪉"], [0, "⪊"], [0, "⪋"], [0, "⪌"], [0, "⪍"], [0, "⪎"], [0, "⪏"], [0, "⪐"], [0, "⪑"], [0, "⪒"], [0, "⪓"], [0, "⪔"], [0, "⪕"], [0, "⪖"], [0, "⪗"], [0, "⪘"], [0, "⪙"], [0, "⪚"], [2, "⪝"], [0, "⪞"], [0, "⪟"], [0, "⪠"], [0, { v: "⪡", n: 824, o: "⪡̸" }], [0, { v: "⪢", n: 824, o: "⪢̸" }], [1, "⪤"], [0, "⪥"], [0, "⪦"], [0, "⪧"], [0, "⪨"], [0, "⪩"], [0, "⪪"], [0, "⪫"], [0, { v: "⪬", n: 65024, o: "⪬︀" }], [0, { v: "⪭", n: 65024, o: "⪭︀" }], [0, "⪮"], [0, { v: "⪯", n: 824, o: "⪯̸" }], [0, { v: "⪰", n: 824, o: "⪰̸" }], [2, "⪳"], [0, "⪴"], [0, "⪵"], [0, "⪶"], [0, "⪷"], [0, "⪸"], [0, "⪹"], [0, "⪺"], [0, "⪻"], [0, "⪼"], [0, "⪽"], [0, "⪾"], [0, "⪿"], [0, "⫀"], [0, "⫁"], [0, "⫂"], [0, "⫃"], [0, "⫄"], [0, { v: "⫅", n: 824, o: "⫅̸" }], [0, { v: "⫆", n: 824, o: "⫆̸" }], [0, "⫇"], [0, "⫈"], [2, { v: "⫋", n: 65024, o: "⫋︀" }], [0, { v: "⫌", n: 65024, o: "⫌︀" }], [2, "⫏"], [0, "⫐"], [0, "⫑"], [0, "⫒"], [0, "⫓"], [0, "⫔"], [0, "⫕"], [0, "⫖"], [0, "⫗"], [0, "⫘"], [0, "⫙"], [0, "⫚"], [0, "⫛"], [8, "⫤"], [1, "⫦"], [0, "⫧"], [0, "⫨"], [0, "⫩"], [1, "⫫"], [0, "⫬"], [0, "⫭"], [0, "⫮"], [0, "⫯"], [0, "⫰"], [0, "⫱"], [0, "⫲"], [0, "⫳"], [9, { v: "⫽", n: 8421, o: "⫽⃥" }], [44343, { n: new Map(/* #__PURE__ */ restoreDiff([[56476, "𝒜"], [1, "𝒞"], [0, "𝒟"], [2, "𝒢"], [2, "𝒥"], [0, "𝒦"], [2, "𝒩"], [0, "𝒪"], [0, "𝒫"], [0, "𝒬"], [1, "𝒮"], [0, "𝒯"], [0, "𝒰"], [0, "𝒱"], [0, "𝒲"], [0, "𝒳"], [0, "𝒴"], [0, "𝒵"], [0, "𝒶"], [0, "𝒷"], [0, "𝒸"], [0, "𝒹"], [1, "𝒻"], [1, "𝒽"], [0, "𝒾"], [0, "𝒿"], [0, "𝓀"], [0, "𝓁"], [0, "𝓂"], [0, "𝓃"], [1, "𝓅"], [0, "𝓆"], [0, "𝓇"], [0, "𝓈"], [0, "𝓉"], [0, "𝓊"], [0, "𝓋"], [0, "𝓌"], [0, "𝓍"], [0, "𝓎"], [0, "𝓏"], [52, "𝔄"], [0, "𝔅"], [1, "𝔇"], [0, "𝔈"], [0, "𝔉"], [0, "𝔊"], [2, "𝔍"], [0, "𝔎"], [0, "𝔏"], [0, "𝔐"], [0, "𝔑"], [0, "𝔒"], [0, "𝔓"], [0, "𝔔"], [1, "𝔖"], [0, "𝔗"], [0, "𝔘"], [0, "𝔙"], [0, "𝔚"], [0, "𝔛"], [0, "𝔜"], [1, "𝔞"], [0, "𝔟"], [0, "𝔠"], [0, "𝔡"], [0, "𝔢"], [0, "𝔣"], [0, "𝔤"], [0, "𝔥"], [0, "𝔦"], [0, "𝔧"], [0, "𝔨"], [0, "𝔩"], [0, "𝔪"], [0, "𝔫"], [0, "𝔬"], [0, "𝔭"], [0, "𝔮"], [0, "𝔯"], [0, "𝔰"], [0, "𝔱"], [0, "𝔲"], [0, "𝔳"], [0, "𝔴"], [0, "𝔵"], [0, "𝔶"], [0, "𝔷"], [0, "𝔸"], [0, "𝔹"], [1, "𝔻"], [0, "𝔼"], [0, "𝔽"], [0, "𝔾"], [1, "𝕀"], [0, "𝕁"], [0, "𝕂"], [0, "𝕃"], [0, "𝕄"], [1, "𝕆"], [3, "𝕊"], [0, "𝕋"], [0, "𝕌"], [0, "𝕍"], [0, "𝕎"], [0, "𝕏"], [0, "𝕐"], [1, "𝕒"], [0, "𝕓"], [0, "𝕔"], [0, "𝕕"], [0, "𝕖"], [0, "𝕗"], [0, "𝕘"], [0, "𝕙"], [0, "𝕚"], [0, "𝕛"], [0, "𝕜"], [0, "𝕝"], [0, "𝕞"], [0, "𝕟"], [0, "𝕠"], [0, "𝕡"], [0, "𝕢"], [0, "𝕣"], [0, "𝕤"], [0, "𝕥"], [0, "𝕦"], [0, "𝕧"], [0, "𝕨"], [0, "𝕩"], [0, "𝕪"], [0, "𝕫"]])) }], [8906, "ff"], [0, "fi"], [0, "fl"], [0, "ffi"], [0, "ffl"]])));
|
|
94623
|
+
//# sourceMappingURL=encode-html.js.map
|
|
94624
|
+
;// ./node_modules/entities/lib/esm/encode.js
|
|
94625
|
+
|
|
94626
|
+
|
|
94627
|
+
const htmlReplacer = /[\t\n!-,./:-@[-`\f{-}$\x80-\uFFFF]/g;
|
|
94628
|
+
/**
|
|
94629
|
+
* Encodes all characters in the input using HTML entities. This includes
|
|
94630
|
+
* characters that are valid ASCII characters in HTML documents, such as `#`.
|
|
94631
|
+
*
|
|
94632
|
+
* To get a more compact output, consider using the `encodeNonAsciiHTML`
|
|
94633
|
+
* function, which will only encode characters that are not valid in HTML
|
|
94634
|
+
* documents, as well as non-ASCII characters.
|
|
94635
|
+
*
|
|
94636
|
+
* If a character has no equivalent entity, a numeric hexadecimal reference
|
|
94637
|
+
* (eg. `ü`) will be used.
|
|
94638
|
+
*/
|
|
94639
|
+
function encode_encodeHTML(data) {
|
|
94640
|
+
return encodeHTMLTrieRe(htmlReplacer, data);
|
|
94641
|
+
}
|
|
94642
|
+
/**
|
|
94643
|
+
* Encodes all non-ASCII characters, as well as characters not valid in HTML
|
|
94644
|
+
* documents using HTML entities. This function will not encode characters that
|
|
94645
|
+
* are valid in HTML documents, such as `#`.
|
|
94646
|
+
*
|
|
94647
|
+
* If a character has no equivalent entity, a numeric hexadecimal reference
|
|
94648
|
+
* (eg. `ü`) will be used.
|
|
94649
|
+
*/
|
|
94650
|
+
function encode_encodeNonAsciiHTML(data) {
|
|
94651
|
+
return encodeHTMLTrieRe(xmlReplacer, data);
|
|
94652
|
+
}
|
|
94653
|
+
function encodeHTMLTrieRe(regExp, str) {
|
|
94654
|
+
let ret = "";
|
|
94655
|
+
let lastIdx = 0;
|
|
94656
|
+
let match;
|
|
94657
|
+
while ((match = regExp.exec(str)) !== null) {
|
|
94658
|
+
const i = match.index;
|
|
94659
|
+
ret += str.substring(lastIdx, i);
|
|
94660
|
+
const char = str.charCodeAt(i);
|
|
94661
|
+
let next = htmlTrie.get(char);
|
|
94662
|
+
if (typeof next === "object") {
|
|
94663
|
+
// We are in a branch. Try to match the next char.
|
|
94664
|
+
if (i + 1 < str.length) {
|
|
94665
|
+
const nextChar = str.charCodeAt(i + 1);
|
|
94666
|
+
const value = typeof next.n === "number"
|
|
94667
|
+
? next.n === nextChar
|
|
94668
|
+
? next.o
|
|
94669
|
+
: undefined
|
|
94670
|
+
: next.n.get(nextChar);
|
|
94671
|
+
if (value !== undefined) {
|
|
94672
|
+
ret += value;
|
|
94673
|
+
lastIdx = regExp.lastIndex += 1;
|
|
94674
|
+
continue;
|
|
94675
|
+
}
|
|
94676
|
+
}
|
|
94677
|
+
next = next.v;
|
|
94678
|
+
}
|
|
94679
|
+
// We might have a tree node without a value; skip and use a numeric entity.
|
|
94680
|
+
if (next !== undefined) {
|
|
94681
|
+
ret += next;
|
|
94682
|
+
lastIdx = i + 1;
|
|
94683
|
+
}
|
|
94684
|
+
else {
|
|
94685
|
+
const cp = getCodePoint(str, i);
|
|
94686
|
+
ret += `&#x${cp.toString(16)};`;
|
|
94687
|
+
// Increase by 1 if we have a surrogate pair
|
|
94688
|
+
lastIdx = regExp.lastIndex += Number(cp !== char);
|
|
94689
|
+
}
|
|
94690
|
+
}
|
|
94691
|
+
return ret + str.substr(lastIdx);
|
|
94692
|
+
}
|
|
94693
|
+
//# sourceMappingURL=encode.js.map
|
|
94694
|
+
;// ./node_modules/entities/lib/esm/index.js
|
|
94695
|
+
|
|
94696
|
+
|
|
94697
|
+
|
|
94698
|
+
/** The level of entities to support. */
|
|
94699
|
+
var EntityLevel;
|
|
94700
|
+
(function (EntityLevel) {
|
|
94701
|
+
/** Support only XML entities. */
|
|
94702
|
+
EntityLevel[EntityLevel["XML"] = 0] = "XML";
|
|
94703
|
+
/** Support HTML entities, which are a superset of XML entities. */
|
|
94704
|
+
EntityLevel[EntityLevel["HTML"] = 1] = "HTML";
|
|
94705
|
+
})(EntityLevel || (EntityLevel = {}));
|
|
94706
|
+
var EncodingMode;
|
|
94707
|
+
(function (EncodingMode) {
|
|
94708
|
+
/**
|
|
94709
|
+
* The output is UTF-8 encoded. Only characters that need escaping within
|
|
94710
|
+
* XML will be escaped.
|
|
94711
|
+
*/
|
|
94712
|
+
EncodingMode[EncodingMode["UTF8"] = 0] = "UTF8";
|
|
94713
|
+
/**
|
|
94714
|
+
* The output consists only of ASCII characters. Characters that need
|
|
94715
|
+
* escaping within HTML, and characters that aren't ASCII characters will
|
|
94716
|
+
* be escaped.
|
|
94717
|
+
*/
|
|
94718
|
+
EncodingMode[EncodingMode["ASCII"] = 1] = "ASCII";
|
|
94719
|
+
/**
|
|
94720
|
+
* Encode all characters that have an equivalent entity, as well as all
|
|
94721
|
+
* characters that are not ASCII characters.
|
|
94722
|
+
*/
|
|
94723
|
+
EncodingMode[EncodingMode["Extensive"] = 2] = "Extensive";
|
|
94724
|
+
/**
|
|
94725
|
+
* Encode all characters that have to be escaped in HTML attributes,
|
|
94726
|
+
* following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
|
|
94727
|
+
*/
|
|
94728
|
+
EncodingMode[EncodingMode["Attribute"] = 3] = "Attribute";
|
|
94729
|
+
/**
|
|
94730
|
+
* Encode all characters that have to be escaped in HTML text,
|
|
94731
|
+
* following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
|
|
94732
|
+
*/
|
|
94733
|
+
EncodingMode[EncodingMode["Text"] = 4] = "Text";
|
|
94734
|
+
})(EncodingMode || (EncodingMode = {}));
|
|
94735
|
+
/**
|
|
94736
|
+
* Decodes a string with entities.
|
|
94737
|
+
*
|
|
94738
|
+
* @param data String to decode.
|
|
94739
|
+
* @param options Decoding options.
|
|
94740
|
+
*/
|
|
94741
|
+
function esm_decode(data, options = EntityLevel.XML) {
|
|
94742
|
+
const level = typeof options === "number" ? options : options.level;
|
|
94743
|
+
if (level === EntityLevel.HTML) {
|
|
94744
|
+
const mode = typeof options === "object" ? options.mode : undefined;
|
|
94745
|
+
return decodeHTML(data, mode);
|
|
94746
|
+
}
|
|
94747
|
+
return decodeXML(data);
|
|
94748
|
+
}
|
|
94749
|
+
/**
|
|
94750
|
+
* Decodes a string with entities. Does not allow missing trailing semicolons for entities.
|
|
94751
|
+
*
|
|
94752
|
+
* @param data String to decode.
|
|
94753
|
+
* @param options Decoding options.
|
|
94754
|
+
* @deprecated Use `decode` with the `mode` set to `Strict`.
|
|
94755
|
+
*/
|
|
94756
|
+
function decodeStrict(data, options = EntityLevel.XML) {
|
|
94757
|
+
var _a;
|
|
94758
|
+
const opts = typeof options === "number" ? { level: options } : options;
|
|
94759
|
+
(_a = opts.mode) !== null && _a !== void 0 ? _a : (opts.mode = DecodingMode.Strict);
|
|
94760
|
+
return esm_decode(data, opts);
|
|
94761
|
+
}
|
|
94762
|
+
/**
|
|
94763
|
+
* Encodes a string with entities.
|
|
94764
|
+
*
|
|
94765
|
+
* @param data String to encode.
|
|
94766
|
+
* @param options Encoding options.
|
|
94767
|
+
*/
|
|
94768
|
+
function esm_encode(data, options = EntityLevel.XML) {
|
|
94769
|
+
const opts = typeof options === "number" ? { level: options } : options;
|
|
94770
|
+
// Mode `UTF8` just escapes XML entities
|
|
94771
|
+
if (opts.mode === EncodingMode.UTF8)
|
|
94772
|
+
return escapeUTF8(data);
|
|
94773
|
+
if (opts.mode === EncodingMode.Attribute)
|
|
94774
|
+
return escapeAttribute(data);
|
|
94775
|
+
if (opts.mode === EncodingMode.Text)
|
|
94776
|
+
return escapeText(data);
|
|
94777
|
+
if (opts.level === EntityLevel.HTML) {
|
|
94778
|
+
if (opts.mode === EncodingMode.ASCII) {
|
|
94779
|
+
return encodeNonAsciiHTML(data);
|
|
94780
|
+
}
|
|
94781
|
+
return encodeHTML(data);
|
|
94782
|
+
}
|
|
94783
|
+
// ASCII and Extensive are equivalent
|
|
94784
|
+
return encodeXML(data);
|
|
94785
|
+
}
|
|
94786
|
+
|
|
94787
|
+
|
|
94788
|
+
|
|
94789
|
+
//# sourceMappingURL=index.js.map
|
|
94790
|
+
;// ./lib/micromark/loose-html-entities/syntax.ts
|
|
94791
|
+
|
|
94792
|
+
|
|
94793
|
+
|
|
94794
|
+
const MAX_ENTITY_LENGTH = 32;
|
|
94795
|
+
const looseHtmlEntityConstruct = {
|
|
94796
|
+
name: 'looseHtmlEntity',
|
|
94797
|
+
tokenize: tokenizeLooseHtmlEntity,
|
|
94798
|
+
};
|
|
94799
|
+
function resolveEntity(name) {
|
|
94800
|
+
const input = `&${name};`;
|
|
94801
|
+
const decoded = decodeHTMLStrict(input);
|
|
94802
|
+
return decoded !== input ? decoded : undefined;
|
|
94803
|
+
}
|
|
94804
|
+
function tokenizeLooseHtmlEntity(effects, ok, nok) {
|
|
94805
|
+
let length = 0;
|
|
94806
|
+
const start = (code) => {
|
|
94807
|
+
if (code !== codes.ampersand)
|
|
94808
|
+
return nok(code);
|
|
94809
|
+
effects.enter('looseHtmlEntity');
|
|
94810
|
+
effects.consume(code);
|
|
94811
|
+
return afterAmpersand;
|
|
94812
|
+
};
|
|
94813
|
+
const afterAmpersand = (code) => {
|
|
94814
|
+
if (code === codes.numberSign) {
|
|
94815
|
+
effects.consume(code);
|
|
94816
|
+
return afterHash;
|
|
94817
|
+
}
|
|
94818
|
+
return accumulateNamed(code);
|
|
94819
|
+
};
|
|
94820
|
+
const afterHash = (code) => {
|
|
94821
|
+
if (code === codes.lowercaseX || code === codes.uppercaseX) {
|
|
94822
|
+
effects.consume(code);
|
|
94823
|
+
return accumulateHex;
|
|
94824
|
+
}
|
|
94825
|
+
return accumulateDecimal(code);
|
|
94826
|
+
};
|
|
94827
|
+
const accumulateNamed = (code) => {
|
|
94828
|
+
if (asciiAlphanumeric(code) && length < MAX_ENTITY_LENGTH) {
|
|
94829
|
+
effects.consume(code);
|
|
94830
|
+
length += 1;
|
|
94831
|
+
return accumulateNamed;
|
|
94832
|
+
}
|
|
94833
|
+
if (length === 0)
|
|
94834
|
+
return nok(code);
|
|
94835
|
+
if (code === codes.semicolon)
|
|
94836
|
+
return nok(code);
|
|
94837
|
+
effects.exit('looseHtmlEntity');
|
|
94838
|
+
return ok(code);
|
|
94839
|
+
};
|
|
94840
|
+
const accumulateDecimal = (code) => {
|
|
94841
|
+
if (asciiDigit(code) && length < MAX_ENTITY_LENGTH) {
|
|
94842
|
+
effects.consume(code);
|
|
94843
|
+
length += 1;
|
|
94844
|
+
return accumulateDecimal;
|
|
94845
|
+
}
|
|
94846
|
+
if (length === 0)
|
|
94847
|
+
return nok(code);
|
|
94848
|
+
if (code === codes.semicolon)
|
|
94849
|
+
return nok(code);
|
|
94850
|
+
effects.exit('looseHtmlEntity');
|
|
94851
|
+
return ok(code);
|
|
94852
|
+
};
|
|
94853
|
+
const accumulateHex = (code) => {
|
|
94854
|
+
if (asciiHexDigit(code) && length < MAX_ENTITY_LENGTH) {
|
|
94855
|
+
effects.consume(code);
|
|
94856
|
+
length += 1;
|
|
94857
|
+
return accumulateHex;
|
|
94858
|
+
}
|
|
94859
|
+
if (length === 0)
|
|
94860
|
+
return nok(code);
|
|
94861
|
+
if (code === codes.semicolon)
|
|
94862
|
+
return nok(code);
|
|
94863
|
+
effects.exit('looseHtmlEntity');
|
|
94864
|
+
return ok(code);
|
|
94865
|
+
};
|
|
94866
|
+
return start;
|
|
94867
|
+
}
|
|
94868
|
+
function exitLooseHtmlEntity(token) {
|
|
94869
|
+
const raw = this.sliceSerialize(token);
|
|
94870
|
+
const entityChars = raw.slice(1);
|
|
94871
|
+
if (entityChars.startsWith('#')) {
|
|
94872
|
+
const decoded = resolveEntity(entityChars);
|
|
94873
|
+
if (decoded) {
|
|
94874
|
+
this.enter({ type: 'text', value: decoded }, token);
|
|
94875
|
+
this.exit(token);
|
|
94876
|
+
return;
|
|
94877
|
+
}
|
|
94878
|
+
}
|
|
94879
|
+
else {
|
|
94880
|
+
for (let len = entityChars.length; len >= 2; len -= 1) {
|
|
94881
|
+
const candidate = entityChars.slice(0, len);
|
|
94882
|
+
const decoded = resolveEntity(candidate);
|
|
94883
|
+
if (decoded) {
|
|
94884
|
+
const remainder = entityChars.slice(len);
|
|
94885
|
+
this.enter({ type: 'text', value: decoded + remainder }, token);
|
|
94886
|
+
this.exit(token);
|
|
94887
|
+
return;
|
|
94888
|
+
}
|
|
94889
|
+
}
|
|
94890
|
+
}
|
|
94891
|
+
this.enter({ type: 'text', value: raw }, token);
|
|
94892
|
+
this.exit(token);
|
|
94893
|
+
}
|
|
94894
|
+
function looseHtmlEntity() {
|
|
94895
|
+
return {
|
|
94896
|
+
text: { [codes.ampersand]: looseHtmlEntityConstruct },
|
|
94897
|
+
};
|
|
94898
|
+
}
|
|
94899
|
+
function looseHtmlEntityFromMarkdown() {
|
|
94900
|
+
return {
|
|
94901
|
+
exit: {
|
|
94902
|
+
looseHtmlEntity: exitLooseHtmlEntity,
|
|
94903
|
+
},
|
|
94904
|
+
};
|
|
94905
|
+
}
|
|
94906
|
+
|
|
94907
|
+
;// ./lib/micromark/loose-html-entities/index.ts
|
|
94908
|
+
/**
|
|
94909
|
+
* Micromark extension for HTML entities without semicolons.
|
|
94910
|
+
*
|
|
94911
|
+
* Handles named entities (e.g. ` `, `&`, `©`), decimal numeric
|
|
94912
|
+
* references (e.g. ` `, `©`), and hex numeric references (e.g. ` `,
|
|
94913
|
+
* ` `). Entities that already include the semicolon are left for the
|
|
94914
|
+
* standard parser to handle.
|
|
94915
|
+
*/
|
|
94916
|
+
|
|
94917
|
+
|
|
94469
94918
|
;// ./processor/transform/mdxish/normalize-malformed-md-syntax.ts
|
|
94470
94919
|
|
|
94471
94920
|
// Marker patterns for multi-node emphasis detection
|
|
@@ -94882,6 +95331,11 @@ const EMPTY_CODE_PLACEHOLDER = {
|
|
|
94882
95331
|
|
|
94883
95332
|
|
|
94884
95333
|
|
|
95334
|
+
|
|
95335
|
+
|
|
95336
|
+
|
|
95337
|
+
|
|
95338
|
+
|
|
94885
95339
|
|
|
94886
95340
|
|
|
94887
95341
|
/**
|
|
@@ -94923,18 +95377,23 @@ const preprocessBody = (text) => {
|
|
|
94923
95377
|
};
|
|
94924
95378
|
/** Markdown parser */
|
|
94925
95379
|
const contentParser = unified()
|
|
94926
|
-
.data('micromarkExtensions', [legacyVariable()])
|
|
94927
|
-
.data('fromMarkdownExtensions', [legacyVariableFromMarkdown()])
|
|
95380
|
+
.data('micromarkExtensions', [legacyVariable(), looseHtmlEntity()])
|
|
95381
|
+
.data('fromMarkdownExtensions', [legacyVariableFromMarkdown(), emptyTaskListItemFromMarkdown(), looseHtmlEntityFromMarkdown()])
|
|
94928
95382
|
.use(remarkParse)
|
|
94929
95383
|
.use(remarkBreaks)
|
|
94930
95384
|
.use(remarkGfm)
|
|
94931
95385
|
.use(normalize_malformed_md_syntax);
|
|
94932
|
-
/**
|
|
95386
|
+
/**
|
|
95387
|
+
* Markdown to HTML processor (mdast → hast → HTML string).
|
|
95388
|
+
*
|
|
95389
|
+
* Uses only strikethrough from GFM instead of the full remarkGfm bundle
|
|
95390
|
+
* since we've had a case where it was causing a stack overflow when parsing HTML blocks containing URLs
|
|
95391
|
+
* such as `<ul><li>https://a</li>\n</ul>` due to subtokenizing recursion for URLs
|
|
95392
|
+
*/
|
|
94933
95393
|
const markdownToHtml = unified()
|
|
94934
|
-
.data('micromarkExtensions', [legacyVariable()])
|
|
94935
|
-
.data('fromMarkdownExtensions', [legacyVariableFromMarkdown()])
|
|
95394
|
+
.data('micromarkExtensions', [gfmStrikethrough(), legacyVariable(), looseHtmlEntity()])
|
|
95395
|
+
.data('fromMarkdownExtensions', [gfmStrikethroughFromMarkdown(), legacyVariableFromMarkdown(), emptyTaskListItemFromMarkdown(), looseHtmlEntityFromMarkdown()])
|
|
94936
95396
|
.use(remarkParse)
|
|
94937
|
-
.use(remarkGfm)
|
|
94938
95397
|
.use(normalize_malformed_md_syntax)
|
|
94939
95398
|
.use(remarkRehype)
|
|
94940
95399
|
.use(rehypeStringify);
|
|
@@ -94946,7 +95405,12 @@ const htmlStringifier = unified().use(rehypeStringify);
|
|
|
94946
95405
|
const processBackslashEscapes = (text) => text.replace(/\\<([^>]*)>/g, '<$1>').replace(/\\([<>|])/g, (_, c) => (c === '<' ? '<' : c === '>' ? '>' : c));
|
|
94947
95406
|
/** Block-level HTML tags that trigger CommonMark type 6 HTML blocks (condition 6). */
|
|
94948
95407
|
const BLOCK_LEVEL_TAGS = new Set(htmlBlockNames);
|
|
94949
|
-
const escapeInvalidTags = (str) => str.replace(HTML_TAG_RE, (match, tag, rest) => {
|
|
95408
|
+
const escapeInvalidTags = (str) => str.replace(HTML_TAG_RE, (match, tag, rest, offset, input) => {
|
|
95409
|
+
// Don't escape legacy variable syntax like <<var>> since we want to parse it
|
|
95410
|
+
// with the tokenizer and not want the <var> to get parsed as an HTML tag
|
|
95411
|
+
const isLegacyVariable = offset > 0 && input[offset - 1] === '<' && offset < input.length - 1 && input[offset + match.length] === '>';
|
|
95412
|
+
if (isLegacyVariable)
|
|
95413
|
+
return match;
|
|
94950
95414
|
const tagName = tag.replace(/^\//, '');
|
|
94951
95415
|
if (STANDARD_HTML_TAGS.has(tagName.toLowerCase()))
|
|
94952
95416
|
return match;
|
|
@@ -94966,9 +95430,20 @@ const escapeInvalidTags = (str) => str.replace(HTML_TAG_RE, (match, tag, rest) =
|
|
|
94966
95430
|
* (it treats unknown tags as void elements, stripping their children).
|
|
94967
95431
|
*/
|
|
94968
95432
|
const processMarkdownInHtmlString = (html) => {
|
|
95433
|
+
let htmlContent = html;
|
|
95434
|
+
// Replace all occurrences of legacy variable syntax like <<name>> with placeholders so the inner
|
|
95435
|
+
// <name> doesn't get parsed as an HTML tag and the tokenizer can parse it
|
|
95436
|
+
const legacyVars = {};
|
|
95437
|
+
let legacyCounter = 0;
|
|
95438
|
+
htmlContent = htmlContent.replace(new RegExp(variable_.VARIABLE_REGEXP, 'g'), match => {
|
|
95439
|
+
const id = `RDMX_LEGACY_VAR_${(legacyCounter += 1)}_TOKEN`;
|
|
95440
|
+
legacyVars[id] = match;
|
|
95441
|
+
return id;
|
|
95442
|
+
});
|
|
94969
95443
|
const placeholders = [];
|
|
94970
95444
|
let counter = 0;
|
|
94971
|
-
|
|
95445
|
+
// Escape invalid html tags so they don't get parsed as HTML tags
|
|
95446
|
+
const safened = escapeInvalidTags(htmlContent).replace(HTML_TAG_RE, match => {
|
|
94972
95447
|
if (!/^<\/?[A-Z]/.test(match))
|
|
94973
95448
|
return match;
|
|
94974
95449
|
const id = `<!--PC${(counter += 1)}-->`;
|
|
@@ -94979,7 +95454,10 @@ const processMarkdownInHtmlString = (html) => {
|
|
|
94979
95454
|
const textToHast = (text) => {
|
|
94980
95455
|
if (!text.trim())
|
|
94981
95456
|
return [{ type: 'text', value: text }];
|
|
94982
|
-
|
|
95457
|
+
// Restore legacy variables
|
|
95458
|
+
const restoredText = Object.entries(legacyVars).reduce((res, [id, original]) => res.replace(id, original), text);
|
|
95459
|
+
// Cell children might have html that needs to be parsed as markdown
|
|
95460
|
+
const parsed = markdownToHtml.runSync(markdownToHtml.parse(escapeInvalidTags(restoredText)));
|
|
94983
95461
|
const nodes = parsed.children.flatMap(n => n.type === 'element' && n.tagName === 'p' ? n.children : [n]);
|
|
94984
95462
|
const leading = text.match(/^\s+/)?.[0];
|
|
94985
95463
|
const trailing = text.match(/\s+$/)?.[0];
|
|
@@ -96272,9 +96750,6 @@ function terminateHtmlFlowBlocks(content) {
|
|
|
96272
96750
|
return restoreCodeBlocks(result.join('\n'), protectedCode);
|
|
96273
96751
|
}
|
|
96274
96752
|
|
|
96275
|
-
// EXTERNAL MODULE: external "@readme/variable"
|
|
96276
|
-
var variable_ = __webpack_require__(8167);
|
|
96277
|
-
var variable_default = /*#__PURE__*/__webpack_require__.n(variable_);
|
|
96278
96753
|
;// ./processor/transform/mdxish/variables-code.ts
|
|
96279
96754
|
|
|
96280
96755
|
|
|
@@ -96351,13 +96826,38 @@ const variablesCodeResolver = ({ variables } = {}) => tree => {
|
|
|
96351
96826
|
* Captures the field name in group 1 (dot notation) or group 2 (bracket notation)
|
|
96352
96827
|
*/
|
|
96353
96828
|
const USER_VAR_REGEX = /\{user\.(\w+)\}|\{user\[['"](\w+)['"]\]\}/g;
|
|
96829
|
+
function makeVariableNode(varName, rawValue) {
|
|
96830
|
+
return {
|
|
96831
|
+
type: NodeTypes.variable,
|
|
96832
|
+
data: {
|
|
96833
|
+
hName: 'Variable',
|
|
96834
|
+
hProperties: { name: varName },
|
|
96835
|
+
},
|
|
96836
|
+
value: rawValue,
|
|
96837
|
+
};
|
|
96838
|
+
}
|
|
96354
96839
|
/**
|
|
96355
|
-
* A remark plugin that parses {user.<field>} patterns from text nodes
|
|
96356
|
-
*
|
|
96840
|
+
* A remark plugin that parses {user.<field>} patterns from text nodes and
|
|
96841
|
+
* mdxTextExpression nodes, creating Variable nodes for runtime resolution.
|
|
96842
|
+
*
|
|
96843
|
+
* Handles both:
|
|
96844
|
+
* - `text` nodes: when safeMode is true or after expression evaluation
|
|
96845
|
+
* - `mdxTextExpression` nodes: when mdxExpression has parsed {user.*} before evaluation
|
|
96357
96846
|
*
|
|
96358
96847
|
* Supports any user field: name, email, email_verified, exp, iat, etc.
|
|
96359
96848
|
*/
|
|
96360
96849
|
const variablesTextTransformer = () => tree => {
|
|
96850
|
+
// Handle mdxTextExpression nodes (e.g. {user.name} parsed by mdxExpression)
|
|
96851
|
+
visit(tree, 'mdxTextExpression', (node, index, parent) => {
|
|
96852
|
+
if (index === undefined || !parent)
|
|
96853
|
+
return;
|
|
96854
|
+
const wrapped = `{${(node.value ?? '').trim()}}`; // Wrap the expression value in {} to match the USER_VAR_REGEX pattern
|
|
96855
|
+
const matches = [...wrapped.matchAll(USER_VAR_REGEX)];
|
|
96856
|
+
if (matches.length !== 1)
|
|
96857
|
+
return;
|
|
96858
|
+
const varName = matches[0][1] || matches[0][2];
|
|
96859
|
+
parent.children.splice(index, 1, makeVariableNode(varName, wrapped));
|
|
96860
|
+
});
|
|
96361
96861
|
visit(tree, 'text', (node, index, parent) => {
|
|
96362
96862
|
if (index === undefined || !parent)
|
|
96363
96863
|
return;
|
|
@@ -96382,15 +96882,7 @@ const variablesTextTransformer = () => tree => {
|
|
|
96382
96882
|
}
|
|
96383
96883
|
// Extract variable name from either capture group (dot or bracket notation)
|
|
96384
96884
|
const varName = match[1] || match[2];
|
|
96385
|
-
|
|
96386
|
-
parts.push({
|
|
96387
|
-
type: NodeTypes.variable,
|
|
96388
|
-
data: {
|
|
96389
|
-
hName: 'Variable',
|
|
96390
|
-
hProperties: { name: varName },
|
|
96391
|
-
},
|
|
96392
|
-
value: match[0],
|
|
96393
|
-
});
|
|
96885
|
+
parts.push(makeVariableNode(varName, match[0]));
|
|
96394
96886
|
lastIndex = matchIndex + match[0].length;
|
|
96395
96887
|
});
|
|
96396
96888
|
// Add remaining text after last match
|
|
@@ -97483,6 +97975,10 @@ function loadComponents() {
|
|
|
97483
97975
|
|
|
97484
97976
|
|
|
97485
97977
|
|
|
97978
|
+
|
|
97979
|
+
|
|
97980
|
+
|
|
97981
|
+
|
|
97486
97982
|
|
|
97487
97983
|
|
|
97488
97984
|
|
|
@@ -97531,10 +98027,12 @@ function mdxishAstProcessor(mdContent, opts = {}) {
|
|
|
97531
98027
|
text: mdxExprExt.text,
|
|
97532
98028
|
};
|
|
97533
98029
|
const processor = unified()
|
|
97534
|
-
.data('micromarkExtensions', safeMode
|
|
98030
|
+
.data('micromarkExtensions', safeMode
|
|
98031
|
+
? [magicBlock(), legacyVariable(), looseHtmlEntity()]
|
|
98032
|
+
: [magicBlock(), mdxExprTextOnly, legacyVariable(), looseHtmlEntity()])
|
|
97535
98033
|
.data('fromMarkdownExtensions', safeMode
|
|
97536
|
-
? [magicBlockFromMarkdown(), legacyVariableFromMarkdown()]
|
|
97537
|
-
: [magicBlockFromMarkdown(), mdxExpressionFromMarkdown(), legacyVariableFromMarkdown()])
|
|
98034
|
+
? [magicBlockFromMarkdown(), legacyVariableFromMarkdown(), emptyTaskListItemFromMarkdown(), looseHtmlEntityFromMarkdown()]
|
|
98035
|
+
: [magicBlockFromMarkdown(), mdxExpressionFromMarkdown(), legacyVariableFromMarkdown(), emptyTaskListItemFromMarkdown(), looseHtmlEntityFromMarkdown()])
|
|
97538
98036
|
.use(remarkParse)
|
|
97539
98037
|
.use(remarkFrontmatter)
|
|
97540
98038
|
.use(normalize_malformed_md_syntax)
|
|
@@ -97546,8 +98044,7 @@ function mdxishAstProcessor(mdContent, opts = {}) {
|
|
|
97546
98044
|
.use(mdxish_tables)
|
|
97547
98045
|
.use(mdxish_html_blocks)
|
|
97548
98046
|
.use(newEditorTypes ? mdxish_jsx_to_mdast : undefined) // Convert JSX elements to MDAST types
|
|
97549
|
-
.use(
|
|
97550
|
-
.use(variables_text) // Parse {user.*} patterns from text
|
|
98047
|
+
.use(variables_text) // Parse {user.*} patterns from text nodes
|
|
97551
98048
|
.use(useTailwind ? transform_tailwind : undefined, { components: tempComponentsMap })
|
|
97552
98049
|
.use(remarkGfm);
|
|
97553
98050
|
return {
|
|
@@ -97581,19 +98078,25 @@ function mdxishMdastToMd(mdast) {
|
|
|
97581
98078
|
* @see {@link https://github.com/readmeio/rmdx/blob/main/docs/mdxish-flow.md}
|
|
97582
98079
|
*/
|
|
97583
98080
|
function mdxish(mdContent, opts = {}) {
|
|
97584
|
-
const { components: userComponents = {}, variables } = opts;
|
|
98081
|
+
const { components: userComponents = {}, jsxContext = {}, safeMode = false, variables } = opts;
|
|
97585
98082
|
const components = {
|
|
97586
98083
|
...loadComponents(),
|
|
97587
98084
|
...userComponents,
|
|
97588
98085
|
};
|
|
97589
|
-
|
|
98086
|
+
// Remove JSX comments before processing (protect code blocks first)
|
|
98087
|
+
const { protectedCode, protectedContent } = protectCodeBlocks(mdContent);
|
|
98088
|
+
const withoutComments = removeJSXComments(protectedContent);
|
|
98089
|
+
const contentWithoutComments = restoreCodeBlocks(withoutComments, protectedCode);
|
|
98090
|
+
const { processor, parserReadyContent } = mdxishAstProcessor(contentWithoutComments, opts);
|
|
97590
98091
|
processor
|
|
98092
|
+
.use(safeMode ? undefined : evaluate_expressions, { context: jsxContext }) // Evaluate MDX expressions using jsxContext
|
|
97591
98093
|
.use(remarkBreaks)
|
|
97592
98094
|
.use(variables_code, { variables }) // Resolve <<...>> and {user.*} inside code and inline code nodes
|
|
97593
98095
|
.use(remarkRehype, { allowDangerousHtml: true, handlers: mdxComponentHandlers })
|
|
97594
98096
|
.use(preserveBooleanProperties) // RehypeRaw converts boolean properties to empty strings
|
|
97595
98097
|
.use(rehypeRaw, { passThrough: ['html-block'] })
|
|
97596
98098
|
.use(restoreBooleanProperties)
|
|
98099
|
+
.use(rehypeFlattenTableCellParagraphs) // Remove <p> wrappers inside table cells to prevent margin issues
|
|
97597
98100
|
.use(mdxish_mermaid) // Add mermaid-render className to pre wrappers
|
|
97598
98101
|
.use(heading_slugs)
|
|
97599
98102
|
.use(rehypeMdxishComponents, {
|
|
@@ -98146,6 +98649,7 @@ function restoreMagicBlocks(replaced, blocks) {
|
|
|
98146
98649
|
|
|
98147
98650
|
|
|
98148
98651
|
|
|
98652
|
+
|
|
98149
98653
|
/**
|
|
98150
98654
|
* Removes Markdown and MDX comments.
|
|
98151
98655
|
*/
|
|
@@ -98166,6 +98670,7 @@ async function stripComments(doc, { mdx, mdxish } = {}) {
|
|
|
98166
98670
|
.use(normalize_malformed_md_syntax)
|
|
98167
98671
|
.use(mdx ? remarkMdx : undefined)
|
|
98168
98672
|
.use(stripCommentsTransformer)
|
|
98673
|
+
.use(remarkGfm)
|
|
98169
98674
|
.use(remarkStringify, mdx
|
|
98170
98675
|
? {}
|
|
98171
98676
|
: {
|