@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.node.js
CHANGED
|
@@ -48515,21 +48515,8 @@ function syntax_tokenizeIndent(effects, ok, nok) {
|
|
|
48515
48515
|
|
|
48516
48516
|
;// ./node_modules/micromark-extension-gfm-strikethrough/lib/syntax.js
|
|
48517
48517
|
/**
|
|
48518
|
-
* @
|
|
48519
|
-
* @
|
|
48520
|
-
* @typedef {import('micromark-util-types').Resolver} Resolver
|
|
48521
|
-
* @typedef {import('micromark-util-types').State} State
|
|
48522
|
-
* @typedef {import('micromark-util-types').Token} Token
|
|
48523
|
-
* @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext
|
|
48524
|
-
* @typedef {import('micromark-util-types').Tokenizer} Tokenizer
|
|
48525
|
-
*
|
|
48526
|
-
* @typedef Options
|
|
48527
|
-
* Configuration (optional).
|
|
48528
|
-
* @property {boolean | null | undefined} [singleTilde=true]
|
|
48529
|
-
* Whether to support strikethrough with a single tilde (default: `true`).
|
|
48530
|
-
*
|
|
48531
|
-
* Single tildes work on github.com, but are technically prohibited by the
|
|
48532
|
-
* GFM spec.
|
|
48518
|
+
* @import {Options} from 'micromark-extension-gfm-strikethrough'
|
|
48519
|
+
* @import {Event, Extension, Resolver, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'
|
|
48533
48520
|
*/
|
|
48534
48521
|
|
|
48535
48522
|
|
|
@@ -48545,14 +48532,15 @@ function syntax_tokenizeIndent(effects, ok, nok) {
|
|
|
48545
48532
|
* enable GFM strikethrough syntax.
|
|
48546
48533
|
*/
|
|
48547
48534
|
function gfmStrikethrough(options) {
|
|
48548
|
-
const options_ = options || {}
|
|
48549
|
-
let single = options_.singleTilde
|
|
48535
|
+
const options_ = options || {};
|
|
48536
|
+
let single = options_.singleTilde;
|
|
48550
48537
|
const tokenizer = {
|
|
48538
|
+
name: 'strikethrough',
|
|
48551
48539
|
tokenize: tokenizeStrikethrough,
|
|
48552
48540
|
resolveAll: resolveAllStrikethrough
|
|
48553
|
-
}
|
|
48541
|
+
};
|
|
48554
48542
|
if (single === null || single === undefined) {
|
|
48555
|
-
single = true
|
|
48543
|
+
single = true;
|
|
48556
48544
|
}
|
|
48557
48545
|
return {
|
|
48558
48546
|
text: {
|
|
@@ -48564,7 +48552,7 @@ function gfmStrikethrough(options) {
|
|
|
48564
48552
|
attentionMarkers: {
|
|
48565
48553
|
null: [126]
|
|
48566
48554
|
}
|
|
48567
|
-
}
|
|
48555
|
+
};
|
|
48568
48556
|
|
|
48569
48557
|
/**
|
|
48570
48558
|
* Take events and resolve strikethrough.
|
|
@@ -48572,86 +48560,62 @@ function gfmStrikethrough(options) {
|
|
|
48572
48560
|
* @type {Resolver}
|
|
48573
48561
|
*/
|
|
48574
48562
|
function resolveAllStrikethrough(events, context) {
|
|
48575
|
-
let index = -1
|
|
48563
|
+
let index = -1;
|
|
48576
48564
|
|
|
48577
48565
|
// Walk through all events.
|
|
48578
48566
|
while (++index < events.length) {
|
|
48579
48567
|
// Find a token that can close.
|
|
48580
|
-
if (
|
|
48581
|
-
|
|
48582
|
-
events[index][1].type === 'strikethroughSequenceTemporary' &&
|
|
48583
|
-
events[index][1]._close
|
|
48584
|
-
) {
|
|
48585
|
-
let open = index
|
|
48568
|
+
if (events[index][0] === 'enter' && events[index][1].type === 'strikethroughSequenceTemporary' && events[index][1]._close) {
|
|
48569
|
+
let open = index;
|
|
48586
48570
|
|
|
48587
48571
|
// Now walk back to find an opener.
|
|
48588
48572
|
while (open--) {
|
|
48589
48573
|
// Find a token that can open the closer.
|
|
48590
|
-
if (
|
|
48591
|
-
|
|
48592
|
-
|
|
48593
|
-
events[
|
|
48594
|
-
|
|
48595
|
-
events[index][1].end.offset - events[index][1].start.offset ===
|
|
48596
|
-
events[open][1].end.offset - events[open][1].start.offset
|
|
48597
|
-
) {
|
|
48598
|
-
events[index][1].type = 'strikethroughSequence'
|
|
48599
|
-
events[open][1].type = 'strikethroughSequence'
|
|
48574
|
+
if (events[open][0] === 'exit' && events[open][1].type === 'strikethroughSequenceTemporary' && events[open][1]._open &&
|
|
48575
|
+
// If the sizes are the same:
|
|
48576
|
+
events[index][1].end.offset - events[index][1].start.offset === events[open][1].end.offset - events[open][1].start.offset) {
|
|
48577
|
+
events[index][1].type = 'strikethroughSequence';
|
|
48578
|
+
events[open][1].type = 'strikethroughSequence';
|
|
48600
48579
|
|
|
48601
48580
|
/** @type {Token} */
|
|
48602
48581
|
const strikethrough = {
|
|
48603
48582
|
type: 'strikethrough',
|
|
48604
48583
|
start: Object.assign({}, events[open][1].start),
|
|
48605
48584
|
end: Object.assign({}, events[index][1].end)
|
|
48606
|
-
}
|
|
48585
|
+
};
|
|
48607
48586
|
|
|
48608
48587
|
/** @type {Token} */
|
|
48609
48588
|
const text = {
|
|
48610
48589
|
type: 'strikethroughText',
|
|
48611
48590
|
start: Object.assign({}, events[open][1].end),
|
|
48612
48591
|
end: Object.assign({}, events[index][1].start)
|
|
48613
|
-
}
|
|
48592
|
+
};
|
|
48614
48593
|
|
|
48615
48594
|
// Opening.
|
|
48616
48595
|
/** @type {Array<Event>} */
|
|
48617
|
-
const nextEvents = [
|
|
48618
|
-
|
|
48619
|
-
['enter', events[open][1], context],
|
|
48620
|
-
['exit', events[open][1], context],
|
|
48621
|
-
['enter', text, context]
|
|
48622
|
-
]
|
|
48623
|
-
const insideSpan = context.parser.constructs.insideSpan.null
|
|
48596
|
+
const nextEvents = [['enter', strikethrough, context], ['enter', events[open][1], context], ['exit', events[open][1], context], ['enter', text, context]];
|
|
48597
|
+
const insideSpan = context.parser.constructs.insideSpan.null;
|
|
48624
48598
|
if (insideSpan) {
|
|
48625
48599
|
// Between.
|
|
48626
|
-
splice(
|
|
48627
|
-
nextEvents,
|
|
48628
|
-
nextEvents.length,
|
|
48629
|
-
0,
|
|
48630
|
-
resolveAll(insideSpan, events.slice(open + 1, index), context)
|
|
48631
|
-
)
|
|
48600
|
+
splice(nextEvents, nextEvents.length, 0, resolveAll(insideSpan, events.slice(open + 1, index), context));
|
|
48632
48601
|
}
|
|
48633
48602
|
|
|
48634
48603
|
// Closing.
|
|
48635
|
-
splice(nextEvents, nextEvents.length, 0, [
|
|
48636
|
-
|
|
48637
|
-
|
|
48638
|
-
|
|
48639
|
-
['exit', strikethrough, context]
|
|
48640
|
-
])
|
|
48641
|
-
splice(events, open - 1, index - open + 3, nextEvents)
|
|
48642
|
-
index = open + nextEvents.length - 2
|
|
48643
|
-
break
|
|
48604
|
+
splice(nextEvents, nextEvents.length, 0, [['exit', text, context], ['enter', events[index][1], context], ['exit', events[index][1], context], ['exit', strikethrough, context]]);
|
|
48605
|
+
splice(events, open - 1, index - open + 3, nextEvents);
|
|
48606
|
+
index = open + nextEvents.length - 2;
|
|
48607
|
+
break;
|
|
48644
48608
|
}
|
|
48645
48609
|
}
|
|
48646
48610
|
}
|
|
48647
48611
|
}
|
|
48648
|
-
index = -1
|
|
48612
|
+
index = -1;
|
|
48649
48613
|
while (++index < events.length) {
|
|
48650
48614
|
if (events[index][1].type === 'strikethroughSequenceTemporary') {
|
|
48651
|
-
events[index][1].type =
|
|
48615
|
+
events[index][1].type = "data";
|
|
48652
48616
|
}
|
|
48653
48617
|
}
|
|
48654
|
-
return events
|
|
48618
|
+
return events;
|
|
48655
48619
|
}
|
|
48656
48620
|
|
|
48657
48621
|
/**
|
|
@@ -48659,43 +48623,39 @@ function gfmStrikethrough(options) {
|
|
|
48659
48623
|
* @type {Tokenizer}
|
|
48660
48624
|
*/
|
|
48661
48625
|
function tokenizeStrikethrough(effects, ok, nok) {
|
|
48662
|
-
const previous = this.previous
|
|
48663
|
-
const events = this.events
|
|
48664
|
-
let size = 0
|
|
48665
|
-
return start
|
|
48626
|
+
const previous = this.previous;
|
|
48627
|
+
const events = this.events;
|
|
48628
|
+
let size = 0;
|
|
48629
|
+
return start;
|
|
48666
48630
|
|
|
48667
48631
|
/** @type {State} */
|
|
48668
48632
|
function start(code) {
|
|
48669
|
-
if (
|
|
48670
|
-
|
|
48671
|
-
events[events.length - 1][1].type !== 'characterEscape'
|
|
48672
|
-
) {
|
|
48673
|
-
return nok(code)
|
|
48633
|
+
if (previous === 126 && events[events.length - 1][1].type !== "characterEscape") {
|
|
48634
|
+
return nok(code);
|
|
48674
48635
|
}
|
|
48675
|
-
effects.enter('strikethroughSequenceTemporary')
|
|
48676
|
-
return more(code)
|
|
48636
|
+
effects.enter('strikethroughSequenceTemporary');
|
|
48637
|
+
return more(code);
|
|
48677
48638
|
}
|
|
48678
48639
|
|
|
48679
48640
|
/** @type {State} */
|
|
48680
48641
|
function more(code) {
|
|
48681
|
-
const before = classifyCharacter(previous)
|
|
48642
|
+
const before = classifyCharacter(previous);
|
|
48682
48643
|
if (code === 126) {
|
|
48683
48644
|
// If this is the third marker, exit.
|
|
48684
|
-
if (size > 1) return nok(code)
|
|
48685
|
-
effects.consume(code)
|
|
48686
|
-
size
|
|
48687
|
-
return more
|
|
48688
|
-
}
|
|
48689
|
-
if (size < 2 && !single) return nok(code)
|
|
48690
|
-
const token = effects.exit('strikethroughSequenceTemporary')
|
|
48691
|
-
const after = classifyCharacter(code)
|
|
48692
|
-
token._open = !after ||
|
|
48693
|
-
token._close = !before ||
|
|
48694
|
-
return ok(code)
|
|
48645
|
+
if (size > 1) return nok(code);
|
|
48646
|
+
effects.consume(code);
|
|
48647
|
+
size++;
|
|
48648
|
+
return more;
|
|
48649
|
+
}
|
|
48650
|
+
if (size < 2 && !single) return nok(code);
|
|
48651
|
+
const token = effects.exit('strikethroughSequenceTemporary');
|
|
48652
|
+
const after = classifyCharacter(code);
|
|
48653
|
+
token._open = !after || after === 2 && Boolean(before);
|
|
48654
|
+
token._close = !before || before === 2 && Boolean(after);
|
|
48655
|
+
return ok(code);
|
|
48695
48656
|
}
|
|
48696
48657
|
}
|
|
48697
48658
|
}
|
|
48698
|
-
|
|
48699
48659
|
;// ./node_modules/micromark-extension-gfm-table/lib/edit-map.js
|
|
48700
48660
|
/**
|
|
48701
48661
|
* @typedef {import('micromark-util-types').Event} Event
|
|
@@ -64231,7 +64191,7 @@ var EntityDecoderState;
|
|
|
64231
64191
|
EntityDecoderState[EntityDecoderState["NumericHex"] = 3] = "NumericHex";
|
|
64232
64192
|
EntityDecoderState[EntityDecoderState["NamedEntity"] = 4] = "NamedEntity";
|
|
64233
64193
|
})(EntityDecoderState || (EntityDecoderState = {}));
|
|
64234
|
-
var
|
|
64194
|
+
var decode_DecodingMode;
|
|
64235
64195
|
(function (DecodingMode) {
|
|
64236
64196
|
/** Entities in text nodes that can end with any character. */
|
|
64237
64197
|
DecodingMode[DecodingMode["Legacy"] = 0] = "Legacy";
|
|
@@ -64239,7 +64199,7 @@ var DecodingMode;
|
|
|
64239
64199
|
DecodingMode[DecodingMode["Strict"] = 1] = "Strict";
|
|
64240
64200
|
/** Entities in attributes have limitations on ending characters. */
|
|
64241
64201
|
DecodingMode[DecodingMode["Attribute"] = 2] = "Attribute";
|
|
64242
|
-
})(
|
|
64202
|
+
})(decode_DecodingMode || (decode_DecodingMode = {}));
|
|
64243
64203
|
/**
|
|
64244
64204
|
* Token decoder with support of writing partial entities.
|
|
64245
64205
|
*/
|
|
@@ -64278,7 +64238,7 @@ class EntityDecoder {
|
|
|
64278
64238
|
/** The number of characters that were consumed in excess. */
|
|
64279
64239
|
this.excess = 1;
|
|
64280
64240
|
/** The mode in which the decoder is operating. */
|
|
64281
|
-
this.decodeMode =
|
|
64241
|
+
this.decodeMode = decode_DecodingMode.Strict;
|
|
64282
64242
|
}
|
|
64283
64243
|
/** Resets the instance to make it reusable. */
|
|
64284
64244
|
startEntity(decodeMode) {
|
|
@@ -64427,7 +64387,7 @@ class EntityDecoder {
|
|
|
64427
64387
|
if (lastCp === CharCodes.SEMI) {
|
|
64428
64388
|
this.consumed += 1;
|
|
64429
64389
|
}
|
|
64430
|
-
else if (this.decodeMode ===
|
|
64390
|
+
else if (this.decodeMode === decode_DecodingMode.Strict) {
|
|
64431
64391
|
return 0;
|
|
64432
64392
|
}
|
|
64433
64393
|
this.emitCodePoint(replaceCodePoint(this.result), this.consumed);
|
|
@@ -64459,7 +64419,7 @@ class EntityDecoder {
|
|
|
64459
64419
|
if (this.treeIndex < 0) {
|
|
64460
64420
|
return this.result === 0 ||
|
|
64461
64421
|
// If we are parsing an attribute
|
|
64462
|
-
(this.decodeMode ===
|
|
64422
|
+
(this.decodeMode === decode_DecodingMode.Attribute &&
|
|
64463
64423
|
// We shouldn't have consumed any characters after the entity,
|
|
64464
64424
|
(valueLength === 0 ||
|
|
64465
64425
|
// And there should be no invalid characters.
|
|
@@ -64476,7 +64436,7 @@ class EntityDecoder {
|
|
|
64476
64436
|
return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
|
|
64477
64437
|
}
|
|
64478
64438
|
// If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.
|
|
64479
|
-
if (this.decodeMode !==
|
|
64439
|
+
if (this.decodeMode !== decode_DecodingMode.Strict) {
|
|
64480
64440
|
this.result = this.treeIndex;
|
|
64481
64441
|
this.consumed += this.excess;
|
|
64482
64442
|
this.excess = 0;
|
|
@@ -64531,7 +64491,7 @@ class EntityDecoder {
|
|
|
64531
64491
|
case EntityDecoderState.NamedEntity: {
|
|
64532
64492
|
// Emit a named entity if we have one.
|
|
64533
64493
|
return this.result !== 0 &&
|
|
64534
|
-
(this.decodeMode !==
|
|
64494
|
+
(this.decodeMode !== decode_DecodingMode.Attribute ||
|
|
64535
64495
|
this.result === this.treeIndex)
|
|
64536
64496
|
? this.emitNotTerminatedNamedEntity()
|
|
64537
64497
|
: 0;
|
|
@@ -64638,7 +64598,7 @@ const xmlDecoder = getDecoder(decode_data_xml);
|
|
|
64638
64598
|
* @param mode The decoding mode.
|
|
64639
64599
|
* @returns The decoded string.
|
|
64640
64600
|
*/
|
|
64641
|
-
function
|
|
64601
|
+
function decode_decodeHTML(str, mode = decode_DecodingMode.Legacy) {
|
|
64642
64602
|
return htmlDecoder(str, mode);
|
|
64643
64603
|
}
|
|
64644
64604
|
/**
|
|
@@ -64648,7 +64608,7 @@ function decodeHTML(str, mode = DecodingMode.Legacy) {
|
|
|
64648
64608
|
* @returns The decoded string.
|
|
64649
64609
|
*/
|
|
64650
64610
|
function decodeHTMLAttribute(str) {
|
|
64651
|
-
return htmlDecoder(str,
|
|
64611
|
+
return htmlDecoder(str, decode_DecodingMode.Attribute);
|
|
64652
64612
|
}
|
|
64653
64613
|
/**
|
|
64654
64614
|
* Decodes an HTML string, requiring all entities to be terminated by a semicolon.
|
|
@@ -64657,7 +64617,7 @@ function decodeHTMLAttribute(str) {
|
|
|
64657
64617
|
* @returns The decoded string.
|
|
64658
64618
|
*/
|
|
64659
64619
|
function decodeHTMLStrict(str) {
|
|
64660
|
-
return htmlDecoder(str,
|
|
64620
|
+
return htmlDecoder(str, decode_DecodingMode.Strict);
|
|
64661
64621
|
}
|
|
64662
64622
|
/**
|
|
64663
64623
|
* Decodes an XML string, requiring all entities to be terminated by a semicolon.
|
|
@@ -64665,8 +64625,8 @@ function decodeHTMLStrict(str) {
|
|
|
64665
64625
|
* @param str The string to decode.
|
|
64666
64626
|
* @returns The decoded string.
|
|
64667
64627
|
*/
|
|
64668
|
-
function
|
|
64669
|
-
return xmlDecoder(str,
|
|
64628
|
+
function decode_decodeXML(str) {
|
|
64629
|
+
return xmlDecoder(str, decode_DecodingMode.Strict);
|
|
64670
64630
|
}
|
|
64671
64631
|
//# sourceMappingURL=decode.js.map
|
|
64672
64632
|
;// ./node_modules/parse5/dist/common/html.js
|
|
@@ -72215,7 +72175,7 @@ function endTagInForeignContent(p, token) {
|
|
|
72215
72175
|
}
|
|
72216
72176
|
//# sourceMappingURL=index.js.map
|
|
72217
72177
|
;// ./node_modules/entities/lib/esm/escape.js
|
|
72218
|
-
const
|
|
72178
|
+
const escape_xmlReplacer = /["&'<>$\x80-\uFFFF]/g;
|
|
72219
72179
|
const xmlCodeMap = new Map([
|
|
72220
72180
|
[34, """],
|
|
72221
72181
|
[38, "&"],
|
|
@@ -72224,7 +72184,7 @@ const xmlCodeMap = new Map([
|
|
|
72224
72184
|
[62, ">"],
|
|
72225
72185
|
]);
|
|
72226
72186
|
// For compatibility with node < 4, we wrap `codePointAt`
|
|
72227
|
-
const
|
|
72187
|
+
const escape_getCodePoint =
|
|
72228
72188
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
72229
72189
|
String.prototype.codePointAt != null
|
|
72230
72190
|
? (str, index) => str.codePointAt(index)
|
|
@@ -72242,11 +72202,11 @@ String.prototype.codePointAt != null
|
|
|
72242
72202
|
* If a character has no equivalent entity, a
|
|
72243
72203
|
* numeric hexadecimal reference (eg. `ü`) will be used.
|
|
72244
72204
|
*/
|
|
72245
|
-
function
|
|
72205
|
+
function escape_encodeXML(str) {
|
|
72246
72206
|
let ret = "";
|
|
72247
72207
|
let lastIdx = 0;
|
|
72248
72208
|
let match;
|
|
72249
|
-
while ((match =
|
|
72209
|
+
while ((match = escape_xmlReplacer.exec(str)) !== null) {
|
|
72250
72210
|
const i = match.index;
|
|
72251
72211
|
const char = str.charCodeAt(i);
|
|
72252
72212
|
const next = xmlCodeMap.get(char);
|
|
@@ -72255,9 +72215,9 @@ function encodeXML(str) {
|
|
|
72255
72215
|
lastIdx = i + 1;
|
|
72256
72216
|
}
|
|
72257
72217
|
else {
|
|
72258
|
-
ret += `${str.substring(lastIdx, i)}&#x${
|
|
72218
|
+
ret += `${str.substring(lastIdx, i)}&#x${escape_getCodePoint(str, i).toString(16)};`;
|
|
72259
72219
|
// Increase by 1 if we have a surrogate pair
|
|
72260
|
-
lastIdx =
|
|
72220
|
+
lastIdx = escape_xmlReplacer.lastIndex += Number((char & 0xfc00) === 0xd800);
|
|
72261
72221
|
}
|
|
72262
72222
|
}
|
|
72263
72223
|
return ret + str.substr(lastIdx);
|
|
@@ -72271,7 +72231,7 @@ function encodeXML(str) {
|
|
|
72271
72231
|
*
|
|
72272
72232
|
* @param data String to escape.
|
|
72273
72233
|
*/
|
|
72274
|
-
const escape_escape = (/* unused pure expression or super */ null && (
|
|
72234
|
+
const escape_escape = (/* unused pure expression or super */ null && (escape_encodeXML));
|
|
72275
72235
|
/**
|
|
72276
72236
|
* Creates a function that escapes all characters matched by the given regular
|
|
72277
72237
|
* expression using the given map of characters to escape to their entities.
|
|
@@ -72306,7 +72266,7 @@ function getEscaper(regex, map) {
|
|
|
72306
72266
|
*
|
|
72307
72267
|
* @param data String to escape.
|
|
72308
72268
|
*/
|
|
72309
|
-
const
|
|
72269
|
+
const escape_escapeUTF8 = getEscaper(/[&<>'"]/g, xmlCodeMap);
|
|
72310
72270
|
/**
|
|
72311
72271
|
* Encodes all characters that have to be escaped in HTML attributes,
|
|
72312
72272
|
* following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
|
|
@@ -73132,6 +73092,12 @@ const stripCommentsTransformer = () => {
|
|
|
73132
73092
|
|
|
73133
73093
|
|
|
73134
73094
|
const STRIP_TAGS = ['script', 'style'];
|
|
73095
|
+
/** Valid JS identifier: starts with $, _, or a letter; followed by $, _, letters, digits, etc. */
|
|
73096
|
+
const JS_IDENTIFIER_RE = /^[$_\p{L}][$_\p{L}\p{Mn}\p{Mc}\p{Nd}\p{Pc}\u200C\u200D]*$/u;
|
|
73097
|
+
/** Format a variable key as MDX syntax, using bracket notation for non-identifier keys (e.g. hyphens). */
|
|
73098
|
+
function toMdxVariableSyntax(key) {
|
|
73099
|
+
return JS_IDENTIFIER_RE.test(key) ? `{user.${key}}` : `{user["${key}"]}`;
|
|
73100
|
+
}
|
|
73135
73101
|
/**
|
|
73136
73102
|
* Extract variable key from MDX expression AST (e.g., {user.name} → 'name')
|
|
73137
73103
|
* Uses ESTree AST inspection, matching the approach in processor/transform/variables.ts
|
|
@@ -73190,8 +73156,9 @@ function plain_one(node, opts) {
|
|
|
73190
73156
|
case 'variable':
|
|
73191
73157
|
case 'Variable': {
|
|
73192
73158
|
const key = node.properties.name.toString();
|
|
73193
|
-
if (opts.preserveVariableSyntax)
|
|
73194
|
-
return
|
|
73159
|
+
if (opts.preserveVariableSyntax) {
|
|
73160
|
+
return node.properties.isLegacy ? `<<${key}>>` : toMdxVariableSyntax(key);
|
|
73161
|
+
}
|
|
73195
73162
|
const val = 'variables' in opts && opts.variables[key];
|
|
73196
73163
|
return val || key;
|
|
73197
73164
|
}
|
|
@@ -73216,7 +73183,7 @@ function plain_one(node, opts) {
|
|
|
73216
73183
|
const key = extractMdxVariableKey(node);
|
|
73217
73184
|
if (key) {
|
|
73218
73185
|
if (opts.preserveVariableSyntax)
|
|
73219
|
-
return
|
|
73186
|
+
return toMdxVariableSyntax(key);
|
|
73220
73187
|
return ('variables' in opts && opts.variables[key]) || key;
|
|
73221
73188
|
}
|
|
73222
73189
|
}
|
|
@@ -73556,7 +73523,7 @@ const divTransformer = () => tree => {
|
|
|
73556
73523
|
;// ./processor/transform/embeds.ts
|
|
73557
73524
|
|
|
73558
73525
|
|
|
73559
|
-
const isEmbed = (node) => 'title' in node && node.title === '@embed';
|
|
73526
|
+
const isEmbed = (node) => Boolean(node && 'title' in node && node.title === '@embed');
|
|
73560
73527
|
const embedTransformer = () => {
|
|
73561
73528
|
return (tree) => {
|
|
73562
73529
|
visit(tree, 'paragraph', (node, i, parent) => {
|
|
@@ -73564,7 +73531,7 @@ const embedTransformer = () => {
|
|
|
73564
73531
|
if (!isEmbed(child))
|
|
73565
73532
|
return;
|
|
73566
73533
|
const { url, title } = child;
|
|
73567
|
-
const label = child.children[0]
|
|
73534
|
+
const label = child.children[0]?.value;
|
|
73568
73535
|
const newNode = {
|
|
73569
73536
|
type: NodeTypes.embedBlock,
|
|
73570
73537
|
label,
|
|
@@ -91041,6 +91008,55 @@ const mdxToHast = () => tree => {
|
|
|
91041
91008
|
};
|
|
91042
91009
|
/* harmony default export */ const mdx_to_hast = (mdxToHast);
|
|
91043
91010
|
|
|
91011
|
+
;// ./lib/mdast-util/empty-task-list-item/index.ts
|
|
91012
|
+
/**
|
|
91013
|
+
* Normalizes list items that are written as only `[ ]` or `[x]` into GFM task
|
|
91014
|
+
* list items during parse, but only when at least one whitespace character
|
|
91015
|
+
* follows the closing bracket (`]`). This matches legacy behaviour for checkboxes
|
|
91016
|
+
*
|
|
91017
|
+
* The issue is `remark-gfm` does not actually classify these as task items when they have no content
|
|
91018
|
+
* after the checkbox, which leaves them as plain text (`"[ ]"`). So a custom extension is needed to
|
|
91019
|
+
* treat these as task items
|
|
91020
|
+
*/
|
|
91021
|
+
function exitListItemWithEmptyTaskListItem(token) {
|
|
91022
|
+
const node = this.stack[this.stack.length - 1];
|
|
91023
|
+
if (node &&
|
|
91024
|
+
node.type === 'listItem' &&
|
|
91025
|
+
typeof node.checked !== 'boolean') {
|
|
91026
|
+
const listItem = node;
|
|
91027
|
+
const head = listItem.children[0];
|
|
91028
|
+
if (head && head.type === 'paragraph' && head.children.length === 1) {
|
|
91029
|
+
const text = head.children[0];
|
|
91030
|
+
if (text.type === 'text') {
|
|
91031
|
+
const hasTrailingWhitespace = typeof head.position?.end.offset === 'number' &&
|
|
91032
|
+
typeof text.position?.end.offset === 'number' &&
|
|
91033
|
+
head.position.end.offset > text.position.end.offset;
|
|
91034
|
+
if (!hasTrailingWhitespace) {
|
|
91035
|
+
this.exit(token);
|
|
91036
|
+
return;
|
|
91037
|
+
}
|
|
91038
|
+
const value = text.value;
|
|
91039
|
+
if (value === '[ ]') {
|
|
91040
|
+
listItem.checked = false;
|
|
91041
|
+
head.children = [];
|
|
91042
|
+
}
|
|
91043
|
+
else if (value === '[x]' || value === '[X]') {
|
|
91044
|
+
listItem.checked = true;
|
|
91045
|
+
head.children = [];
|
|
91046
|
+
}
|
|
91047
|
+
}
|
|
91048
|
+
}
|
|
91049
|
+
}
|
|
91050
|
+
this.exit(token);
|
|
91051
|
+
}
|
|
91052
|
+
function emptyTaskListItemFromMarkdown() {
|
|
91053
|
+
return {
|
|
91054
|
+
exit: {
|
|
91055
|
+
listItem: exitListItemWithEmptyTaskListItem,
|
|
91056
|
+
},
|
|
91057
|
+
};
|
|
91058
|
+
}
|
|
91059
|
+
|
|
91044
91060
|
;// ./lib/mdast-util/legacy-variable/index.ts
|
|
91045
91061
|
|
|
91046
91062
|
const contextMap = new WeakMap();
|
|
@@ -91355,6 +91371,8 @@ function legacyVariable() {
|
|
|
91355
91371
|
|
|
91356
91372
|
|
|
91357
91373
|
|
|
91374
|
+
|
|
91375
|
+
|
|
91358
91376
|
const pascalCaseTagPattern = /^<([A-Z][A-Za-z0-9_]*)([^>]*?)(\/?)>([\s\S]*)?$/;
|
|
91359
91377
|
const tagAttributePattern = /([a-zA-Z_:][-a-zA-Z0-9_:.]*)(?:\s*=\s*("[^"]*"|'[^']*'|[^\s"'>]+))?/g;
|
|
91360
91378
|
/**
|
|
@@ -91373,8 +91391,9 @@ const MAX_LOOKAHEAD = 30;
|
|
|
91373
91391
|
const EXCLUDED_TAGS = new Set(['HTMLBlock', 'Table', 'Glossary', 'Anchor']);
|
|
91374
91392
|
const inlineMdProcessor = unified()
|
|
91375
91393
|
.data('micromarkExtensions', [legacyVariable()])
|
|
91376
|
-
.data('fromMarkdownExtensions', [legacyVariableFromMarkdown()])
|
|
91377
|
-
.use(remarkParse)
|
|
91394
|
+
.data('fromMarkdownExtensions', [legacyVariableFromMarkdown(), emptyTaskListItemFromMarkdown()])
|
|
91395
|
+
.use(remarkParse)
|
|
91396
|
+
.use(remarkGfm);
|
|
91378
91397
|
const isClosingTag = (value, tag) => value.trim() === `</${tag}>`;
|
|
91379
91398
|
/**
|
|
91380
91399
|
* Parse markdown content into mdast children nodes.
|
|
@@ -112298,6 +112317,46 @@ ${reformatHTML(html)}
|
|
|
112298
112317
|
};
|
|
112299
112318
|
/* harmony default export */ const html_block = (htmlBlock);
|
|
112300
112319
|
|
|
112320
|
+
;// ./processor/compile/list-item.ts
|
|
112321
|
+
|
|
112322
|
+
// Matches '*', '-', '+', '1.', '2.', '3.', etc. followed by a newline or 1-3 spaces
|
|
112323
|
+
// to be replaced with the marker and a space like `- [ ]`
|
|
112324
|
+
const listMarkerRegex = /^(?:[*+-]|\d+\.)(?:([\r\n]| {1,3})|$)/;
|
|
112325
|
+
/**
|
|
112326
|
+
* List-item serializer intended for checklist items
|
|
112327
|
+
* Uses the default listItem handler for formatting, then patches the output to inject the checkbox and preserve empty items
|
|
112328
|
+
*
|
|
112329
|
+
* The current aim is to ensure checklist items that have no text after the checkbox are serialized
|
|
112330
|
+
* with their checkbox intact (for example, `- [ ]`) instead of dropping it
|
|
112331
|
+
* We can add more adjustments if needed
|
|
112332
|
+
*/
|
|
112333
|
+
const compile_list_item_listItem = (node, parent, state, info) => {
|
|
112334
|
+
const head = node.children[0];
|
|
112335
|
+
const isCheckbox = typeof node.checked === 'boolean' && head && head.type === 'paragraph';
|
|
112336
|
+
if (!isCheckbox) {
|
|
112337
|
+
return handle.listItem(node, parent, state, info);
|
|
112338
|
+
}
|
|
112339
|
+
const checkbox = `[${node.checked ? 'x' : ' '}] `;
|
|
112340
|
+
// `tracker` keeps current column/offset for downstream line wrapping/indent
|
|
112341
|
+
// We move it by checkbox length so wrapped lines align after `[ ] ` / `[x] `
|
|
112342
|
+
const tracker = state.createTracker(info);
|
|
112343
|
+
tracker.move(checkbox);
|
|
112344
|
+
// Initialize the checkbox item with the default listItem serializer as the source of truth for spacing,
|
|
112345
|
+
// indentation, ordered marker formatting, and wrapping behavior
|
|
112346
|
+
let value = handle.listItem(node, parent, state, {
|
|
112347
|
+
...info,
|
|
112348
|
+
...tracker.current(),
|
|
112349
|
+
});
|
|
112350
|
+
// Patch and inject checkbox after the list marker token
|
|
112351
|
+
value = value.replace(listMarkerRegex, (match, separator) => {
|
|
112352
|
+
const marker = match.trim();
|
|
112353
|
+
const actualSeparator = separator || ' ';
|
|
112354
|
+
return `${marker}${actualSeparator}${checkbox}`;
|
|
112355
|
+
});
|
|
112356
|
+
return value;
|
|
112357
|
+
};
|
|
112358
|
+
/* harmony default export */ const list_item = (compile_list_item_listItem);
|
|
112359
|
+
|
|
112301
112360
|
;// ./processor/compile/plain.ts
|
|
112302
112361
|
const plain_plain = (node) => node.value;
|
|
112303
112362
|
/* harmony default export */ const compile_plain = (plain_plain);
|
|
@@ -112316,6 +112375,7 @@ const variable = (node) => `{user.${node.data?.hProperties?.name || ''}}`;
|
|
|
112316
112375
|
|
|
112317
112376
|
|
|
112318
112377
|
|
|
112378
|
+
|
|
112319
112379
|
function compilers(mdxish = false) {
|
|
112320
112380
|
const data = this.data();
|
|
112321
112381
|
const toMarkdownExtensions = data.toMarkdownExtensions || (data.toMarkdownExtensions = []);
|
|
@@ -112333,6 +112393,7 @@ function compilers(mdxish = false) {
|
|
|
112333
112393
|
figure: compile_compatibility,
|
|
112334
112394
|
html: compile_compatibility,
|
|
112335
112395
|
i: compile_compatibility,
|
|
112396
|
+
...(mdxish && { listItem: list_item }),
|
|
112336
112397
|
plain: compile_plain,
|
|
112337
112398
|
yaml: compile_compatibility,
|
|
112338
112399
|
};
|
|
@@ -113864,6 +113925,76 @@ function remarkBreaks() {
|
|
|
113864
113925
|
}
|
|
113865
113926
|
}
|
|
113866
113927
|
|
|
113928
|
+
;// ./processor/plugin/flatten-table-cell-paragraphs.ts
|
|
113929
|
+
|
|
113930
|
+
/** List elements that cause margin issues when adjacent to paragraphs */
|
|
113931
|
+
const LIST_ELEMENTS = new Set(['ul', 'ol']);
|
|
113932
|
+
/**
|
|
113933
|
+
* Check if a child is a whitespace-only text node
|
|
113934
|
+
*/
|
|
113935
|
+
function isWhitespaceText(child) {
|
|
113936
|
+
return child.type === 'text' && !child.value.trim();
|
|
113937
|
+
}
|
|
113938
|
+
/**
|
|
113939
|
+
* Check if a child is an element with the given tag name
|
|
113940
|
+
*/
|
|
113941
|
+
function isElementWithTag(child, tags) {
|
|
113942
|
+
return child.type === 'element' && tags.has(child.tagName);
|
|
113943
|
+
}
|
|
113944
|
+
/**
|
|
113945
|
+
* Rehype plugin that flattens paragraph elements that are adjacent to lists in table cells.
|
|
113946
|
+
*
|
|
113947
|
+
* When markdown content is parsed inside JSX table cells, text before/after lists
|
|
113948
|
+
* gets wrapped in `<p>` tags. This causes unwanted spacing because both `<p>` and
|
|
113949
|
+
* list elements have margins.
|
|
113950
|
+
*
|
|
113951
|
+
* This plugin selectively unwraps only `<p>` elements that are immediately before
|
|
113952
|
+
* or after a list (`<ul>` or `<ol>`), preserving paragraphs in other contexts.
|
|
113953
|
+
*/
|
|
113954
|
+
const rehypeFlattenTableCellParagraphs = () => {
|
|
113955
|
+
return (tree) => {
|
|
113956
|
+
visit(tree, 'element', (node) => {
|
|
113957
|
+
// Only process table cells
|
|
113958
|
+
if (node.tagName !== 'td' && node.tagName !== 'th')
|
|
113959
|
+
return;
|
|
113960
|
+
const children = node.children;
|
|
113961
|
+
const newChildren = [];
|
|
113962
|
+
for (let i = 0; i < children.length; i += 1) {
|
|
113963
|
+
const child = children[i];
|
|
113964
|
+
// If not a paragraph, keep as-is
|
|
113965
|
+
if (child.type !== 'element' || child.tagName !== 'p') {
|
|
113966
|
+
newChildren.push(child);
|
|
113967
|
+
}
|
|
113968
|
+
else {
|
|
113969
|
+
// Check if this paragraph is adjacent to a list
|
|
113970
|
+
// Look at previous non-whitespace sibling
|
|
113971
|
+
let prevIndex = i - 1;
|
|
113972
|
+
while (prevIndex >= 0 && isWhitespaceText(children[prevIndex])) {
|
|
113973
|
+
prevIndex -= 1;
|
|
113974
|
+
}
|
|
113975
|
+
const prevIsNewChild = newChildren.length > 0 && newChildren[newChildren.length - 1];
|
|
113976
|
+
const prevIsList = (prevIndex >= 0 && isElementWithTag(children[prevIndex], LIST_ELEMENTS)) ||
|
|
113977
|
+
(prevIsNewChild && prevIsNewChild.type === 'element' && LIST_ELEMENTS.has(prevIsNewChild.tagName));
|
|
113978
|
+
// Look at next non-whitespace sibling
|
|
113979
|
+
let nextIndex = i + 1;
|
|
113980
|
+
while (nextIndex < children.length && isWhitespaceText(children[nextIndex])) {
|
|
113981
|
+
nextIndex += 1;
|
|
113982
|
+
}
|
|
113983
|
+
const nextIsList = nextIndex < children.length && isElementWithTag(children[nextIndex], LIST_ELEMENTS);
|
|
113984
|
+
// If adjacent to a list, flatten the paragraph
|
|
113985
|
+
if (prevIsList || nextIsList) {
|
|
113986
|
+
newChildren.push(...child.children);
|
|
113987
|
+
}
|
|
113988
|
+
else {
|
|
113989
|
+
newChildren.push(child);
|
|
113990
|
+
}
|
|
113991
|
+
}
|
|
113992
|
+
}
|
|
113993
|
+
node.children = newChildren;
|
|
113994
|
+
});
|
|
113995
|
+
};
|
|
113996
|
+
};
|
|
113997
|
+
|
|
113867
113998
|
;// ./lib/utils/mdxish/mdxish-get-component-name.ts
|
|
113868
113999
|
/** Convert a string to PascalCase */
|
|
113869
114000
|
function toPascalCase(str) {
|
|
@@ -114361,12 +114492,20 @@ function extractBalancedBraces(content, start) {
|
|
|
114361
114492
|
* Handles: already-escaped braces, string literals inside expressions, nested balanced braces.
|
|
114362
114493
|
*/
|
|
114363
114494
|
function escapeUnbalancedBraces(content) {
|
|
114495
|
+
// Skip HTML elements — their content should never be escaped because
|
|
114496
|
+
// rehypeRaw parses them into hast elements, making `\` literal text in output
|
|
114497
|
+
const htmlElements = [];
|
|
114498
|
+
const safe = content.replace(/<([a-z][a-zA-Z0-9]*)(?:\s[^>]*)?>[\s\S]*?<\/\1>/g, match => {
|
|
114499
|
+
const idx = htmlElements.length;
|
|
114500
|
+
htmlElements.push(match);
|
|
114501
|
+
return `___HTML_ELEM_${idx}___`;
|
|
114502
|
+
});
|
|
114364
114503
|
const opens = [];
|
|
114365
114504
|
const unbalanced = new Set();
|
|
114366
114505
|
let strDelim = null;
|
|
114367
114506
|
let strEscaped = false;
|
|
114368
114507
|
// Convert to array of Unicode code points to handle emojis and multi-byte characters correctly
|
|
114369
|
-
const chars = Array.from(
|
|
114508
|
+
const chars = Array.from(safe);
|
|
114370
114509
|
for (let i = 0; i < chars.length; i += 1) {
|
|
114371
114510
|
const ch = chars[i];
|
|
114372
114511
|
// Track strings inside expressions to ignore braces within them
|
|
@@ -114407,11 +114546,15 @@ function escapeUnbalancedBraces(content) {
|
|
|
114407
114546
|
}
|
|
114408
114547
|
}
|
|
114409
114548
|
opens.forEach(pos => unbalanced.add(pos));
|
|
114410
|
-
|
|
114411
|
-
|
|
114412
|
-
|
|
114413
|
-
|
|
114414
|
-
.join('');
|
|
114549
|
+
// If there are no unbalanced braces, return content as-is;
|
|
114550
|
+
// otherwise, escape each unbalanced `{` or `}` so MDX doesn't treat them as expressions.
|
|
114551
|
+
let result = unbalanced.size === 0
|
|
114552
|
+
? safe
|
|
114553
|
+
: chars.map((ch, i) => (unbalanced.has(i) ? `\\${ch}` : ch)).join('');
|
|
114554
|
+
if (htmlElements.length > 0) {
|
|
114555
|
+
result = result.replace(/___HTML_ELEM_(\d+)___/g, (_m, idx) => htmlElements[parseInt(idx, 10)]);
|
|
114556
|
+
}
|
|
114557
|
+
return result;
|
|
114415
114558
|
}
|
|
114416
114559
|
/**
|
|
114417
114560
|
* Converts JSX attribute expressions (attribute={expression}) to HTML attributes (attribute="value").
|
|
@@ -114501,15 +114644,13 @@ function preprocessJSXExpressions(content, context = {}) {
|
|
|
114501
114644
|
let processed = protectHTMLBlockContent(content);
|
|
114502
114645
|
// Step 1: Protect code blocks and inline code
|
|
114503
114646
|
const { protectedCode, protectedContent } = protectCodeBlocks(processed);
|
|
114504
|
-
// Step 2:
|
|
114505
|
-
processed = removeJSXComments(protectedContent);
|
|
114506
|
-
// Step 3: Evaluate attribute expressions (JSX attribute syntax: href={baseUrl})
|
|
114647
|
+
// Step 2: Evaluate attribute expressions (JSX attribute syntax: href={baseUrl})
|
|
114507
114648
|
// For inline expressions, we use a library to parse the expression & evaluate it later
|
|
114508
114649
|
// For attribute expressions, it was difficult to use a library to parse them, so do it manually
|
|
114509
|
-
processed = evaluateAttributeExpressions(
|
|
114510
|
-
// Step
|
|
114650
|
+
processed = evaluateAttributeExpressions(protectedContent, context, protectedCode);
|
|
114651
|
+
// Step 3: Escape unbalanced braces to prevent MDX expression parsing errors
|
|
114511
114652
|
processed = escapeUnbalancedBraces(processed);
|
|
114512
|
-
// Step
|
|
114653
|
+
// Step 4: Restore protected code blocks
|
|
114513
114654
|
processed = restoreCodeBlocks(processed, protectedCode);
|
|
114514
114655
|
return processed;
|
|
114515
114656
|
}
|
|
@@ -114605,6 +114746,9 @@ const generateSlugForHeadings = () => (tree) => {
|
|
|
114605
114746
|
};
|
|
114606
114747
|
/* harmony default export */ const heading_slugs = (generateSlugForHeadings);
|
|
114607
114748
|
|
|
114749
|
+
// EXTERNAL MODULE: ./node_modules/@readme/variable/dist/index.js
|
|
114750
|
+
var variable_dist = __webpack_require__(4355);
|
|
114751
|
+
var variable_dist_default = /*#__PURE__*/__webpack_require__.n(variable_dist);
|
|
114608
114752
|
;// ./node_modules/rehype-parse/lib/index.js
|
|
114609
114753
|
/**
|
|
114610
114754
|
* @import {Root} from 'hast'
|
|
@@ -114670,6 +114814,311 @@ function rehypeParse(options) {
|
|
|
114670
114814
|
}
|
|
114671
114815
|
}
|
|
114672
114816
|
|
|
114817
|
+
;// ./node_modules/entities/lib/esm/generated/encode-html.js
|
|
114818
|
+
// Generated using scripts/write-encode-map.ts
|
|
114819
|
+
function restoreDiff(arr) {
|
|
114820
|
+
for (let i = 1; i < arr.length; i++) {
|
|
114821
|
+
arr[i][0] += arr[i - 1][0] + 1;
|
|
114822
|
+
}
|
|
114823
|
+
return arr;
|
|
114824
|
+
}
|
|
114825
|
+
// prettier-ignore
|
|
114826
|
+
/* 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"]])));
|
|
114827
|
+
//# sourceMappingURL=encode-html.js.map
|
|
114828
|
+
;// ./node_modules/entities/lib/esm/encode.js
|
|
114829
|
+
|
|
114830
|
+
|
|
114831
|
+
const htmlReplacer = /[\t\n!-,./:-@[-`\f{-}$\x80-\uFFFF]/g;
|
|
114832
|
+
/**
|
|
114833
|
+
* Encodes all characters in the input using HTML entities. This includes
|
|
114834
|
+
* characters that are valid ASCII characters in HTML documents, such as `#`.
|
|
114835
|
+
*
|
|
114836
|
+
* To get a more compact output, consider using the `encodeNonAsciiHTML`
|
|
114837
|
+
* function, which will only encode characters that are not valid in HTML
|
|
114838
|
+
* documents, as well as non-ASCII characters.
|
|
114839
|
+
*
|
|
114840
|
+
* If a character has no equivalent entity, a numeric hexadecimal reference
|
|
114841
|
+
* (eg. `ü`) will be used.
|
|
114842
|
+
*/
|
|
114843
|
+
function encode_encodeHTML(data) {
|
|
114844
|
+
return encodeHTMLTrieRe(htmlReplacer, data);
|
|
114845
|
+
}
|
|
114846
|
+
/**
|
|
114847
|
+
* Encodes all non-ASCII characters, as well as characters not valid in HTML
|
|
114848
|
+
* documents using HTML entities. This function will not encode characters that
|
|
114849
|
+
* are valid in HTML documents, such as `#`.
|
|
114850
|
+
*
|
|
114851
|
+
* If a character has no equivalent entity, a numeric hexadecimal reference
|
|
114852
|
+
* (eg. `ü`) will be used.
|
|
114853
|
+
*/
|
|
114854
|
+
function encode_encodeNonAsciiHTML(data) {
|
|
114855
|
+
return encodeHTMLTrieRe(xmlReplacer, data);
|
|
114856
|
+
}
|
|
114857
|
+
function encodeHTMLTrieRe(regExp, str) {
|
|
114858
|
+
let ret = "";
|
|
114859
|
+
let lastIdx = 0;
|
|
114860
|
+
let match;
|
|
114861
|
+
while ((match = regExp.exec(str)) !== null) {
|
|
114862
|
+
const i = match.index;
|
|
114863
|
+
ret += str.substring(lastIdx, i);
|
|
114864
|
+
const char = str.charCodeAt(i);
|
|
114865
|
+
let next = htmlTrie.get(char);
|
|
114866
|
+
if (typeof next === "object") {
|
|
114867
|
+
// We are in a branch. Try to match the next char.
|
|
114868
|
+
if (i + 1 < str.length) {
|
|
114869
|
+
const nextChar = str.charCodeAt(i + 1);
|
|
114870
|
+
const value = typeof next.n === "number"
|
|
114871
|
+
? next.n === nextChar
|
|
114872
|
+
? next.o
|
|
114873
|
+
: undefined
|
|
114874
|
+
: next.n.get(nextChar);
|
|
114875
|
+
if (value !== undefined) {
|
|
114876
|
+
ret += value;
|
|
114877
|
+
lastIdx = regExp.lastIndex += 1;
|
|
114878
|
+
continue;
|
|
114879
|
+
}
|
|
114880
|
+
}
|
|
114881
|
+
next = next.v;
|
|
114882
|
+
}
|
|
114883
|
+
// We might have a tree node without a value; skip and use a numeric entity.
|
|
114884
|
+
if (next !== undefined) {
|
|
114885
|
+
ret += next;
|
|
114886
|
+
lastIdx = i + 1;
|
|
114887
|
+
}
|
|
114888
|
+
else {
|
|
114889
|
+
const cp = getCodePoint(str, i);
|
|
114890
|
+
ret += `&#x${cp.toString(16)};`;
|
|
114891
|
+
// Increase by 1 if we have a surrogate pair
|
|
114892
|
+
lastIdx = regExp.lastIndex += Number(cp !== char);
|
|
114893
|
+
}
|
|
114894
|
+
}
|
|
114895
|
+
return ret + str.substr(lastIdx);
|
|
114896
|
+
}
|
|
114897
|
+
//# sourceMappingURL=encode.js.map
|
|
114898
|
+
;// ./node_modules/entities/lib/esm/index.js
|
|
114899
|
+
|
|
114900
|
+
|
|
114901
|
+
|
|
114902
|
+
/** The level of entities to support. */
|
|
114903
|
+
var EntityLevel;
|
|
114904
|
+
(function (EntityLevel) {
|
|
114905
|
+
/** Support only XML entities. */
|
|
114906
|
+
EntityLevel[EntityLevel["XML"] = 0] = "XML";
|
|
114907
|
+
/** Support HTML entities, which are a superset of XML entities. */
|
|
114908
|
+
EntityLevel[EntityLevel["HTML"] = 1] = "HTML";
|
|
114909
|
+
})(EntityLevel || (EntityLevel = {}));
|
|
114910
|
+
var EncodingMode;
|
|
114911
|
+
(function (EncodingMode) {
|
|
114912
|
+
/**
|
|
114913
|
+
* The output is UTF-8 encoded. Only characters that need escaping within
|
|
114914
|
+
* XML will be escaped.
|
|
114915
|
+
*/
|
|
114916
|
+
EncodingMode[EncodingMode["UTF8"] = 0] = "UTF8";
|
|
114917
|
+
/**
|
|
114918
|
+
* The output consists only of ASCII characters. Characters that need
|
|
114919
|
+
* escaping within HTML, and characters that aren't ASCII characters will
|
|
114920
|
+
* be escaped.
|
|
114921
|
+
*/
|
|
114922
|
+
EncodingMode[EncodingMode["ASCII"] = 1] = "ASCII";
|
|
114923
|
+
/**
|
|
114924
|
+
* Encode all characters that have an equivalent entity, as well as all
|
|
114925
|
+
* characters that are not ASCII characters.
|
|
114926
|
+
*/
|
|
114927
|
+
EncodingMode[EncodingMode["Extensive"] = 2] = "Extensive";
|
|
114928
|
+
/**
|
|
114929
|
+
* Encode all characters that have to be escaped in HTML attributes,
|
|
114930
|
+
* following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
|
|
114931
|
+
*/
|
|
114932
|
+
EncodingMode[EncodingMode["Attribute"] = 3] = "Attribute";
|
|
114933
|
+
/**
|
|
114934
|
+
* Encode all characters that have to be escaped in HTML text,
|
|
114935
|
+
* following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
|
|
114936
|
+
*/
|
|
114937
|
+
EncodingMode[EncodingMode["Text"] = 4] = "Text";
|
|
114938
|
+
})(EncodingMode || (EncodingMode = {}));
|
|
114939
|
+
/**
|
|
114940
|
+
* Decodes a string with entities.
|
|
114941
|
+
*
|
|
114942
|
+
* @param data String to decode.
|
|
114943
|
+
* @param options Decoding options.
|
|
114944
|
+
*/
|
|
114945
|
+
function esm_decode(data, options = EntityLevel.XML) {
|
|
114946
|
+
const level = typeof options === "number" ? options : options.level;
|
|
114947
|
+
if (level === EntityLevel.HTML) {
|
|
114948
|
+
const mode = typeof options === "object" ? options.mode : undefined;
|
|
114949
|
+
return decodeHTML(data, mode);
|
|
114950
|
+
}
|
|
114951
|
+
return decodeXML(data);
|
|
114952
|
+
}
|
|
114953
|
+
/**
|
|
114954
|
+
* Decodes a string with entities. Does not allow missing trailing semicolons for entities.
|
|
114955
|
+
*
|
|
114956
|
+
* @param data String to decode.
|
|
114957
|
+
* @param options Decoding options.
|
|
114958
|
+
* @deprecated Use `decode` with the `mode` set to `Strict`.
|
|
114959
|
+
*/
|
|
114960
|
+
function decodeStrict(data, options = EntityLevel.XML) {
|
|
114961
|
+
var _a;
|
|
114962
|
+
const opts = typeof options === "number" ? { level: options } : options;
|
|
114963
|
+
(_a = opts.mode) !== null && _a !== void 0 ? _a : (opts.mode = DecodingMode.Strict);
|
|
114964
|
+
return esm_decode(data, opts);
|
|
114965
|
+
}
|
|
114966
|
+
/**
|
|
114967
|
+
* Encodes a string with entities.
|
|
114968
|
+
*
|
|
114969
|
+
* @param data String to encode.
|
|
114970
|
+
* @param options Encoding options.
|
|
114971
|
+
*/
|
|
114972
|
+
function esm_encode(data, options = EntityLevel.XML) {
|
|
114973
|
+
const opts = typeof options === "number" ? { level: options } : options;
|
|
114974
|
+
// Mode `UTF8` just escapes XML entities
|
|
114975
|
+
if (opts.mode === EncodingMode.UTF8)
|
|
114976
|
+
return escapeUTF8(data);
|
|
114977
|
+
if (opts.mode === EncodingMode.Attribute)
|
|
114978
|
+
return escapeAttribute(data);
|
|
114979
|
+
if (opts.mode === EncodingMode.Text)
|
|
114980
|
+
return escapeText(data);
|
|
114981
|
+
if (opts.level === EntityLevel.HTML) {
|
|
114982
|
+
if (opts.mode === EncodingMode.ASCII) {
|
|
114983
|
+
return encodeNonAsciiHTML(data);
|
|
114984
|
+
}
|
|
114985
|
+
return encodeHTML(data);
|
|
114986
|
+
}
|
|
114987
|
+
// ASCII and Extensive are equivalent
|
|
114988
|
+
return encodeXML(data);
|
|
114989
|
+
}
|
|
114990
|
+
|
|
114991
|
+
|
|
114992
|
+
|
|
114993
|
+
//# sourceMappingURL=index.js.map
|
|
114994
|
+
;// ./lib/micromark/loose-html-entities/syntax.ts
|
|
114995
|
+
|
|
114996
|
+
|
|
114997
|
+
|
|
114998
|
+
const MAX_ENTITY_LENGTH = 32;
|
|
114999
|
+
const looseHtmlEntityConstruct = {
|
|
115000
|
+
name: 'looseHtmlEntity',
|
|
115001
|
+
tokenize: tokenizeLooseHtmlEntity,
|
|
115002
|
+
};
|
|
115003
|
+
function resolveEntity(name) {
|
|
115004
|
+
const input = `&${name};`;
|
|
115005
|
+
const decoded = decodeHTMLStrict(input);
|
|
115006
|
+
return decoded !== input ? decoded : undefined;
|
|
115007
|
+
}
|
|
115008
|
+
function tokenizeLooseHtmlEntity(effects, ok, nok) {
|
|
115009
|
+
let length = 0;
|
|
115010
|
+
const start = (code) => {
|
|
115011
|
+
if (code !== codes.ampersand)
|
|
115012
|
+
return nok(code);
|
|
115013
|
+
effects.enter('looseHtmlEntity');
|
|
115014
|
+
effects.consume(code);
|
|
115015
|
+
return afterAmpersand;
|
|
115016
|
+
};
|
|
115017
|
+
const afterAmpersand = (code) => {
|
|
115018
|
+
if (code === codes.numberSign) {
|
|
115019
|
+
effects.consume(code);
|
|
115020
|
+
return afterHash;
|
|
115021
|
+
}
|
|
115022
|
+
return accumulateNamed(code);
|
|
115023
|
+
};
|
|
115024
|
+
const afterHash = (code) => {
|
|
115025
|
+
if (code === codes.lowercaseX || code === codes.uppercaseX) {
|
|
115026
|
+
effects.consume(code);
|
|
115027
|
+
return accumulateHex;
|
|
115028
|
+
}
|
|
115029
|
+
return accumulateDecimal(code);
|
|
115030
|
+
};
|
|
115031
|
+
const accumulateNamed = (code) => {
|
|
115032
|
+
if (asciiAlphanumeric(code) && length < MAX_ENTITY_LENGTH) {
|
|
115033
|
+
effects.consume(code);
|
|
115034
|
+
length += 1;
|
|
115035
|
+
return accumulateNamed;
|
|
115036
|
+
}
|
|
115037
|
+
if (length === 0)
|
|
115038
|
+
return nok(code);
|
|
115039
|
+
if (code === codes.semicolon)
|
|
115040
|
+
return nok(code);
|
|
115041
|
+
effects.exit('looseHtmlEntity');
|
|
115042
|
+
return ok(code);
|
|
115043
|
+
};
|
|
115044
|
+
const accumulateDecimal = (code) => {
|
|
115045
|
+
if (asciiDigit(code) && length < MAX_ENTITY_LENGTH) {
|
|
115046
|
+
effects.consume(code);
|
|
115047
|
+
length += 1;
|
|
115048
|
+
return accumulateDecimal;
|
|
115049
|
+
}
|
|
115050
|
+
if (length === 0)
|
|
115051
|
+
return nok(code);
|
|
115052
|
+
if (code === codes.semicolon)
|
|
115053
|
+
return nok(code);
|
|
115054
|
+
effects.exit('looseHtmlEntity');
|
|
115055
|
+
return ok(code);
|
|
115056
|
+
};
|
|
115057
|
+
const accumulateHex = (code) => {
|
|
115058
|
+
if (asciiHexDigit(code) && length < MAX_ENTITY_LENGTH) {
|
|
115059
|
+
effects.consume(code);
|
|
115060
|
+
length += 1;
|
|
115061
|
+
return accumulateHex;
|
|
115062
|
+
}
|
|
115063
|
+
if (length === 0)
|
|
115064
|
+
return nok(code);
|
|
115065
|
+
if (code === codes.semicolon)
|
|
115066
|
+
return nok(code);
|
|
115067
|
+
effects.exit('looseHtmlEntity');
|
|
115068
|
+
return ok(code);
|
|
115069
|
+
};
|
|
115070
|
+
return start;
|
|
115071
|
+
}
|
|
115072
|
+
function exitLooseHtmlEntity(token) {
|
|
115073
|
+
const raw = this.sliceSerialize(token);
|
|
115074
|
+
const entityChars = raw.slice(1);
|
|
115075
|
+
if (entityChars.startsWith('#')) {
|
|
115076
|
+
const decoded = resolveEntity(entityChars);
|
|
115077
|
+
if (decoded) {
|
|
115078
|
+
this.enter({ type: 'text', value: decoded }, token);
|
|
115079
|
+
this.exit(token);
|
|
115080
|
+
return;
|
|
115081
|
+
}
|
|
115082
|
+
}
|
|
115083
|
+
else {
|
|
115084
|
+
for (let len = entityChars.length; len >= 2; len -= 1) {
|
|
115085
|
+
const candidate = entityChars.slice(0, len);
|
|
115086
|
+
const decoded = resolveEntity(candidate);
|
|
115087
|
+
if (decoded) {
|
|
115088
|
+
const remainder = entityChars.slice(len);
|
|
115089
|
+
this.enter({ type: 'text', value: decoded + remainder }, token);
|
|
115090
|
+
this.exit(token);
|
|
115091
|
+
return;
|
|
115092
|
+
}
|
|
115093
|
+
}
|
|
115094
|
+
}
|
|
115095
|
+
this.enter({ type: 'text', value: raw }, token);
|
|
115096
|
+
this.exit(token);
|
|
115097
|
+
}
|
|
115098
|
+
function looseHtmlEntity() {
|
|
115099
|
+
return {
|
|
115100
|
+
text: { [codes.ampersand]: looseHtmlEntityConstruct },
|
|
115101
|
+
};
|
|
115102
|
+
}
|
|
115103
|
+
function looseHtmlEntityFromMarkdown() {
|
|
115104
|
+
return {
|
|
115105
|
+
exit: {
|
|
115106
|
+
looseHtmlEntity: exitLooseHtmlEntity,
|
|
115107
|
+
},
|
|
115108
|
+
};
|
|
115109
|
+
}
|
|
115110
|
+
|
|
115111
|
+
;// ./lib/micromark/loose-html-entities/index.ts
|
|
115112
|
+
/**
|
|
115113
|
+
* Micromark extension for HTML entities without semicolons.
|
|
115114
|
+
*
|
|
115115
|
+
* Handles named entities (e.g. ` `, `&`, `©`), decimal numeric
|
|
115116
|
+
* references (e.g. ` `, `©`), and hex numeric references (e.g. ` `,
|
|
115117
|
+
* ` `). Entities that already include the semicolon are left for the
|
|
115118
|
+
* standard parser to handle.
|
|
115119
|
+
*/
|
|
115120
|
+
|
|
115121
|
+
|
|
114673
115122
|
;// ./processor/transform/mdxish/normalize-malformed-md-syntax.ts
|
|
114674
115123
|
|
|
114675
115124
|
// Marker patterns for multi-node emphasis detection
|
|
@@ -115086,6 +115535,11 @@ const EMPTY_CODE_PLACEHOLDER = {
|
|
|
115086
115535
|
|
|
115087
115536
|
|
|
115088
115537
|
|
|
115538
|
+
|
|
115539
|
+
|
|
115540
|
+
|
|
115541
|
+
|
|
115542
|
+
|
|
115089
115543
|
|
|
115090
115544
|
|
|
115091
115545
|
/**
|
|
@@ -115127,18 +115581,23 @@ const preprocessBody = (text) => {
|
|
|
115127
115581
|
};
|
|
115128
115582
|
/** Markdown parser */
|
|
115129
115583
|
const contentParser = unified()
|
|
115130
|
-
.data('micromarkExtensions', [legacyVariable()])
|
|
115131
|
-
.data('fromMarkdownExtensions', [legacyVariableFromMarkdown()])
|
|
115584
|
+
.data('micromarkExtensions', [legacyVariable(), looseHtmlEntity()])
|
|
115585
|
+
.data('fromMarkdownExtensions', [legacyVariableFromMarkdown(), emptyTaskListItemFromMarkdown(), looseHtmlEntityFromMarkdown()])
|
|
115132
115586
|
.use(remarkParse)
|
|
115133
115587
|
.use(remarkBreaks)
|
|
115134
115588
|
.use(remarkGfm)
|
|
115135
115589
|
.use(normalize_malformed_md_syntax);
|
|
115136
|
-
/**
|
|
115590
|
+
/**
|
|
115591
|
+
* Markdown to HTML processor (mdast → hast → HTML string).
|
|
115592
|
+
*
|
|
115593
|
+
* Uses only strikethrough from GFM instead of the full remarkGfm bundle
|
|
115594
|
+
* since we've had a case where it was causing a stack overflow when parsing HTML blocks containing URLs
|
|
115595
|
+
* such as `<ul><li>https://a</li>\n</ul>` due to subtokenizing recursion for URLs
|
|
115596
|
+
*/
|
|
115137
115597
|
const markdownToHtml = unified()
|
|
115138
|
-
.data('micromarkExtensions', [legacyVariable()])
|
|
115139
|
-
.data('fromMarkdownExtensions', [legacyVariableFromMarkdown()])
|
|
115598
|
+
.data('micromarkExtensions', [gfmStrikethrough(), legacyVariable(), looseHtmlEntity()])
|
|
115599
|
+
.data('fromMarkdownExtensions', [gfmStrikethroughFromMarkdown(), legacyVariableFromMarkdown(), emptyTaskListItemFromMarkdown(), looseHtmlEntityFromMarkdown()])
|
|
115140
115600
|
.use(remarkParse)
|
|
115141
|
-
.use(remarkGfm)
|
|
115142
115601
|
.use(normalize_malformed_md_syntax)
|
|
115143
115602
|
.use(remarkRehype)
|
|
115144
115603
|
.use(rehypeStringify);
|
|
@@ -115150,7 +115609,12 @@ const htmlStringifier = unified().use(rehypeStringify);
|
|
|
115150
115609
|
const processBackslashEscapes = (text) => text.replace(/\\<([^>]*)>/g, '<$1>').replace(/\\([<>|])/g, (_, c) => (c === '<' ? '<' : c === '>' ? '>' : c));
|
|
115151
115610
|
/** Block-level HTML tags that trigger CommonMark type 6 HTML blocks (condition 6). */
|
|
115152
115611
|
const BLOCK_LEVEL_TAGS = new Set(htmlBlockNames);
|
|
115153
|
-
const escapeInvalidTags = (str) => str.replace(HTML_TAG_RE, (match, tag, rest) => {
|
|
115612
|
+
const escapeInvalidTags = (str) => str.replace(HTML_TAG_RE, (match, tag, rest, offset, input) => {
|
|
115613
|
+
// Don't escape legacy variable syntax like <<var>> since we want to parse it
|
|
115614
|
+
// with the tokenizer and not want the <var> to get parsed as an HTML tag
|
|
115615
|
+
const isLegacyVariable = offset > 0 && input[offset - 1] === '<' && offset < input.length - 1 && input[offset + match.length] === '>';
|
|
115616
|
+
if (isLegacyVariable)
|
|
115617
|
+
return match;
|
|
115154
115618
|
const tagName = tag.replace(/^\//, '');
|
|
115155
115619
|
if (STANDARD_HTML_TAGS.has(tagName.toLowerCase()))
|
|
115156
115620
|
return match;
|
|
@@ -115170,9 +115634,20 @@ const escapeInvalidTags = (str) => str.replace(HTML_TAG_RE, (match, tag, rest) =
|
|
|
115170
115634
|
* (it treats unknown tags as void elements, stripping their children).
|
|
115171
115635
|
*/
|
|
115172
115636
|
const processMarkdownInHtmlString = (html) => {
|
|
115637
|
+
let htmlContent = html;
|
|
115638
|
+
// Replace all occurrences of legacy variable syntax like <<name>> with placeholders so the inner
|
|
115639
|
+
// <name> doesn't get parsed as an HTML tag and the tokenizer can parse it
|
|
115640
|
+
const legacyVars = {};
|
|
115641
|
+
let legacyCounter = 0;
|
|
115642
|
+
htmlContent = htmlContent.replace(new RegExp(variable_dist.VARIABLE_REGEXP, 'g'), match => {
|
|
115643
|
+
const id = `RDMX_LEGACY_VAR_${(legacyCounter += 1)}_TOKEN`;
|
|
115644
|
+
legacyVars[id] = match;
|
|
115645
|
+
return id;
|
|
115646
|
+
});
|
|
115173
115647
|
const placeholders = [];
|
|
115174
115648
|
let counter = 0;
|
|
115175
|
-
|
|
115649
|
+
// Escape invalid html tags so they don't get parsed as HTML tags
|
|
115650
|
+
const safened = escapeInvalidTags(htmlContent).replace(HTML_TAG_RE, match => {
|
|
115176
115651
|
if (!/^<\/?[A-Z]/.test(match))
|
|
115177
115652
|
return match;
|
|
115178
115653
|
const id = `<!--PC${(counter += 1)}-->`;
|
|
@@ -115183,7 +115658,10 @@ const processMarkdownInHtmlString = (html) => {
|
|
|
115183
115658
|
const textToHast = (text) => {
|
|
115184
115659
|
if (!text.trim())
|
|
115185
115660
|
return [{ type: 'text', value: text }];
|
|
115186
|
-
|
|
115661
|
+
// Restore legacy variables
|
|
115662
|
+
const restoredText = Object.entries(legacyVars).reduce((res, [id, original]) => res.replace(id, original), text);
|
|
115663
|
+
// Cell children might have html that needs to be parsed as markdown
|
|
115664
|
+
const parsed = markdownToHtml.runSync(markdownToHtml.parse(escapeInvalidTags(restoredText)));
|
|
115187
115665
|
const nodes = parsed.children.flatMap(n => n.type === 'element' && n.tagName === 'p' ? n.children : [n]);
|
|
115188
115666
|
const leading = text.match(/^\s+/)?.[0];
|
|
115189
115667
|
const trailing = text.match(/\s+$/)?.[0];
|
|
@@ -116476,9 +116954,6 @@ function terminateHtmlFlowBlocks(content) {
|
|
|
116476
116954
|
return restoreCodeBlocks(result.join('\n'), protectedCode);
|
|
116477
116955
|
}
|
|
116478
116956
|
|
|
116479
|
-
// EXTERNAL MODULE: ./node_modules/@readme/variable/dist/index.js
|
|
116480
|
-
var variable_dist = __webpack_require__(4355);
|
|
116481
|
-
var variable_dist_default = /*#__PURE__*/__webpack_require__.n(variable_dist);
|
|
116482
116957
|
;// ./processor/transform/mdxish/variables-code.ts
|
|
116483
116958
|
|
|
116484
116959
|
|
|
@@ -116555,13 +117030,38 @@ const variablesCodeResolver = ({ variables } = {}) => tree => {
|
|
|
116555
117030
|
* Captures the field name in group 1 (dot notation) or group 2 (bracket notation)
|
|
116556
117031
|
*/
|
|
116557
117032
|
const USER_VAR_REGEX = /\{user\.(\w+)\}|\{user\[['"](\w+)['"]\]\}/g;
|
|
117033
|
+
function makeVariableNode(varName, rawValue) {
|
|
117034
|
+
return {
|
|
117035
|
+
type: NodeTypes.variable,
|
|
117036
|
+
data: {
|
|
117037
|
+
hName: 'Variable',
|
|
117038
|
+
hProperties: { name: varName },
|
|
117039
|
+
},
|
|
117040
|
+
value: rawValue,
|
|
117041
|
+
};
|
|
117042
|
+
}
|
|
116558
117043
|
/**
|
|
116559
|
-
* A remark plugin that parses {user.<field>} patterns from text nodes
|
|
116560
|
-
*
|
|
117044
|
+
* A remark plugin that parses {user.<field>} patterns from text nodes and
|
|
117045
|
+
* mdxTextExpression nodes, creating Variable nodes for runtime resolution.
|
|
117046
|
+
*
|
|
117047
|
+
* Handles both:
|
|
117048
|
+
* - `text` nodes: when safeMode is true or after expression evaluation
|
|
117049
|
+
* - `mdxTextExpression` nodes: when mdxExpression has parsed {user.*} before evaluation
|
|
116561
117050
|
*
|
|
116562
117051
|
* Supports any user field: name, email, email_verified, exp, iat, etc.
|
|
116563
117052
|
*/
|
|
116564
117053
|
const variablesTextTransformer = () => tree => {
|
|
117054
|
+
// Handle mdxTextExpression nodes (e.g. {user.name} parsed by mdxExpression)
|
|
117055
|
+
visit(tree, 'mdxTextExpression', (node, index, parent) => {
|
|
117056
|
+
if (index === undefined || !parent)
|
|
117057
|
+
return;
|
|
117058
|
+
const wrapped = `{${(node.value ?? '').trim()}}`; // Wrap the expression value in {} to match the USER_VAR_REGEX pattern
|
|
117059
|
+
const matches = [...wrapped.matchAll(USER_VAR_REGEX)];
|
|
117060
|
+
if (matches.length !== 1)
|
|
117061
|
+
return;
|
|
117062
|
+
const varName = matches[0][1] || matches[0][2];
|
|
117063
|
+
parent.children.splice(index, 1, makeVariableNode(varName, wrapped));
|
|
117064
|
+
});
|
|
116565
117065
|
visit(tree, 'text', (node, index, parent) => {
|
|
116566
117066
|
if (index === undefined || !parent)
|
|
116567
117067
|
return;
|
|
@@ -116586,15 +117086,7 @@ const variablesTextTransformer = () => tree => {
|
|
|
116586
117086
|
}
|
|
116587
117087
|
// Extract variable name from either capture group (dot or bracket notation)
|
|
116588
117088
|
const varName = match[1] || match[2];
|
|
116589
|
-
|
|
116590
|
-
parts.push({
|
|
116591
|
-
type: NodeTypes.variable,
|
|
116592
|
-
data: {
|
|
116593
|
-
hName: 'Variable',
|
|
116594
|
-
hProperties: { name: varName },
|
|
116595
|
-
},
|
|
116596
|
-
value: match[0],
|
|
116597
|
-
});
|
|
117089
|
+
parts.push(makeVariableNode(varName, match[0]));
|
|
116598
117090
|
lastIndex = matchIndex + match[0].length;
|
|
116599
117091
|
});
|
|
116600
117092
|
// Add remaining text after last match
|
|
@@ -117687,6 +118179,10 @@ function loadComponents() {
|
|
|
117687
118179
|
|
|
117688
118180
|
|
|
117689
118181
|
|
|
118182
|
+
|
|
118183
|
+
|
|
118184
|
+
|
|
118185
|
+
|
|
117690
118186
|
|
|
117691
118187
|
|
|
117692
118188
|
|
|
@@ -117735,10 +118231,12 @@ function mdxishAstProcessor(mdContent, opts = {}) {
|
|
|
117735
118231
|
text: mdxExprExt.text,
|
|
117736
118232
|
};
|
|
117737
118233
|
const processor = unified()
|
|
117738
|
-
.data('micromarkExtensions', safeMode
|
|
118234
|
+
.data('micromarkExtensions', safeMode
|
|
118235
|
+
? [magicBlock(), legacyVariable(), looseHtmlEntity()]
|
|
118236
|
+
: [magicBlock(), mdxExprTextOnly, legacyVariable(), looseHtmlEntity()])
|
|
117739
118237
|
.data('fromMarkdownExtensions', safeMode
|
|
117740
|
-
? [magicBlockFromMarkdown(), legacyVariableFromMarkdown()]
|
|
117741
|
-
: [magicBlockFromMarkdown(), mdxExpressionFromMarkdown(), legacyVariableFromMarkdown()])
|
|
118238
|
+
? [magicBlockFromMarkdown(), legacyVariableFromMarkdown(), emptyTaskListItemFromMarkdown(), looseHtmlEntityFromMarkdown()]
|
|
118239
|
+
: [magicBlockFromMarkdown(), mdxExpressionFromMarkdown(), legacyVariableFromMarkdown(), emptyTaskListItemFromMarkdown(), looseHtmlEntityFromMarkdown()])
|
|
117742
118240
|
.use(remarkParse)
|
|
117743
118241
|
.use(remarkFrontmatter)
|
|
117744
118242
|
.use(normalize_malformed_md_syntax)
|
|
@@ -117750,8 +118248,7 @@ function mdxishAstProcessor(mdContent, opts = {}) {
|
|
|
117750
118248
|
.use(mdxish_tables)
|
|
117751
118249
|
.use(mdxish_html_blocks)
|
|
117752
118250
|
.use(newEditorTypes ? mdxish_jsx_to_mdast : undefined) // Convert JSX elements to MDAST types
|
|
117753
|
-
.use(
|
|
117754
|
-
.use(variables_text) // Parse {user.*} patterns from text
|
|
118251
|
+
.use(variables_text) // Parse {user.*} patterns from text nodes
|
|
117755
118252
|
.use(useTailwind ? transform_tailwind : undefined, { components: tempComponentsMap })
|
|
117756
118253
|
.use(remarkGfm);
|
|
117757
118254
|
return {
|
|
@@ -117785,19 +118282,25 @@ function mdxishMdastToMd(mdast) {
|
|
|
117785
118282
|
* @see {@link https://github.com/readmeio/rmdx/blob/main/docs/mdxish-flow.md}
|
|
117786
118283
|
*/
|
|
117787
118284
|
function mdxish(mdContent, opts = {}) {
|
|
117788
|
-
const { components: userComponents = {}, variables } = opts;
|
|
118285
|
+
const { components: userComponents = {}, jsxContext = {}, safeMode = false, variables } = opts;
|
|
117789
118286
|
const components = {
|
|
117790
118287
|
...loadComponents(),
|
|
117791
118288
|
...userComponents,
|
|
117792
118289
|
};
|
|
117793
|
-
|
|
118290
|
+
// Remove JSX comments before processing (protect code blocks first)
|
|
118291
|
+
const { protectedCode, protectedContent } = protectCodeBlocks(mdContent);
|
|
118292
|
+
const withoutComments = removeJSXComments(protectedContent);
|
|
118293
|
+
const contentWithoutComments = restoreCodeBlocks(withoutComments, protectedCode);
|
|
118294
|
+
const { processor, parserReadyContent } = mdxishAstProcessor(contentWithoutComments, opts);
|
|
117794
118295
|
processor
|
|
118296
|
+
.use(safeMode ? undefined : evaluate_expressions, { context: jsxContext }) // Evaluate MDX expressions using jsxContext
|
|
117795
118297
|
.use(remarkBreaks)
|
|
117796
118298
|
.use(variables_code, { variables }) // Resolve <<...>> and {user.*} inside code and inline code nodes
|
|
117797
118299
|
.use(remarkRehype, { allowDangerousHtml: true, handlers: mdxComponentHandlers })
|
|
117798
118300
|
.use(preserveBooleanProperties) // RehypeRaw converts boolean properties to empty strings
|
|
117799
118301
|
.use(rehypeRaw, { passThrough: ['html-block'] })
|
|
117800
118302
|
.use(restoreBooleanProperties)
|
|
118303
|
+
.use(rehypeFlattenTableCellParagraphs) // Remove <p> wrappers inside table cells to prevent margin issues
|
|
117801
118304
|
.use(mdxish_mermaid) // Add mermaid-render className to pre wrappers
|
|
117802
118305
|
.use(heading_slugs)
|
|
117803
118306
|
.use(rehypeMdxishComponents, {
|
|
@@ -118350,6 +118853,7 @@ function restoreMagicBlocks(replaced, blocks) {
|
|
|
118350
118853
|
|
|
118351
118854
|
|
|
118352
118855
|
|
|
118856
|
+
|
|
118353
118857
|
/**
|
|
118354
118858
|
* Removes Markdown and MDX comments.
|
|
118355
118859
|
*/
|
|
@@ -118370,6 +118874,7 @@ async function stripComments(doc, { mdx, mdxish } = {}) {
|
|
|
118370
118874
|
.use(normalize_malformed_md_syntax)
|
|
118371
118875
|
.use(mdx ? remarkMdx : undefined)
|
|
118372
118876
|
.use(stripCommentsTransformer)
|
|
118877
|
+
.use(remarkGfm)
|
|
118373
118878
|
.use(remarkStringify, mdx
|
|
118374
118879
|
? {}
|
|
118375
118880
|
: {
|