@mojir/lits 2.0.7 → 2.0.9

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.
@@ -392,6 +392,7 @@ var AlgebraicOperators = [
392
392
  '<<', // left shift
393
393
  '>>', // signed right shift
394
394
  '>>>', // unsigned right shift
395
+ '++', // string concatenation
395
396
  '<', // less than
396
397
  '<=', // less than or equal
397
398
  '>', // greater than
@@ -3125,7 +3126,7 @@ var mathNormalExpression = {
3125
3126
  },
3126
3127
  };
3127
3128
 
3128
- var version = "2.0.7";
3129
+ var version = "2.0.9";
3129
3130
 
3130
3131
  var uuidTemplate = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';
3131
3132
  var xyRegexp = /[xy]/g;
@@ -7075,24 +7076,27 @@ function parseString(tokenStream, parseState) {
7075
7076
  };
7076
7077
  }
7077
7078
 
7078
- var exponentiationPrecedence = 8;
7079
+ var exponentiationPrecedence = 9;
7080
+ var placeholderRegexp$1 = /^\$([1-9]\d?)?$/;
7079
7081
  function getPrecedence(operator) {
7080
7082
  var operatorSign = operator[1];
7081
7083
  switch (operatorSign) {
7082
7084
  case '.': // accessor
7083
- return 9;
7085
+ return 10;
7084
7086
  case '**': // exponentiation
7085
7087
  return exponentiationPrecedence;
7086
7088
  case '*': // multiplication
7087
7089
  case '/': // division
7088
7090
  case '%': // remainder
7089
- return 7;
7091
+ return 8;
7090
7092
  case '+': // addition
7091
7093
  case '-': // subtraction
7092
- return 6;
7094
+ return 7;
7093
7095
  case '<<': // left shift
7094
7096
  case '>>': // signed right shift
7095
7097
  case '>>>': // unsigned right shift
7098
+ return 6;
7099
+ case '++': // string concatenation
7096
7100
  return 5;
7097
7101
  case '<': // less than
7098
7102
  case '<=': // less than or equal
@@ -7190,6 +7194,11 @@ function fromBinaryAlgebraicToAstNode(operator, left, right) {
7190
7194
  return createNamedNormalExpressionNode('bit-shift-right', [left, right], token);
7191
7195
  case '>>>':
7192
7196
  return createNamedNormalExpressionNode('unsigned-bit-shift-right', [left, right], token);
7197
+ case '++': {
7198
+ var leftString = createNamedNormalExpressionNode('str', [left], token);
7199
+ var rightString = createNamedNormalExpressionNode('str', [right], token);
7200
+ return createNamedNormalExpressionNode('str', [leftString, rightString], token);
7201
+ }
7193
7202
  case '<':
7194
7203
  return createNamedNormalExpressionNode('<', [left, right], token);
7195
7204
  case '<=':
@@ -7301,7 +7310,7 @@ var AlgebraicParser = /** @class */ (function () {
7301
7310
  // Parentheses
7302
7311
  if (isLParenToken(token)) {
7303
7312
  var positionBefore = this.parseState.position;
7304
- var lamdaFunction = this.parseLamdaFunction();
7313
+ var lamdaFunction = this.parseLambdaFunction();
7305
7314
  if (lamdaFunction) {
7306
7315
  return lamdaFunction;
7307
7316
  }
@@ -7322,6 +7331,9 @@ var AlgebraicParser = /** @class */ (function () {
7322
7331
  var operand = this.parseOperand();
7323
7332
  return fromUnaryAlgebraicToAstNode(token, operand);
7324
7333
  }
7334
+ else if (operatorName === '=>') {
7335
+ return this.parseShorthandLamdaFunction();
7336
+ }
7325
7337
  else {
7326
7338
  throw new Error("Unknown unary operator: ".concat(operatorName));
7327
7339
  }
@@ -7468,6 +7480,8 @@ var AlgebraicParser = /** @class */ (function () {
7468
7480
  case 'or':
7469
7481
  case 'when':
7470
7482
  case 'when-not':
7483
+ case 'do':
7484
+ case 'throw':
7471
7485
  return {
7472
7486
  t: AstNodeType.SpecialExpression,
7473
7487
  n: name_1,
@@ -7484,13 +7498,11 @@ var AlgebraicParser = /** @class */ (function () {
7484
7498
  case 'defn':
7485
7499
  case 'defns':
7486
7500
  case 'try':
7487
- case 'throw':
7488
7501
  case 'recur':
7489
7502
  case 'loop':
7490
7503
  case 'time!':
7491
7504
  case 'doseq':
7492
7505
  case 'for':
7493
- case 'do':
7494
7506
  throw new Error("Special expression ".concat(name_1, " is not available in algebraic notation"));
7495
7507
  default:
7496
7508
  throw new Error("Unknown special expression: ".concat(name_1));
@@ -7507,7 +7519,7 @@ var AlgebraicParser = /** @class */ (function () {
7507
7519
  };
7508
7520
  }
7509
7521
  };
7510
- AlgebraicParser.prototype.parseLamdaFunction = function () {
7522
+ AlgebraicParser.prototype.parseLambdaFunction = function () {
7511
7523
  var _a;
7512
7524
  var firstToken = this.peek();
7513
7525
  this.advance();
@@ -7566,6 +7578,62 @@ var AlgebraicParser = /** @class */ (function () {
7566
7578
  token: getTokenDebugData(firstToken) && firstToken,
7567
7579
  };
7568
7580
  };
7581
+ AlgebraicParser.prototype.parseShorthandLamdaFunction = function () {
7582
+ var _a, _b, _c, _d;
7583
+ var firstToken = this.peek();
7584
+ this.advance();
7585
+ var startPos = this.parseState.position;
7586
+ var exprNode = this.parseExpression();
7587
+ var endPos = this.parseState.position - 1;
7588
+ var arity = 0;
7589
+ var percent1 = 'NOT_SET'; // referring to argument bindings. % = NAKED, %1, %2, %3, etc = WITH_1
7590
+ for (var pos = startPos; pos <= endPos; pos += 1) {
7591
+ var tkn = this.tokenStream.tokens[pos];
7592
+ if (isA_SymbolToken(tkn)) {
7593
+ var match = placeholderRegexp$1.exec(tkn[1]);
7594
+ if (match) {
7595
+ var number = (_a = match[1]) !== null && _a !== void 0 ? _a : '1';
7596
+ if (number === '1') {
7597
+ var mixedPercent1 = (!match[1] && percent1 === 'WITH_1') || (match[1] && percent1 === 'NAKED');
7598
+ if (mixedPercent1)
7599
+ throw new LitsError('Please make up your mind, either use $ or $1', (_b = getTokenDebugData(firstToken)) === null || _b === void 0 ? void 0 : _b.sourceCodeInfo);
7600
+ percent1 = match[1] ? 'WITH_1' : 'NAKED';
7601
+ }
7602
+ arity = Math.max(arity, Number(number));
7603
+ if (arity > 20)
7604
+ throw new LitsError('Can\'t specify more than 20 arguments', (_c = getTokenDebugData(firstToken)) === null || _c === void 0 ? void 0 : _c.sourceCodeInfo);
7605
+ }
7606
+ }
7607
+ if (isA_OperatorToken(tkn, '=>')) {
7608
+ throw new LitsError('Nested shortcut functions are not allowed', (_d = getTokenDebugData(firstToken)) === null || _d === void 0 ? void 0 : _d.sourceCodeInfo);
7609
+ }
7610
+ }
7611
+ var mandatoryArguments = [];
7612
+ for (var i = 1; i <= arity; i += 1) {
7613
+ if (i === 1 && percent1 === 'NAKED')
7614
+ mandatoryArguments.push('$');
7615
+ else
7616
+ mandatoryArguments.push("$".concat(i));
7617
+ }
7618
+ var args = {
7619
+ b: [],
7620
+ m: mandatoryArguments,
7621
+ };
7622
+ var node = {
7623
+ t: AstNodeType.SpecialExpression,
7624
+ n: 'fn',
7625
+ p: [],
7626
+ o: [
7627
+ {
7628
+ as: args,
7629
+ b: [exprNode],
7630
+ a: args.m.length,
7631
+ },
7632
+ ],
7633
+ token: getTokenDebugData(firstToken) && firstToken,
7634
+ };
7635
+ return node;
7636
+ };
7569
7637
  AlgebraicParser.prototype.isAtEnd = function () {
7570
7638
  return this.parseState.position >= this.tokenStream.tokens.length;
7571
7639
  };
@@ -7923,7 +7991,7 @@ function parseToken(tokenStream, parseState) {
7923
7991
  }
7924
7992
 
7925
7993
  var polishIdentifierCharacterClass = '[\\w@%^?=!$<>+*/:-]';
7926
- var algebraicIdentifierCharacterClass = '[\\w$:!]';
7994
+ var algebraicIdentifierCharacterClass = '[\\w$:!?]';
7927
7995
  var algebraicIdentifierFirstCharacterClass = '[a-zA-Z_$]';
7928
7996
 
7929
7997
  var NO_MATCH = [0];
@@ -8230,13 +8298,11 @@ var algebraicReservedNamesRecord = {
8230
8298
  'defn': { value: null, forbidden: true },
8231
8299
  'defns': { value: null, forbidden: true },
8232
8300
  'try': { value: null, forbidden: true },
8233
- 'throw': { value: null, forbidden: true },
8234
8301
  'recur': { value: null, forbidden: true },
8235
8302
  'loop': { value: null, forbidden: true },
8236
8303
  'time!': { value: null, forbidden: true },
8237
8304
  'doseq': { value: null, forbidden: true },
8238
8305
  'for': { value: null, forbidden: true },
8239
- 'do': { value: null, forbidden: true },
8240
8306
  };
8241
8307
 
8242
8308
  var identifierRegExp = new RegExp(algebraicIdentifierCharacterClass);