terser 5.30.3 → 5.30.4

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/CHANGELOG.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # Changelog
2
2
 
3
+ ## v5.30.4
4
+ - Fix parsing `#private in ...` when next to other operators
5
+
3
6
  ## v5.30.3
4
7
  - Fix precedence of `#private in ...` operator
5
8
 
@@ -3424,7 +3424,7 @@ function parse($TEXT, options) {
3424
3424
  var prec = op != null ? PRECEDENCE[op] : null;
3425
3425
  if (prec != null && (prec > min_prec || (op === "**" && min_prec === prec))) {
3426
3426
  next();
3427
- var right = expr_op(maybe_unary(true), prec, no_in);
3427
+ var right = expr_ops(no_in, prec, true);
3428
3428
  return expr_op(new AST_Binary({
3429
3429
  start : left.start,
3430
3430
  left : left,
@@ -3436,9 +3436,9 @@ function parse($TEXT, options) {
3436
3436
  return left;
3437
3437
  };
3438
3438
 
3439
- function expr_ops(no_in) {
3439
+ function expr_ops(no_in, min_prec, allow_calls, allow_arrows) {
3440
3440
  // maybe_unary won't return us a AST_SymbolPrivateProperty
3441
- if (!no_in && is("privatename")) {
3441
+ if (!no_in && min_prec < PRECEDENCE["in"] && is("privatename")) {
3442
3442
  if(!S.in_class) {
3443
3443
  croak("Private field must be used in an enclosing class");
3444
3444
  }
@@ -3455,19 +3455,19 @@ function parse($TEXT, options) {
3455
3455
  const private_in = new AST_PrivateIn({
3456
3456
  start,
3457
3457
  key,
3458
- value: expr_op(maybe_unary(true), PRECEDENCE["in"], no_in),
3458
+ value: expr_ops(no_in, PRECEDENCE["in"], true),
3459
3459
  end: prev()
3460
3460
  });
3461
3461
 
3462
3462
  return expr_op(private_in, 0, no_in);
3463
3463
  } else {
3464
- return expr_op(maybe_unary(true, true), 0, no_in);
3464
+ return expr_op(maybe_unary(allow_calls, allow_arrows), min_prec, no_in);
3465
3465
  }
3466
3466
  }
3467
3467
 
3468
3468
  var maybe_conditional = function(no_in) {
3469
3469
  var start = S.token;
3470
- var expr = expr_ops(no_in);
3470
+ var expr = expr_ops(no_in, 0, true, true);
3471
3471
  if (is("operator", "?")) {
3472
3472
  next();
3473
3473
  var yes = expression(false);
package/lib/parse.js CHANGED
@@ -3279,7 +3279,7 @@ function parse($TEXT, options) {
3279
3279
  var prec = op != null ? PRECEDENCE[op] : null;
3280
3280
  if (prec != null && (prec > min_prec || (op === "**" && min_prec === prec))) {
3281
3281
  next();
3282
- var right = expr_op(maybe_unary(true), prec, no_in);
3282
+ var right = expr_ops(no_in, prec, true);
3283
3283
  return expr_op(new AST_Binary({
3284
3284
  start : left.start,
3285
3285
  left : left,
@@ -3291,9 +3291,9 @@ function parse($TEXT, options) {
3291
3291
  return left;
3292
3292
  };
3293
3293
 
3294
- function expr_ops(no_in) {
3294
+ function expr_ops(no_in, min_prec, allow_calls, allow_arrows) {
3295
3295
  // maybe_unary won't return us a AST_SymbolPrivateProperty
3296
- if (!no_in && is("privatename")) {
3296
+ if (!no_in && min_prec < PRECEDENCE["in"] && is("privatename")) {
3297
3297
  if(!S.in_class) {
3298
3298
  croak("Private field must be used in an enclosing class");
3299
3299
  }
@@ -3310,19 +3310,19 @@ function parse($TEXT, options) {
3310
3310
  const private_in = new AST_PrivateIn({
3311
3311
  start,
3312
3312
  key,
3313
- value: expr_op(maybe_unary(true), PRECEDENCE["in"], no_in),
3313
+ value: expr_ops(no_in, PRECEDENCE["in"], true),
3314
3314
  end: prev()
3315
3315
  });
3316
3316
 
3317
3317
  return expr_op(private_in, 0, no_in);
3318
3318
  } else {
3319
- return expr_op(maybe_unary(true, true), 0, no_in);
3319
+ return expr_op(maybe_unary(allow_calls, allow_arrows), min_prec, no_in);
3320
3320
  }
3321
3321
  }
3322
3322
 
3323
3323
  var maybe_conditional = function(no_in) {
3324
3324
  var start = S.token;
3325
- var expr = expr_ops(no_in);
3325
+ var expr = expr_ops(no_in, 0, true, true);
3326
3326
  if (is("operator", "?")) {
3327
3327
  next();
3328
3328
  var yes = expression(false);
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "homepage": "https://terser.org",
5
5
  "author": "Mihai Bazon <mihai.bazon@gmail.com> (http://lisperator.net/)",
6
6
  "license": "BSD-2-Clause",
7
- "version": "5.30.3",
7
+ "version": "5.30.4",
8
8
  "engines": {
9
9
  "node": ">=10"
10
10
  },