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/README.md +19 -3
- package/README.ru.md +17 -0
- package/dist/index.js +182 -111
- package/index.d.ts +15 -1
- package/package.json +1 -1
- package/src/ParseError.js +8 -1
- package/src/Parser.js +12 -3
- package/src/grammar.pegjs +40 -3
- package/src/index.js +1 -1
- package/src/parser-generated.js +179 -108
- package/tests/NestingLimit.test.js +132 -0
- package/tests/support/nestingDepthWorker.js +3 -1
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
|
-
|
|
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(
|
|
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$
|
|
692
|
+
function peg$f10() {
|
|
687
693
|
unreadableLines.add(lineKey(offset()));
|
|
688
694
|
return false;
|
|
689
695
|
}
|
|
690
|
-
function peg$
|
|
696
|
+
function peg$f11(l) {
|
|
691
697
|
return l;
|
|
692
698
|
}
|
|
693
|
-
function peg$
|
|
699
|
+
function peg$f12(i) {
|
|
694
700
|
return { id: i };
|
|
695
701
|
}
|
|
696
|
-
function peg$
|
|
702
|
+
function peg$f13(g, rest) {
|
|
697
703
|
return rest === null ? g : { values: [g].concat(rest) };
|
|
698
704
|
}
|
|
699
|
-
function peg$
|
|
705
|
+
function peg$f14() {
|
|
700
706
|
return null;
|
|
701
707
|
}
|
|
702
|
-
function peg$
|
|
708
|
+
function peg$f15(fl) {
|
|
703
709
|
return fl;
|
|
704
710
|
}
|
|
705
|
-
function peg$
|
|
711
|
+
function peg$f16(vl) {
|
|
706
712
|
return vl;
|
|
707
713
|
}
|
|
708
|
-
function peg$
|
|
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$
|
|
721
|
+
function peg$f19() {
|
|
713
722
|
exitNestedContext();
|
|
714
723
|
return false;
|
|
715
724
|
}
|
|
716
|
-
function peg$
|
|
725
|
+
function peg$f20(l) {
|
|
717
726
|
return { nested: l };
|
|
718
727
|
}
|
|
719
|
-
function peg$
|
|
728
|
+
function peg$f21() {
|
|
720
729
|
return { nested: [] };
|
|
721
730
|
}
|
|
722
|
-
function peg$
|
|
731
|
+
function peg$f22() {
|
|
723
732
|
return enterNestedContext();
|
|
724
733
|
}
|
|
725
|
-
function peg$
|
|
734
|
+
function peg$f23() {
|
|
735
|
+
return location();
|
|
736
|
+
}
|
|
737
|
+
function peg$f24(value) {
|
|
726
738
|
return value;
|
|
727
739
|
}
|
|
728
|
-
function peg$
|
|
740
|
+
function peg$f25(list) {
|
|
729
741
|
return list;
|
|
730
742
|
}
|
|
731
|
-
function peg$
|
|
743
|
+
function peg$f26(id, v) {
|
|
732
744
|
return { id, values: v };
|
|
733
745
|
}
|
|
734
|
-
function peg$
|
|
746
|
+
function peg$f27(v) {
|
|
735
747
|
return { values: v };
|
|
736
748
|
}
|
|
737
|
-
function peg$
|
|
749
|
+
function peg$f28(id) {
|
|
738
750
|
return { id, values: [] };
|
|
739
751
|
}
|
|
740
|
-
function peg$
|
|
752
|
+
function peg$f29(chars) {
|
|
741
753
|
return chars.join("");
|
|
742
754
|
}
|
|
743
|
-
function peg$
|
|
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$
|
|
765
|
+
function peg$f31(chars) {
|
|
754
766
|
return parsedValue;
|
|
755
767
|
}
|
|
756
|
-
function peg$
|
|
768
|
+
function peg$f32(c, cs) {
|
|
757
769
|
return [c].concat(cs).join("");
|
|
758
770
|
}
|
|
759
|
-
function peg$
|
|
771
|
+
function peg$f33() {
|
|
760
772
|
return parsedLength > 1 && (parsedLength--, true);
|
|
761
773
|
}
|
|
762
|
-
function peg$
|
|
774
|
+
function peg$f34(c) {
|
|
763
775
|
return c;
|
|
764
776
|
}
|
|
765
|
-
function peg$
|
|
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$
|
|
787
|
+
function peg$f36(chars) {
|
|
776
788
|
return parsedValue;
|
|
777
789
|
}
|
|
778
|
-
function peg$
|
|
790
|
+
function peg$f37(c, cs) {
|
|
779
791
|
return [c].concat(cs).join("");
|
|
780
792
|
}
|
|
781
|
-
function peg$
|
|
793
|
+
function peg$f38() {
|
|
782
794
|
return parsedLength > 1 && (parsedLength--, true);
|
|
783
795
|
}
|
|
784
|
-
function peg$
|
|
796
|
+
function peg$f39(c) {
|
|
785
797
|
return c;
|
|
786
798
|
}
|
|
787
|
-
function peg$
|
|
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$
|
|
809
|
+
function peg$f41(chars) {
|
|
798
810
|
return parsedValue;
|
|
799
811
|
}
|
|
800
|
-
function peg$
|
|
812
|
+
function peg$f42(c, cs) {
|
|
801
813
|
return [c].concat(cs).join("");
|
|
802
814
|
}
|
|
803
|
-
function peg$
|
|
815
|
+
function peg$f43() {
|
|
804
816
|
return parsedLength > 1 && (parsedLength--, true);
|
|
805
817
|
}
|
|
806
|
-
function peg$
|
|
818
|
+
function peg$f44(c) {
|
|
807
819
|
return c;
|
|
808
820
|
}
|
|
809
|
-
function peg$
|
|
821
|
+
function peg$f45() {
|
|
810
822
|
return indentationStack.slice();
|
|
811
823
|
}
|
|
812
|
-
function peg$
|
|
824
|
+
function peg$f46(spaces) {
|
|
813
825
|
setBaseIndentation(spaces);
|
|
814
826
|
}
|
|
815
|
-
function peg$
|
|
827
|
+
function peg$f47(spaces) {
|
|
816
828
|
return normalizeIndentation(spaces) > getCurrentIndentation();
|
|
817
829
|
}
|
|
818
|
-
function peg$
|
|
830
|
+
function peg$f48(spaces) {
|
|
819
831
|
pushIndentation(spaces);
|
|
820
832
|
}
|
|
821
|
-
function peg$
|
|
833
|
+
function peg$f49(spaces) {
|
|
822
834
|
return checkIndentation(spaces);
|
|
823
835
|
}
|
|
824
|
-
function peg$
|
|
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$
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
if (
|
|
1166
|
-
|
|
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
|
|
1178
|
-
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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
|
-
|
|
1426
|
+
s2 = peg$c0;
|
|
1401
1427
|
peg$currPos++;
|
|
1402
1428
|
} else {
|
|
1403
|
-
|
|
1429
|
+
s2 = peg$FAILED;
|
|
1404
1430
|
if (peg$silentFails === 0) {
|
|
1405
1431
|
peg$fail(peg$e3);
|
|
1406
1432
|
}
|
|
1407
1433
|
}
|
|
1408
|
-
if (
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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
|
|
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,
|