terser 5.14.0 → 5.14.1

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,9 @@
1
1
  # Changelog
2
2
 
3
+ ## v5.14.1
4
+ - keep_numbers option added to TypeScript defs (#1208)
5
+ - Fixed parsing of nested template strings (#1204)
6
+
3
7
  ## v5.14.0
4
8
  - Switched to @jridgewell/source-map for sourcemap generation (#1190, #1181)
5
9
  - Fixed source maps with non-terminated segments (#1106)
@@ -323,7 +323,7 @@ function set_annotation(node, annotation) {
323
323
  ***********************************************************************/
324
324
 
325
325
  var LATEST_RAW = ""; // Only used for numbers and template strings
326
- var LATEST_TEMPLATE_END = true;
326
+ var TEMPLATE_RAWS = new Map(); // Raw template strings
327
327
 
328
328
  var KEYWORDS = "break case catch class const continue debugger default delete do else export extends finally for function if in instanceof let new return switch throw try typeof var void while with";
329
329
  var KEYWORDS_ATOM = "false null true";
@@ -854,8 +854,8 @@ function tokenizer($TEXT, filename, html5_comments, shebang) {
854
854
  next(true, true);
855
855
  S.brace_counter++;
856
856
  tok = token(begin ? "template_head" : "template_substitution", content);
857
- LATEST_RAW = raw;
858
- LATEST_TEMPLATE_END = false;
857
+ TEMPLATE_RAWS.set(tok, raw);
858
+ tok.template_end = false;
859
859
  return tok;
860
860
  }
861
861
 
@@ -871,8 +871,8 @@ function tokenizer($TEXT, filename, html5_comments, shebang) {
871
871
  }
872
872
  S.template_braces.pop();
873
873
  tok = token(begin ? "template_head" : "template_substitution", content);
874
- LATEST_RAW = raw;
875
- LATEST_TEMPLATE_END = true;
874
+ TEMPLATE_RAWS.set(tok, raw);
875
+ tok.template_end = true;
876
876
  return tok;
877
877
  });
878
878
 
@@ -2528,19 +2528,19 @@ function parse($TEXT, options) {
2528
2528
 
2529
2529
  segments.push(new AST_TemplateSegment({
2530
2530
  start: S.token,
2531
- raw: LATEST_RAW,
2531
+ raw: TEMPLATE_RAWS.get(S.token),
2532
2532
  value: S.token.value,
2533
2533
  end: S.token
2534
2534
  }));
2535
2535
 
2536
- while (!LATEST_TEMPLATE_END) {
2536
+ while (!S.token.template_end) {
2537
2537
  next();
2538
2538
  handle_regexp();
2539
2539
  segments.push(expression(true));
2540
2540
 
2541
2541
  segments.push(new AST_TemplateSegment({
2542
2542
  start: S.token,
2543
- raw: LATEST_RAW,
2543
+ raw: TEMPLATE_RAWS.get(S.token),
2544
2544
  value: S.token.value,
2545
2545
  end: S.token
2546
2546
  }));
@@ -3503,6 +3503,7 @@ function parse($TEXT, options) {
3503
3503
  } else {
3504
3504
  toplevel = new AST_Toplevel({ start: start, body: body, end: end });
3505
3505
  }
3506
+ TEMPLATE_RAWS = new Map();
3506
3507
  return toplevel;
3507
3508
  })();
3508
3509
 
@@ -3596,6 +3597,7 @@ const set_tok_flag = (tok, flag, truth) => {
3596
3597
  const TOK_FLAG_NLB = 0b0001;
3597
3598
  const TOK_FLAG_QUOTE_SINGLE = 0b0010;
3598
3599
  const TOK_FLAG_QUOTE_EXISTS = 0b0100;
3600
+ const TOK_FLAG_TEMPLATE_END = 0b1000;
3599
3601
 
3600
3602
  class AST_Token {
3601
3603
  constructor(type, value, line, col, pos, nlb, comments_before, comments_after, file) {
@@ -3631,6 +3633,14 @@ class AST_Token {
3631
3633
  set_tok_flag(this, TOK_FLAG_QUOTE_SINGLE, quote_type === "'");
3632
3634
  set_tok_flag(this, TOK_FLAG_QUOTE_EXISTS, !!quote_type);
3633
3635
  }
3636
+
3637
+ get template_end() {
3638
+ return has_tok_flag(this, TOK_FLAG_TEMPLATE_END);
3639
+ }
3640
+
3641
+ set template_end(new_template_end) {
3642
+ set_tok_flag(this, TOK_FLAG_TEMPLATE_END, new_template_end);
3643
+ }
3634
3644
  }
3635
3645
 
3636
3646
  var AST_Node = DEFNODE("Node", "start end", function AST_Node(props) {
package/lib/ast.js CHANGED
@@ -93,6 +93,7 @@ const set_tok_flag = (tok, flag, truth) => {
93
93
  const TOK_FLAG_NLB = 0b0001;
94
94
  const TOK_FLAG_QUOTE_SINGLE = 0b0010;
95
95
  const TOK_FLAG_QUOTE_EXISTS = 0b0100;
96
+ const TOK_FLAG_TEMPLATE_END = 0b1000;
96
97
 
97
98
  class AST_Token {
98
99
  constructor(type, value, line, col, pos, nlb, comments_before, comments_after, file) {
@@ -128,6 +129,14 @@ class AST_Token {
128
129
  set_tok_flag(this, TOK_FLAG_QUOTE_SINGLE, quote_type === "'");
129
130
  set_tok_flag(this, TOK_FLAG_QUOTE_EXISTS, !!quote_type);
130
131
  }
132
+
133
+ get template_end() {
134
+ return has_tok_flag(this, TOK_FLAG_TEMPLATE_END);
135
+ }
136
+
137
+ set template_end(new_template_end) {
138
+ set_tok_flag(this, TOK_FLAG_TEMPLATE_END, new_template_end);
139
+ }
131
140
  }
132
141
 
133
142
  var AST_Node = DEFNODE("Node", "start end", function AST_Node(props) {
package/lib/parse.js CHANGED
@@ -162,7 +162,7 @@ import {
162
162
  } from "./ast.js";
163
163
 
164
164
  var LATEST_RAW = ""; // Only used for numbers and template strings
165
- var LATEST_TEMPLATE_END = true;
165
+ var TEMPLATE_RAWS = new Map(); // Raw template strings
166
166
 
167
167
  var KEYWORDS = "break case catch class const continue debugger default delete do else export extends finally for function if in instanceof let new return switch throw try typeof var void while with";
168
168
  var KEYWORDS_ATOM = "false null true";
@@ -693,8 +693,8 @@ function tokenizer($TEXT, filename, html5_comments, shebang) {
693
693
  next(true, true);
694
694
  S.brace_counter++;
695
695
  tok = token(begin ? "template_head" : "template_substitution", content);
696
- LATEST_RAW = raw;
697
- LATEST_TEMPLATE_END = false;
696
+ TEMPLATE_RAWS.set(tok, raw);
697
+ tok.template_end = false;
698
698
  return tok;
699
699
  }
700
700
 
@@ -710,8 +710,8 @@ function tokenizer($TEXT, filename, html5_comments, shebang) {
710
710
  }
711
711
  S.template_braces.pop();
712
712
  tok = token(begin ? "template_head" : "template_substitution", content);
713
- LATEST_RAW = raw;
714
- LATEST_TEMPLATE_END = true;
713
+ TEMPLATE_RAWS.set(tok, raw);
714
+ tok.template_end = true;
715
715
  return tok;
716
716
  });
717
717
 
@@ -2367,19 +2367,19 @@ function parse($TEXT, options) {
2367
2367
 
2368
2368
  segments.push(new AST_TemplateSegment({
2369
2369
  start: S.token,
2370
- raw: LATEST_RAW,
2370
+ raw: TEMPLATE_RAWS.get(S.token),
2371
2371
  value: S.token.value,
2372
2372
  end: S.token
2373
2373
  }));
2374
2374
 
2375
- while (!LATEST_TEMPLATE_END) {
2375
+ while (!S.token.template_end) {
2376
2376
  next();
2377
2377
  handle_regexp();
2378
2378
  segments.push(expression(true));
2379
2379
 
2380
2380
  segments.push(new AST_TemplateSegment({
2381
2381
  start: S.token,
2382
- raw: LATEST_RAW,
2382
+ raw: TEMPLATE_RAWS.get(S.token),
2383
2383
  value: S.token.value,
2384
2384
  end: S.token
2385
2385
  }));
@@ -3342,6 +3342,7 @@ function parse($TEXT, options) {
3342
3342
  } else {
3343
3343
  toplevel = new AST_Toplevel({ start: start, body: body, end: end });
3344
3344
  }
3345
+ TEMPLATE_RAWS = new Map();
3345
3346
  return toplevel;
3346
3347
  })();
3347
3348
 
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.14.0",
7
+ "version": "5.14.1",
8
8
  "engines": {
9
9
  "node": ">=10"
10
10
  },
package/tools/terser.d.ts CHANGED
@@ -145,6 +145,7 @@ export interface FormatOptions {
145
145
  }) => boolean );
146
146
  ecma?: ECMA;
147
147
  ie8?: boolean;
148
+ keep_numbers?: boolean;
148
149
  indent_level?: number;
149
150
  indent_start?: number;
150
151
  inline_script?: boolean;