@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/cli/cli.js CHANGED
@@ -92,7 +92,7 @@ typeof SuppressedError === "function" ? SuppressedError : function (error, suppr
92
92
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
93
93
  };
94
94
 
95
- var version = "2.0.7";
95
+ var version = "2.0.9";
96
96
 
97
97
  var AstNodeType;
98
98
  (function (AstNodeType) {
@@ -397,6 +397,7 @@ var AlgebraicOperators = [
397
397
  '<<', // left shift
398
398
  '>>', // signed right shift
399
399
  '>>>', // unsigned right shift
400
+ '++', // string concatenation
400
401
  '<', // less than
401
402
  '<=', // less than or equal
402
403
  '>', // greater than
@@ -7079,24 +7080,27 @@ function parseString(tokenStream, parseState) {
7079
7080
  };
7080
7081
  }
7081
7082
 
7082
- var exponentiationPrecedence = 8;
7083
+ var exponentiationPrecedence = 9;
7084
+ var placeholderRegexp$1 = /^\$([1-9]\d?)?$/;
7083
7085
  function getPrecedence(operator) {
7084
7086
  var operatorSign = operator[1];
7085
7087
  switch (operatorSign) {
7086
7088
  case '.': // accessor
7087
- return 9;
7089
+ return 10;
7088
7090
  case '**': // exponentiation
7089
7091
  return exponentiationPrecedence;
7090
7092
  case '*': // multiplication
7091
7093
  case '/': // division
7092
7094
  case '%': // remainder
7093
- return 7;
7095
+ return 8;
7094
7096
  case '+': // addition
7095
7097
  case '-': // subtraction
7096
- return 6;
7098
+ return 7;
7097
7099
  case '<<': // left shift
7098
7100
  case '>>': // signed right shift
7099
7101
  case '>>>': // unsigned right shift
7102
+ return 6;
7103
+ case '++': // string concatenation
7100
7104
  return 5;
7101
7105
  case '<': // less than
7102
7106
  case '<=': // less than or equal
@@ -7194,6 +7198,11 @@ function fromBinaryAlgebraicToAstNode(operator, left, right) {
7194
7198
  return createNamedNormalExpressionNode('bit-shift-right', [left, right], token);
7195
7199
  case '>>>':
7196
7200
  return createNamedNormalExpressionNode('unsigned-bit-shift-right', [left, right], token);
7201
+ case '++': {
7202
+ var leftString = createNamedNormalExpressionNode('str', [left], token);
7203
+ var rightString = createNamedNormalExpressionNode('str', [right], token);
7204
+ return createNamedNormalExpressionNode('str', [leftString, rightString], token);
7205
+ }
7197
7206
  case '<':
7198
7207
  return createNamedNormalExpressionNode('<', [left, right], token);
7199
7208
  case '<=':
@@ -7305,7 +7314,7 @@ var AlgebraicParser = /** @class */ (function () {
7305
7314
  // Parentheses
7306
7315
  if (isLParenToken(token)) {
7307
7316
  var positionBefore = this.parseState.position;
7308
- var lamdaFunction = this.parseLamdaFunction();
7317
+ var lamdaFunction = this.parseLambdaFunction();
7309
7318
  if (lamdaFunction) {
7310
7319
  return lamdaFunction;
7311
7320
  }
@@ -7326,6 +7335,9 @@ var AlgebraicParser = /** @class */ (function () {
7326
7335
  var operand = this.parseOperand();
7327
7336
  return fromUnaryAlgebraicToAstNode(token, operand);
7328
7337
  }
7338
+ else if (operatorName === '=>') {
7339
+ return this.parseShorthandLamdaFunction();
7340
+ }
7329
7341
  else {
7330
7342
  throw new Error("Unknown unary operator: ".concat(operatorName));
7331
7343
  }
@@ -7472,6 +7484,8 @@ var AlgebraicParser = /** @class */ (function () {
7472
7484
  case 'or':
7473
7485
  case 'when':
7474
7486
  case 'when-not':
7487
+ case 'do':
7488
+ case 'throw':
7475
7489
  return {
7476
7490
  t: AstNodeType.SpecialExpression,
7477
7491
  n: name_1,
@@ -7488,13 +7502,11 @@ var AlgebraicParser = /** @class */ (function () {
7488
7502
  case 'defn':
7489
7503
  case 'defns':
7490
7504
  case 'try':
7491
- case 'throw':
7492
7505
  case 'recur':
7493
7506
  case 'loop':
7494
7507
  case 'time!':
7495
7508
  case 'doseq':
7496
7509
  case 'for':
7497
- case 'do':
7498
7510
  throw new Error("Special expression ".concat(name_1, " is not available in algebraic notation"));
7499
7511
  default:
7500
7512
  throw new Error("Unknown special expression: ".concat(name_1));
@@ -7511,7 +7523,7 @@ var AlgebraicParser = /** @class */ (function () {
7511
7523
  };
7512
7524
  }
7513
7525
  };
7514
- AlgebraicParser.prototype.parseLamdaFunction = function () {
7526
+ AlgebraicParser.prototype.parseLambdaFunction = function () {
7515
7527
  var _a;
7516
7528
  var firstToken = this.peek();
7517
7529
  this.advance();
@@ -7570,6 +7582,62 @@ var AlgebraicParser = /** @class */ (function () {
7570
7582
  token: getTokenDebugData(firstToken) && firstToken,
7571
7583
  };
7572
7584
  };
7585
+ AlgebraicParser.prototype.parseShorthandLamdaFunction = function () {
7586
+ var _a, _b, _c, _d;
7587
+ var firstToken = this.peek();
7588
+ this.advance();
7589
+ var startPos = this.parseState.position;
7590
+ var exprNode = this.parseExpression();
7591
+ var endPos = this.parseState.position - 1;
7592
+ var arity = 0;
7593
+ var percent1 = 'NOT_SET'; // referring to argument bindings. % = NAKED, %1, %2, %3, etc = WITH_1
7594
+ for (var pos = startPos; pos <= endPos; pos += 1) {
7595
+ var tkn = this.tokenStream.tokens[pos];
7596
+ if (isA_SymbolToken(tkn)) {
7597
+ var match = placeholderRegexp$1.exec(tkn[1]);
7598
+ if (match) {
7599
+ var number = (_a = match[1]) !== null && _a !== void 0 ? _a : '1';
7600
+ if (number === '1') {
7601
+ var mixedPercent1 = (!match[1] && percent1 === 'WITH_1') || (match[1] && percent1 === 'NAKED');
7602
+ if (mixedPercent1)
7603
+ throw new LitsError('Please make up your mind, either use $ or $1', (_b = getTokenDebugData(firstToken)) === null || _b === void 0 ? void 0 : _b.sourceCodeInfo);
7604
+ percent1 = match[1] ? 'WITH_1' : 'NAKED';
7605
+ }
7606
+ arity = Math.max(arity, Number(number));
7607
+ if (arity > 20)
7608
+ throw new LitsError('Can\'t specify more than 20 arguments', (_c = getTokenDebugData(firstToken)) === null || _c === void 0 ? void 0 : _c.sourceCodeInfo);
7609
+ }
7610
+ }
7611
+ if (isA_OperatorToken(tkn, '=>')) {
7612
+ throw new LitsError('Nested shortcut functions are not allowed', (_d = getTokenDebugData(firstToken)) === null || _d === void 0 ? void 0 : _d.sourceCodeInfo);
7613
+ }
7614
+ }
7615
+ var mandatoryArguments = [];
7616
+ for (var i = 1; i <= arity; i += 1) {
7617
+ if (i === 1 && percent1 === 'NAKED')
7618
+ mandatoryArguments.push('$');
7619
+ else
7620
+ mandatoryArguments.push("$".concat(i));
7621
+ }
7622
+ var args = {
7623
+ b: [],
7624
+ m: mandatoryArguments,
7625
+ };
7626
+ var node = {
7627
+ t: AstNodeType.SpecialExpression,
7628
+ n: 'fn',
7629
+ p: [],
7630
+ o: [
7631
+ {
7632
+ as: args,
7633
+ b: [exprNode],
7634
+ a: args.m.length,
7635
+ },
7636
+ ],
7637
+ token: getTokenDebugData(firstToken) && firstToken,
7638
+ };
7639
+ return node;
7640
+ };
7573
7641
  AlgebraicParser.prototype.isAtEnd = function () {
7574
7642
  return this.parseState.position >= this.tokenStream.tokens.length;
7575
7643
  };
@@ -7928,7 +7996,7 @@ function parseToken(tokenStream, parseState) {
7928
7996
 
7929
7997
  var polishIdentifierCharacterClass = '[\\w@%^?=!$<>+*/:-]';
7930
7998
  var polishIdentifierFirstCharacterClass = '[a-zA-Z_@%^?=!$<>+*/-]';
7931
- var algebraicIdentifierCharacterClass = '[\\w$:!]';
7999
+ var algebraicIdentifierCharacterClass = '[\\w$:!?]';
7932
8000
  var algebraicIdentifierFirstCharacterClass = '[a-zA-Z_$]';
7933
8001
 
7934
8002
  var NO_MATCH = [0];
@@ -8235,13 +8303,11 @@ var algebraicReservedNamesRecord = {
8235
8303
  'defn': { value: null, forbidden: true },
8236
8304
  'defns': { value: null, forbidden: true },
8237
8305
  'try': { value: null, forbidden: true },
8238
- 'throw': { value: null, forbidden: true },
8239
8306
  'recur': { value: null, forbidden: true },
8240
8307
  'loop': { value: null, forbidden: true },
8241
8308
  'time!': { value: null, forbidden: true },
8242
8309
  'doseq': { value: null, forbidden: true },
8243
8310
  'for': { value: null, forbidden: true },
8244
- 'do': { value: null, forbidden: true },
8245
8311
  };
8246
8312
 
8247
8313
  var identifierRegExp = new RegExp(algebraicIdentifierCharacterClass);
@@ -1,4 +1,4 @@
1
1
  export declare const polishIdentifierCharacterClass = "[\\w@%^?=!$<>+*/:-]";
2
2
  export declare const polishIdentifierFirstCharacterClass = "[a-zA-Z_@%^?=!$<>+*/-]";
3
- export declare const algebraicIdentifierCharacterClass = "[\\w$:!]";
3
+ export declare const algebraicIdentifierCharacterClass = "[\\w$:!?]";
4
4
  export declare const algebraicIdentifierFirstCharacterClass = "[a-zA-Z_$]";
@@ -11,7 +11,8 @@ export declare class AlgebraicParser {
11
11
  private parseObject;
12
12
  private parseArray;
13
13
  private parseFunctionCall;
14
- parseLamdaFunction(): AstNode | null;
14
+ parseLambdaFunction(): AstNode | null;
15
+ private parseShorthandLamdaFunction;
15
16
  private isAtEnd;
16
17
  private peek;
17
18
  }
@@ -5,7 +5,7 @@ export declare const algebraicSimpleTokenTypes: readonly ["LBrace", "LBracket",
5
5
  export declare const algebraicOnlyValueTokenTypes: ["A_Whitespace", "A_Operator", "A_Symbol", "A_ReservedSymbol", "A_SingleLineComment", "A_MultiLineComment", "A_Number"];
6
6
  export declare const algebraicValueTokenTypes: readonly ["String", "A_Whitespace", "A_Operator", "A_Symbol", "A_ReservedSymbol", "A_SingleLineComment", "A_MultiLineComment", "A_Number"];
7
7
  export declare const algebraicTokenTypes: readonly ["LBrace", "LBracket", "LParen", "RBrace", "RBracket", "RParen", "AlgNotation", "PolNotation", "EndNotation", "String", "A_Whitespace", "A_Operator", "A_Symbol", "A_ReservedSymbol", "A_SingleLineComment", "A_MultiLineComment", "A_Number"];
8
- export declare const AlgebraicOperators: readonly ["!", "~", "=", ",", "=>", "...", ".", "**", "*", "/", "%", "+", "-", "<<", ">>", ">>>", "<", "<=", ">", ">=", "==", "!=", "&", "^", "|", "&&", "||", "??"];
8
+ export declare const AlgebraicOperators: readonly ["!", "~", "=", ",", "=>", "...", ".", "**", "*", "/", "%", "+", "-", "<<", ">>", ">>>", "++", "<", "<=", ">", ">=", "==", "!=", "&", "^", "|", "&&", "||", "??"];
9
9
  export type AlgebraicOperator = typeof AlgebraicOperators[number];
10
10
  export declare function isAlgebraicOperator(operator: string): operator is AlgebraicOperator;
11
11
  export declare function assertAlgebraicOperator(operator: string): asserts operator is AlgebraicOperator;
package/dist/index.esm.js CHANGED
@@ -390,6 +390,7 @@ var AlgebraicOperators = [
390
390
  '<<', // left shift
391
391
  '>>', // signed right shift
392
392
  '>>>', // unsigned right shift
393
+ '++', // string concatenation
393
394
  '<', // less than
394
395
  '<=', // less than or equal
395
396
  '>', // greater than
@@ -3160,7 +3161,7 @@ var mathNormalExpression = {
3160
3161
  },
3161
3162
  };
3162
3163
 
3163
- var version = "2.0.7";
3164
+ var version = "2.0.9";
3164
3165
 
3165
3166
  var uuidTemplate = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';
3166
3167
  var xyRegexp = /[xy]/g;
@@ -7111,24 +7112,27 @@ function parseString(tokenStream, parseState) {
7111
7112
  };
7112
7113
  }
7113
7114
 
7114
- var exponentiationPrecedence = 8;
7115
+ var exponentiationPrecedence = 9;
7116
+ var placeholderRegexp$1 = /^\$([1-9]\d?)?$/;
7115
7117
  function getPrecedence(operator) {
7116
7118
  var operatorSign = operator[1];
7117
7119
  switch (operatorSign) {
7118
7120
  case '.': // accessor
7119
- return 9;
7121
+ return 10;
7120
7122
  case '**': // exponentiation
7121
7123
  return exponentiationPrecedence;
7122
7124
  case '*': // multiplication
7123
7125
  case '/': // division
7124
7126
  case '%': // remainder
7125
- return 7;
7127
+ return 8;
7126
7128
  case '+': // addition
7127
7129
  case '-': // subtraction
7128
- return 6;
7130
+ return 7;
7129
7131
  case '<<': // left shift
7130
7132
  case '>>': // signed right shift
7131
7133
  case '>>>': // unsigned right shift
7134
+ return 6;
7135
+ case '++': // string concatenation
7132
7136
  return 5;
7133
7137
  case '<': // less than
7134
7138
  case '<=': // less than or equal
@@ -7226,6 +7230,11 @@ function fromBinaryAlgebraicToAstNode(operator, left, right) {
7226
7230
  return createNamedNormalExpressionNode('bit-shift-right', [left, right], token);
7227
7231
  case '>>>':
7228
7232
  return createNamedNormalExpressionNode('unsigned-bit-shift-right', [left, right], token);
7233
+ case '++': {
7234
+ var leftString = createNamedNormalExpressionNode('str', [left], token);
7235
+ var rightString = createNamedNormalExpressionNode('str', [right], token);
7236
+ return createNamedNormalExpressionNode('str', [leftString, rightString], token);
7237
+ }
7229
7238
  case '<':
7230
7239
  return createNamedNormalExpressionNode('<', [left, right], token);
7231
7240
  case '<=':
@@ -7337,7 +7346,7 @@ var AlgebraicParser = /** @class */ (function () {
7337
7346
  // Parentheses
7338
7347
  if (isLParenToken(token)) {
7339
7348
  var positionBefore = this.parseState.position;
7340
- var lamdaFunction = this.parseLamdaFunction();
7349
+ var lamdaFunction = this.parseLambdaFunction();
7341
7350
  if (lamdaFunction) {
7342
7351
  return lamdaFunction;
7343
7352
  }
@@ -7358,6 +7367,9 @@ var AlgebraicParser = /** @class */ (function () {
7358
7367
  var operand = this.parseOperand();
7359
7368
  return fromUnaryAlgebraicToAstNode(token, operand);
7360
7369
  }
7370
+ else if (operatorName === '=>') {
7371
+ return this.parseShorthandLamdaFunction();
7372
+ }
7361
7373
  else {
7362
7374
  throw new Error("Unknown unary operator: ".concat(operatorName));
7363
7375
  }
@@ -7504,6 +7516,8 @@ var AlgebraicParser = /** @class */ (function () {
7504
7516
  case 'or':
7505
7517
  case 'when':
7506
7518
  case 'when-not':
7519
+ case 'do':
7520
+ case 'throw':
7507
7521
  return {
7508
7522
  t: AstNodeType.SpecialExpression,
7509
7523
  n: name_1,
@@ -7520,13 +7534,11 @@ var AlgebraicParser = /** @class */ (function () {
7520
7534
  case 'defn':
7521
7535
  case 'defns':
7522
7536
  case 'try':
7523
- case 'throw':
7524
7537
  case 'recur':
7525
7538
  case 'loop':
7526
7539
  case 'time!':
7527
7540
  case 'doseq':
7528
7541
  case 'for':
7529
- case 'do':
7530
7542
  throw new Error("Special expression ".concat(name_1, " is not available in algebraic notation"));
7531
7543
  default:
7532
7544
  throw new Error("Unknown special expression: ".concat(name_1));
@@ -7543,7 +7555,7 @@ var AlgebraicParser = /** @class */ (function () {
7543
7555
  };
7544
7556
  }
7545
7557
  };
7546
- AlgebraicParser.prototype.parseLamdaFunction = function () {
7558
+ AlgebraicParser.prototype.parseLambdaFunction = function () {
7547
7559
  var _a;
7548
7560
  var firstToken = this.peek();
7549
7561
  this.advance();
@@ -7602,6 +7614,62 @@ var AlgebraicParser = /** @class */ (function () {
7602
7614
  token: getTokenDebugData(firstToken) && firstToken,
7603
7615
  };
7604
7616
  };
7617
+ AlgebraicParser.prototype.parseShorthandLamdaFunction = function () {
7618
+ var _a, _b, _c, _d;
7619
+ var firstToken = this.peek();
7620
+ this.advance();
7621
+ var startPos = this.parseState.position;
7622
+ var exprNode = this.parseExpression();
7623
+ var endPos = this.parseState.position - 1;
7624
+ var arity = 0;
7625
+ var percent1 = 'NOT_SET'; // referring to argument bindings. % = NAKED, %1, %2, %3, etc = WITH_1
7626
+ for (var pos = startPos; pos <= endPos; pos += 1) {
7627
+ var tkn = this.tokenStream.tokens[pos];
7628
+ if (isA_SymbolToken(tkn)) {
7629
+ var match = placeholderRegexp$1.exec(tkn[1]);
7630
+ if (match) {
7631
+ var number = (_a = match[1]) !== null && _a !== void 0 ? _a : '1';
7632
+ if (number === '1') {
7633
+ var mixedPercent1 = (!match[1] && percent1 === 'WITH_1') || (match[1] && percent1 === 'NAKED');
7634
+ if (mixedPercent1)
7635
+ throw new LitsError('Please make up your mind, either use $ or $1', (_b = getTokenDebugData(firstToken)) === null || _b === void 0 ? void 0 : _b.sourceCodeInfo);
7636
+ percent1 = match[1] ? 'WITH_1' : 'NAKED';
7637
+ }
7638
+ arity = Math.max(arity, Number(number));
7639
+ if (arity > 20)
7640
+ throw new LitsError('Can\'t specify more than 20 arguments', (_c = getTokenDebugData(firstToken)) === null || _c === void 0 ? void 0 : _c.sourceCodeInfo);
7641
+ }
7642
+ }
7643
+ if (isA_OperatorToken(tkn, '=>')) {
7644
+ throw new LitsError('Nested shortcut functions are not allowed', (_d = getTokenDebugData(firstToken)) === null || _d === void 0 ? void 0 : _d.sourceCodeInfo);
7645
+ }
7646
+ }
7647
+ var mandatoryArguments = [];
7648
+ for (var i = 1; i <= arity; i += 1) {
7649
+ if (i === 1 && percent1 === 'NAKED')
7650
+ mandatoryArguments.push('$');
7651
+ else
7652
+ mandatoryArguments.push("$".concat(i));
7653
+ }
7654
+ var args = {
7655
+ b: [],
7656
+ m: mandatoryArguments,
7657
+ };
7658
+ var node = {
7659
+ t: AstNodeType.SpecialExpression,
7660
+ n: 'fn',
7661
+ p: [],
7662
+ o: [
7663
+ {
7664
+ as: args,
7665
+ b: [exprNode],
7666
+ a: args.m.length,
7667
+ },
7668
+ ],
7669
+ token: getTokenDebugData(firstToken) && firstToken,
7670
+ };
7671
+ return node;
7672
+ };
7605
7673
  AlgebraicParser.prototype.isAtEnd = function () {
7606
7674
  return this.parseState.position >= this.tokenStream.tokens.length;
7607
7675
  };
@@ -7960,7 +8028,7 @@ function parseToken(tokenStream, parseState) {
7960
8028
 
7961
8029
  var polishIdentifierCharacterClass = '[\\w@%^?=!$<>+*/:-]';
7962
8030
  var polishIdentifierFirstCharacterClass = '[a-zA-Z_@%^?=!$<>+*/-]';
7963
- var algebraicIdentifierCharacterClass = '[\\w$:!]';
8031
+ var algebraicIdentifierCharacterClass = '[\\w$:!?]';
7964
8032
  var algebraicIdentifierFirstCharacterClass = '[a-zA-Z_$]';
7965
8033
 
7966
8034
  var NO_MATCH = [0];
@@ -8267,13 +8335,11 @@ var algebraicReservedNamesRecord = {
8267
8335
  'defn': { value: null, forbidden: true },
8268
8336
  'defns': { value: null, forbidden: true },
8269
8337
  'try': { value: null, forbidden: true },
8270
- 'throw': { value: null, forbidden: true },
8271
8338
  'recur': { value: null, forbidden: true },
8272
8339
  'loop': { value: null, forbidden: true },
8273
8340
  'time!': { value: null, forbidden: true },
8274
8341
  'doseq': { value: null, forbidden: true },
8275
8342
  'for': { value: null, forbidden: true },
8276
- 'do': { value: null, forbidden: true },
8277
8343
  };
8278
8344
 
8279
8345
  var identifierRegExp = new RegExp(algebraicIdentifierCharacterClass);