links-notation 0.21.3 → 0.22.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/dist/index.js CHANGED
@@ -280,7 +280,9 @@ class ParseError extends Error {
280
280
  const lineText = lineAt(input, start.offset);
281
281
  const summary = `line ${start.line}, column ${start.column}: ${error.message}`;
282
282
  const snippet = quote(start.line, lineText, start.column);
283
- super(`Syntax error at ${summary}
283
+ const maxDepth = error?.maxDepth ?? null;
284
+ const kind = maxDepth === null ? "Syntax error" : "Nesting too deep";
285
+ super(`${kind} at ${summary}
284
286
  ${snippet}`);
285
287
  this.name = "ParseError";
286
288
  this.cause = error;
@@ -291,6 +293,7 @@ ${snippet}`);
291
293
  this.found = error.found ?? null;
292
294
  this.lineText = lineText;
293
295
  this.snippet = snippet;
296
+ this.maxDepth = maxDepth;
294
297
  }
295
298
  }
296
299
  function lineAt(input, offset) {
@@ -676,71 +679,80 @@ function peg$parse(input, options) {
676
679
  function peg$f7() {
677
680
  return !unreadableLines.has(lineKey(offset()));
678
681
  }
679
- function peg$f8(e, saved, l) {
682
+ function peg$f8(start, e) {
683
+ return checkDepth(depth(), start);
684
+ }
685
+ function peg$f9(start, e, saved, l) {
680
686
  if (l === null) {
681
687
  indentationStack = saved;
682
688
  return e;
683
689
  }
684
690
  return Object.assign({}, e, { children: l });
685
691
  }
686
- function peg$f9() {
692
+ function peg$f10() {
687
693
  unreadableLines.add(lineKey(offset()));
688
694
  return false;
689
695
  }
690
- function peg$f10(l) {
696
+ function peg$f11(l) {
691
697
  return l;
692
698
  }
693
- function peg$f11(i) {
699
+ function peg$f12(i) {
694
700
  return { id: i };
695
701
  }
696
- function peg$f12(g, rest) {
702
+ function peg$f13(g, rest) {
697
703
  return rest === null ? g : { values: [g].concat(rest) };
698
704
  }
699
- function peg$f13() {
705
+ function peg$f14() {
700
706
  return null;
701
707
  }
702
- function peg$f14(fl) {
708
+ function peg$f15(fl) {
703
709
  return fl;
704
710
  }
705
- function peg$f15(vl) {
711
+ function peg$f16(vl) {
706
712
  return vl;
707
713
  }
708
- function peg$f16(body) {
714
+ function peg$f17(start) {
715
+ return checkDepth(depth() + 1, start);
716
+ }
717
+ function peg$f18(start, body) {
709
718
  exitNestedContext();
710
719
  return body;
711
720
  }
712
- function peg$f17() {
721
+ function peg$f19() {
713
722
  exitNestedContext();
714
723
  return false;
715
724
  }
716
- function peg$f18(l) {
725
+ function peg$f20(l) {
717
726
  return { nested: l };
718
727
  }
719
- function peg$f19() {
728
+ function peg$f21() {
720
729
  return { nested: [] };
721
730
  }
722
- function peg$f20() {
731
+ function peg$f22() {
723
732
  return enterNestedContext();
724
733
  }
725
- function peg$f21(value) {
734
+ function peg$f23() {
735
+ return location();
736
+ }
737
+ function peg$f24(value) {
726
738
  return value;
727
739
  }
728
- function peg$f22(list) {
740
+ function peg$f25(list) {
729
741
  return list;
730
742
  }
731
- function peg$f23(id, v) {
743
+ function peg$f26(id, v) {
732
744
  return { id, values: v };
733
745
  }
734
- function peg$f24(v) {
746
+ function peg$f27(v) {
735
747
  return { values: v };
736
748
  }
737
- function peg$f25(id) {
749
+ function peg$f28(id) {
738
750
  return { id, values: [] };
739
751
  }
740
- function peg$f26(chars) {
752
+ function peg$f29(chars) {
741
753
  return chars.join("");
742
754
  }
743
- function peg$f27() {
755
+ function peg$f30() {
744
756
  const pos = offset();
745
757
  const result = parseQuotedStringAt(input, pos, '"');
746
758
  if (result) {
@@ -750,19 +762,19 @@ function peg$parse(input, options) {
750
762
  }
751
763
  return false;
752
764
  }
753
- function peg$f28(chars) {
765
+ function peg$f31(chars) {
754
766
  return parsedValue;
755
767
  }
756
- function peg$f29(c, cs) {
768
+ function peg$f32(c, cs) {
757
769
  return [c].concat(cs).join("");
758
770
  }
759
- function peg$f30() {
771
+ function peg$f33() {
760
772
  return parsedLength > 1 && (parsedLength--, true);
761
773
  }
762
- function peg$f31(c) {
774
+ function peg$f34(c) {
763
775
  return c;
764
776
  }
765
- function peg$f32() {
777
+ function peg$f35() {
766
778
  const pos = offset();
767
779
  const result = parseQuotedStringAt(input, pos, "'");
768
780
  if (result) {
@@ -772,19 +784,19 @@ function peg$parse(input, options) {
772
784
  }
773
785
  return false;
774
786
  }
775
- function peg$f33(chars) {
787
+ function peg$f36(chars) {
776
788
  return parsedValue;
777
789
  }
778
- function peg$f34(c, cs) {
790
+ function peg$f37(c, cs) {
779
791
  return [c].concat(cs).join("");
780
792
  }
781
- function peg$f35() {
793
+ function peg$f38() {
782
794
  return parsedLength > 1 && (parsedLength--, true);
783
795
  }
784
- function peg$f36(c) {
796
+ function peg$f39(c) {
785
797
  return c;
786
798
  }
787
- function peg$f37() {
799
+ function peg$f40() {
788
800
  const pos = offset();
789
801
  const result = parseQuotedStringAt(input, pos, "`");
790
802
  if (result) {
@@ -794,34 +806,34 @@ function peg$parse(input, options) {
794
806
  }
795
807
  return false;
796
808
  }
797
- function peg$f38(chars) {
809
+ function peg$f41(chars) {
798
810
  return parsedValue;
799
811
  }
800
- function peg$f39(c, cs) {
812
+ function peg$f42(c, cs) {
801
813
  return [c].concat(cs).join("");
802
814
  }
803
- function peg$f40() {
815
+ function peg$f43() {
804
816
  return parsedLength > 1 && (parsedLength--, true);
805
817
  }
806
- function peg$f41(c) {
818
+ function peg$f44(c) {
807
819
  return c;
808
820
  }
809
- function peg$f42() {
821
+ function peg$f45() {
810
822
  return indentationStack.slice();
811
823
  }
812
- function peg$f43(spaces) {
824
+ function peg$f46(spaces) {
813
825
  setBaseIndentation(spaces);
814
826
  }
815
- function peg$f44(spaces) {
827
+ function peg$f47(spaces) {
816
828
  return normalizeIndentation(spaces) > getCurrentIndentation();
817
829
  }
818
- function peg$f45(spaces) {
830
+ function peg$f48(spaces) {
819
831
  pushIndentation(spaces);
820
832
  }
821
- function peg$f46(spaces) {
833
+ function peg$f49(spaces) {
822
834
  return checkIndentation(spaces);
823
835
  }
824
- function peg$f47() {
836
+ function peg$f50() {
825
837
  return isInsideNestedContext();
826
838
  }
827
839
  let peg$currPos = options.peg$currPos | 0;
@@ -1147,7 +1159,7 @@ function peg$parse(input, options) {
1147
1159
  return s0;
1148
1160
  }
1149
1161
  function peg$parseelement() {
1150
- let s0, s1, s2, s3, s4, s5, s6;
1162
+ let s0, s1, s2, s3, s4, s5, s6, s7, s8;
1151
1163
  s0 = peg$currPos;
1152
1164
  peg$savedPos = peg$currPos;
1153
1165
  s1 = peg$f7();
@@ -1157,28 +1169,41 @@ function peg$parse(input, options) {
1157
1169
  s1 = peg$FAILED;
1158
1170
  }
1159
1171
  if (s1 !== peg$FAILED) {
1160
- s2 = peg$parseanyLink();
1161
- if (s2 !== peg$FAILED) {
1162
- s3 = peg$parseSAVE_INDENTATION();
1163
- s4 = peg$currPos;
1164
- s5 = peg$parsePUSH_INDENTATION();
1165
- if (s5 !== peg$FAILED) {
1166
- s6 = peg$parselinks();
1167
- if (s6 !== peg$FAILED) {
1168
- s4 = s6;
1169
- } else {
1170
- peg$currPos = s4;
1171
- s4 = peg$FAILED;
1172
- }
1172
+ s2 = peg$parseHERE();
1173
+ s3 = peg$parseanyLink();
1174
+ if (s3 !== peg$FAILED) {
1175
+ peg$savedPos = peg$currPos;
1176
+ s4 = peg$f8(s2, s3);
1177
+ if (s4) {
1178
+ s4 = undefined;
1173
1179
  } else {
1174
- peg$currPos = s4;
1175
1180
  s4 = peg$FAILED;
1176
1181
  }
1177
- if (s4 === peg$FAILED) {
1178
- s4 = null;
1182
+ if (s4 !== peg$FAILED) {
1183
+ s5 = peg$parseSAVE_INDENTATION();
1184
+ s6 = peg$currPos;
1185
+ s7 = peg$parsePUSH_INDENTATION();
1186
+ if (s7 !== peg$FAILED) {
1187
+ s8 = peg$parselinks();
1188
+ if (s8 !== peg$FAILED) {
1189
+ s6 = s8;
1190
+ } else {
1191
+ peg$currPos = s6;
1192
+ s6 = peg$FAILED;
1193
+ }
1194
+ } else {
1195
+ peg$currPos = s6;
1196
+ s6 = peg$FAILED;
1197
+ }
1198
+ if (s6 === peg$FAILED) {
1199
+ s6 = null;
1200
+ }
1201
+ peg$savedPos = s0;
1202
+ s0 = peg$f9(s2, s3, s5, s6);
1203
+ } else {
1204
+ peg$currPos = s0;
1205
+ s0 = peg$FAILED;
1179
1206
  }
1180
- peg$savedPos = s0;
1181
- s0 = peg$f8(s2, s3, s4);
1182
1207
  } else {
1183
1208
  peg$currPos = s0;
1184
1209
  s0 = peg$FAILED;
@@ -1190,7 +1215,7 @@ function peg$parse(input, options) {
1190
1215
  if (s0 === peg$FAILED) {
1191
1216
  s0 = peg$currPos;
1192
1217
  peg$savedPos = peg$currPos;
1193
- s1 = peg$f9();
1218
+ s1 = peg$f10();
1194
1219
  if (s1) {
1195
1220
  s1 = undefined;
1196
1221
  } else {
@@ -1226,7 +1251,7 @@ function peg$parse(input, options) {
1226
1251
  s1 = peg$parsenestedGroup();
1227
1252
  if (s1 !== peg$FAILED) {
1228
1253
  peg$savedPos = s0;
1229
- s1 = peg$f10(s1);
1254
+ s1 = peg$f11(s1);
1230
1255
  }
1231
1256
  s0 = s1;
1232
1257
  if (s0 === peg$FAILED) {
@@ -1234,7 +1259,7 @@ function peg$parse(input, options) {
1234
1259
  s1 = peg$parsereference();
1235
1260
  if (s1 !== peg$FAILED) {
1236
1261
  peg$savedPos = s0;
1237
- s1 = peg$f11(s1);
1262
+ s1 = peg$f12(s1);
1238
1263
  }
1239
1264
  s0 = s1;
1240
1265
  }
@@ -1319,7 +1344,7 @@ function peg$parse(input, options) {
1319
1344
  s2 = peg$parsegroupLinkRest();
1320
1345
  if (s2 !== peg$FAILED) {
1321
1346
  peg$savedPos = s0;
1322
- s0 = peg$f12(s1, s2);
1347
+ s0 = peg$f13(s1, s2);
1323
1348
  } else {
1324
1349
  peg$currPos = s0;
1325
1350
  s0 = peg$FAILED;
@@ -1336,7 +1361,7 @@ function peg$parse(input, options) {
1336
1361
  s1 = peg$parseeol();
1337
1362
  if (s1 !== peg$FAILED) {
1338
1363
  peg$savedPos = s0;
1339
- s1 = peg$f13();
1364
+ s1 = peg$f14();
1340
1365
  }
1341
1366
  s0 = s1;
1342
1367
  if (s0 === peg$FAILED) {
@@ -1365,7 +1390,7 @@ function peg$parse(input, options) {
1365
1390
  s2 = peg$parseeol();
1366
1391
  if (s2 !== peg$FAILED) {
1367
1392
  peg$savedPos = s0;
1368
- s0 = peg$f14(s1);
1393
+ s0 = peg$f15(s1);
1369
1394
  } else {
1370
1395
  peg$currPos = s0;
1371
1396
  s0 = peg$FAILED;
@@ -1381,7 +1406,7 @@ function peg$parse(input, options) {
1381
1406
  s2 = peg$parseeol();
1382
1407
  if (s2 !== peg$FAILED) {
1383
1408
  peg$savedPos = s0;
1384
- s0 = peg$f15(s1);
1409
+ s0 = peg$f16(s1);
1385
1410
  } else {
1386
1411
  peg$currPos = s0;
1387
1412
  s0 = peg$FAILED;
@@ -1394,24 +1419,37 @@ function peg$parse(input, options) {
1394
1419
  return s0;
1395
1420
  }
1396
1421
  function peg$parsenestedGroup() {
1397
- let s0, s1, s2, s3;
1422
+ let s0, s1, s2, s3, s4, s5;
1398
1423
  s0 = peg$currPos;
1424
+ s1 = peg$parseHERE();
1399
1425
  if (input.charCodeAt(peg$currPos) === 40) {
1400
- s1 = peg$c0;
1426
+ s2 = peg$c0;
1401
1427
  peg$currPos++;
1402
1428
  } else {
1403
- s1 = peg$FAILED;
1429
+ s2 = peg$FAILED;
1404
1430
  if (peg$silentFails === 0) {
1405
1431
  peg$fail(peg$e3);
1406
1432
  }
1407
1433
  }
1408
- if (s1 !== peg$FAILED) {
1409
- s2 = peg$parseENTER_NESTED_CONTEXT();
1410
- if (s2 !== peg$FAILED) {
1411
- s3 = peg$parsenestedGroupBody();
1412
- if (s3 !== peg$FAILED) {
1413
- peg$savedPos = s0;
1414
- s0 = peg$f16(s3);
1434
+ if (s2 !== peg$FAILED) {
1435
+ peg$savedPos = peg$currPos;
1436
+ s3 = peg$f17(s1);
1437
+ if (s3) {
1438
+ s3 = undefined;
1439
+ } else {
1440
+ s3 = peg$FAILED;
1441
+ }
1442
+ if (s3 !== peg$FAILED) {
1443
+ s4 = peg$parseENTER_NESTED_CONTEXT();
1444
+ if (s4 !== peg$FAILED) {
1445
+ s5 = peg$parsenestedGroupBody();
1446
+ if (s5 !== peg$FAILED) {
1447
+ peg$savedPos = s0;
1448
+ s0 = peg$f18(s1, s5);
1449
+ } else {
1450
+ peg$currPos = s0;
1451
+ s0 = peg$FAILED;
1452
+ }
1415
1453
  } else {
1416
1454
  peg$currPos = s0;
1417
1455
  s0 = peg$FAILED;
@@ -1437,7 +1475,7 @@ function peg$parse(input, options) {
1437
1475
  }
1438
1476
  if (s1 !== peg$FAILED) {
1439
1477
  peg$savedPos = peg$currPos;
1440
- s2 = peg$f17();
1478
+ s2 = peg$f19();
1441
1479
  if (s2) {
1442
1480
  s2 = undefined;
1443
1481
  } else {
@@ -1475,7 +1513,7 @@ function peg$parse(input, options) {
1475
1513
  }
1476
1514
  if (s4 !== peg$FAILED) {
1477
1515
  peg$savedPos = s0;
1478
- s0 = peg$f18(s2);
1516
+ s0 = peg$f20(s2);
1479
1517
  } else {
1480
1518
  peg$currPos = s0;
1481
1519
  s0 = peg$FAILED;
@@ -1498,7 +1536,7 @@ function peg$parse(input, options) {
1498
1536
  }
1499
1537
  if (s2 !== peg$FAILED) {
1500
1538
  peg$savedPos = s0;
1501
- s0 = peg$f19();
1539
+ s0 = peg$f21();
1502
1540
  } else {
1503
1541
  peg$currPos = s0;
1504
1542
  s0 = peg$FAILED;
@@ -1509,7 +1547,7 @@ function peg$parse(input, options) {
1509
1547
  function peg$parseENTER_NESTED_CONTEXT() {
1510
1548
  let s0;
1511
1549
  peg$savedPos = peg$currPos;
1512
- s0 = peg$f20();
1550
+ s0 = peg$f22();
1513
1551
  if (s0) {
1514
1552
  s0 = undefined;
1515
1553
  } else {
@@ -1517,6 +1555,15 @@ function peg$parse(input, options) {
1517
1555
  }
1518
1556
  return s0;
1519
1557
  }
1558
+ function peg$parseHERE() {
1559
+ let s0, s1;
1560
+ s0 = peg$currPos;
1561
+ s1 = "";
1562
+ peg$savedPos = s0;
1563
+ s1 = peg$f23();
1564
+ s0 = s1;
1565
+ return s0;
1566
+ }
1520
1567
  function peg$parsesingleLineValueAndWhitespace() {
1521
1568
  let s0, s1, s2;
1522
1569
  s0 = peg$currPos;
@@ -1524,7 +1571,7 @@ function peg$parse(input, options) {
1524
1571
  s2 = peg$parsereferenceOrLink();
1525
1572
  if (s2 !== peg$FAILED) {
1526
1573
  peg$savedPos = s0;
1527
- s0 = peg$f21(s2);
1574
+ s0 = peg$f24(s2);
1528
1575
  } else {
1529
1576
  peg$currPos = s0;
1530
1577
  s0 = peg$FAILED;
@@ -1546,7 +1593,7 @@ function peg$parse(input, options) {
1546
1593
  }
1547
1594
  if (s1 !== peg$FAILED) {
1548
1595
  peg$savedPos = s0;
1549
- s1 = peg$f22(s1);
1596
+ s1 = peg$f25(s1);
1550
1597
  }
1551
1598
  s0 = s1;
1552
1599
  return s0;
@@ -1571,7 +1618,7 @@ function peg$parse(input, options) {
1571
1618
  s5 = peg$parsesingleLineValues();
1572
1619
  if (s5 !== peg$FAILED) {
1573
1620
  peg$savedPos = s0;
1574
- s0 = peg$f23(s2, s5);
1621
+ s0 = peg$f26(s2, s5);
1575
1622
  } else {
1576
1623
  peg$currPos = s0;
1577
1624
  s0 = peg$FAILED;
@@ -1592,7 +1639,7 @@ function peg$parse(input, options) {
1592
1639
  s1 = peg$parsesingleLineValues();
1593
1640
  if (s1 !== peg$FAILED) {
1594
1641
  peg$savedPos = s0;
1595
- s1 = peg$f24(s1);
1642
+ s1 = peg$f27(s1);
1596
1643
  }
1597
1644
  s0 = s1;
1598
1645
  return s0;
@@ -1616,7 +1663,7 @@ function peg$parse(input, options) {
1616
1663
  s4 = peg$parseeol();
1617
1664
  if (s4 !== peg$FAILED) {
1618
1665
  peg$savedPos = s0;
1619
- s0 = peg$f25(s1);
1666
+ s0 = peg$f28(s1);
1620
1667
  } else {
1621
1668
  peg$currPos = s0;
1622
1669
  s0 = peg$FAILED;
@@ -1654,7 +1701,7 @@ function peg$parse(input, options) {
1654
1701
  }
1655
1702
  if (s1 !== peg$FAILED) {
1656
1703
  peg$savedPos = s0;
1657
- s1 = peg$f26(s1);
1704
+ s1 = peg$f29(s1);
1658
1705
  }
1659
1706
  s0 = s1;
1660
1707
  return s0;
@@ -1693,7 +1740,7 @@ function peg$parse(input, options) {
1693
1740
  }
1694
1741
  if (s1 !== peg$FAILED) {
1695
1742
  peg$savedPos = peg$currPos;
1696
- s2 = peg$f27();
1743
+ s2 = peg$f30();
1697
1744
  if (s2) {
1698
1745
  s2 = undefined;
1699
1746
  } else {
@@ -1703,7 +1750,7 @@ function peg$parse(input, options) {
1703
1750
  s3 = peg$parseconsumeDouble();
1704
1751
  if (s3 !== peg$FAILED) {
1705
1752
  peg$savedPos = s0;
1706
- s0 = peg$f28(s3);
1753
+ s0 = peg$f31(s3);
1707
1754
  } else {
1708
1755
  peg$currPos = s0;
1709
1756
  s0 = peg$FAILED;
@@ -1738,7 +1785,7 @@ function peg$parse(input, options) {
1738
1785
  s3 = peg$parseconsumeDoubleMore();
1739
1786
  }
1740
1787
  peg$savedPos = s0;
1741
- s0 = peg$f29(s1, s2);
1788
+ s0 = peg$f32(s1, s2);
1742
1789
  } else {
1743
1790
  peg$currPos = s0;
1744
1791
  s0 = peg$FAILED;
@@ -1749,7 +1796,7 @@ function peg$parse(input, options) {
1749
1796
  let s0, s1, s2;
1750
1797
  s0 = peg$currPos;
1751
1798
  peg$savedPos = peg$currPos;
1752
- s1 = peg$f30();
1799
+ s1 = peg$f33();
1753
1800
  if (s1) {
1754
1801
  s1 = undefined;
1755
1802
  } else {
@@ -1767,7 +1814,7 @@ function peg$parse(input, options) {
1767
1814
  }
1768
1815
  if (s2 !== peg$FAILED) {
1769
1816
  peg$savedPos = s0;
1770
- s0 = peg$f31(s2);
1817
+ s0 = peg$f34(s2);
1771
1818
  } else {
1772
1819
  peg$currPos = s0;
1773
1820
  s0 = peg$FAILED;
@@ -1801,7 +1848,7 @@ function peg$parse(input, options) {
1801
1848
  }
1802
1849
  if (s1 !== peg$FAILED) {
1803
1850
  peg$savedPos = peg$currPos;
1804
- s2 = peg$f32();
1851
+ s2 = peg$f35();
1805
1852
  if (s2) {
1806
1853
  s2 = undefined;
1807
1854
  } else {
@@ -1811,7 +1858,7 @@ function peg$parse(input, options) {
1811
1858
  s3 = peg$parseconsumeSingle();
1812
1859
  if (s3 !== peg$FAILED) {
1813
1860
  peg$savedPos = s0;
1814
- s0 = peg$f33(s3);
1861
+ s0 = peg$f36(s3);
1815
1862
  } else {
1816
1863
  peg$currPos = s0;
1817
1864
  s0 = peg$FAILED;
@@ -1846,7 +1893,7 @@ function peg$parse(input, options) {
1846
1893
  s3 = peg$parseconsumeSingleMore();
1847
1894
  }
1848
1895
  peg$savedPos = s0;
1849
- s0 = peg$f34(s1, s2);
1896
+ s0 = peg$f37(s1, s2);
1850
1897
  } else {
1851
1898
  peg$currPos = s0;
1852
1899
  s0 = peg$FAILED;
@@ -1857,7 +1904,7 @@ function peg$parse(input, options) {
1857
1904
  let s0, s1, s2;
1858
1905
  s0 = peg$currPos;
1859
1906
  peg$savedPos = peg$currPos;
1860
- s1 = peg$f35();
1907
+ s1 = peg$f38();
1861
1908
  if (s1) {
1862
1909
  s1 = undefined;
1863
1910
  } else {
@@ -1875,7 +1922,7 @@ function peg$parse(input, options) {
1875
1922
  }
1876
1923
  if (s2 !== peg$FAILED) {
1877
1924
  peg$savedPos = s0;
1878
- s0 = peg$f36(s2);
1925
+ s0 = peg$f39(s2);
1879
1926
  } else {
1880
1927
  peg$currPos = s0;
1881
1928
  s0 = peg$FAILED;
@@ -1909,7 +1956,7 @@ function peg$parse(input, options) {
1909
1956
  }
1910
1957
  if (s1 !== peg$FAILED) {
1911
1958
  peg$savedPos = peg$currPos;
1912
- s2 = peg$f37();
1959
+ s2 = peg$f40();
1913
1960
  if (s2) {
1914
1961
  s2 = undefined;
1915
1962
  } else {
@@ -1919,7 +1966,7 @@ function peg$parse(input, options) {
1919
1966
  s3 = peg$parseconsumeBacktick();
1920
1967
  if (s3 !== peg$FAILED) {
1921
1968
  peg$savedPos = s0;
1922
- s0 = peg$f38(s3);
1969
+ s0 = peg$f41(s3);
1923
1970
  } else {
1924
1971
  peg$currPos = s0;
1925
1972
  s0 = peg$FAILED;
@@ -1954,7 +2001,7 @@ function peg$parse(input, options) {
1954
2001
  s3 = peg$parseconsumeBacktickMore();
1955
2002
  }
1956
2003
  peg$savedPos = s0;
1957
- s0 = peg$f39(s1, s2);
2004
+ s0 = peg$f42(s1, s2);
1958
2005
  } else {
1959
2006
  peg$currPos = s0;
1960
2007
  s0 = peg$FAILED;
@@ -1965,7 +2012,7 @@ function peg$parse(input, options) {
1965
2012
  let s0, s1, s2;
1966
2013
  s0 = peg$currPos;
1967
2014
  peg$savedPos = peg$currPos;
1968
- s1 = peg$f40();
2015
+ s1 = peg$f43();
1969
2016
  if (s1) {
1970
2017
  s1 = undefined;
1971
2018
  } else {
@@ -1983,7 +2030,7 @@ function peg$parse(input, options) {
1983
2030
  }
1984
2031
  if (s2 !== peg$FAILED) {
1985
2032
  peg$savedPos = s0;
1986
- s0 = peg$f41(s2);
2033
+ s0 = peg$f44(s2);
1987
2034
  } else {
1988
2035
  peg$currPos = s0;
1989
2036
  s0 = peg$FAILED;
@@ -1999,7 +2046,7 @@ function peg$parse(input, options) {
1999
2046
  s0 = peg$currPos;
2000
2047
  s1 = "";
2001
2048
  peg$savedPos = s0;
2002
- s1 = peg$f42();
2049
+ s1 = peg$f45();
2003
2050
  s0 = s1;
2004
2051
  return s0;
2005
2052
  }
@@ -2029,7 +2076,7 @@ function peg$parse(input, options) {
2029
2076
  }
2030
2077
  }
2031
2078
  peg$savedPos = s0;
2032
- s1 = peg$f43(s1);
2079
+ s1 = peg$f46(s1);
2033
2080
  s0 = s1;
2034
2081
  return s0;
2035
2082
  }
@@ -2059,7 +2106,7 @@ function peg$parse(input, options) {
2059
2106
  }
2060
2107
  }
2061
2108
  peg$savedPos = peg$currPos;
2062
- s2 = peg$f44(s1);
2109
+ s2 = peg$f47(s1);
2063
2110
  if (s2) {
2064
2111
  s2 = undefined;
2065
2112
  } else {
@@ -2067,7 +2114,7 @@ function peg$parse(input, options) {
2067
2114
  }
2068
2115
  if (s2 !== peg$FAILED) {
2069
2116
  peg$savedPos = s0;
2070
- s0 = peg$f45(s1);
2117
+ s0 = peg$f48(s1);
2071
2118
  } else {
2072
2119
  peg$currPos = s0;
2073
2120
  s0 = peg$FAILED;
@@ -2100,7 +2147,7 @@ function peg$parse(input, options) {
2100
2147
  }
2101
2148
  }
2102
2149
  peg$savedPos = peg$currPos;
2103
- s2 = peg$f46(s1);
2150
+ s2 = peg$f49(s1);
2104
2151
  if (s2) {
2105
2152
  s2 = undefined;
2106
2153
  } else {
@@ -2311,7 +2358,7 @@ function peg$parse(input, options) {
2311
2358
  let s0, s1, s2, s3;
2312
2359
  s0 = peg$currPos;
2313
2360
  peg$savedPos = peg$currPos;
2314
- s1 = peg$f47();
2361
+ s1 = peg$f50();
2315
2362
  if (s1) {
2316
2363
  s1 = undefined;
2317
2364
  } else {
@@ -2436,11 +2483,14 @@ function peg$parse(input, options) {
2436
2483
  let indentationStack = [0];
2437
2484
  let baseIndentation = null;
2438
2485
  let contextStack = [];
2486
+ let contextDepth = 0;
2487
+ const maxDepth = options.maxDepth ?? Infinity;
2439
2488
  let unreadableLines = new Set;
2440
2489
  function resetState() {
2441
2490
  indentationStack = [0];
2442
2491
  baseIndentation = null;
2443
2492
  contextStack = [];
2493
+ contextDepth = 0;
2444
2494
  unreadableLines = new Set;
2445
2495
  return true;
2446
2496
  }
@@ -2448,7 +2498,8 @@ function peg$parse(input, options) {
2448
2498
  return contextStack.length > 0 ? -1 - position : position;
2449
2499
  }
2450
2500
  function enterNestedContext() {
2451
- contextStack.push({ indentationStack, baseIndentation });
2501
+ contextStack.push({ indentationStack, baseIndentation, contextDepth });
2502
+ contextDepth = depth() + 1;
2452
2503
  indentationStack = [0];
2453
2504
  baseIndentation = null;
2454
2505
  return true;
@@ -2458,9 +2509,24 @@ function peg$parse(input, options) {
2458
2509
  if (saved) {
2459
2510
  indentationStack = saved.indentationStack;
2460
2511
  baseIndentation = saved.baseIndentation;
2512
+ contextDepth = saved.contextDepth;
2461
2513
  }
2462
2514
  return true;
2463
2515
  }
2516
+ function depth() {
2517
+ return contextDepth + indentationStack.length - 1;
2518
+ }
2519
+ function checkDepth(levels, where) {
2520
+ if (levels <= maxDepth) {
2521
+ return true;
2522
+ }
2523
+ try {
2524
+ error(`nesting depth exceeds the maximum of ${maxDepth}`, where);
2525
+ } catch (tooDeep) {
2526
+ tooDeep.maxDepth = maxDepth;
2527
+ throw tooDeep;
2528
+ }
2529
+ }
2464
2530
  function isInsideNestedContext() {
2465
2531
  return contextStack.length > 0;
2466
2532
  }
@@ -2527,10 +2593,12 @@ function peg$parse(input, options) {
2527
2593
  }
2528
2594
 
2529
2595
  // src/Parser.js
2596
+ var DEFAULT_MAX_DEPTH = 64;
2597
+
2530
2598
  class Parser {
2531
2599
  constructor(options = {}) {
2532
2600
  this.maxInputSize = options.maxInputSize || 10 * 1024 * 1024;
2533
- this.maxDepth = options.maxDepth || 1000;
2601
+ this.maxDepth = options.maxDepth ?? DEFAULT_MAX_DEPTH;
2534
2602
  this.comments = options.comments ?? true;
2535
2603
  }
2536
2604
  parse(input) {
@@ -2542,7 +2610,9 @@ class Parser {
2542
2610
  }
2543
2611
  const prepared = this.comments ? stripComments(input) : input;
2544
2612
  try {
2545
- const rawResult = peg$parse(prepared);
2613
+ const rawResult = peg$parse(prepared, {
2614
+ maxDepth: this.maxDepth
2615
+ });
2546
2616
  return this.transformResult(rawResult);
2547
2617
  } catch (error) {
2548
2618
  if (error && error.location) {
@@ -2911,6 +2981,7 @@ class FormatOptions {
2911
2981
  class FormatConfig extends FormatOptions {
2912
2982
  }
2913
2983
  export {
2984
+ DEFAULT_MAX_DEPTH,
2914
2985
  FormatConfig,
2915
2986
  FormatOptions,
2916
2987
  Link,