@weborigami/language 0.0.54 → 0.0.55

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.54",
3
+ "version": "0.0.55",
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.4.5"
12
12
  },
13
13
  "dependencies": {
14
- "@weborigami/async-tree": "0.0.54",
15
- "@weborigami/types": "0.0.54",
14
+ "@weborigami/async-tree": "0.0.55",
15
+ "@weborigami/types": "0.0.55",
16
16
  "watcher": "2.3.1"
17
17
  },
18
18
  "scripts": {
@@ -155,6 +155,10 @@ identifierChar
155
155
  identifierList
156
156
  = @identifier|1.., separator| separator?
157
157
 
158
+ identifierOrString
159
+ = identifier
160
+ / string
161
+
158
162
  implicitParensArgs "arguments with implicit parentheses"
159
163
  = inlineSpace+ @list
160
164
 
@@ -210,13 +214,13 @@ objectEntries
210
214
  objectEntry
211
215
  = spread
212
216
  / objectProperty
213
- / key:identifier {
217
+ / key:identifierOrString {
214
218
  return annotate([key, [ops.scope, key]], location());
215
219
  }
216
220
 
217
221
  // A single object property with key and value: `x: 1`
218
222
  objectProperty "object property"
219
- = @identifier __ ":" __ @expr
223
+ = @identifierOrString __ ":" __ @expr
220
224
 
221
225
  parameterizedLambda
222
226
  = "(" __ parameters:identifierList? __ ")" __ doubleArrow __ expr:expr {
@@ -373,7 +377,7 @@ tree "tree literal"
373
377
 
374
378
  // A tree assignment statement: `foo = 1`
375
379
  treeAssignment "tree assignment"
376
- = @identifier __ "=" __ @expr
380
+ = @identifierOrString __ "=" __ @expr
377
381
 
378
382
  // A separated list of assignments or shorthands
379
383
  treeEntries
@@ -382,7 +386,7 @@ treeEntries
382
386
  treeEntry
383
387
  = spread
384
388
  / treeAssignment
385
- / key:identifier {
389
+ / key:identifierOrString {
386
390
  return annotate([key, [ops.inherited, key]], location());
387
391
  }
388
392
 
@@ -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, 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, objectProperty: peg$parseobjectProperty, parameterizedLambda: peg$parseparameterizedLambda, parensArgs: peg$parseparensArgs, pipeline: peg$parsepipeline, path: peg$parsepath, pathKey: peg$parsepathKey, 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, tree: peg$parsetree, treeAssignment: peg$parsetreeAssignment, treeEntries: peg$parsetreeEntries, treeEntry: peg$parsetreeEntry, 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, 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, objectProperty: peg$parseobjectProperty, parameterizedLambda: peg$parseparameterizedLambda, parensArgs: peg$parseparensArgs, pipeline: peg$parsepipeline, path: peg$parsepath, pathKey: peg$parsepathKey, 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, tree: peg$parsetree, treeAssignment: peg$parsetreeAssignment, treeEntries: peg$parsetreeEntries, treeEntry: peg$parsetreeEntry, whitespaceWithNewLine: peg$parsewhitespaceWithNewLine };
197
197
  var peg$startRuleFunction = peg$parse__;
198
198
 
199
199
  var peg$c0 = "//";
@@ -1435,6 +1435,17 @@ function peg$parse(input, options) {
1435
1435
  return s0;
1436
1436
  }
1437
1437
 
1438
+ function peg$parseidentifierOrString() {
1439
+ var s0;
1440
+
1441
+ s0 = peg$parseidentifier();
1442
+ if (s0 === peg$FAILED) {
1443
+ s0 = peg$parsestring();
1444
+ }
1445
+
1446
+ return s0;
1447
+ }
1448
+
1438
1449
  function peg$parseimplicitParensArgs() {
1439
1450
  var s0, s1, s2;
1440
1451
 
@@ -1894,7 +1905,7 @@ function peg$parse(input, options) {
1894
1905
  s0 = peg$parseobjectProperty();
1895
1906
  if (s0 === peg$FAILED) {
1896
1907
  s0 = peg$currPos;
1897
- s1 = peg$parseidentifier();
1908
+ s1 = peg$parseidentifierOrString();
1898
1909
  if (s1 !== peg$FAILED) {
1899
1910
  peg$savedPos = s0;
1900
1911
  s1 = peg$f17(s1);
@@ -1911,7 +1922,7 @@ function peg$parse(input, options) {
1911
1922
 
1912
1923
  peg$silentFails++;
1913
1924
  s0 = peg$currPos;
1914
- s1 = peg$parseidentifier();
1925
+ s1 = peg$parseidentifierOrString();
1915
1926
  if (s1 !== peg$FAILED) {
1916
1927
  s2 = peg$parse__();
1917
1928
  if (input.charCodeAt(peg$currPos) === 58) {
@@ -3041,7 +3052,7 @@ function peg$parse(input, options) {
3041
3052
 
3042
3053
  peg$silentFails++;
3043
3054
  s0 = peg$currPos;
3044
- s1 = peg$parseidentifier();
3055
+ s1 = peg$parseidentifierOrString();
3045
3056
  if (s1 !== peg$FAILED) {
3046
3057
  s2 = peg$parse__();
3047
3058
  if (input.charCodeAt(peg$currPos) === 61) {
@@ -3128,7 +3139,7 @@ function peg$parse(input, options) {
3128
3139
  s0 = peg$parsetreeAssignment();
3129
3140
  if (s0 === peg$FAILED) {
3130
3141
  s0 = peg$currPos;
3131
- s1 = peg$parseidentifier();
3142
+ s1 = peg$parseidentifierOrString();
3132
3143
  if (s1 !== peg$FAILED) {
3133
3144
  peg$savedPos = s0;
3134
3145
  s1 = peg$f41(s1);
@@ -3222,6 +3233,7 @@ const peg$allowedStartRules = [
3222
3233
  "identifier",
3223
3234
  "identifierChar",
3224
3235
  "identifierList",
3236
+ "identifierOrString",
3225
3237
  "implicitParensArgs",
3226
3238
  "inlineSpace",
3227
3239
  "integer",
@@ -299,6 +299,11 @@ describe("Origami parser", () => {
299
299
  ["a", 1],
300
300
  ["b", [ops.scope, "b"]],
301
301
  ]);
302
+ assertParse("object", `{ "a": 1, "b": 2 }`, [
303
+ ops.object,
304
+ ["a", 1],
305
+ ["b", 2],
306
+ ]);
302
307
  assertParse("object", "{ a: 1, ...b }", [
303
308
  ops.merge,
304
309
  [ops.object, ["a", 1]],