@weborigami/language 0.0.63 → 0.0.64-beta.1

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.0.63",
3
+ "version": "0.0.64-beta.1",
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.5.3"
12
12
  },
13
13
  "dependencies": {
14
- "@weborigami/async-tree": "0.0.63",
15
- "@weborigami/types": "0.0.63",
14
+ "@weborigami/async-tree": "0.0.64-beta.1",
15
+ "@weborigami/types": "0.0.64-beta.1",
16
16
  "watcher": "2.3.1"
17
17
  },
18
18
  "scripts": {
@@ -222,7 +222,7 @@ objectEntry
222
222
 
223
223
  // A getter definition inside an object literal: `foo = 1`
224
224
  objectGetter "object getter"
225
- = key:identifierOrString __ "=" __ value:expr {
225
+ = key:objectKey __ "=" __ value:expr {
226
226
  return annotate([key, [ops.getter, value]], location());
227
227
  }
228
228
 
@@ -232,9 +232,13 @@ objectIdentifier "object identifier"
232
232
  return annotate([key, [ops.inherited, key]], location());
233
233
  }
234
234
 
235
+ objectKey "object key"
236
+ = hiddenKey:("(" identifierOrString ")") { return hiddenKey.join(""); }
237
+ / identifierOrString
238
+
235
239
  // A property definition in an object literal: `x: 1`
236
240
  objectProperty "object property"
237
- = @identifierOrString __ ":" __ @expr
241
+ = @objectKey __ ":" __ @expr
238
242
 
239
243
  parameterizedLambda
240
244
  = "(" __ parameters:identifierList? __ ")" __ doubleArrow __ expr:expr {
@@ -193,7 +193,7 @@ function peg$parse(input, options) {
193
193
  var peg$FAILED = {};
194
194
  var peg$source = options.grammarSource;
195
195
 
196
- 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, 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 };
196
+ 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 };
197
197
  var peg$startRuleFunction = peg$parse__;
198
198
 
199
199
  var peg$c0 = "//";
@@ -297,37 +297,38 @@ function peg$parse(input, options) {
297
297
  var peg$e50 = peg$literalExpectation("{", false);
298
298
  var peg$e51 = peg$otherExpectation("object getter");
299
299
  var peg$e52 = peg$otherExpectation("object identifier");
300
- var peg$e53 = peg$otherExpectation("object property");
301
- var peg$e54 = peg$otherExpectation("function arguments in parentheses");
302
- var peg$e55 = peg$otherExpectation("slash-separated path");
303
- var peg$e56 = peg$otherExpectation("path element");
304
- var peg$e57 = peg$classExpectation(["(", ")", "{", "}", "[", "]", ",", ":", "/", "\\", " ", "\t", "\n", "\r"], true, false);
305
- var peg$e58 = peg$otherExpectation("function call using protocol: syntax");
306
- var peg$e59 = peg$otherExpectation("protocol");
307
- var peg$e60 = peg$otherExpectation("reserved protocol");
308
- var peg$e61 = peg$literalExpectation("https", false);
309
- var peg$e62 = peg$literalExpectation("http", false);
310
- var peg$e63 = peg$literalExpectation("new", false);
311
- var peg$e64 = peg$literalExpectation("package", false);
312
- var peg$e65 = peg$literalExpectation("treehttps", false);
313
- var peg$e66 = peg$literalExpectation("treehttp", false);
314
- var peg$e67 = peg$literalExpectation("tree", false);
315
- var peg$e68 = peg$otherExpectation("scope reference");
316
- var peg$e69 = peg$literalExpectation(",", false);
317
- var peg$e70 = peg$literalExpectation("#!", false);
318
- var peg$e71 = peg$classExpectation(["\n", "\r"], true, false);
319
- var peg$e72 = peg$classExpectation(["+", "-"], false, false);
320
- var peg$e73 = peg$literalExpectation("\u2192", false);
321
- var peg$e74 = peg$literalExpectation("->", false);
322
- var peg$e75 = peg$otherExpectation("single quote string");
323
- var peg$e76 = peg$literalExpectation("'", false);
324
- var peg$e77 = peg$otherExpectation("string");
325
- var peg$e78 = peg$otherExpectation("template");
326
- var peg$e79 = peg$literalExpectation("${", false);
327
- var peg$e80 = peg$otherExpectation("template text");
328
- var peg$e81 = peg$otherExpectation("template literal");
329
- var peg$e82 = peg$literalExpectation("`", false);
330
- var peg$e83 = peg$otherExpectation("template substitution");
300
+ var peg$e53 = peg$otherExpectation("object key");
301
+ var peg$e54 = peg$otherExpectation("object property");
302
+ var peg$e55 = peg$otherExpectation("function arguments in parentheses");
303
+ var peg$e56 = peg$otherExpectation("slash-separated path");
304
+ var peg$e57 = peg$otherExpectation("path element");
305
+ var peg$e58 = peg$classExpectation(["(", ")", "{", "}", "[", "]", ",", ":", "/", "\\", " ", "\t", "\n", "\r"], true, false);
306
+ var peg$e59 = peg$otherExpectation("function call using protocol: syntax");
307
+ var peg$e60 = peg$otherExpectation("protocol");
308
+ var peg$e61 = peg$otherExpectation("reserved protocol");
309
+ var peg$e62 = peg$literalExpectation("https", false);
310
+ var peg$e63 = peg$literalExpectation("http", false);
311
+ var peg$e64 = peg$literalExpectation("new", false);
312
+ var peg$e65 = peg$literalExpectation("package", false);
313
+ var peg$e66 = peg$literalExpectation("treehttps", false);
314
+ var peg$e67 = peg$literalExpectation("treehttp", false);
315
+ var peg$e68 = peg$literalExpectation("tree", false);
316
+ var peg$e69 = peg$otherExpectation("scope reference");
317
+ var peg$e70 = peg$literalExpectation(",", false);
318
+ var peg$e71 = peg$literalExpectation("#!", false);
319
+ var peg$e72 = peg$classExpectation(["\n", "\r"], true, false);
320
+ var peg$e73 = peg$classExpectation(["+", "-"], false, false);
321
+ var peg$e74 = peg$literalExpectation("\u2192", false);
322
+ var peg$e75 = peg$literalExpectation("->", false);
323
+ var peg$e76 = peg$otherExpectation("single quote string");
324
+ var peg$e77 = peg$literalExpectation("'", false);
325
+ var peg$e78 = peg$otherExpectation("string");
326
+ var peg$e79 = peg$otherExpectation("template");
327
+ var peg$e80 = peg$literalExpectation("${", false);
328
+ var peg$e81 = peg$otherExpectation("template text");
329
+ var peg$e82 = peg$otherExpectation("template literal");
330
+ var peg$e83 = peg$literalExpectation("`", false);
331
+ var peg$e84 = peg$otherExpectation("template substitution");
331
332
 
332
333
  var peg$f0 = function() { return ""; };
333
334
  var peg$f1 = function(path) {
@@ -378,44 +379,45 @@ function peg$parse(input, options) {
378
379
  var peg$f19 = function(key) {
379
380
  return annotate([key, [ops.inherited, key]], location());
380
381
  };
381
- var peg$f20 = function(parameters, expr) {
382
+ var peg$f20 = function(hiddenKey) { return hiddenKey.join(""); };
383
+ var peg$f21 = function(parameters, expr) {
382
384
  return annotate([ops.lambda, parameters ?? [], expr], location());
383
385
  };
384
- var peg$f21 = function(list) {
386
+ var peg$f22 = function(list) {
385
387
  return list ?? annotate([undefined], location());
386
388
  };
387
- var peg$f22 = function(steps) {
389
+ var peg$f23 = function(steps) {
388
390
  return annotate(makePipeline(steps), location());
389
391
  };
390
- var peg$f23 = function(chars) { return chars.join(""); };
391
- var peg$f24 = function(protocol, host, path) {
392
+ var peg$f24 = function(chars) { return chars.join(""); };
393
+ var peg$f25 = function(protocol, host, path) {
392
394
  return annotate([protocol, host, ...(path ?? [])], location());
393
395
  };
394
- var peg$f25 = function() { return ops.https; };
395
- var peg$f26 = function() { return ops.http; };
396
- var peg$f27 = function() { return ops.constructor; };
397
- var peg$f28 = function() { return [ops.scope, "@package"] };
398
- var peg$f29 = function() { return ops.treeHttps; };
399
- var peg$f30 = function() { return ops.treeHttp; };
400
- var peg$f31 = function() { return ops.treeHttps; };
401
- var peg$f32 = function(key) {
396
+ var peg$f26 = function() { return ops.https; };
397
+ var peg$f27 = function() { return ops.http; };
398
+ var peg$f28 = function() { return ops.constructor; };
399
+ var peg$f29 = function() { return [ops.scope, "@package"] };
400
+ var peg$f30 = function() { return ops.treeHttps; };
401
+ var peg$f31 = function() { return ops.treeHttp; };
402
+ var peg$f32 = function() { return ops.treeHttps; };
403
+ var peg$f33 = function(key) {
402
404
  return annotate([ops.scope, key], location());
403
405
  };
404
- var peg$f33 = function() { return null; };
405
406
  var peg$f34 = function() { return null; };
406
- var peg$f35 = function(chars) { return chars.join(""); };
407
- var peg$f36 = function(expr) { return [ops.spread, expr]; };
408
- var peg$f37 = function(contents) {
407
+ var peg$f35 = function() { return null; };
408
+ var peg$f36 = function(chars) { return chars.join(""); };
409
+ var peg$f37 = function(expr) { return [ops.spread, expr]; };
410
+ var peg$f38 = function(contents) {
409
411
  return annotate([ops.lambda, null, contents], location());
410
412
  };
411
- var peg$f38 = function(parts) {
413
+ var peg$f39 = function(parts) {
412
414
  return annotate(makeTemplate(parts), location());
413
415
  };
414
- var peg$f39 = function(chars) { return chars.join(""); };
415
- var peg$f40 = function(parts) {
416
+ var peg$f40 = function(chars) { return chars.join(""); };
417
+ var peg$f41 = function(parts) {
416
418
  return annotate(makeTemplate(parts), location());
417
419
  };
418
- var peg$f41 = function(chars) { return chars.join(""); };
420
+ var peg$f42 = function(chars) { return chars.join(""); };
419
421
  var peg$currPos = options.peg$currPos | 0;
420
422
  var peg$savedPos = peg$currPos;
421
423
  var peg$posDetailsCache = [{ line: 1, column: 1 }];
@@ -2028,7 +2030,7 @@ function peg$parse(input, options) {
2028
2030
 
2029
2031
  peg$silentFails++;
2030
2032
  s0 = peg$currPos;
2031
- s1 = peg$parseidentifierOrString();
2033
+ s1 = peg$parseobjectKey();
2032
2034
  if (s1 !== peg$FAILED) {
2033
2035
  s2 = peg$parse__();
2034
2036
  if (input.charCodeAt(peg$currPos) === 61) {
@@ -2085,12 +2087,67 @@ function peg$parse(input, options) {
2085
2087
  return s0;
2086
2088
  }
2087
2089
 
2090
+ function peg$parseobjectKey() {
2091
+ var s0, s1, s2, s3, s4;
2092
+
2093
+ peg$silentFails++;
2094
+ s0 = peg$currPos;
2095
+ s1 = peg$currPos;
2096
+ if (input.charCodeAt(peg$currPos) === 40) {
2097
+ s2 = peg$c12;
2098
+ peg$currPos++;
2099
+ } else {
2100
+ s2 = peg$FAILED;
2101
+ if (peg$silentFails === 0) { peg$fail(peg$e25); }
2102
+ }
2103
+ if (s2 !== peg$FAILED) {
2104
+ s3 = peg$parseidentifierOrString();
2105
+ if (s3 !== peg$FAILED) {
2106
+ if (input.charCodeAt(peg$currPos) === 41) {
2107
+ s4 = peg$c4;
2108
+ peg$currPos++;
2109
+ } else {
2110
+ s4 = peg$FAILED;
2111
+ if (peg$silentFails === 0) { peg$fail(peg$e9); }
2112
+ }
2113
+ if (s4 !== peg$FAILED) {
2114
+ s2 = [s2, s3, s4];
2115
+ s1 = s2;
2116
+ } else {
2117
+ peg$currPos = s1;
2118
+ s1 = peg$FAILED;
2119
+ }
2120
+ } else {
2121
+ peg$currPos = s1;
2122
+ s1 = peg$FAILED;
2123
+ }
2124
+ } else {
2125
+ peg$currPos = s1;
2126
+ s1 = peg$FAILED;
2127
+ }
2128
+ if (s1 !== peg$FAILED) {
2129
+ peg$savedPos = s0;
2130
+ s1 = peg$f20(s1);
2131
+ }
2132
+ s0 = s1;
2133
+ if (s0 === peg$FAILED) {
2134
+ s0 = peg$parseidentifierOrString();
2135
+ }
2136
+ peg$silentFails--;
2137
+ if (s0 === peg$FAILED) {
2138
+ s1 = peg$FAILED;
2139
+ if (peg$silentFails === 0) { peg$fail(peg$e53); }
2140
+ }
2141
+
2142
+ return s0;
2143
+ }
2144
+
2088
2145
  function peg$parseobjectProperty() {
2089
2146
  var s0, s1, s2, s3, s4, s5;
2090
2147
 
2091
2148
  peg$silentFails++;
2092
2149
  s0 = peg$currPos;
2093
- s1 = peg$parseidentifierOrString();
2150
+ s1 = peg$parseobjectKey();
2094
2151
  if (s1 !== peg$FAILED) {
2095
2152
  s2 = peg$parse__();
2096
2153
  if (input.charCodeAt(peg$currPos) === 58) {
@@ -2120,7 +2177,7 @@ function peg$parse(input, options) {
2120
2177
  peg$silentFails--;
2121
2178
  if (s0 === peg$FAILED) {
2122
2179
  s1 = peg$FAILED;
2123
- if (peg$silentFails === 0) { peg$fail(peg$e53); }
2180
+ if (peg$silentFails === 0) { peg$fail(peg$e54); }
2124
2181
  }
2125
2182
 
2126
2183
  return s0;
@@ -2159,7 +2216,7 @@ function peg$parse(input, options) {
2159
2216
  s9 = peg$parsepipeline();
2160
2217
  if (s9 !== peg$FAILED) {
2161
2218
  peg$savedPos = s0;
2162
- s0 = peg$f20(s3, s9);
2219
+ s0 = peg$f21(s3, s9);
2163
2220
  } else {
2164
2221
  peg$currPos = s0;
2165
2222
  s0 = peg$FAILED;
@@ -2208,7 +2265,7 @@ function peg$parse(input, options) {
2208
2265
  }
2209
2266
  if (s5 !== peg$FAILED) {
2210
2267
  peg$savedPos = s0;
2211
- s0 = peg$f21(s3);
2268
+ s0 = peg$f22(s3);
2212
2269
  } else {
2213
2270
  peg$currPos = s0;
2214
2271
  s0 = peg$FAILED;
@@ -2220,7 +2277,7 @@ function peg$parse(input, options) {
2220
2277
  peg$silentFails--;
2221
2278
  if (s0 === peg$FAILED) {
2222
2279
  s1 = peg$FAILED;
2223
- if (peg$silentFails === 0) { peg$fail(peg$e54); }
2280
+ if (peg$silentFails === 0) { peg$fail(peg$e55); }
2224
2281
  }
2225
2282
 
2226
2283
  return s0;
@@ -2274,7 +2331,7 @@ function peg$parse(input, options) {
2274
2331
  }
2275
2332
  if (s1 !== peg$FAILED) {
2276
2333
  peg$savedPos = s0;
2277
- s1 = peg$f22(s1);
2334
+ s1 = peg$f23(s1);
2278
2335
  }
2279
2336
  s0 = s1;
2280
2337
 
@@ -2313,7 +2370,7 @@ function peg$parse(input, options) {
2313
2370
  }
2314
2371
  peg$silentFails--;
2315
2372
  s1 = peg$FAILED;
2316
- if (peg$silentFails === 0) { peg$fail(peg$e55); }
2373
+ if (peg$silentFails === 0) { peg$fail(peg$e56); }
2317
2374
 
2318
2375
  return s0;
2319
2376
  }
@@ -2330,11 +2387,11 @@ function peg$parse(input, options) {
2330
2387
  s2 = peg$parsepathKeyChar();
2331
2388
  }
2332
2389
  peg$savedPos = s0;
2333
- s1 = peg$f23(s1);
2390
+ s1 = peg$f24(s1);
2334
2391
  s0 = s1;
2335
2392
  peg$silentFails--;
2336
2393
  s1 = peg$FAILED;
2337
- if (peg$silentFails === 0) { peg$fail(peg$e56); }
2394
+ if (peg$silentFails === 0) { peg$fail(peg$e57); }
2338
2395
 
2339
2396
  return s0;
2340
2397
  }
@@ -2347,7 +2404,7 @@ function peg$parse(input, options) {
2347
2404
  peg$currPos++;
2348
2405
  } else {
2349
2406
  s0 = peg$FAILED;
2350
- if (peg$silentFails === 0) { peg$fail(peg$e57); }
2407
+ if (peg$silentFails === 0) { peg$fail(peg$e58); }
2351
2408
  }
2352
2409
  if (s0 === peg$FAILED) {
2353
2410
  s0 = peg$parseescapedChar();
@@ -2400,7 +2457,7 @@ function peg$parse(input, options) {
2400
2457
  s5 = null;
2401
2458
  }
2402
2459
  peg$savedPos = s0;
2403
- s0 = peg$f24(s1, s4, s5);
2460
+ s0 = peg$f25(s1, s4, s5);
2404
2461
  } else {
2405
2462
  peg$currPos = s0;
2406
2463
  s0 = peg$FAILED;
@@ -2416,7 +2473,7 @@ function peg$parse(input, options) {
2416
2473
  peg$silentFails--;
2417
2474
  if (s0 === peg$FAILED) {
2418
2475
  s1 = peg$FAILED;
2419
- if (peg$silentFails === 0) { peg$fail(peg$e58); }
2476
+ if (peg$silentFails === 0) { peg$fail(peg$e59); }
2420
2477
  }
2421
2478
 
2422
2479
  return s0;
@@ -2433,7 +2490,7 @@ function peg$parse(input, options) {
2433
2490
  peg$silentFails--;
2434
2491
  if (s0 === peg$FAILED) {
2435
2492
  s1 = peg$FAILED;
2436
- if (peg$silentFails === 0) { peg$fail(peg$e59); }
2493
+ if (peg$silentFails === 0) { peg$fail(peg$e60); }
2437
2494
  }
2438
2495
 
2439
2496
  return s0;
@@ -2449,11 +2506,11 @@ function peg$parse(input, options) {
2449
2506
  peg$currPos += 5;
2450
2507
  } else {
2451
2508
  s1 = peg$FAILED;
2452
- if (peg$silentFails === 0) { peg$fail(peg$e61); }
2509
+ if (peg$silentFails === 0) { peg$fail(peg$e62); }
2453
2510
  }
2454
2511
  if (s1 !== peg$FAILED) {
2455
2512
  peg$savedPos = s0;
2456
- s1 = peg$f25();
2513
+ s1 = peg$f26();
2457
2514
  }
2458
2515
  s0 = s1;
2459
2516
  if (s0 === peg$FAILED) {
@@ -2463,11 +2520,11 @@ function peg$parse(input, options) {
2463
2520
  peg$currPos += 4;
2464
2521
  } else {
2465
2522
  s1 = peg$FAILED;
2466
- if (peg$silentFails === 0) { peg$fail(peg$e62); }
2523
+ if (peg$silentFails === 0) { peg$fail(peg$e63); }
2467
2524
  }
2468
2525
  if (s1 !== peg$FAILED) {
2469
2526
  peg$savedPos = s0;
2470
- s1 = peg$f26();
2527
+ s1 = peg$f27();
2471
2528
  }
2472
2529
  s0 = s1;
2473
2530
  if (s0 === peg$FAILED) {
@@ -2477,11 +2534,11 @@ function peg$parse(input, options) {
2477
2534
  peg$currPos += 3;
2478
2535
  } else {
2479
2536
  s1 = peg$FAILED;
2480
- if (peg$silentFails === 0) { peg$fail(peg$e63); }
2537
+ if (peg$silentFails === 0) { peg$fail(peg$e64); }
2481
2538
  }
2482
2539
  if (s1 !== peg$FAILED) {
2483
2540
  peg$savedPos = s0;
2484
- s1 = peg$f27();
2541
+ s1 = peg$f28();
2485
2542
  }
2486
2543
  s0 = s1;
2487
2544
  if (s0 === peg$FAILED) {
@@ -2491,11 +2548,11 @@ function peg$parse(input, options) {
2491
2548
  peg$currPos += 7;
2492
2549
  } else {
2493
2550
  s1 = peg$FAILED;
2494
- if (peg$silentFails === 0) { peg$fail(peg$e64); }
2551
+ if (peg$silentFails === 0) { peg$fail(peg$e65); }
2495
2552
  }
2496
2553
  if (s1 !== peg$FAILED) {
2497
2554
  peg$savedPos = s0;
2498
- s1 = peg$f28();
2555
+ s1 = peg$f29();
2499
2556
  }
2500
2557
  s0 = s1;
2501
2558
  if (s0 === peg$FAILED) {
@@ -2505,11 +2562,11 @@ function peg$parse(input, options) {
2505
2562
  peg$currPos += 9;
2506
2563
  } else {
2507
2564
  s1 = peg$FAILED;
2508
- if (peg$silentFails === 0) { peg$fail(peg$e65); }
2565
+ if (peg$silentFails === 0) { peg$fail(peg$e66); }
2509
2566
  }
2510
2567
  if (s1 !== peg$FAILED) {
2511
2568
  peg$savedPos = s0;
2512
- s1 = peg$f29();
2569
+ s1 = peg$f30();
2513
2570
  }
2514
2571
  s0 = s1;
2515
2572
  if (s0 === peg$FAILED) {
@@ -2519,11 +2576,11 @@ function peg$parse(input, options) {
2519
2576
  peg$currPos += 8;
2520
2577
  } else {
2521
2578
  s1 = peg$FAILED;
2522
- if (peg$silentFails === 0) { peg$fail(peg$e66); }
2579
+ if (peg$silentFails === 0) { peg$fail(peg$e67); }
2523
2580
  }
2524
2581
  if (s1 !== peg$FAILED) {
2525
2582
  peg$savedPos = s0;
2526
- s1 = peg$f30();
2583
+ s1 = peg$f31();
2527
2584
  }
2528
2585
  s0 = s1;
2529
2586
  if (s0 === peg$FAILED) {
@@ -2533,11 +2590,11 @@ function peg$parse(input, options) {
2533
2590
  peg$currPos += 4;
2534
2591
  } else {
2535
2592
  s1 = peg$FAILED;
2536
- if (peg$silentFails === 0) { peg$fail(peg$e67); }
2593
+ if (peg$silentFails === 0) { peg$fail(peg$e68); }
2537
2594
  }
2538
2595
  if (s1 !== peg$FAILED) {
2539
2596
  peg$savedPos = s0;
2540
- s1 = peg$f31();
2597
+ s1 = peg$f32();
2541
2598
  }
2542
2599
  s0 = s1;
2543
2600
  }
@@ -2549,7 +2606,7 @@ function peg$parse(input, options) {
2549
2606
  peg$silentFails--;
2550
2607
  if (s0 === peg$FAILED) {
2551
2608
  s1 = peg$FAILED;
2552
- if (peg$silentFails === 0) { peg$fail(peg$e60); }
2609
+ if (peg$silentFails === 0) { peg$fail(peg$e61); }
2553
2610
  }
2554
2611
 
2555
2612
  return s0;
@@ -2563,13 +2620,13 @@ function peg$parse(input, options) {
2563
2620
  s1 = peg$parseidentifier();
2564
2621
  if (s1 !== peg$FAILED) {
2565
2622
  peg$savedPos = s0;
2566
- s1 = peg$f32(s1);
2623
+ s1 = peg$f33(s1);
2567
2624
  }
2568
2625
  s0 = s1;
2569
2626
  peg$silentFails--;
2570
2627
  if (s0 === peg$FAILED) {
2571
2628
  s1 = peg$FAILED;
2572
- if (peg$silentFails === 0) { peg$fail(peg$e68); }
2629
+ if (peg$silentFails === 0) { peg$fail(peg$e69); }
2573
2630
  }
2574
2631
 
2575
2632
  return s0;
@@ -2585,7 +2642,7 @@ function peg$parse(input, options) {
2585
2642
  peg$currPos++;
2586
2643
  } else {
2587
2644
  s2 = peg$FAILED;
2588
- if (peg$silentFails === 0) { peg$fail(peg$e69); }
2645
+ if (peg$silentFails === 0) { peg$fail(peg$e70); }
2589
2646
  }
2590
2647
  if (s2 !== peg$FAILED) {
2591
2648
  s3 = peg$parse__();
@@ -2611,7 +2668,7 @@ function peg$parse(input, options) {
2611
2668
  peg$currPos += 2;
2612
2669
  } else {
2613
2670
  s1 = peg$FAILED;
2614
- if (peg$silentFails === 0) { peg$fail(peg$e70); }
2671
+ if (peg$silentFails === 0) { peg$fail(peg$e71); }
2615
2672
  }
2616
2673
  if (s1 !== peg$FAILED) {
2617
2674
  s2 = [];
@@ -2620,7 +2677,7 @@ function peg$parse(input, options) {
2620
2677
  peg$currPos++;
2621
2678
  } else {
2622
2679
  s3 = peg$FAILED;
2623
- if (peg$silentFails === 0) { peg$fail(peg$e71); }
2680
+ if (peg$silentFails === 0) { peg$fail(peg$e72); }
2624
2681
  }
2625
2682
  while (s3 !== peg$FAILED) {
2626
2683
  s2.push(s3);
@@ -2629,11 +2686,11 @@ function peg$parse(input, options) {
2629
2686
  peg$currPos++;
2630
2687
  } else {
2631
2688
  s3 = peg$FAILED;
2632
- if (peg$silentFails === 0) { peg$fail(peg$e71); }
2689
+ if (peg$silentFails === 0) { peg$fail(peg$e72); }
2633
2690
  }
2634
2691
  }
2635
2692
  peg$savedPos = s0;
2636
- s0 = peg$f33();
2693
+ s0 = peg$f34();
2637
2694
  } else {
2638
2695
  peg$currPos = s0;
2639
2696
  s0 = peg$FAILED;
@@ -2650,7 +2707,7 @@ function peg$parse(input, options) {
2650
2707
  peg$currPos++;
2651
2708
  } else {
2652
2709
  s0 = peg$FAILED;
2653
- if (peg$silentFails === 0) { peg$fail(peg$e72); }
2710
+ if (peg$silentFails === 0) { peg$fail(peg$e73); }
2654
2711
  }
2655
2712
 
2656
2713
  return s0;
@@ -2664,7 +2721,7 @@ function peg$parse(input, options) {
2664
2721
  peg$currPos++;
2665
2722
  } else {
2666
2723
  s0 = peg$FAILED;
2667
- if (peg$silentFails === 0) { peg$fail(peg$e73); }
2724
+ if (peg$silentFails === 0) { peg$fail(peg$e74); }
2668
2725
  }
2669
2726
  if (s0 === peg$FAILED) {
2670
2727
  if (input.substr(peg$currPos, 2) === peg$c36) {
@@ -2672,7 +2729,7 @@ function peg$parse(input, options) {
2672
2729
  peg$currPos += 2;
2673
2730
  } else {
2674
2731
  s0 = peg$FAILED;
2675
- if (peg$silentFails === 0) { peg$fail(peg$e74); }
2732
+ if (peg$silentFails === 0) { peg$fail(peg$e75); }
2676
2733
  }
2677
2734
  }
2678
2735
 
@@ -2697,7 +2754,7 @@ function peg$parse(input, options) {
2697
2754
  peg$currPos++;
2698
2755
  } else {
2699
2756
  s3 = peg$FAILED;
2700
- if (peg$silentFails === 0) { peg$fail(peg$e71); }
2757
+ if (peg$silentFails === 0) { peg$fail(peg$e72); }
2701
2758
  }
2702
2759
  while (s3 !== peg$FAILED) {
2703
2760
  s2.push(s3);
@@ -2706,11 +2763,11 @@ function peg$parse(input, options) {
2706
2763
  peg$currPos++;
2707
2764
  } else {
2708
2765
  s3 = peg$FAILED;
2709
- if (peg$silentFails === 0) { peg$fail(peg$e71); }
2766
+ if (peg$silentFails === 0) { peg$fail(peg$e72); }
2710
2767
  }
2711
2768
  }
2712
2769
  peg$savedPos = s0;
2713
- s0 = peg$f34();
2770
+ s0 = peg$f35();
2714
2771
  } else {
2715
2772
  peg$currPos = s0;
2716
2773
  s0 = peg$FAILED;
@@ -2729,7 +2786,7 @@ function peg$parse(input, options) {
2729
2786
  peg$currPos++;
2730
2787
  } else {
2731
2788
  s1 = peg$FAILED;
2732
- if (peg$silentFails === 0) { peg$fail(peg$e76); }
2789
+ if (peg$silentFails === 0) { peg$fail(peg$e77); }
2733
2790
  }
2734
2791
  if (s1 !== peg$FAILED) {
2735
2792
  s2 = [];
@@ -2743,11 +2800,11 @@ function peg$parse(input, options) {
2743
2800
  peg$currPos++;
2744
2801
  } else {
2745
2802
  s3 = peg$FAILED;
2746
- if (peg$silentFails === 0) { peg$fail(peg$e76); }
2803
+ if (peg$silentFails === 0) { peg$fail(peg$e77); }
2747
2804
  }
2748
2805
  if (s3 !== peg$FAILED) {
2749
2806
  peg$savedPos = s0;
2750
- s0 = peg$f35(s2);
2807
+ s0 = peg$f36(s2);
2751
2808
  } else {
2752
2809
  peg$currPos = s0;
2753
2810
  s0 = peg$FAILED;
@@ -2759,7 +2816,7 @@ function peg$parse(input, options) {
2759
2816
  peg$silentFails--;
2760
2817
  if (s0 === peg$FAILED) {
2761
2818
  s1 = peg$FAILED;
2762
- if (peg$silentFails === 0) { peg$fail(peg$e75); }
2819
+ if (peg$silentFails === 0) { peg$fail(peg$e76); }
2763
2820
  }
2764
2821
 
2765
2822
  return s0;
@@ -2776,7 +2833,7 @@ function peg$parse(input, options) {
2776
2833
  peg$currPos++;
2777
2834
  } else {
2778
2835
  s2 = peg$FAILED;
2779
- if (peg$silentFails === 0) { peg$fail(peg$e76); }
2836
+ if (peg$silentFails === 0) { peg$fail(peg$e77); }
2780
2837
  }
2781
2838
  if (s2 === peg$FAILED) {
2782
2839
  s2 = peg$parsenewLine();
@@ -2813,7 +2870,7 @@ function peg$parse(input, options) {
2813
2870
  s2 = peg$parsepipeline();
2814
2871
  if (s2 !== peg$FAILED) {
2815
2872
  peg$savedPos = s0;
2816
- s0 = peg$f36(s2);
2873
+ s0 = peg$f37(s2);
2817
2874
  } else {
2818
2875
  peg$currPos = s0;
2819
2876
  s0 = peg$FAILED;
@@ -2889,7 +2946,7 @@ function peg$parse(input, options) {
2889
2946
  peg$silentFails--;
2890
2947
  if (s0 === peg$FAILED) {
2891
2948
  s1 = peg$FAILED;
2892
- if (peg$silentFails === 0) { peg$fail(peg$e77); }
2949
+ if (peg$silentFails === 0) { peg$fail(peg$e78); }
2893
2950
  }
2894
2951
 
2895
2952
  return s0;
@@ -2902,11 +2959,11 @@ function peg$parse(input, options) {
2902
2959
  s0 = peg$currPos;
2903
2960
  s1 = peg$parsetemplateDocumentContents();
2904
2961
  peg$savedPos = s0;
2905
- s1 = peg$f37(s1);
2962
+ s1 = peg$f38(s1);
2906
2963
  s0 = s1;
2907
2964
  peg$silentFails--;
2908
2965
  s1 = peg$FAILED;
2909
- if (peg$silentFails === 0) { peg$fail(peg$e78); }
2966
+ if (peg$silentFails === 0) { peg$fail(peg$e79); }
2910
2967
 
2911
2968
  return s0;
2912
2969
  }
@@ -2922,7 +2979,7 @@ function peg$parse(input, options) {
2922
2979
  peg$currPos += 2;
2923
2980
  } else {
2924
2981
  s2 = peg$FAILED;
2925
- if (peg$silentFails === 0) { peg$fail(peg$e79); }
2982
+ if (peg$silentFails === 0) { peg$fail(peg$e80); }
2926
2983
  }
2927
2984
  peg$silentFails--;
2928
2985
  if (s2 === peg$FAILED) {
@@ -2964,7 +3021,7 @@ function peg$parse(input, options) {
2964
3021
  }
2965
3022
  }
2966
3023
  peg$savedPos = s0;
2967
- s1 = peg$f38(s1);
3024
+ s1 = peg$f39(s1);
2968
3025
  s0 = s1;
2969
3026
 
2970
3027
  return s0;
@@ -2987,13 +3044,13 @@ function peg$parse(input, options) {
2987
3044
  }
2988
3045
  if (s1 !== peg$FAILED) {
2989
3046
  peg$savedPos = s0;
2990
- s1 = peg$f39(s1);
3047
+ s1 = peg$f40(s1);
2991
3048
  }
2992
3049
  s0 = s1;
2993
3050
  peg$silentFails--;
2994
3051
  if (s0 === peg$FAILED) {
2995
3052
  s1 = peg$FAILED;
2996
- if (peg$silentFails === 0) { peg$fail(peg$e80); }
3053
+ if (peg$silentFails === 0) { peg$fail(peg$e81); }
2997
3054
  }
2998
3055
 
2999
3056
  return s0;
@@ -3009,7 +3066,7 @@ function peg$parse(input, options) {
3009
3066
  peg$currPos++;
3010
3067
  } else {
3011
3068
  s1 = peg$FAILED;
3012
- if (peg$silentFails === 0) { peg$fail(peg$e82); }
3069
+ if (peg$silentFails === 0) { peg$fail(peg$e83); }
3013
3070
  }
3014
3071
  if (s1 !== peg$FAILED) {
3015
3072
  s2 = peg$parsetemplateLiteralContents();
@@ -3018,7 +3075,7 @@ function peg$parse(input, options) {
3018
3075
  peg$currPos++;
3019
3076
  } else {
3020
3077
  s3 = peg$FAILED;
3021
- if (peg$silentFails === 0) { peg$fail(peg$e82); }
3078
+ if (peg$silentFails === 0) { peg$fail(peg$e83); }
3022
3079
  }
3023
3080
  if (s3 !== peg$FAILED) {
3024
3081
  s0 = s2;
@@ -3033,7 +3090,7 @@ function peg$parse(input, options) {
3033
3090
  peg$silentFails--;
3034
3091
  if (s0 === peg$FAILED) {
3035
3092
  s1 = peg$FAILED;
3036
- if (peg$silentFails === 0) { peg$fail(peg$e81); }
3093
+ if (peg$silentFails === 0) { peg$fail(peg$e82); }
3037
3094
  }
3038
3095
 
3039
3096
  return s0;
@@ -3050,7 +3107,7 @@ function peg$parse(input, options) {
3050
3107
  peg$currPos++;
3051
3108
  } else {
3052
3109
  s2 = peg$FAILED;
3053
- if (peg$silentFails === 0) { peg$fail(peg$e82); }
3110
+ if (peg$silentFails === 0) { peg$fail(peg$e83); }
3054
3111
  }
3055
3112
  if (s2 === peg$FAILED) {
3056
3113
  if (input.substr(peg$currPos, 2) === peg$c38) {
@@ -3058,7 +3115,7 @@ function peg$parse(input, options) {
3058
3115
  peg$currPos += 2;
3059
3116
  } else {
3060
3117
  s2 = peg$FAILED;
3061
- if (peg$silentFails === 0) { peg$fail(peg$e79); }
3118
+ if (peg$silentFails === 0) { peg$fail(peg$e80); }
3062
3119
  }
3063
3120
  }
3064
3121
  peg$silentFails--;
@@ -3101,7 +3158,7 @@ function peg$parse(input, options) {
3101
3158
  }
3102
3159
  }
3103
3160
  peg$savedPos = s0;
3104
- s1 = peg$f40(s1);
3161
+ s1 = peg$f41(s1);
3105
3162
  s0 = s1;
3106
3163
 
3107
3164
  return s0;
@@ -3123,7 +3180,7 @@ function peg$parse(input, options) {
3123
3180
  }
3124
3181
  if (s1 !== peg$FAILED) {
3125
3182
  peg$savedPos = s0;
3126
- s1 = peg$f41(s1);
3183
+ s1 = peg$f42(s1);
3127
3184
  }
3128
3185
  s0 = s1;
3129
3186
 
@@ -3140,7 +3197,7 @@ function peg$parse(input, options) {
3140
3197
  peg$currPos += 2;
3141
3198
  } else {
3142
3199
  s1 = peg$FAILED;
3143
- if (peg$silentFails === 0) { peg$fail(peg$e79); }
3200
+ if (peg$silentFails === 0) { peg$fail(peg$e80); }
3144
3201
  }
3145
3202
  if (s1 !== peg$FAILED) {
3146
3203
  s2 = peg$parse__();
@@ -3171,7 +3228,7 @@ function peg$parse(input, options) {
3171
3228
  peg$silentFails--;
3172
3229
  if (s0 === peg$FAILED) {
3173
3230
  s1 = peg$FAILED;
3174
- if (peg$silentFails === 0) { peg$fail(peg$e83); }
3231
+ if (peg$silentFails === 0) { peg$fail(peg$e84); }
3175
3232
  }
3176
3233
 
3177
3234
  return s0;
@@ -3293,6 +3350,7 @@ const peg$allowedStartRules = [
3293
3350
  "objectEntry",
3294
3351
  "objectGetter",
3295
3352
  "objectIdentifier",
3353
+ "objectKey",
3296
3354
  "objectProperty",
3297
3355
  "parameterizedLambda",
3298
3356
  "parensArgs",
@@ -23,10 +23,10 @@ export default async function expressionObject(entries, parent) {
23
23
  // Create the object and set its parent
24
24
  const object = {};
25
25
  Object.defineProperty(object, symbols.parent, {
26
- value: parent,
27
- writable: true,
28
26
  configurable: true,
29
27
  enumerable: false,
28
+ value: parent,
29
+ writable: true,
30
30
  });
31
31
 
32
32
  let tree;
@@ -50,9 +50,21 @@ export default async function expressionObject(entries, parent) {
50
50
  defineProperty = false;
51
51
  }
52
52
 
53
+ let enumerable = true;
54
+ if (key[0] === "(" && key[key.length - 1] === ")") {
55
+ key = key.slice(1, -1);
56
+ enumerable = false;
57
+ }
58
+
53
59
  if (defineProperty) {
54
60
  // Define simple property
55
- object[key] = value;
61
+ // object[key] = value;
62
+ Object.defineProperty(object, key, {
63
+ configurable: true,
64
+ enumerable,
65
+ value,
66
+ writable: true,
67
+ });
56
68
  } else {
57
69
  // Property getter
58
70
  let code;
@@ -81,7 +93,7 @@ export default async function expressionObject(entries, parent) {
81
93
 
82
94
  Object.defineProperty(object, key, {
83
95
  configurable: true,
84
- enumerable: true,
96
+ enumerable,
85
97
  get,
86
98
  });
87
99
  }
@@ -91,9 +103,11 @@ export default async function expressionObject(entries, parent) {
91
103
  // and overwrite the property getter with the actual value.
92
104
  for (const key of immediateProperties) {
93
105
  const value = await object[key];
106
+ // @ts-ignore Unclear why TS thinks `object` might be undefined here
107
+ const enumerable = Object.getOwnPropertyDescriptor(object, key).enumerable;
94
108
  Object.defineProperty(object, key, {
95
109
  configurable: true,
96
- enumerable: true,
110
+ enumerable,
97
111
  value,
98
112
  writable: true,
99
113
  });
@@ -308,6 +308,7 @@ describe("Origami parser", () => {
308
308
  [ops.object, ["a", 1]],
309
309
  [ops.scope, "b"],
310
310
  ]);
311
+ assertParse("object", "{ (a): 1 }", [ops.object, ["(a)", 1]]);
311
312
  });
312
313
 
313
314
  test("objectEntry", () => {
@@ -63,4 +63,14 @@ describe("expressionObject", () => {
63
63
  const json = await dataJson.unpack();
64
64
  assert.deepEqual(json, { a: 1 });
65
65
  });
66
+
67
+ test("a key declared with parentheses is not enumerable", async () => {
68
+ const entries = [
69
+ ["(hidden)", "shh"],
70
+ ["visible", "hey"],
71
+ ];
72
+ const object = await expressionObject(entries, null);
73
+ assert.deepEqual(Object.keys(object), ["visible"]);
74
+ assert.equal(object["hidden"], "shh");
75
+ });
66
76
  });