@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.
package/dist/lits.iife.js CHANGED
@@ -393,6 +393,7 @@ var Lits = (function (exports) {
393
393
  '<<', // left shift
394
394
  '>>', // signed right shift
395
395
  '>>>', // unsigned right shift
396
+ '++', // string concatenation
396
397
  '<', // less than
397
398
  '<=', // less than or equal
398
399
  '>', // greater than
@@ -3163,7 +3164,7 @@ var Lits = (function (exports) {
3163
3164
  },
3164
3165
  };
3165
3166
 
3166
- var version = "2.0.7";
3167
+ var version = "2.0.9";
3167
3168
 
3168
3169
  var uuidTemplate = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';
3169
3170
  var xyRegexp = /[xy]/g;
@@ -7114,24 +7115,27 @@ var Lits = (function (exports) {
7114
7115
  };
7115
7116
  }
7116
7117
 
7117
- var exponentiationPrecedence = 8;
7118
+ var exponentiationPrecedence = 9;
7119
+ var placeholderRegexp$1 = /^\$([1-9]\d?)?$/;
7118
7120
  function getPrecedence(operator) {
7119
7121
  var operatorSign = operator[1];
7120
7122
  switch (operatorSign) {
7121
7123
  case '.': // accessor
7122
- return 9;
7124
+ return 10;
7123
7125
  case '**': // exponentiation
7124
7126
  return exponentiationPrecedence;
7125
7127
  case '*': // multiplication
7126
7128
  case '/': // division
7127
7129
  case '%': // remainder
7128
- return 7;
7130
+ return 8;
7129
7131
  case '+': // addition
7130
7132
  case '-': // subtraction
7131
- return 6;
7133
+ return 7;
7132
7134
  case '<<': // left shift
7133
7135
  case '>>': // signed right shift
7134
7136
  case '>>>': // unsigned right shift
7137
+ return 6;
7138
+ case '++': // string concatenation
7135
7139
  return 5;
7136
7140
  case '<': // less than
7137
7141
  case '<=': // less than or equal
@@ -7229,6 +7233,11 @@ var Lits = (function (exports) {
7229
7233
  return createNamedNormalExpressionNode('bit-shift-right', [left, right], token);
7230
7234
  case '>>>':
7231
7235
  return createNamedNormalExpressionNode('unsigned-bit-shift-right', [left, right], token);
7236
+ case '++': {
7237
+ var leftString = createNamedNormalExpressionNode('str', [left], token);
7238
+ var rightString = createNamedNormalExpressionNode('str', [right], token);
7239
+ return createNamedNormalExpressionNode('str', [leftString, rightString], token);
7240
+ }
7232
7241
  case '<':
7233
7242
  return createNamedNormalExpressionNode('<', [left, right], token);
7234
7243
  case '<=':
@@ -7340,7 +7349,7 @@ var Lits = (function (exports) {
7340
7349
  // Parentheses
7341
7350
  if (isLParenToken(token)) {
7342
7351
  var positionBefore = this.parseState.position;
7343
- var lamdaFunction = this.parseLamdaFunction();
7352
+ var lamdaFunction = this.parseLambdaFunction();
7344
7353
  if (lamdaFunction) {
7345
7354
  return lamdaFunction;
7346
7355
  }
@@ -7361,6 +7370,9 @@ var Lits = (function (exports) {
7361
7370
  var operand = this.parseOperand();
7362
7371
  return fromUnaryAlgebraicToAstNode(token, operand);
7363
7372
  }
7373
+ else if (operatorName === '=>') {
7374
+ return this.parseShorthandLamdaFunction();
7375
+ }
7364
7376
  else {
7365
7377
  throw new Error("Unknown unary operator: ".concat(operatorName));
7366
7378
  }
@@ -7507,6 +7519,8 @@ var Lits = (function (exports) {
7507
7519
  case 'or':
7508
7520
  case 'when':
7509
7521
  case 'when-not':
7522
+ case 'do':
7523
+ case 'throw':
7510
7524
  return {
7511
7525
  t: exports.AstNodeType.SpecialExpression,
7512
7526
  n: name_1,
@@ -7523,13 +7537,11 @@ var Lits = (function (exports) {
7523
7537
  case 'defn':
7524
7538
  case 'defns':
7525
7539
  case 'try':
7526
- case 'throw':
7527
7540
  case 'recur':
7528
7541
  case 'loop':
7529
7542
  case 'time!':
7530
7543
  case 'doseq':
7531
7544
  case 'for':
7532
- case 'do':
7533
7545
  throw new Error("Special expression ".concat(name_1, " is not available in algebraic notation"));
7534
7546
  default:
7535
7547
  throw new Error("Unknown special expression: ".concat(name_1));
@@ -7546,7 +7558,7 @@ var Lits = (function (exports) {
7546
7558
  };
7547
7559
  }
7548
7560
  };
7549
- AlgebraicParser.prototype.parseLamdaFunction = function () {
7561
+ AlgebraicParser.prototype.parseLambdaFunction = function () {
7550
7562
  var _a;
7551
7563
  var firstToken = this.peek();
7552
7564
  this.advance();
@@ -7605,6 +7617,62 @@ var Lits = (function (exports) {
7605
7617
  token: getTokenDebugData(firstToken) && firstToken,
7606
7618
  };
7607
7619
  };
7620
+ AlgebraicParser.prototype.parseShorthandLamdaFunction = function () {
7621
+ var _a, _b, _c, _d;
7622
+ var firstToken = this.peek();
7623
+ this.advance();
7624
+ var startPos = this.parseState.position;
7625
+ var exprNode = this.parseExpression();
7626
+ var endPos = this.parseState.position - 1;
7627
+ var arity = 0;
7628
+ var percent1 = 'NOT_SET'; // referring to argument bindings. % = NAKED, %1, %2, %3, etc = WITH_1
7629
+ for (var pos = startPos; pos <= endPos; pos += 1) {
7630
+ var tkn = this.tokenStream.tokens[pos];
7631
+ if (isA_SymbolToken(tkn)) {
7632
+ var match = placeholderRegexp$1.exec(tkn[1]);
7633
+ if (match) {
7634
+ var number = (_a = match[1]) !== null && _a !== void 0 ? _a : '1';
7635
+ if (number === '1') {
7636
+ var mixedPercent1 = (!match[1] && percent1 === 'WITH_1') || (match[1] && percent1 === 'NAKED');
7637
+ if (mixedPercent1)
7638
+ throw new LitsError('Please make up your mind, either use $ or $1', (_b = getTokenDebugData(firstToken)) === null || _b === void 0 ? void 0 : _b.sourceCodeInfo);
7639
+ percent1 = match[1] ? 'WITH_1' : 'NAKED';
7640
+ }
7641
+ arity = Math.max(arity, Number(number));
7642
+ if (arity > 20)
7643
+ throw new LitsError('Can\'t specify more than 20 arguments', (_c = getTokenDebugData(firstToken)) === null || _c === void 0 ? void 0 : _c.sourceCodeInfo);
7644
+ }
7645
+ }
7646
+ if (isA_OperatorToken(tkn, '=>')) {
7647
+ throw new LitsError('Nested shortcut functions are not allowed', (_d = getTokenDebugData(firstToken)) === null || _d === void 0 ? void 0 : _d.sourceCodeInfo);
7648
+ }
7649
+ }
7650
+ var mandatoryArguments = [];
7651
+ for (var i = 1; i <= arity; i += 1) {
7652
+ if (i === 1 && percent1 === 'NAKED')
7653
+ mandatoryArguments.push('$');
7654
+ else
7655
+ mandatoryArguments.push("$".concat(i));
7656
+ }
7657
+ var args = {
7658
+ b: [],
7659
+ m: mandatoryArguments,
7660
+ };
7661
+ var node = {
7662
+ t: exports.AstNodeType.SpecialExpression,
7663
+ n: 'fn',
7664
+ p: [],
7665
+ o: [
7666
+ {
7667
+ as: args,
7668
+ b: [exprNode],
7669
+ a: args.m.length,
7670
+ },
7671
+ ],
7672
+ token: getTokenDebugData(firstToken) && firstToken,
7673
+ };
7674
+ return node;
7675
+ };
7608
7676
  AlgebraicParser.prototype.isAtEnd = function () {
7609
7677
  return this.parseState.position >= this.tokenStream.tokens.length;
7610
7678
  };
@@ -7963,7 +8031,7 @@ var Lits = (function (exports) {
7963
8031
 
7964
8032
  var polishIdentifierCharacterClass = '[\\w@%^?=!$<>+*/:-]';
7965
8033
  var polishIdentifierFirstCharacterClass = '[a-zA-Z_@%^?=!$<>+*/-]';
7966
- var algebraicIdentifierCharacterClass = '[\\w$:!]';
8034
+ var algebraicIdentifierCharacterClass = '[\\w$:!?]';
7967
8035
  var algebraicIdentifierFirstCharacterClass = '[a-zA-Z_$]';
7968
8036
 
7969
8037
  var NO_MATCH = [0];
@@ -8270,13 +8338,11 @@ var Lits = (function (exports) {
8270
8338
  'defn': { value: null, forbidden: true },
8271
8339
  'defns': { value: null, forbidden: true },
8272
8340
  'try': { value: null, forbidden: true },
8273
- 'throw': { value: null, forbidden: true },
8274
8341
  'recur': { value: null, forbidden: true },
8275
8342
  'loop': { value: null, forbidden: true },
8276
8343
  'time!': { value: null, forbidden: true },
8277
8344
  'doseq': { value: null, forbidden: true },
8278
8345
  'for': { value: null, forbidden: true },
8279
- 'do': { value: null, forbidden: true },
8280
8346
  };
8281
8347
 
8282
8348
  var identifierRegExp = new RegExp(algebraicIdentifierCharacterClass);