@weborigami/language 0.3.4-jse.5 → 0.3.4-jse.7

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@weborigami/language",
3
- "version": "0.3.4-jse.5",
3
+ "version": "0.3.4-jse.7",
4
4
  "description": "Web Origami expression language compiler and runtime",
5
5
  "type": "module",
6
6
  "main": "./main.js",
@@ -11,8 +11,8 @@
11
11
  "typescript": "5.8.2"
12
12
  },
13
13
  "dependencies": {
14
- "@weborigami/async-tree": "0.3.4-jse.5",
15
- "@weborigami/types": "0.3.4-jse.5",
14
+ "@weborigami/async-tree": "0.3.4-jse.7",
15
+ "@weborigami/types": "0.3.4-jse.7",
16
16
  "watcher": "2.3.1",
17
17
  "yaml": "2.7.0"
18
18
  },
@@ -7,7 +7,7 @@ function compile(source, options) {
7
7
  const { front, startRule } = options;
8
8
  const mode = options.mode ?? "shell";
9
9
  const globals = options.globals ?? jsGlobals;
10
- const enableCaching = options.scopeCaching ?? true;
10
+ const enableCaching = options.enableCaching ?? true;
11
11
  if (typeof source === "string") {
12
12
  source = { text: source };
13
13
  }
@@ -26,7 +26,7 @@ const REFERENCE_EXTERNAL = 3;
26
26
  */
27
27
  export default function optimize(code, options = {}) {
28
28
  const globals = options.globals ?? jsGlobals;
29
- const cache = options.cache ?? {};
29
+ const cache = options.cache === undefined ? {} : options.cache;
30
30
 
31
31
  // The locals is an array, one item for each function or object context that
32
32
  // has been entered. The array grows to the right. The array items are
@@ -164,7 +164,7 @@ comment "comment"
164
164
  / singleLineComment
165
165
 
166
166
  computedPropertyAccess
167
- = __ "[" expression:expression expectClosingBracket {
167
+ = __ "[" expression:expectExpression expectClosingBracket {
168
168
  return annotate([markers.property, expression], location());
169
169
  }
170
170
 
@@ -254,7 +254,7 @@ expectDoubleQuote
254
254
  expectExpression
255
255
  = expression
256
256
  / .? {
257
- error("Expected an Origami expression");
257
+ error("Expected an expression");
258
258
  }
259
259
 
260
260
  expectFrontDelimiter
@@ -282,6 +282,12 @@ expectPipelineExpression
282
282
  error("Expected an expression");
283
283
  }
284
284
 
285
+ expectUnaryExpression
286
+ = unaryExpression
287
+ / .? {
288
+ error("Expected an expression");
289
+ }
290
+
285
291
  exponentiationExpression
286
292
  = left:unaryExpression right:(whitespace "**" whitespace @exponentiationExpression)? {
287
293
  return right ? annotate([ops.exponentiation, left, right], location()) : left;
@@ -319,7 +325,7 @@ frontMatterYaml "YAML front matter"
319
325
 
320
326
  // An expression in parentheses: `(foo)`
321
327
  group "parenthetical group"
322
- = "(" expression:expression expectClosingParenthesis {
328
+ = "(" expression:expectExpression expectClosingParenthesis {
323
329
  return annotate(expression, location());
324
330
  }
325
331
 
@@ -811,7 +817,7 @@ textChar
811
817
 
812
818
  // A unary prefix operator: `!x`
813
819
  unaryExpression
814
- = operator:unaryOperator __ expression:expectExpression {
820
+ = operator:unaryOperator __ expression:expectUnaryExpression {
815
821
  return makeUnaryOperation(operator, expression, location());
816
822
  }
817
823
  / callExpression
@@ -205,7 +205,7 @@ function peg$parse(input, options) {
205
205
  var peg$FAILED = {};
206
206
  var peg$source = options.grammarSource;
207
207
 
208
- var peg$startRuleFunctions = { __: peg$parse__, additiveExpression: peg$parseadditiveExpression, additiveOperator: peg$parseadditiveOperator, angleBracketLiteral: peg$parseangleBracketLiteral, angleBracketPath: peg$parseangleBracketPath, angleBracketKey: peg$parseangleBracketKey, angleBracketPathChar: peg$parseangleBracketPathChar, arguments: peg$parsearguments, arrayLiteral: peg$parsearrayLiteral, arrayEntries: peg$parsearrayEntries, arrayEntry: peg$parsearrayEntry, arrowFunction: peg$parsearrowFunction, bitwiseAndExpression: peg$parsebitwiseAndExpression, bitwiseAndOperator: peg$parsebitwiseAndOperator, bitwiseOrExpression: peg$parsebitwiseOrExpression, bitwiseOrOperator: peg$parsebitwiseOrOperator, bitwiseXorExpression: peg$parsebitwiseXorExpression, bitwiseXorOperator: peg$parsebitwiseXorOperator, callExpression: peg$parsecallExpression, commaExpression: peg$parsecommaExpression, comment: peg$parsecomment, computedPropertyAccess: peg$parsecomputedPropertyAccess, conditionalExpression: peg$parseconditionalExpression, digits: peg$parsedigits, doubleArrow: peg$parsedoubleArrow, doubleQuoteString: peg$parsedoubleQuoteString, doubleQuoteStringChar: peg$parsedoubleQuoteStringChar, ellipsis: peg$parseellipsis, equalityExpression: peg$parseequalityExpression, equalityOperator: peg$parseequalityOperator, escapedChar: peg$parseescapedChar, expectBacktick: peg$parseexpectBacktick, expectClosingBrace: peg$parseexpectClosingBrace, expectClosingBracket: peg$parseexpectClosingBracket, expectClosingParenthesis: peg$parseexpectClosingParenthesis, expectDoubleQuote: peg$parseexpectDoubleQuote, expectExpression: peg$parseexpectExpression, expectFrontDelimiter: peg$parseexpectFrontDelimiter, expectGuillemet: peg$parseexpectGuillemet, expectSingleQuote: peg$parseexpectSingleQuote, expectPipelineExpression: peg$parseexpectPipelineExpression, exponentiationExpression: peg$parseexponentiationExpression, expression: peg$parseexpression, floatLiteral: peg$parsefloatLiteral, frontDelimiter: peg$parsefrontDelimiter, frontMatterExpression: peg$parsefrontMatterExpression, frontMatterText: peg$parsefrontMatterText, frontMatterYaml: peg$parsefrontMatterYaml, group: peg$parsegroup, guillemetString: peg$parseguillemetString, guillemetStringChar: peg$parseguillemetStringChar, host: peg$parsehost, hostname: peg$parsehostname, identifier: peg$parseidentifier, identifierLiteral: peg$parseidentifierLiteral, identifierPart: peg$parseidentifierPart, identifierStart: peg$parseidentifierStart, implicitParenthesesCallExpression: peg$parseimplicitParenthesesCallExpression, implicitParensthesesArguments: peg$parseimplicitParensthesesArguments, inlineSpace: peg$parseinlineSpace, integerLiteral: peg$parseintegerLiteral, key: peg$parsekey, keyChar: peg$parsekeyChar, keyCharStart: peg$parsekeyCharStart, list: peg$parselist, logicalAndExpression: peg$parselogicalAndExpression, logicalOrExpression: peg$parselogicalOrExpression, minus: peg$parseminus, multiLineComment: peg$parsemultiLineComment, multiplicativeExpression: peg$parsemultiplicativeExpression, multiplicativeOperator: peg$parsemultiplicativeOperator, newExpression: peg$parsenewExpression, newLine: peg$parsenewLine, numericLiteral: peg$parsenumericLiteral, nullishCoalescingExpression: peg$parsenullishCoalescingExpression, objectLiteral: peg$parseobjectLiteral, objectEntries: peg$parseobjectEntries, objectEntry: peg$parseobjectEntry, objectGetter: peg$parseobjectGetter, objectHiddenKey: peg$parseobjectHiddenKey, objectKey: peg$parseobjectKey, objectProperty: peg$parseobjectProperty, objectShorthandProperty: peg$parseobjectShorthandProperty, objectPublicKey: peg$parseobjectPublicKey, optionalChaining: peg$parseoptionalChaining, parameter: peg$parseparameter, parameterList: peg$parseparameterList, parameterSingleton: peg$parseparameterSingleton, parenthesesArguments: peg$parseparenthesesArguments, pathArguments: peg$parsepathArguments, pathKeys: peg$parsepathKeys, pathLiteral: peg$parsepathLiteral, pathSegment: peg$parsepathSegment, pipelineExpression: peg$parsepipelineExpression, primary: peg$parseprimary, program: peg$parseprogram, propertyAccess: peg$parsepropertyAccess, regexFlags: peg$parseregexFlags, regexLiteral: peg$parseregexLiteral, regexLiteralChar: peg$parseregexLiteralChar, relationalExpression: peg$parserelationalExpression, relationalOperator: peg$parserelationalOperator, separator: peg$parseseparator, shebang: peg$parseshebang, shellMode: peg$parseshellMode, shiftExpression: peg$parseshiftExpression, shiftOperator: peg$parseshiftOperator, shorthandFunction: peg$parseshorthandFunction, singleArrow: peg$parsesingleArrow, singleLineComment: peg$parsesingleLineComment, singleQuoteString: peg$parsesingleQuoteString, singleQuoteStringChar: peg$parsesingleQuoteStringChar, slash: peg$parseslash, slashes: peg$parseslashes, slashFollows: peg$parseslashFollows, spreadElement: peg$parsespreadElement, stringLiteral: peg$parsestringLiteral, templateBody: peg$parsetemplateBody, templateBodyChar: peg$parsetemplateBodyChar, templateBodyText: peg$parsetemplateBodyText, templateDocument: peg$parsetemplateDocument, templateLiteral: peg$parsetemplateLiteral, templateLiteralChar: peg$parsetemplateLiteralChar, templateLiteralText: peg$parsetemplateLiteralText, templateSubstitution: peg$parsetemplateSubstitution, textChar: peg$parsetextChar, unaryExpression: peg$parseunaryExpression, uri: peg$parseuri, uriExpression: peg$parseuriExpression, uriKey: peg$parseuriKey, uriKeyChar: peg$parseuriKeyChar, uriPath: peg$parseuriPath, uriScheme: peg$parseuriScheme, unaryOperator: peg$parseunaryOperator, whitespace: peg$parsewhitespace, whitespaceWithNewLine: peg$parsewhitespaceWithNewLine };
208
+ var peg$startRuleFunctions = { __: peg$parse__, additiveExpression: peg$parseadditiveExpression, additiveOperator: peg$parseadditiveOperator, angleBracketLiteral: peg$parseangleBracketLiteral, angleBracketPath: peg$parseangleBracketPath, angleBracketKey: peg$parseangleBracketKey, angleBracketPathChar: peg$parseangleBracketPathChar, arguments: peg$parsearguments, arrayLiteral: peg$parsearrayLiteral, arrayEntries: peg$parsearrayEntries, arrayEntry: peg$parsearrayEntry, arrowFunction: peg$parsearrowFunction, bitwiseAndExpression: peg$parsebitwiseAndExpression, bitwiseAndOperator: peg$parsebitwiseAndOperator, bitwiseOrExpression: peg$parsebitwiseOrExpression, bitwiseOrOperator: peg$parsebitwiseOrOperator, bitwiseXorExpression: peg$parsebitwiseXorExpression, bitwiseXorOperator: peg$parsebitwiseXorOperator, callExpression: peg$parsecallExpression, commaExpression: peg$parsecommaExpression, comment: peg$parsecomment, computedPropertyAccess: peg$parsecomputedPropertyAccess, conditionalExpression: peg$parseconditionalExpression, digits: peg$parsedigits, doubleArrow: peg$parsedoubleArrow, doubleQuoteString: peg$parsedoubleQuoteString, doubleQuoteStringChar: peg$parsedoubleQuoteStringChar, ellipsis: peg$parseellipsis, equalityExpression: peg$parseequalityExpression, equalityOperator: peg$parseequalityOperator, escapedChar: peg$parseescapedChar, expectBacktick: peg$parseexpectBacktick, expectClosingBrace: peg$parseexpectClosingBrace, expectClosingBracket: peg$parseexpectClosingBracket, expectClosingParenthesis: peg$parseexpectClosingParenthesis, expectDoubleQuote: peg$parseexpectDoubleQuote, expectExpression: peg$parseexpectExpression, expectFrontDelimiter: peg$parseexpectFrontDelimiter, expectGuillemet: peg$parseexpectGuillemet, expectSingleQuote: peg$parseexpectSingleQuote, expectPipelineExpression: peg$parseexpectPipelineExpression, expectUnaryExpression: peg$parseexpectUnaryExpression, exponentiationExpression: peg$parseexponentiationExpression, expression: peg$parseexpression, floatLiteral: peg$parsefloatLiteral, frontDelimiter: peg$parsefrontDelimiter, frontMatterExpression: peg$parsefrontMatterExpression, frontMatterText: peg$parsefrontMatterText, frontMatterYaml: peg$parsefrontMatterYaml, group: peg$parsegroup, guillemetString: peg$parseguillemetString, guillemetStringChar: peg$parseguillemetStringChar, host: peg$parsehost, hostname: peg$parsehostname, identifier: peg$parseidentifier, identifierLiteral: peg$parseidentifierLiteral, identifierPart: peg$parseidentifierPart, identifierStart: peg$parseidentifierStart, implicitParenthesesCallExpression: peg$parseimplicitParenthesesCallExpression, implicitParensthesesArguments: peg$parseimplicitParensthesesArguments, inlineSpace: peg$parseinlineSpace, integerLiteral: peg$parseintegerLiteral, key: peg$parsekey, keyChar: peg$parsekeyChar, keyCharStart: peg$parsekeyCharStart, list: peg$parselist, logicalAndExpression: peg$parselogicalAndExpression, logicalOrExpression: peg$parselogicalOrExpression, minus: peg$parseminus, multiLineComment: peg$parsemultiLineComment, multiplicativeExpression: peg$parsemultiplicativeExpression, multiplicativeOperator: peg$parsemultiplicativeOperator, newExpression: peg$parsenewExpression, newLine: peg$parsenewLine, numericLiteral: peg$parsenumericLiteral, nullishCoalescingExpression: peg$parsenullishCoalescingExpression, objectLiteral: peg$parseobjectLiteral, objectEntries: peg$parseobjectEntries, objectEntry: peg$parseobjectEntry, objectGetter: peg$parseobjectGetter, objectHiddenKey: peg$parseobjectHiddenKey, objectKey: peg$parseobjectKey, objectProperty: peg$parseobjectProperty, objectShorthandProperty: peg$parseobjectShorthandProperty, objectPublicKey: peg$parseobjectPublicKey, optionalChaining: peg$parseoptionalChaining, parameter: peg$parseparameter, parameterList: peg$parseparameterList, parameterSingleton: peg$parseparameterSingleton, parenthesesArguments: peg$parseparenthesesArguments, pathArguments: peg$parsepathArguments, pathKeys: peg$parsepathKeys, pathLiteral: peg$parsepathLiteral, pathSegment: peg$parsepathSegment, pipelineExpression: peg$parsepipelineExpression, primary: peg$parseprimary, program: peg$parseprogram, propertyAccess: peg$parsepropertyAccess, regexFlags: peg$parseregexFlags, regexLiteral: peg$parseregexLiteral, regexLiteralChar: peg$parseregexLiteralChar, relationalExpression: peg$parserelationalExpression, relationalOperator: peg$parserelationalOperator, separator: peg$parseseparator, shebang: peg$parseshebang, shellMode: peg$parseshellMode, shiftExpression: peg$parseshiftExpression, shiftOperator: peg$parseshiftOperator, shorthandFunction: peg$parseshorthandFunction, singleArrow: peg$parsesingleArrow, singleLineComment: peg$parsesingleLineComment, singleQuoteString: peg$parsesingleQuoteString, singleQuoteStringChar: peg$parsesingleQuoteStringChar, slash: peg$parseslash, slashes: peg$parseslashes, slashFollows: peg$parseslashFollows, spreadElement: peg$parsespreadElement, stringLiteral: peg$parsestringLiteral, templateBody: peg$parsetemplateBody, templateBodyChar: peg$parsetemplateBodyChar, templateBodyText: peg$parsetemplateBodyText, templateDocument: peg$parsetemplateDocument, templateLiteral: peg$parsetemplateLiteral, templateLiteralChar: peg$parsetemplateLiteralChar, templateLiteralText: peg$parsetemplateLiteralText, templateSubstitution: peg$parsetemplateSubstitution, textChar: peg$parsetextChar, unaryExpression: peg$parseunaryExpression, uri: peg$parseuri, uriExpression: peg$parseuriExpression, uriKey: peg$parseuriKey, uriKeyChar: peg$parseuriKeyChar, uriPath: peg$parseuriPath, uriScheme: peg$parseuriScheme, unaryOperator: peg$parseunaryOperator, whitespace: peg$parsewhitespace, whitespaceWithNewLine: peg$parsewhitespaceWithNewLine };
209
209
  var peg$startRuleFunction = peg$parse__;
210
210
 
211
211
  var peg$c0 = "+";
@@ -510,7 +510,7 @@ function peg$parse(input, options) {
510
510
  error("Expected closing quote");
511
511
  };
512
512
  var peg$f32 = function() {
513
- error("Expected an Origami expression");
513
+ error("Expected an expression");
514
514
  };
515
515
  var peg$f33 = function() {
516
516
  error("Expected \"---\"");
@@ -524,61 +524,64 @@ function peg$parse(input, options) {
524
524
  var peg$f36 = function() {
525
525
  error("Expected an expression");
526
526
  };
527
- var peg$f37 = function(left, right) {
527
+ var peg$f37 = function() {
528
+ error("Expected an expression");
529
+ };
530
+ var peg$f38 = function(left, right) {
528
531
  return right ? annotate([ops.exponentiation, left, right], location()) : left;
529
532
  };
530
- var peg$f38 = function() {
533
+ var peg$f39 = function() {
531
534
  return annotate([ops.literal, parseFloat(text())], location());
532
535
  };
533
- var peg$f39 = function() {
536
+ var peg$f40 = function() {
534
537
  return isOrigamiFrontMatter(input.slice(location().end.offset))
535
538
  };
536
- var peg$f40 = function(chars) {
539
+ var peg$f41 = function(chars) {
537
540
  return chars.join("");
538
541
  };
539
- var peg$f41 = function(yaml) {
542
+ var peg$f42 = function(yaml) {
540
543
  return makeYamlObject(yaml, location());
541
544
  };
542
- var peg$f42 = function(expression) {
545
+ var peg$f43 = function(expression) {
543
546
  return annotate(expression, location());
544
547
  };
545
- var peg$f43 = function(chars) {
548
+ var peg$f44 = function(chars) {
546
549
  return annotate([ops.literal, chars.join("")], location());
547
550
  };
548
- var peg$f44 = function(name, port, slashFollows) {
551
+ var peg$f45 = function(name, port, slashFollows) {
549
552
  const portText = port ? `:${port[1]}` : "";
550
553
  const slashText = slashFollows ? "/" : "";
551
554
  const host = name + portText + slashText;
552
555
  return annotate([ops.literal, host], location());
553
556
  };
554
- var peg$f45 = function() {
557
+ var peg$f46 = function() {
555
558
  return text();
556
559
  };
557
- var peg$f46 = function(id) {
560
+ var peg$f47 = function(id) {
558
561
  return id;
559
562
  };
560
- var peg$f47 = function(id) {
563
+ var peg$f48 = function(id) {
561
564
  return annotate([ops.literal, id], location());
562
565
  };
563
- var peg$f48 = function(char) { return char.match(/[$_\p{ID_Continue}]/u) };
564
- var peg$f49 = function(char) { return char.match(/[$_\p{ID_Start}]/u) };
565
- var peg$f50 = function(head, args) {
566
+ var peg$f49 = function(char) { return char.match(/[$_\p{ID_Continue}]/u) };
567
+ var peg$f50 = function(char) { return char.match(/[$_\p{ID_Start}]/u) };
568
+ var peg$f51 = function(head, args) {
566
569
  return args ? makeCall(head, args, location()) : head;
567
570
  };
568
- var peg$f51 = function(values) {
571
+ var peg$f52 = function(values) {
569
572
  return annotate(values, location());
570
573
  };
571
- var peg$f52 = function() {
574
+ var peg$f53 = function() {
572
575
  return annotate([ops.literal, parseInt(text())], location());
573
576
  };
574
- var peg$f53 = function() {
577
+ var peg$f54 = function() {
575
578
  return text();
576
579
  };
577
- var peg$f54 = function(char) { return char.match(/[$_\p{ID_Continue}]/u) };
578
- var peg$f55 = function(values) {
580
+ var peg$f55 = function(char) { return char.match(/[$_\p{ID_Continue}]/u) };
581
+ var peg$f56 = function(values) {
579
582
  return annotate(values, location());
580
583
  };
581
- var peg$f56 = function(head, tail) {
584
+ var peg$f57 = function(head, tail) {
582
585
  return tail.length === 0
583
586
  ? head
584
587
  : annotate(
@@ -586,7 +589,7 @@ function peg$parse(input, options) {
586
589
  location()
587
590
  );
588
591
  };
589
- var peg$f57 = function(head, tail) {
592
+ var peg$f58 = function(head, tail) {
590
593
  return tail.length === 0
591
594
  ? head
592
595
  : annotate(
@@ -594,19 +597,19 @@ function peg$parse(input, options) {
594
597
  location()
595
598
  );
596
599
  };
597
- var peg$f58 = function() { return null; };
598
- var peg$f59 = function(head, tail) {
600
+ var peg$f59 = function() { return null; };
601
+ var peg$f60 = function(head, tail) {
599
602
  return tail.reduce(makeBinaryOperation, head);
600
603
  };
601
- var peg$f60 = function(head, tail) {
604
+ var peg$f61 = function(head, tail) {
602
605
  const args = tail?.[0] !== undefined ? tail : [];
603
606
  return annotate([ops.construct, head, ...args], location());
604
607
  };
605
- var peg$f61 = function(head, tail) {
608
+ var peg$f62 = function(head, tail) {
606
609
  const args = tail?.[0] !== undefined ? tail : [];
607
610
  return annotate([ops.construct, head, ...args], location());
608
611
  };
609
- var peg$f62 = function(head, tail) {
612
+ var peg$f63 = function(head, tail) {
610
613
  return tail.length === 0
611
614
  ? head
612
615
  : annotate(
@@ -614,128 +617,128 @@ function peg$parse(input, options) {
614
617
  location()
615
618
  );
616
619
  };
617
- var peg$f63 = function(entries) {
620
+ var peg$f64 = function(entries) {
618
621
  return makeObject(entries ?? [], location());
619
622
  };
620
- var peg$f64 = function(entries) {
623
+ var peg$f65 = function(entries) {
621
624
  return annotate(entries, location());
622
625
  };
623
- var peg$f65 = function(key, pipeline) {
626
+ var peg$f66 = function(key, pipeline) {
624
627
  const getter = annotate([ops.getter, pipeline], location());
625
628
  return annotate([key, getter], location());
626
629
  };
627
- var peg$f66 = function(hiddenKey) { return hiddenKey.join(""); };
628
- var peg$f67 = function(key, pipeline) {
630
+ var peg$f67 = function(hiddenKey) { return hiddenKey.join(""); };
631
+ var peg$f68 = function(key, pipeline) {
629
632
  return annotate([key, pipeline], location());
630
633
  };
631
- var peg$f68 = function(key) {
634
+ var peg$f69 = function(key) {
632
635
  const reference = annotate([markers.reference, key], location());
633
636
  const traverse = annotate([markers.traverse, reference], location());
634
637
  return annotate([key, traverse], location());
635
638
  };
636
- var peg$f69 = function(path) {
639
+ var peg$f70 = function(path) {
637
640
  let lastKey = path.at(-1);
638
641
  if (lastKey instanceof Array) {
639
642
  lastKey = lastKey[1]; // get scope identifier or literal
640
643
  }
641
644
  return annotate([lastKey, path], location());
642
645
  };
643
- var peg$f70 = function(key, slash) {
646
+ var peg$f71 = function(key, slash) {
644
647
  return text();
645
648
  };
646
- var peg$f71 = function(string) {
649
+ var peg$f72 = function(string) {
647
650
  // Remove `ops.literal` from the string code
648
651
  return string[1];
649
652
  };
650
- var peg$f72 = function(property) {
653
+ var peg$f73 = function(property) {
651
654
  return annotate([ops.optionalTraverse, property], location());
652
655
  };
653
- var peg$f73 = function(key) {
656
+ var peg$f74 = function(key) {
654
657
  return annotate([ops.literal, key], location());
655
658
  };
656
- var peg$f74 = function(list) {
659
+ var peg$f75 = function(list) {
657
660
  return annotate(list, location());
658
661
  };
659
- var peg$f75 = function(param) {
662
+ var peg$f76 = function(param) {
660
663
  return annotate([param], location());
661
664
  };
662
- var peg$f76 = function(list) {
665
+ var peg$f77 = function(list) {
663
666
  return annotate(list ?? [undefined], location());
664
667
  };
665
- var peg$f77 = function(keys) {
668
+ var peg$f78 = function(keys) {
666
669
  const args = keys ?? [];
667
670
  return annotate([markers.traverse, ...args], location());
668
671
  };
669
- var peg$f78 = function(keys) {
672
+ var peg$f79 = function(keys) {
670
673
  return makePath(keys);
671
674
  };
672
- var peg$f79 = function(key) {
675
+ var peg$f80 = function(key) {
673
676
  return annotate([ops.literal, text()], location());
674
677
  };
675
- var peg$f80 = function() {
678
+ var peg$f81 = function() {
676
679
  return annotate([ops.literal, text()], location());
677
680
  };
678
- var peg$f81 = function(head, tail) {
681
+ var peg$f82 = function(head, tail) {
679
682
  return annotate(
680
683
  tail.reduce((arg, fn) => makePipeline(arg, fn, location()), head),
681
684
  location()
682
685
  );
683
686
  };
684
- var peg$f82 = function(property) {
687
+ var peg$f83 = function(property) {
685
688
  return annotate([markers.property, property], location());
686
689
  };
687
- var peg$f83 = function(flags) {
690
+ var peg$f84 = function(flags) {
688
691
  return flags.join("");
689
692
  };
690
- var peg$f84 = function(chars, flags) {
693
+ var peg$f85 = function(chars, flags) {
691
694
  const regex = new RegExp(chars.join(""), flags);
692
695
  return annotate([ops.literal, regex], location());
693
696
  };
694
- var peg$f85 = function(head, tail) {
697
+ var peg$f86 = function(head, tail) {
695
698
  return tail.reduce(makeBinaryOperation, head);
696
699
  };
697
- var peg$f86 = function() { return null; };
698
- var peg$f87 = function() { return options.mode === "shell" };
699
- var peg$f88 = function(head, tail) {
700
+ var peg$f87 = function() { return null; };
701
+ var peg$f88 = function() { return options.mode === "shell" };
702
+ var peg$f89 = function(head, tail) {
700
703
  return tail.reduce(makeBinaryOperation, head);
701
704
  };
702
- var peg$f89 = function(definition) {
705
+ var peg$f90 = function(definition) {
703
706
  const lambdaParameters = annotate(
704
707
  [annotate([ops.literal, "_"], location())],
705
708
  location()
706
709
  );
707
710
  return annotate([ops.lambda, lambdaParameters, definition], location());
708
711
  };
709
- var peg$f90 = function() { return null; };
710
- var peg$f91 = function(chars) {
712
+ var peg$f91 = function() { return null; };
713
+ var peg$f92 = function(chars) {
711
714
  return annotate([ops.literal, chars.join("")], location());
712
715
  };
713
- var peg$f92 = function() {
716
+ var peg$f93 = function() {
714
717
  return annotate([ops.literal, "/"], location());
715
718
  };
716
- var peg$f93 = function() {
719
+ var peg$f94 = function() {
717
720
  return annotate([ops.literal, "/"], location());
718
721
  };
719
- var peg$f94 = function() {
722
+ var peg$f95 = function() {
720
723
  return true;
721
724
  };
722
- var peg$f95 = function(value) {
725
+ var peg$f96 = function(value) {
723
726
  return annotate([ops.spread, value], location());
724
727
  };
725
- var peg$f96 = function(head, tail) {
728
+ var peg$f97 = function(head, tail) {
726
729
  return makeTemplate(ops.templateIndent, head, tail, location());
727
730
  };
728
- var peg$f97 = function(chars) {
731
+ var peg$f98 = function(chars) {
729
732
  return annotate([ops.literal, chars.join("")], location());
730
733
  };
731
- var peg$f98 = function(front, body) {
734
+ var peg$f99 = function(front, body) {
732
735
  const macroName = text().includes("@template") ? "@template" : "_template";
733
736
  return annotate(applyMacro(front, macroName, body), location());
734
737
  };
735
- var peg$f99 = function(front, body) {
738
+ var peg$f100 = function(front, body) {
736
739
  return makeDocument(front, body, location());
737
740
  };
738
- var peg$f100 = function(body) {
741
+ var peg$f101 = function(body) {
739
742
  if (options.front) {
740
743
  return makeDocument(options.front, body, location());
741
744
  }
@@ -745,37 +748,37 @@ function peg$parse(input, options) {
745
748
  );
746
749
  return annotate([ops.lambda, lambdaParameters, body], location());
747
750
  };
748
- var peg$f101 = function(head, tail) {
751
+ var peg$f102 = function(head, tail) {
749
752
  return makeTemplate(ops.templateTree, head, tail, location());
750
753
  };
751
- var peg$f102 = function(chars) {
754
+ var peg$f103 = function(chars) {
752
755
  return annotate([ops.literal, chars.join("")], location());
753
756
  };
754
- var peg$f103 = function(expression) {
757
+ var peg$f104 = function(expression) {
755
758
  return annotate(expression, location());
756
759
  };
757
- var peg$f104 = function(operator, expression) {
760
+ var peg$f105 = function(operator, expression) {
758
761
  return makeUnaryOperation(operator, expression, location());
759
762
  };
760
- var peg$f105 = function(scheme, host, path) {
763
+ var peg$f106 = function(scheme, host, path) {
761
764
  const rest = path ? path[1] : [];
762
765
  const keys = annotate([host, ...rest], location());
763
766
  return makeCall(scheme, keys, location());
764
767
  };
765
- var peg$f106 = function(scheme, keys) {
768
+ var peg$f107 = function(scheme, keys) {
766
769
  return makeCall(scheme, keys, location());
767
770
  };
768
- var peg$f107 = function(chars) {
771
+ var peg$f108 = function(chars) {
769
772
  return annotate([ops.literal, text()], location());
770
773
  };
771
- var peg$f108 = function() {
774
+ var peg$f109 = function() {
772
775
  // A single slash is a path key
773
776
  return annotate([ops.literal, ""], location());
774
777
  };
775
- var peg$f109 = function(keys) {
778
+ var peg$f110 = function(keys) {
776
779
  return annotate(keys, location());
777
780
  };
778
- var peg$f110 = function() {
781
+ var peg$f111 = function() {
779
782
  return annotate([markers.global, text()], location());
780
783
  };
781
784
  var peg$currPos = options.peg$currPos | 0;
@@ -1902,7 +1905,7 @@ function peg$parse(input, options) {
1902
1905
  if (peg$silentFails === 0) { peg$fail(peg$e9); }
1903
1906
  }
1904
1907
  if (s2 !== peg$FAILED) {
1905
- s3 = peg$parseexpression();
1908
+ s3 = peg$parseexpectExpression();
1906
1909
  if (s3 !== peg$FAILED) {
1907
1910
  s4 = peg$parseexpectClosingBracket();
1908
1911
  if (s4 !== peg$FAILED) {
@@ -2665,6 +2668,30 @@ function peg$parse(input, options) {
2665
2668
  return s0;
2666
2669
  }
2667
2670
 
2671
+ function peg$parseexpectUnaryExpression() {
2672
+ var s0, s1;
2673
+
2674
+ s0 = peg$parseunaryExpression();
2675
+ if (s0 === peg$FAILED) {
2676
+ s0 = peg$currPos;
2677
+ if (input.length > peg$currPos) {
2678
+ s1 = input.charAt(peg$currPos);
2679
+ peg$currPos++;
2680
+ } else {
2681
+ s1 = peg$FAILED;
2682
+ if (peg$silentFails === 0) { peg$fail(peg$e41); }
2683
+ }
2684
+ if (s1 === peg$FAILED) {
2685
+ s1 = null;
2686
+ }
2687
+ peg$savedPos = s0;
2688
+ s1 = peg$f37();
2689
+ s0 = s1;
2690
+ }
2691
+
2692
+ return s0;
2693
+ }
2694
+
2668
2695
  function peg$parseexponentiationExpression() {
2669
2696
  var s0, s1, s2, s3, s4, s5, s6;
2670
2697
 
@@ -2707,7 +2734,7 @@ function peg$parse(input, options) {
2707
2734
  s2 = null;
2708
2735
  }
2709
2736
  peg$savedPos = s0;
2710
- s0 = peg$f37(s1, s2);
2737
+ s0 = peg$f38(s1, s2);
2711
2738
  } else {
2712
2739
  peg$currPos = s0;
2713
2740
  s0 = peg$FAILED;
@@ -2753,7 +2780,7 @@ function peg$parse(input, options) {
2753
2780
  s3 = peg$parsedigits();
2754
2781
  if (s3 !== peg$FAILED) {
2755
2782
  peg$savedPos = s0;
2756
- s0 = peg$f38();
2783
+ s0 = peg$f39();
2757
2784
  } else {
2758
2785
  peg$currPos = s0;
2759
2786
  s0 = peg$FAILED;
@@ -2792,7 +2819,7 @@ function peg$parse(input, options) {
2792
2819
  s1 = peg$parsefrontDelimiter();
2793
2820
  if (s1 !== peg$FAILED) {
2794
2821
  peg$savedPos = peg$currPos;
2795
- s2 = peg$f39();
2822
+ s2 = peg$f40();
2796
2823
  if (s2) {
2797
2824
  s2 = undefined;
2798
2825
  } else {
@@ -2891,7 +2918,7 @@ function peg$parse(input, options) {
2891
2918
  }
2892
2919
  }
2893
2920
  peg$savedPos = s0;
2894
- s1 = peg$f40(s1);
2921
+ s1 = peg$f41(s1);
2895
2922
  s0 = s1;
2896
2923
 
2897
2924
  return s0;
@@ -2908,7 +2935,7 @@ function peg$parse(input, options) {
2908
2935
  s3 = peg$parsefrontDelimiter();
2909
2936
  if (s3 !== peg$FAILED) {
2910
2937
  peg$savedPos = s0;
2911
- s0 = peg$f41(s2);
2938
+ s0 = peg$f42(s2);
2912
2939
  } else {
2913
2940
  peg$currPos = s0;
2914
2941
  s0 = peg$FAILED;
@@ -2939,12 +2966,12 @@ function peg$parse(input, options) {
2939
2966
  if (peg$silentFails === 0) { peg$fail(peg$e11); }
2940
2967
  }
2941
2968
  if (s1 !== peg$FAILED) {
2942
- s2 = peg$parseexpression();
2969
+ s2 = peg$parseexpectExpression();
2943
2970
  if (s2 !== peg$FAILED) {
2944
2971
  s3 = peg$parseexpectClosingParenthesis();
2945
2972
  if (s3 !== peg$FAILED) {
2946
2973
  peg$savedPos = s0;
2947
- s0 = peg$f42(s2);
2974
+ s0 = peg$f43(s2);
2948
2975
  } else {
2949
2976
  peg$currPos = s0;
2950
2977
  s0 = peg$FAILED;
@@ -2988,7 +3015,7 @@ function peg$parse(input, options) {
2988
3015
  s3 = peg$parseexpectGuillemet();
2989
3016
  if (s3 !== peg$FAILED) {
2990
3017
  peg$savedPos = s0;
2991
- s0 = peg$f43(s2);
3018
+ s0 = peg$f44(s2);
2992
3019
  } else {
2993
3020
  peg$currPos = s0;
2994
3021
  s0 = peg$FAILED;
@@ -3080,7 +3107,7 @@ function peg$parse(input, options) {
3080
3107
  s3 = null;
3081
3108
  }
3082
3109
  peg$savedPos = s0;
3083
- s0 = peg$f44(s1, s2, s3);
3110
+ s0 = peg$f45(s1, s2, s3);
3084
3111
  } else {
3085
3112
  peg$currPos = s0;
3086
3113
  s0 = peg$FAILED;
@@ -3101,7 +3128,7 @@ function peg$parse(input, options) {
3101
3128
  s1 = peg$parsekey();
3102
3129
  if (s1 !== peg$FAILED) {
3103
3130
  peg$savedPos = s0;
3104
- s1 = peg$f45();
3131
+ s1 = peg$f46();
3105
3132
  }
3106
3133
  s0 = s1;
3107
3134
 
@@ -3135,7 +3162,7 @@ function peg$parse(input, options) {
3135
3162
  }
3136
3163
  if (s1 !== peg$FAILED) {
3137
3164
  peg$savedPos = s0;
3138
- s1 = peg$f46(s1);
3165
+ s1 = peg$f47(s1);
3139
3166
  }
3140
3167
  s0 = s1;
3141
3168
 
@@ -3149,7 +3176,7 @@ function peg$parse(input, options) {
3149
3176
  s1 = peg$parseidentifier();
3150
3177
  if (s1 !== peg$FAILED) {
3151
3178
  peg$savedPos = s0;
3152
- s1 = peg$f47(s1);
3179
+ s1 = peg$f48(s1);
3153
3180
  }
3154
3181
  s0 = s1;
3155
3182
 
@@ -3170,7 +3197,7 @@ function peg$parse(input, options) {
3170
3197
  }
3171
3198
  if (s1 !== peg$FAILED) {
3172
3199
  peg$savedPos = peg$currPos;
3173
- s2 = peg$f48(s1);
3200
+ s2 = peg$f49(s1);
3174
3201
  if (s2) {
3175
3202
  s2 = undefined;
3176
3203
  } else {
@@ -3210,7 +3237,7 @@ function peg$parse(input, options) {
3210
3237
  }
3211
3238
  if (s1 !== peg$FAILED) {
3212
3239
  peg$savedPos = peg$currPos;
3213
- s2 = peg$f49(s1);
3240
+ s2 = peg$f50(s1);
3214
3241
  if (s2) {
3215
3242
  s2 = undefined;
3216
3243
  } else {
@@ -3270,7 +3297,7 @@ function peg$parse(input, options) {
3270
3297
  s2 = null;
3271
3298
  }
3272
3299
  peg$savedPos = s0;
3273
- s0 = peg$f50(s1, s2);
3300
+ s0 = peg$f51(s1, s2);
3274
3301
  } else {
3275
3302
  peg$currPos = s0;
3276
3303
  s0 = peg$FAILED;
@@ -3321,7 +3348,7 @@ function peg$parse(input, options) {
3321
3348
  s3 = null;
3322
3349
  }
3323
3350
  peg$savedPos = s0;
3324
- s0 = peg$f51(s2);
3351
+ s0 = peg$f52(s2);
3325
3352
  } else {
3326
3353
  peg$currPos = s0;
3327
3354
  s0 = peg$FAILED;
@@ -3356,7 +3383,7 @@ function peg$parse(input, options) {
3356
3383
  s1 = peg$parsedigits();
3357
3384
  if (s1 !== peg$FAILED) {
3358
3385
  peg$savedPos = s0;
3359
- s1 = peg$f52();
3386
+ s1 = peg$f53();
3360
3387
  }
3361
3388
  s0 = s1;
3362
3389
  peg$silentFails--;
@@ -3381,7 +3408,7 @@ function peg$parse(input, options) {
3381
3408
  s3 = peg$parsekeyChar();
3382
3409
  }
3383
3410
  peg$savedPos = s0;
3384
- s0 = peg$f53();
3411
+ s0 = peg$f54();
3385
3412
  } else {
3386
3413
  peg$currPos = s0;
3387
3414
  s0 = peg$FAILED;
@@ -3432,7 +3459,7 @@ function peg$parse(input, options) {
3432
3459
  }
3433
3460
  if (s1 !== peg$FAILED) {
3434
3461
  peg$savedPos = peg$currPos;
3435
- s2 = peg$f54(s1);
3462
+ s2 = peg$f55(s1);
3436
3463
  if (s2) {
3437
3464
  s2 = undefined;
3438
3465
  } else {
@@ -3498,7 +3525,7 @@ function peg$parse(input, options) {
3498
3525
  s2 = null;
3499
3526
  }
3500
3527
  peg$savedPos = s0;
3501
- s0 = peg$f55(s1);
3528
+ s0 = peg$f56(s1);
3502
3529
  } else {
3503
3530
  peg$currPos = s0;
3504
3531
  s0 = peg$FAILED;
@@ -3567,7 +3594,7 @@ function peg$parse(input, options) {
3567
3594
  }
3568
3595
  }
3569
3596
  peg$savedPos = s0;
3570
- s0 = peg$f56(s1, s2);
3597
+ s0 = peg$f57(s1, s2);
3571
3598
  } else {
3572
3599
  peg$currPos = s0;
3573
3600
  s0 = peg$FAILED;
@@ -3631,7 +3658,7 @@ function peg$parse(input, options) {
3631
3658
  }
3632
3659
  }
3633
3660
  peg$savedPos = s0;
3634
- s0 = peg$f57(s1, s2);
3661
+ s0 = peg$f58(s1, s2);
3635
3662
  } else {
3636
3663
  peg$currPos = s0;
3637
3664
  s0 = peg$FAILED;
@@ -3800,7 +3827,7 @@ function peg$parse(input, options) {
3800
3827
  }
3801
3828
  if (s3 !== peg$FAILED) {
3802
3829
  peg$savedPos = s0;
3803
- s0 = peg$f58();
3830
+ s0 = peg$f59();
3804
3831
  } else {
3805
3832
  peg$currPos = s0;
3806
3833
  s0 = peg$FAILED;
@@ -3876,7 +3903,7 @@ function peg$parse(input, options) {
3876
3903
  }
3877
3904
  }
3878
3905
  peg$savedPos = s0;
3879
- s0 = peg$f59(s1, s2);
3906
+ s0 = peg$f60(s1, s2);
3880
3907
  } else {
3881
3908
  peg$currPos = s0;
3882
3909
  s0 = peg$FAILED;
@@ -3919,7 +3946,7 @@ function peg$parse(input, options) {
3919
3946
  s4 = null;
3920
3947
  }
3921
3948
  peg$savedPos = s0;
3922
- s0 = peg$f60(s3, s4);
3949
+ s0 = peg$f61(s3, s4);
3923
3950
  } else {
3924
3951
  peg$currPos = s0;
3925
3952
  s0 = peg$FAILED;
@@ -3943,7 +3970,7 @@ function peg$parse(input, options) {
3943
3970
  s3 = peg$parseparenthesesArguments();
3944
3971
  if (s3 !== peg$FAILED) {
3945
3972
  peg$savedPos = s0;
3946
- s0 = peg$f61(s2, s3);
3973
+ s0 = peg$f62(s2, s3);
3947
3974
  } else {
3948
3975
  peg$currPos = s0;
3949
3976
  s0 = peg$FAILED;
@@ -4065,7 +4092,7 @@ function peg$parse(input, options) {
4065
4092
  }
4066
4093
  }
4067
4094
  peg$savedPos = s0;
4068
- s0 = peg$f62(s1, s2);
4095
+ s0 = peg$f63(s1, s2);
4069
4096
  } else {
4070
4097
  peg$currPos = s0;
4071
4098
  s0 = peg$FAILED;
@@ -4096,7 +4123,7 @@ function peg$parse(input, options) {
4096
4123
  s5 = peg$parseexpectClosingBrace();
4097
4124
  if (s5 !== peg$FAILED) {
4098
4125
  peg$savedPos = s0;
4099
- s0 = peg$f63(s3);
4126
+ s0 = peg$f64(s3);
4100
4127
  } else {
4101
4128
  peg$currPos = s0;
4102
4129
  s0 = peg$FAILED;
@@ -4149,7 +4176,7 @@ function peg$parse(input, options) {
4149
4176
  s2 = null;
4150
4177
  }
4151
4178
  peg$savedPos = s0;
4152
- s0 = peg$f64(s1);
4179
+ s0 = peg$f65(s1);
4153
4180
  } else {
4154
4181
  peg$currPos = s0;
4155
4182
  s0 = peg$FAILED;
@@ -4195,7 +4222,7 @@ function peg$parse(input, options) {
4195
4222
  s5 = peg$parseexpectPipelineExpression();
4196
4223
  if (s5 !== peg$FAILED) {
4197
4224
  peg$savedPos = s0;
4198
- s0 = peg$f65(s1, s5);
4225
+ s0 = peg$f66(s1, s5);
4199
4226
  } else {
4200
4227
  peg$currPos = s0;
4201
4228
  s0 = peg$FAILED;
@@ -4256,7 +4283,7 @@ function peg$parse(input, options) {
4256
4283
  }
4257
4284
  if (s1 !== peg$FAILED) {
4258
4285
  peg$savedPos = s0;
4259
- s1 = peg$f66(s1);
4286
+ s1 = peg$f67(s1);
4260
4287
  }
4261
4288
  s0 = s1;
4262
4289
 
@@ -4300,7 +4327,7 @@ function peg$parse(input, options) {
4300
4327
  s5 = peg$parseexpectPipelineExpression();
4301
4328
  if (s5 !== peg$FAILED) {
4302
4329
  peg$savedPos = s0;
4303
- s0 = peg$f67(s1, s5);
4330
+ s0 = peg$f68(s1, s5);
4304
4331
  } else {
4305
4332
  peg$currPos = s0;
4306
4333
  s0 = peg$FAILED;
@@ -4330,7 +4357,7 @@ function peg$parse(input, options) {
4330
4357
  s1 = peg$parseobjectPublicKey();
4331
4358
  if (s1 !== peg$FAILED) {
4332
4359
  peg$savedPos = s0;
4333
- s1 = peg$f68(s1);
4360
+ s1 = peg$f69(s1);
4334
4361
  }
4335
4362
  s0 = s1;
4336
4363
  if (s0 === peg$FAILED) {
@@ -4338,7 +4365,7 @@ function peg$parse(input, options) {
4338
4365
  s1 = peg$parseangleBracketLiteral();
4339
4366
  if (s1 !== peg$FAILED) {
4340
4367
  peg$savedPos = s0;
4341
- s1 = peg$f69(s1);
4368
+ s1 = peg$f70(s1);
4342
4369
  }
4343
4370
  s0 = s1;
4344
4371
  }
@@ -4368,7 +4395,7 @@ function peg$parse(input, options) {
4368
4395
  s2 = null;
4369
4396
  }
4370
4397
  peg$savedPos = s0;
4371
- s0 = peg$f70(s1, s2);
4398
+ s0 = peg$f71(s1, s2);
4372
4399
  } else {
4373
4400
  peg$currPos = s0;
4374
4401
  s0 = peg$FAILED;
@@ -4378,7 +4405,7 @@ function peg$parse(input, options) {
4378
4405
  s1 = peg$parsestringLiteral();
4379
4406
  if (s1 !== peg$FAILED) {
4380
4407
  peg$savedPos = s0;
4381
- s1 = peg$f71(s1);
4408
+ s1 = peg$f72(s1);
4382
4409
  }
4383
4410
  s0 = s1;
4384
4411
  }
@@ -4403,7 +4430,7 @@ function peg$parse(input, options) {
4403
4430
  s4 = peg$parseidentifier();
4404
4431
  if (s4 !== peg$FAILED) {
4405
4432
  peg$savedPos = s0;
4406
- s0 = peg$f72(s4);
4433
+ s0 = peg$f73(s4);
4407
4434
  } else {
4408
4435
  peg$currPos = s0;
4409
4436
  s0 = peg$FAILED;
@@ -4423,7 +4450,7 @@ function peg$parse(input, options) {
4423
4450
  s1 = peg$parsekey();
4424
4451
  if (s1 !== peg$FAILED) {
4425
4452
  peg$savedPos = s0;
4426
- s1 = peg$f73(s1);
4453
+ s1 = peg$f74(s1);
4427
4454
  }
4428
4455
  s0 = s1;
4429
4456
 
@@ -4465,7 +4492,7 @@ function peg$parse(input, options) {
4465
4492
  s2 = null;
4466
4493
  }
4467
4494
  peg$savedPos = s0;
4468
- s0 = peg$f74(s1);
4495
+ s0 = peg$f75(s1);
4469
4496
  } else {
4470
4497
  peg$currPos = s0;
4471
4498
  s0 = peg$FAILED;
@@ -4481,7 +4508,7 @@ function peg$parse(input, options) {
4481
4508
  s1 = peg$parseparameter();
4482
4509
  if (s1 !== peg$FAILED) {
4483
4510
  peg$savedPos = s0;
4484
- s1 = peg$f75(s1);
4511
+ s1 = peg$f76(s1);
4485
4512
  }
4486
4513
  s0 = s1;
4487
4514
 
@@ -4510,7 +4537,7 @@ function peg$parse(input, options) {
4510
4537
  s5 = peg$parseexpectClosingParenthesis();
4511
4538
  if (s5 !== peg$FAILED) {
4512
4539
  peg$savedPos = s0;
4513
- s0 = peg$f76(s3);
4540
+ s0 = peg$f77(s3);
4514
4541
  } else {
4515
4542
  peg$currPos = s0;
4516
4543
  s0 = peg$FAILED;
@@ -4545,7 +4572,7 @@ function peg$parse(input, options) {
4545
4572
  s2 = null;
4546
4573
  }
4547
4574
  peg$savedPos = s0;
4548
- s0 = peg$f77(s2);
4575
+ s0 = peg$f78(s2);
4549
4576
  } else {
4550
4577
  peg$currPos = s0;
4551
4578
  s0 = peg$FAILED;
@@ -4581,7 +4608,7 @@ function peg$parse(input, options) {
4581
4608
  s1 = peg$parsepathKeys();
4582
4609
  if (s1 !== peg$FAILED) {
4583
4610
  peg$savedPos = s0;
4584
- s1 = peg$f78(s1);
4611
+ s1 = peg$f79(s1);
4585
4612
  }
4586
4613
  s0 = s1;
4587
4614
 
@@ -4605,7 +4632,7 @@ function peg$parse(input, options) {
4605
4632
  s2 = null;
4606
4633
  }
4607
4634
  peg$savedPos = s0;
4608
- s0 = peg$f79(s1);
4635
+ s0 = peg$f80(s1);
4609
4636
  } else {
4610
4637
  peg$currPos = s0;
4611
4638
  s0 = peg$FAILED;
@@ -4621,7 +4648,7 @@ function peg$parse(input, options) {
4621
4648
  }
4622
4649
  if (s1 !== peg$FAILED) {
4623
4650
  peg$savedPos = s0;
4624
- s1 = peg$f80();
4651
+ s1 = peg$f81();
4625
4652
  }
4626
4653
  s0 = s1;
4627
4654
  }
@@ -4672,7 +4699,7 @@ function peg$parse(input, options) {
4672
4699
  }
4673
4700
  }
4674
4701
  peg$savedPos = s0;
4675
- s0 = peg$f81(s1, s2);
4702
+ s0 = peg$f82(s1, s2);
4676
4703
  } else {
4677
4704
  peg$currPos = s0;
4678
4705
  s0 = peg$FAILED;
@@ -4777,7 +4804,7 @@ function peg$parse(input, options) {
4777
4804
  s4 = peg$parseidentifierLiteral();
4778
4805
  if (s4 !== peg$FAILED) {
4779
4806
  peg$savedPos = s0;
4780
- s0 = peg$f82(s4);
4807
+ s0 = peg$f83(s4);
4781
4808
  } else {
4782
4809
  peg$currPos = s0;
4783
4810
  s0 = peg$FAILED;
@@ -4813,7 +4840,7 @@ function peg$parse(input, options) {
4813
4840
  }
4814
4841
  }
4815
4842
  peg$savedPos = s0;
4816
- s1 = peg$f83(s1);
4843
+ s1 = peg$f84(s1);
4817
4844
  s0 = s1;
4818
4845
 
4819
4846
  return s0;
@@ -4847,7 +4874,7 @@ function peg$parse(input, options) {
4847
4874
  if (s3 !== peg$FAILED) {
4848
4875
  s4 = peg$parseregexFlags();
4849
4876
  peg$savedPos = s0;
4850
- s0 = peg$f84(s2, s4);
4877
+ s0 = peg$f85(s2, s4);
4851
4878
  } else {
4852
4879
  peg$currPos = s0;
4853
4880
  s0 = peg$FAILED;
@@ -4930,7 +4957,7 @@ function peg$parse(input, options) {
4930
4957
  }
4931
4958
  }
4932
4959
  peg$savedPos = s0;
4933
- s0 = peg$f85(s1, s2);
4960
+ s0 = peg$f86(s1, s2);
4934
4961
  } else {
4935
4962
  peg$currPos = s0;
4936
4963
  s0 = peg$FAILED;
@@ -5045,7 +5072,7 @@ function peg$parse(input, options) {
5045
5072
  }
5046
5073
  }
5047
5074
  peg$savedPos = s0;
5048
- s0 = peg$f86();
5075
+ s0 = peg$f87();
5049
5076
  } else {
5050
5077
  peg$currPos = s0;
5051
5078
  s0 = peg$FAILED;
@@ -5058,7 +5085,7 @@ function peg$parse(input, options) {
5058
5085
  var s0;
5059
5086
 
5060
5087
  peg$savedPos = peg$currPos;
5061
- s0 = peg$f87();
5088
+ s0 = peg$f88();
5062
5089
  if (s0) {
5063
5090
  s0 = undefined;
5064
5091
  } else {
@@ -5111,7 +5138,7 @@ function peg$parse(input, options) {
5111
5138
  }
5112
5139
  }
5113
5140
  peg$savedPos = s0;
5114
- s0 = peg$f88(s1, s2);
5141
+ s0 = peg$f89(s1, s2);
5115
5142
  } else {
5116
5143
  peg$currPos = s0;
5117
5144
  s0 = peg$FAILED;
@@ -5188,7 +5215,7 @@ function peg$parse(input, options) {
5188
5215
  s5 = peg$parseimplicitParenthesesCallExpression();
5189
5216
  if (s5 !== peg$FAILED) {
5190
5217
  peg$savedPos = s0;
5191
- s0 = peg$f89(s5);
5218
+ s0 = peg$f90(s5);
5192
5219
  } else {
5193
5220
  peg$currPos = s0;
5194
5221
  s0 = peg$FAILED;
@@ -5271,7 +5298,7 @@ function peg$parse(input, options) {
5271
5298
  }
5272
5299
  }
5273
5300
  peg$savedPos = s0;
5274
- s0 = peg$f90();
5301
+ s0 = peg$f91();
5275
5302
  } else {
5276
5303
  peg$currPos = s0;
5277
5304
  s0 = peg$FAILED;
@@ -5302,7 +5329,7 @@ function peg$parse(input, options) {
5302
5329
  s3 = peg$parseexpectSingleQuote();
5303
5330
  if (s3 !== peg$FAILED) {
5304
5331
  peg$savedPos = s0;
5305
- s0 = peg$f91(s2);
5332
+ s0 = peg$f92(s2);
5306
5333
  } else {
5307
5334
  peg$currPos = s0;
5308
5335
  s0 = peg$FAILED;
@@ -5366,7 +5393,7 @@ function peg$parse(input, options) {
5366
5393
  s1 = peg$parseslashFollows();
5367
5394
  if (s1 !== peg$FAILED) {
5368
5395
  peg$savedPos = s0;
5369
- s1 = peg$f92();
5396
+ s1 = peg$f93();
5370
5397
  }
5371
5398
  s0 = s1;
5372
5399
 
@@ -5401,7 +5428,7 @@ function peg$parse(input, options) {
5401
5428
  }
5402
5429
  if (s1 !== peg$FAILED) {
5403
5430
  peg$savedPos = s0;
5404
- s1 = peg$f93();
5431
+ s1 = peg$f94();
5405
5432
  }
5406
5433
  s0 = s1;
5407
5434
 
@@ -5430,7 +5457,7 @@ function peg$parse(input, options) {
5430
5457
  }
5431
5458
  if (s1 !== peg$FAILED) {
5432
5459
  peg$savedPos = s0;
5433
- s1 = peg$f94();
5460
+ s1 = peg$f95();
5434
5461
  }
5435
5462
  s0 = s1;
5436
5463
 
@@ -5447,7 +5474,7 @@ function peg$parse(input, options) {
5447
5474
  s3 = peg$parseexpectPipelineExpression();
5448
5475
  if (s3 !== peg$FAILED) {
5449
5476
  peg$savedPos = s0;
5450
- s0 = peg$f95(s3);
5477
+ s0 = peg$f96(s3);
5451
5478
  } else {
5452
5479
  peg$currPos = s0;
5453
5480
  s0 = peg$FAILED;
@@ -5524,7 +5551,7 @@ function peg$parse(input, options) {
5524
5551
  }
5525
5552
  }
5526
5553
  peg$savedPos = s0;
5527
- s0 = peg$f96(s1, s2);
5554
+ s0 = peg$f97(s1, s2);
5528
5555
  peg$silentFails--;
5529
5556
  s1 = peg$FAILED;
5530
5557
  if (peg$silentFails === 0) { peg$fail(peg$e102); }
@@ -5580,7 +5607,7 @@ function peg$parse(input, options) {
5580
5607
  s2 = peg$parsetemplateBodyChar();
5581
5608
  }
5582
5609
  peg$savedPos = s0;
5583
- s1 = peg$f97(s1);
5610
+ s1 = peg$f98(s1);
5584
5611
  s0 = s1;
5585
5612
  peg$silentFails--;
5586
5613
  s1 = peg$FAILED;
@@ -5599,7 +5626,7 @@ function peg$parse(input, options) {
5599
5626
  s2 = peg$parse__();
5600
5627
  s3 = peg$parsetemplateBody();
5601
5628
  peg$savedPos = s0;
5602
- s0 = peg$f98(s1, s3);
5629
+ s0 = peg$f99(s1, s3);
5603
5630
  } else {
5604
5631
  peg$currPos = s0;
5605
5632
  s0 = peg$FAILED;
@@ -5610,7 +5637,7 @@ function peg$parse(input, options) {
5610
5637
  if (s1 !== peg$FAILED) {
5611
5638
  s2 = peg$parsetemplateBody();
5612
5639
  peg$savedPos = s0;
5613
- s0 = peg$f99(s1, s2);
5640
+ s0 = peg$f100(s1, s2);
5614
5641
  } else {
5615
5642
  peg$currPos = s0;
5616
5643
  s0 = peg$FAILED;
@@ -5619,7 +5646,7 @@ function peg$parse(input, options) {
5619
5646
  s0 = peg$currPos;
5620
5647
  s1 = peg$parsetemplateBody();
5621
5648
  peg$savedPos = s0;
5622
- s1 = peg$f100(s1);
5649
+ s1 = peg$f101(s1);
5623
5650
  s0 = s1;
5624
5651
  }
5625
5652
  }
@@ -5673,7 +5700,7 @@ function peg$parse(input, options) {
5673
5700
  s4 = peg$parseexpectBacktick();
5674
5701
  if (s4 !== peg$FAILED) {
5675
5702
  peg$savedPos = s0;
5676
- s0 = peg$f101(s2, s3);
5703
+ s0 = peg$f102(s2, s3);
5677
5704
  } else {
5678
5705
  peg$currPos = s0;
5679
5706
  s0 = peg$FAILED;
@@ -5747,7 +5774,7 @@ function peg$parse(input, options) {
5747
5774
  s2 = peg$parsetemplateLiteralChar();
5748
5775
  }
5749
5776
  peg$savedPos = s0;
5750
- s1 = peg$f102(s1);
5777
+ s1 = peg$f103(s1);
5751
5778
  s0 = s1;
5752
5779
 
5753
5780
  return s0;
@@ -5777,7 +5804,7 @@ function peg$parse(input, options) {
5777
5804
  }
5778
5805
  if (s3 !== peg$FAILED) {
5779
5806
  peg$savedPos = s0;
5780
- s0 = peg$f103(s2);
5807
+ s0 = peg$f104(s2);
5781
5808
  } else {
5782
5809
  peg$currPos = s0;
5783
5810
  s0 = peg$FAILED;
@@ -5823,10 +5850,10 @@ function peg$parse(input, options) {
5823
5850
  s1 = peg$parseunaryOperator();
5824
5851
  if (s1 !== peg$FAILED) {
5825
5852
  s2 = peg$parse__();
5826
- s3 = peg$parseexpectExpression();
5853
+ s3 = peg$parseexpectUnaryExpression();
5827
5854
  if (s3 !== peg$FAILED) {
5828
5855
  peg$savedPos = s0;
5829
- s0 = peg$f104(s1, s3);
5856
+ s0 = peg$f105(s1, s3);
5830
5857
  } else {
5831
5858
  peg$currPos = s0;
5832
5859
  s0 = peg$FAILED;
@@ -5883,7 +5910,7 @@ function peg$parse(input, options) {
5883
5910
  s4 = null;
5884
5911
  }
5885
5912
  peg$savedPos = s0;
5886
- s0 = peg$f105(s1, s3, s4);
5913
+ s0 = peg$f106(s1, s3, s4);
5887
5914
  } else {
5888
5915
  peg$currPos = s0;
5889
5916
  s0 = peg$FAILED;
@@ -5903,7 +5930,7 @@ function peg$parse(input, options) {
5903
5930
  s2 = peg$parsepathKeys();
5904
5931
  if (s2 !== peg$FAILED) {
5905
5932
  peg$savedPos = s0;
5906
- s0 = peg$f106(s1, s2);
5933
+ s0 = peg$f107(s1, s2);
5907
5934
  } else {
5908
5935
  peg$currPos = s0;
5909
5936
  s0 = peg$FAILED;
@@ -5957,7 +5984,7 @@ function peg$parse(input, options) {
5957
5984
  s2 = null;
5958
5985
  }
5959
5986
  peg$savedPos = s0;
5960
- s0 = peg$f107(s1);
5987
+ s0 = peg$f108(s1);
5961
5988
  } else {
5962
5989
  peg$currPos = s0;
5963
5990
  s0 = peg$FAILED;
@@ -5973,7 +6000,7 @@ function peg$parse(input, options) {
5973
6000
  }
5974
6001
  if (s1 !== peg$FAILED) {
5975
6002
  peg$savedPos = s0;
5976
- s1 = peg$f108();
6003
+ s1 = peg$f109();
5977
6004
  }
5978
6005
  s0 = s1;
5979
6006
  }
@@ -6018,7 +6045,7 @@ function peg$parse(input, options) {
6018
6045
  }
6019
6046
  if (s1 !== peg$FAILED) {
6020
6047
  peg$savedPos = s0;
6021
- s1 = peg$f109(s1);
6048
+ s1 = peg$f110(s1);
6022
6049
  }
6023
6050
  s0 = s1;
6024
6051
  peg$silentFails--;
@@ -6069,7 +6096,7 @@ function peg$parse(input, options) {
6069
6096
  }
6070
6097
  if (s3 !== peg$FAILED) {
6071
6098
  peg$savedPos = s0;
6072
- s0 = peg$f110();
6099
+ s0 = peg$f111();
6073
6100
  } else {
6074
6101
  peg$currPos = s0;
6075
6102
  s0 = peg$FAILED;
@@ -6247,6 +6274,7 @@ const peg$allowedStartRules = [
6247
6274
  "expectGuillemet",
6248
6275
  "expectSingleQuote",
6249
6276
  "expectPipelineExpression",
6277
+ "expectUnaryExpression",
6250
6278
  "exponentiationExpression",
6251
6279
  "expression",
6252
6280
  "floatLiteral",
@@ -618,6 +618,12 @@ Body`,
618
618
  [markers.traverse, [markers.reference, "keys"]],
619
619
  [markers.traverse, [markers.external, "~"]],
620
620
  ]);
621
+ assertParse("expression", "!x ? 0 : 1", [
622
+ ops.conditional,
623
+ [ops.logicalNot, [markers.traverse, [markers.reference, "x"]]],
624
+ [ops.literal, 0],
625
+ [ops.literal, 1],
626
+ ]);
621
627
  });
622
628
 
623
629
  test("complex object", () => {