@weborigami/language 0.0.65-beta.1 → 0.0.65

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.
@@ -191,7 +191,7 @@ function peg$parse(input, options) {
191
191
  var peg$FAILED = {};
192
192
  var peg$source = options.grammarSource;
193
193
 
194
- var peg$startRuleFunctions = { __: peg$parse__, absoluteFilePath: peg$parseabsoluteFilePath, args: peg$parseargs, array: peg$parsearray, arrayEntries: peg$parsearrayEntries, arrayEntry: peg$parsearrayEntry, callTarget: peg$parsecallTarget, closingBrace: peg$parseclosingBrace, closingBracket: peg$parseclosingBracket, closingParen: peg$parseclosingParen, comment: peg$parsecomment, digits: peg$parsedigits, doubleArrow: peg$parsedoubleArrow, doubleQuoteString: peg$parsedoubleQuoteString, doubleQuoteStringChar: peg$parsedoubleQuoteStringChar, ellipsis: peg$parseellipsis, escapedChar: peg$parseescapedChar, expr: peg$parseexpr, expression: peg$parseexpression, float: peg$parsefloat, functionComposition: peg$parsefunctionComposition, group: peg$parsegroup, guillemetString: peg$parseguillemetString, guillemetStringChar: peg$parseguillemetStringChar, host: peg$parsehost, identifier: peg$parseidentifier, identifierChar: peg$parseidentifierChar, identifierList: peg$parseidentifierList, identifierOrString: peg$parseidentifierOrString, implicitParensArgs: peg$parseimplicitParensArgs, inlineSpace: peg$parseinlineSpace, integer: peg$parseinteger, lambda: peg$parselambda, leadingSlashPath: peg$parseleadingSlashPath, list: peg$parselist, multiLineComment: peg$parsemultiLineComment, newLine: peg$parsenewLine, number: peg$parsenumber, object: peg$parseobject, objectEntries: peg$parseobjectEntries, objectEntry: peg$parseobjectEntry, objectGetter: peg$parseobjectGetter, objectIdentifier: peg$parseobjectIdentifier, objectKey: peg$parseobjectKey, objectProperty: peg$parseobjectProperty, parameterizedLambda: peg$parseparameterizedLambda, parensArgs: peg$parseparensArgs, pipeline: peg$parsepipeline, path: peg$parsepath, pathKey: peg$parsepathKey, pathKeyChar: peg$parsepathKeyChar, protocolCall: peg$parseprotocolCall, protocol: peg$parseprotocol, reservedProtocol: peg$parsereservedProtocol, scopeReference: peg$parsescopeReference, separator: peg$parseseparator, shebang: peg$parseshebang, sign: peg$parsesign, singleArrow: peg$parsesingleArrow, singleLineComment: peg$parsesingleLineComment, singleQuoteString: peg$parsesingleQuoteString, singleQuoteStringChar: peg$parsesingleQuoteStringChar, spread: peg$parsespread, step: peg$parsestep, start: peg$parsestart, string: peg$parsestring, templateDocument: peg$parsetemplateDocument, templateDocumentChar: peg$parsetemplateDocumentChar, templateDocumentContents: peg$parsetemplateDocumentContents, templateDocumentText: peg$parsetemplateDocumentText, templateLiteral: peg$parsetemplateLiteral, templateLiteralChar: peg$parsetemplateLiteralChar, templateLiteralContents: peg$parsetemplateLiteralContents, templateLiteralText: peg$parsetemplateLiteralText, templateSubstitution: peg$parsetemplateSubstitution, textChar: peg$parsetextChar, whitespaceWithNewLine: peg$parsewhitespaceWithNewLine };
194
+ var peg$startRuleFunctions = { __: peg$parse__, absoluteFilePath: peg$parseabsoluteFilePath, args: peg$parseargs, array: peg$parsearray, arrayEntries: peg$parsearrayEntries, arrayEntry: peg$parsearrayEntry, callTarget: peg$parsecallTarget, closingBrace: peg$parseclosingBrace, closingBracket: peg$parseclosingBracket, closingParen: peg$parseclosingParen, comment: peg$parsecomment, digits: peg$parsedigits, doubleArrow: peg$parsedoubleArrow, doubleQuoteString: peg$parsedoubleQuoteString, doubleQuoteStringChar: peg$parsedoubleQuoteStringChar, ellipsis: peg$parseellipsis, escapedChar: peg$parseescapedChar, expr: peg$parseexpr, expression: peg$parseexpression, float: peg$parsefloat, functionComposition: peg$parsefunctionComposition, group: peg$parsegroup, guillemetString: peg$parseguillemetString, guillemetStringChar: peg$parseguillemetStringChar, host: peg$parsehost, identifier: peg$parseidentifier, identifierChar: peg$parseidentifierChar, identifierList: peg$parseidentifierList, implicitParensArgs: peg$parseimplicitParensArgs, inlineSpace: peg$parseinlineSpace, integer: peg$parseinteger, lambda: peg$parselambda, leadingSlashPath: peg$parseleadingSlashPath, list: peg$parselist, multiLineComment: peg$parsemultiLineComment, newLine: peg$parsenewLine, number: peg$parsenumber, object: peg$parseobject, objectEntries: peg$parseobjectEntries, objectEntry: peg$parseobjectEntry, objectGetter: peg$parseobjectGetter, objectHiddenKey: peg$parseobjectHiddenKey, objectKey: peg$parseobjectKey, objectPublicKey: peg$parseobjectPublicKey, objectProperty: peg$parseobjectProperty, objectShorthandProperty: peg$parseobjectShorthandProperty, parameterizedLambda: peg$parseparameterizedLambda, parensArgs: peg$parseparensArgs, pipeline: peg$parsepipeline, path: peg$parsepath, pathKey: peg$parsepathKey, pathKeyChar: peg$parsepathKeyChar, protocolCall: peg$parseprotocolCall, protocol: peg$parseprotocol, reservedProtocol: peg$parsereservedProtocol, scopeReference: peg$parsescopeReference, separator: peg$parseseparator, shebang: peg$parseshebang, sign: peg$parsesign, singleArrow: peg$parsesingleArrow, singleLineComment: peg$parsesingleLineComment, singleQuoteString: peg$parsesingleQuoteString, singleQuoteStringChar: peg$parsesingleQuoteStringChar, spread: peg$parsespread, step: peg$parsestep, start: peg$parsestart, string: peg$parsestring, templateDocument: peg$parsetemplateDocument, templateDocumentChar: peg$parsetemplateDocumentChar, templateDocumentContents: peg$parsetemplateDocumentContents, templateDocumentText: peg$parsetemplateDocumentText, templateLiteral: peg$parsetemplateLiteral, templateLiteralChar: peg$parsetemplateLiteralChar, templateLiteralContents: peg$parsetemplateLiteralContents, templateLiteralText: peg$parsetemplateLiteralText, templateSubstitution: peg$parsetemplateSubstitution, textChar: peg$parsetextChar, whitespaceWithNewLine: peg$parsewhitespaceWithNewLine };
195
195
  var peg$startRuleFunction = peg$parse__;
196
196
 
197
197
  var peg$c0 = "//";
@@ -308,9 +308,9 @@ function peg$parse(input, options) {
308
308
  var peg$e56 = peg$otherExpectation("object literal");
309
309
  var peg$e57 = peg$literalExpectation("{", false);
310
310
  var peg$e58 = peg$otherExpectation("object getter");
311
- var peg$e59 = peg$otherExpectation("object identifier");
312
- var peg$e60 = peg$otherExpectation("object key");
313
- var peg$e61 = peg$otherExpectation("object property");
311
+ var peg$e59 = peg$otherExpectation("object key");
312
+ var peg$e60 = peg$otherExpectation("object property");
313
+ var peg$e61 = peg$otherExpectation("object identifier");
314
314
  var peg$e62 = peg$otherExpectation("function arguments in parentheses");
315
315
  var peg$e63 = peg$otherExpectation("slash-separated path");
316
316
  var peg$e64 = peg$otherExpectation("path element");
@@ -342,7 +342,9 @@ function peg$parse(input, options) {
342
342
  var peg$e90 = peg$literalExpectation("`", false);
343
343
  var peg$e91 = peg$otherExpectation("template substitution");
344
344
 
345
- var peg$f0 = function() { return ""; };
345
+ var peg$f0 = function() {
346
+ return null;
347
+ };
346
348
  var peg$f1 = function(path) {
347
349
  return annotate([[ops.filesRoot], ...path], location());
348
350
  };
@@ -364,7 +366,9 @@ function peg$parse(input, options) {
364
366
  var peg$f7 = function() {
365
367
  error("Expected right parenthesis");
366
368
  };
367
- var peg$f8 = function(chars) { return chars.join(""); };
369
+ var peg$f8 = function(chars) {
370
+ return annotate([ops.primitive, chars.join("")], location());
371
+ };
368
372
  var peg$f9 = function() { return "\0"; };
369
373
  var peg$f10 = function() { return "\b"; };
370
374
  var peg$f11 = function() { return "\f"; };
@@ -373,19 +377,23 @@ function peg$parse(input, options) {
373
377
  var peg$f14 = function() { return "\t"; };
374
378
  var peg$f15 = function() { return "\v"; };
375
379
  var peg$f16 = function() {
376
- return parseFloat(text());
380
+ return annotate([ops.primitive, parseFloat(text())], location());
377
381
  };
378
382
  var peg$f17 = function(target, chain, end) {
379
383
  if (end) {
380
384
  chain.push(end);
381
385
  }
382
- return annotate(makeFunctionCall(target, chain), location());
386
+ return annotate(makeFunctionCall(target, chain, location()), location());
383
387
  };
384
388
  var peg$f18 = function(expr) {
385
389
  return annotate(expr, location());
386
390
  };
387
- var peg$f19 = function(chars) { return chars.join(""); };
388
- var peg$f20 = function() { return text(); };
391
+ var peg$f19 = function(chars) {
392
+ return annotate([ops.primitive, chars.join("")], location());
393
+ };
394
+ var peg$f20 = function() {
395
+ return annotate([ops.primitive, text()], location());
396
+ };
389
397
  var peg$f21 = function(chars) { return chars.join(""); };
390
398
  var peg$f22 = function(list) {
391
399
  return annotate(list, location());
@@ -395,7 +403,7 @@ function peg$parse(input, options) {
395
403
  return annotate(args, location());
396
404
  };
397
405
  var peg$f24 = function() {
398
- return parseInt(text());
406
+ return annotate([ops.primitive, parseInt(text())], location());
399
407
  };
400
408
  var peg$f25 = function(expr) {
401
409
  return annotate([ops.lambda, null, expr], location());
@@ -419,60 +427,72 @@ function peg$parse(input, options) {
419
427
  var peg$f32 = function(key, value) {
420
428
  return annotate([key, [ops.getter, value]], location());
421
429
  };
422
- var peg$f33 = function(key) {
423
- return annotate([key, [ops.inherited, key]], location());
424
- };
425
- var peg$f34 = function(hiddenKey) { return hiddenKey.join(""); };
430
+ var peg$f33 = function(hiddenKey) { return hiddenKey.join(""); };
431
+ var peg$f34 = function(string) {
432
+ // Remove `ops.primitive` from the string code
433
+ return string[1];
434
+ };
426
435
  var peg$f35 = function(key, value) {
427
436
  return annotate([key, value], location());
428
437
  };
429
- var peg$f36 = function(parameters, expr) {
438
+ var peg$f36 = function(key) {
439
+ return annotate([key, [ops.inherited, key]], location());
440
+ };
441
+ var peg$f37 = function(parameters, expr) {
430
442
  return annotate([ops.lambda, parameters ?? [], expr], location());
431
443
  };
432
- var peg$f37 = function(list) {
444
+ var peg$f38 = function(list) {
433
445
  return annotate(list ?? [undefined], location());
434
446
  };
435
- var peg$f38 = function(steps) {
447
+ var peg$f39 = function(steps) {
436
448
  return annotate(makePipeline(steps), location());
437
449
  };
438
- var peg$f39 = function(path) {
450
+ var peg$f40 = function(path) {
439
451
  return annotate(path, location());
440
452
  };
441
- var peg$f40 = function(chars) { return chars.join(""); };
442
- var peg$f41 = function(protocol, host, path) {
453
+ var peg$f41 = function(chars) {
454
+ return annotate([ops.primitive, chars.join("")], location());
455
+ };
456
+ var peg$f42 = function(protocol, host, path) {
443
457
  return annotate([protocol, host, ...(path ?? [])], location());
444
458
  };
445
- var peg$f42 = function() { return ops.https; };
446
- var peg$f43 = function() { return ops.http; };
447
- var peg$f44 = function() { return ops.constructor; };
448
- var peg$f45 = function() { return [ops.scope, "@package"] };
449
- var peg$f46 = function() { return ops.treeHttps; };
450
- var peg$f47 = function() { return ops.treeHttp; };
451
- var peg$f48 = function() { return ops.treeHttps; };
452
- var peg$f49 = function(key) {
459
+ var peg$f43 = function() { return ops.https; };
460
+ var peg$f44 = function() { return ops.http; };
461
+ var peg$f45 = function() { return ops.constructor; };
462
+ var peg$f46 = function() { return [ops.scope, "@package"] };
463
+ var peg$f47 = function() { return ops.treeHttps; };
464
+ var peg$f48 = function() { return ops.treeHttp; };
465
+ var peg$f49 = function() { return ops.treeHttps; };
466
+ var peg$f50 = function(key) {
453
467
  return annotate([ops.scope, key], location());
454
468
  };
455
- var peg$f50 = function() { return null; };
456
469
  var peg$f51 = function() { return null; };
457
- var peg$f52 = function(chars) { return chars.join(""); };
458
- var peg$f53 = function(expr) {
470
+ var peg$f52 = function() { return null; };
471
+ var peg$f53 = function(chars) {
472
+ return annotate([ops.primitive, chars.join("")], location());
473
+ };
474
+ var peg$f54 = function(expr) {
459
475
  return annotate([ops.spread, expr], location());
460
476
  };
461
- var peg$f54 = function(contents) {
477
+ var peg$f55 = function(contents) {
462
478
  return annotate([ops.lambda, null, contents], location());
463
479
  };
464
- var peg$f55 = function(parts) {
480
+ var peg$f56 = function(parts) {
465
481
  return annotate(makeTemplate(parts), location());
466
482
  };
467
- var peg$f56 = function(chars) { return chars.join(""); };
468
- var peg$f57 = function(contents) {
483
+ var peg$f57 = function(chars) {
484
+ return annotate([ops.primitive, chars.join("")], location());
485
+ };
486
+ var peg$f58 = function(contents) {
469
487
  return annotate(contents, location());
470
488
  };
471
- var peg$f58 = function(parts) {
489
+ var peg$f59 = function(parts) {
472
490
  return annotate(makeTemplate(parts), location());
473
491
  };
474
- var peg$f59 = function(chars) { return chars.join(""); };
475
- var peg$f60 = function(expr) {
492
+ var peg$f60 = function(chars) {
493
+ return annotate([ops.primitive, chars.join("")], location());
494
+ };
495
+ var peg$f61 = function(expr) {
476
496
  return annotate(expr, location());
477
497
  };
478
498
  var peg$currPos = options.peg$currPos | 0;
@@ -1689,17 +1709,6 @@ function peg$parse(input, options) {
1689
1709
  return s0;
1690
1710
  }
1691
1711
 
1692
- function peg$parseidentifierOrString() {
1693
- var s0;
1694
-
1695
- s0 = peg$parseidentifier();
1696
- if (s0 === peg$FAILED) {
1697
- s0 = peg$parsestring();
1698
- }
1699
-
1700
- return s0;
1701
- }
1702
-
1703
1712
  function peg$parseimplicitParensArgs() {
1704
1713
  var s0, s1, s2, s3, s4, s5;
1705
1714
 
@@ -2186,7 +2195,7 @@ function peg$parse(input, options) {
2186
2195
  if (s0 === peg$FAILED) {
2187
2196
  s0 = peg$parseobjectGetter();
2188
2197
  if (s0 === peg$FAILED) {
2189
- s0 = peg$parseobjectIdentifier();
2198
+ s0 = peg$parseobjectShorthandProperty();
2190
2199
  }
2191
2200
  }
2192
2201
  }
@@ -2236,30 +2245,9 @@ function peg$parse(input, options) {
2236
2245
  return s0;
2237
2246
  }
2238
2247
 
2239
- function peg$parseobjectIdentifier() {
2240
- var s0, s1;
2241
-
2242
- peg$silentFails++;
2243
- s0 = peg$currPos;
2244
- s1 = peg$parseidentifierOrString();
2245
- if (s1 !== peg$FAILED) {
2246
- peg$savedPos = s0;
2247
- s1 = peg$f33(s1);
2248
- }
2249
- s0 = s1;
2250
- peg$silentFails--;
2251
- if (s0 === peg$FAILED) {
2252
- s1 = peg$FAILED;
2253
- if (peg$silentFails === 0) { peg$fail(peg$e59); }
2254
- }
2255
-
2256
- return s0;
2257
- }
2258
-
2259
- function peg$parseobjectKey() {
2248
+ function peg$parseobjectHiddenKey() {
2260
2249
  var s0, s1, s2, s3, s4;
2261
2250
 
2262
- peg$silentFails++;
2263
2251
  s0 = peg$currPos;
2264
2252
  s1 = peg$currPos;
2265
2253
  if (input.charCodeAt(peg$currPos) === 40) {
@@ -2270,7 +2258,7 @@ function peg$parse(input, options) {
2270
2258
  if (peg$silentFails === 0) { peg$fail(peg$e32); }
2271
2259
  }
2272
2260
  if (s2 !== peg$FAILED) {
2273
- s3 = peg$parseidentifierOrString();
2261
+ s3 = peg$parseobjectPublicKey();
2274
2262
  if (s3 !== peg$FAILED) {
2275
2263
  if (input.charCodeAt(peg$currPos) === 41) {
2276
2264
  s4 = peg$c4;
@@ -2296,16 +2284,42 @@ function peg$parse(input, options) {
2296
2284
  }
2297
2285
  if (s1 !== peg$FAILED) {
2298
2286
  peg$savedPos = s0;
2299
- s1 = peg$f34(s1);
2287
+ s1 = peg$f33(s1);
2300
2288
  }
2301
2289
  s0 = s1;
2290
+
2291
+ return s0;
2292
+ }
2293
+
2294
+ function peg$parseobjectKey() {
2295
+ var s0, s1;
2296
+
2297
+ peg$silentFails++;
2298
+ s0 = peg$parseobjectHiddenKey();
2302
2299
  if (s0 === peg$FAILED) {
2303
- s0 = peg$parseidentifierOrString();
2300
+ s0 = peg$parseobjectPublicKey();
2304
2301
  }
2305
2302
  peg$silentFails--;
2306
2303
  if (s0 === peg$FAILED) {
2307
2304
  s1 = peg$FAILED;
2308
- if (peg$silentFails === 0) { peg$fail(peg$e60); }
2305
+ if (peg$silentFails === 0) { peg$fail(peg$e59); }
2306
+ }
2307
+
2308
+ return s0;
2309
+ }
2310
+
2311
+ function peg$parseobjectPublicKey() {
2312
+ var s0, s1;
2313
+
2314
+ s0 = peg$parseidentifier();
2315
+ if (s0 === peg$FAILED) {
2316
+ s0 = peg$currPos;
2317
+ s1 = peg$parsestring();
2318
+ if (s1 !== peg$FAILED) {
2319
+ peg$savedPos = s0;
2320
+ s1 = peg$f34(s1);
2321
+ }
2322
+ s0 = s1;
2309
2323
  }
2310
2324
 
2311
2325
  return s0;
@@ -2345,6 +2359,26 @@ function peg$parse(input, options) {
2345
2359
  s0 = peg$FAILED;
2346
2360
  }
2347
2361
  peg$silentFails--;
2362
+ if (s0 === peg$FAILED) {
2363
+ s1 = peg$FAILED;
2364
+ if (peg$silentFails === 0) { peg$fail(peg$e60); }
2365
+ }
2366
+
2367
+ return s0;
2368
+ }
2369
+
2370
+ function peg$parseobjectShorthandProperty() {
2371
+ var s0, s1;
2372
+
2373
+ peg$silentFails++;
2374
+ s0 = peg$currPos;
2375
+ s1 = peg$parseobjectPublicKey();
2376
+ if (s1 !== peg$FAILED) {
2377
+ peg$savedPos = s0;
2378
+ s1 = peg$f36(s1);
2379
+ }
2380
+ s0 = s1;
2381
+ peg$silentFails--;
2348
2382
  if (s0 === peg$FAILED) {
2349
2383
  s1 = peg$FAILED;
2350
2384
  if (peg$silentFails === 0) { peg$fail(peg$e61); }
@@ -2386,7 +2420,7 @@ function peg$parse(input, options) {
2386
2420
  s9 = peg$parsepipeline();
2387
2421
  if (s9 !== peg$FAILED) {
2388
2422
  peg$savedPos = s0;
2389
- s0 = peg$f36(s3, s9);
2423
+ s0 = peg$f37(s3, s9);
2390
2424
  } else {
2391
2425
  peg$currPos = s0;
2392
2426
  s0 = peg$FAILED;
@@ -2435,7 +2469,7 @@ function peg$parse(input, options) {
2435
2469
  }
2436
2470
  if (s5 !== peg$FAILED) {
2437
2471
  peg$savedPos = s0;
2438
- s0 = peg$f37(s3);
2472
+ s0 = peg$f38(s3);
2439
2473
  } else {
2440
2474
  peg$currPos = s0;
2441
2475
  s0 = peg$FAILED;
@@ -2501,7 +2535,7 @@ function peg$parse(input, options) {
2501
2535
  }
2502
2536
  if (s1 !== peg$FAILED) {
2503
2537
  peg$savedPos = s0;
2504
- s1 = peg$f38(s1);
2538
+ s1 = peg$f39(s1);
2505
2539
  }
2506
2540
  s0 = s1;
2507
2541
 
@@ -2540,7 +2574,7 @@ function peg$parse(input, options) {
2540
2574
  s1 = s2;
2541
2575
  }
2542
2576
  peg$savedPos = s0;
2543
- s1 = peg$f39(s1);
2577
+ s1 = peg$f40(s1);
2544
2578
  s0 = s1;
2545
2579
  peg$silentFails--;
2546
2580
  s1 = peg$FAILED;
@@ -2561,7 +2595,7 @@ function peg$parse(input, options) {
2561
2595
  s2 = peg$parsepathKeyChar();
2562
2596
  }
2563
2597
  peg$savedPos = s0;
2564
- s1 = peg$f40(s1);
2598
+ s1 = peg$f41(s1);
2565
2599
  s0 = s1;
2566
2600
  peg$silentFails--;
2567
2601
  s1 = peg$FAILED;
@@ -2631,7 +2665,7 @@ function peg$parse(input, options) {
2631
2665
  s5 = null;
2632
2666
  }
2633
2667
  peg$savedPos = s0;
2634
- s0 = peg$f41(s1, s4, s5);
2668
+ s0 = peg$f42(s1, s4, s5);
2635
2669
  } else {
2636
2670
  peg$currPos = s0;
2637
2671
  s0 = peg$FAILED;
@@ -2684,7 +2718,7 @@ function peg$parse(input, options) {
2684
2718
  }
2685
2719
  if (s1 !== peg$FAILED) {
2686
2720
  peg$savedPos = s0;
2687
- s1 = peg$f42();
2721
+ s1 = peg$f43();
2688
2722
  }
2689
2723
  s0 = s1;
2690
2724
  if (s0 === peg$FAILED) {
@@ -2698,7 +2732,7 @@ function peg$parse(input, options) {
2698
2732
  }
2699
2733
  if (s1 !== peg$FAILED) {
2700
2734
  peg$savedPos = s0;
2701
- s1 = peg$f43();
2735
+ s1 = peg$f44();
2702
2736
  }
2703
2737
  s0 = s1;
2704
2738
  if (s0 === peg$FAILED) {
@@ -2712,7 +2746,7 @@ function peg$parse(input, options) {
2712
2746
  }
2713
2747
  if (s1 !== peg$FAILED) {
2714
2748
  peg$savedPos = s0;
2715
- s1 = peg$f44();
2749
+ s1 = peg$f45();
2716
2750
  }
2717
2751
  s0 = s1;
2718
2752
  if (s0 === peg$FAILED) {
@@ -2726,7 +2760,7 @@ function peg$parse(input, options) {
2726
2760
  }
2727
2761
  if (s1 !== peg$FAILED) {
2728
2762
  peg$savedPos = s0;
2729
- s1 = peg$f45();
2763
+ s1 = peg$f46();
2730
2764
  }
2731
2765
  s0 = s1;
2732
2766
  if (s0 === peg$FAILED) {
@@ -2740,7 +2774,7 @@ function peg$parse(input, options) {
2740
2774
  }
2741
2775
  if (s1 !== peg$FAILED) {
2742
2776
  peg$savedPos = s0;
2743
- s1 = peg$f46();
2777
+ s1 = peg$f47();
2744
2778
  }
2745
2779
  s0 = s1;
2746
2780
  if (s0 === peg$FAILED) {
@@ -2754,7 +2788,7 @@ function peg$parse(input, options) {
2754
2788
  }
2755
2789
  if (s1 !== peg$FAILED) {
2756
2790
  peg$savedPos = s0;
2757
- s1 = peg$f47();
2791
+ s1 = peg$f48();
2758
2792
  }
2759
2793
  s0 = s1;
2760
2794
  if (s0 === peg$FAILED) {
@@ -2768,7 +2802,7 @@ function peg$parse(input, options) {
2768
2802
  }
2769
2803
  if (s1 !== peg$FAILED) {
2770
2804
  peg$savedPos = s0;
2771
- s1 = peg$f48();
2805
+ s1 = peg$f49();
2772
2806
  }
2773
2807
  s0 = s1;
2774
2808
  }
@@ -2794,7 +2828,7 @@ function peg$parse(input, options) {
2794
2828
  s1 = peg$parseidentifier();
2795
2829
  if (s1 !== peg$FAILED) {
2796
2830
  peg$savedPos = s0;
2797
- s1 = peg$f49(s1);
2831
+ s1 = peg$f50(s1);
2798
2832
  }
2799
2833
  s0 = s1;
2800
2834
  peg$silentFails--;
@@ -2864,7 +2898,7 @@ function peg$parse(input, options) {
2864
2898
  }
2865
2899
  }
2866
2900
  peg$savedPos = s0;
2867
- s0 = peg$f50();
2901
+ s0 = peg$f51();
2868
2902
  } else {
2869
2903
  peg$currPos = s0;
2870
2904
  s0 = peg$FAILED;
@@ -2941,7 +2975,7 @@ function peg$parse(input, options) {
2941
2975
  }
2942
2976
  }
2943
2977
  peg$savedPos = s0;
2944
- s0 = peg$f51();
2978
+ s0 = peg$f52();
2945
2979
  } else {
2946
2980
  peg$currPos = s0;
2947
2981
  s0 = peg$FAILED;
@@ -2978,7 +3012,7 @@ function peg$parse(input, options) {
2978
3012
  }
2979
3013
  if (s3 !== peg$FAILED) {
2980
3014
  peg$savedPos = s0;
2981
- s0 = peg$f52(s2);
3015
+ s0 = peg$f53(s2);
2982
3016
  } else {
2983
3017
  peg$currPos = s0;
2984
3018
  s0 = peg$FAILED;
@@ -3044,7 +3078,7 @@ function peg$parse(input, options) {
3044
3078
  s2 = peg$parsepipeline();
3045
3079
  if (s2 !== peg$FAILED) {
3046
3080
  peg$savedPos = s0;
3047
- s0 = peg$f53(s2);
3081
+ s0 = peg$f54(s2);
3048
3082
  } else {
3049
3083
  peg$currPos = s0;
3050
3084
  s0 = peg$FAILED;
@@ -3133,7 +3167,7 @@ function peg$parse(input, options) {
3133
3167
  s0 = peg$currPos;
3134
3168
  s1 = peg$parsetemplateDocumentContents();
3135
3169
  peg$savedPos = s0;
3136
- s1 = peg$f54(s1);
3170
+ s1 = peg$f55(s1);
3137
3171
  s0 = s1;
3138
3172
  peg$silentFails--;
3139
3173
  s1 = peg$FAILED;
@@ -3195,7 +3229,7 @@ function peg$parse(input, options) {
3195
3229
  }
3196
3230
  }
3197
3231
  peg$savedPos = s0;
3198
- s1 = peg$f55(s1);
3232
+ s1 = peg$f56(s1);
3199
3233
  s0 = s1;
3200
3234
 
3201
3235
  return s0;
@@ -3218,7 +3252,7 @@ function peg$parse(input, options) {
3218
3252
  }
3219
3253
  if (s1 !== peg$FAILED) {
3220
3254
  peg$savedPos = s0;
3221
- s1 = peg$f56(s1);
3255
+ s1 = peg$f57(s1);
3222
3256
  }
3223
3257
  s0 = s1;
3224
3258
  peg$silentFails--;
@@ -3253,7 +3287,7 @@ function peg$parse(input, options) {
3253
3287
  }
3254
3288
  if (s3 !== peg$FAILED) {
3255
3289
  peg$savedPos = s0;
3256
- s0 = peg$f57(s2);
3290
+ s0 = peg$f58(s2);
3257
3291
  } else {
3258
3292
  peg$currPos = s0;
3259
3293
  s0 = peg$FAILED;
@@ -3333,7 +3367,7 @@ function peg$parse(input, options) {
3333
3367
  }
3334
3368
  }
3335
3369
  peg$savedPos = s0;
3336
- s1 = peg$f58(s1);
3370
+ s1 = peg$f59(s1);
3337
3371
  s0 = s1;
3338
3372
 
3339
3373
  return s0;
@@ -3355,7 +3389,7 @@ function peg$parse(input, options) {
3355
3389
  }
3356
3390
  if (s1 !== peg$FAILED) {
3357
3391
  peg$savedPos = s0;
3358
- s1 = peg$f59(s1);
3392
+ s1 = peg$f60(s1);
3359
3393
  }
3360
3394
  s0 = s1;
3361
3395
 
@@ -3388,7 +3422,7 @@ function peg$parse(input, options) {
3388
3422
  }
3389
3423
  if (s5 !== peg$FAILED) {
3390
3424
  peg$savedPos = s0;
3391
- s0 = peg$f60(s3);
3425
+ s0 = peg$f61(s3);
3392
3426
  } else {
3393
3427
  peg$currPos = s0;
3394
3428
  s0 = peg$FAILED;
@@ -3511,7 +3545,6 @@ const peg$allowedStartRules = [
3511
3545
  "identifier",
3512
3546
  "identifierChar",
3513
3547
  "identifierList",
3514
- "identifierOrString",
3515
3548
  "implicitParensArgs",
3516
3549
  "inlineSpace",
3517
3550
  "integer",
@@ -3525,9 +3558,11 @@ const peg$allowedStartRules = [
3525
3558
  "objectEntries",
3526
3559
  "objectEntry",
3527
3560
  "objectGetter",
3528
- "objectIdentifier",
3561
+ "objectHiddenKey",
3529
3562
  "objectKey",
3563
+ "objectPublicKey",
3530
3564
  "objectProperty",
3565
+ "objectShorthandProperty",
3531
3566
  "parameterizedLambda",
3532
3567
  "parensArgs",
3533
3568
  "pipeline",
@@ -52,7 +52,13 @@ export function makeArray(entries) {
52
52
  * @param {Code[]} chain
53
53
  * @returns
54
54
  */
55
- export function makeFunctionCall(target, chain) {
55
+ export function makeFunctionCall(target, chain, location) {
56
+ if (!(target instanceof Array)) {
57
+ const error = new SyntaxError(`Can't call this like a function: ${target}`);
58
+ /** @type {any} */ (error).location = location;
59
+ throw error;
60
+ }
61
+
56
62
  let value = target;
57
63
  const source = target.location.source;
58
64
  // The chain is an array of arguments (which are themselves arrays). We
@@ -136,7 +142,9 @@ export function makeTemplate(parts) {
136
142
  // empty string. If there's just one string, return that directly.
137
143
  return filtered.length === 0
138
144
  ? ""
139
- : filtered.length === 1 && typeof filtered[0] === "string"
145
+ : filtered.length === 1 &&
146
+ filtered[0][0] === ops.primitive &&
147
+ typeof filtered[0][1] === "string"
140
148
  ? filtered[0]
141
149
  : [ops.concat, ...filtered];
142
150
  }
@@ -0,0 +1,19 @@
1
+ export default function codeFragment(location) {
2
+ const { source, start, end } = location;
3
+
4
+ let fragment =
5
+ start.offset < end.offset
6
+ ? source.text.slice(start.offset, end.offset)
7
+ : // Use entire source
8
+ source.text;
9
+
10
+ // Remove newlines and whitespace runs.
11
+ fragment = fragment.replace(/(\n|\s\s+)+/g, "");
12
+
13
+ // If longer than 80 characters, truncate with an ellipsis.
14
+ if (fragment.length > 80) {
15
+ fragment = fragment.slice(0, 80) + "…";
16
+ }
17
+
18
+ return fragment;
19
+ }
@@ -4,6 +4,7 @@ import {
4
4
  isUnpackable,
5
5
  scope,
6
6
  } from "@weborigami/async-tree";
7
+ import codeFragment from "./codeFragment.js";
7
8
  import { ops } from "./internal.js";
8
9
 
9
10
  const codeSymbol = Symbol("code");
@@ -16,7 +17,7 @@ const sourceSymbol = Symbol("source");
16
17
  * `this` should be the tree used as the context for the evaluation.
17
18
  *
18
19
  * @this {import("@weborigami/types").AsyncTree|null}
19
- * @param {any} code
20
+ * @param {import("../../index.ts").Code} code
20
21
  */
21
22
  export default async function evaluate(code) {
22
23
  const tree = this;
@@ -43,7 +44,11 @@ export default async function evaluate(code) {
43
44
 
44
45
  if (!fn) {
45
46
  // The code wants to invoke something that's couldn't be found in scope.
46
- throw ReferenceError(`${codeFragment(code[0])} is not defined`);
47
+ const error = ReferenceError(
48
+ `${codeFragment(code[0].location)} is not defined`
49
+ );
50
+ /** @type {any} */ (error).location = code.location;
51
+ throw error;
47
52
  }
48
53
 
49
54
  if (isUnpackable(fn)) {
@@ -52,9 +57,12 @@ export default async function evaluate(code) {
52
57
  }
53
58
 
54
59
  if (!Tree.isTreelike(fn)) {
55
- throw TypeError(
56
- `${codeFragment(code[0])} didn't return a function or a treelike object`
60
+ const text = fn.toString?.() ?? codeFragment(code[0].location);
61
+ const error = new TypeError(
62
+ `Not a callable function or tree: ${text.slice(0, 80)}`
57
63
  );
64
+ /** @type {any} */ (error).location = code.location;
65
+ throw error;
58
66
  }
59
67
 
60
68
  // Execute the function or traverse the tree.
@@ -66,8 +74,14 @@ export default async function evaluate(code) {
66
74
  : await Tree.traverseOrThrow(fn, ...args); // Traverse the tree.
67
75
  } catch (/** @type {any} */ error) {
68
76
  if (!error.location) {
69
- // Attach the location of the code we were evaluating.
70
- error.location = /** @type {any} */ (code).location;
77
+ // Attach the location of the code we tried to evaluate.
78
+ error.location =
79
+ error.position !== undefined
80
+ ? // Use location of the argument with the given position (need to
81
+ // offset by 1 to skip the function).
82
+ code[error.position + 1].location
83
+ : // Use overall location.
84
+ code.location;
71
85
  }
72
86
  throw error;
73
87
  }
@@ -83,7 +97,7 @@ export default async function evaluate(code) {
83
97
  try {
84
98
  result[codeSymbol] = code;
85
99
  if (/** @type {any} */ (code).location) {
86
- result[sourceSymbol] = codeFragment(code);
100
+ result[sourceSymbol] = codeFragment(code.location);
87
101
  }
88
102
  if (!result[scopeSymbol]) {
89
103
  Object.defineProperty(result, scopeSymbol, {
@@ -100,12 +114,3 @@ export default async function evaluate(code) {
100
114
 
101
115
  return result;
102
116
  }
103
-
104
- function codeFragment(code) {
105
- if (code.location) {
106
- const { source, start, end } = code.location;
107
- return source.text.slice(start.offset, end.offset);
108
- } else {
109
- return "";
110
- }
111
- }