├── .Rbuildignore ├── .gitignore ├── .travis.yml ├── DESCRIPTION ├── LICENSE ├── NAMESPACE ├── NEWS ├── R ├── coffee.R ├── esprima.R ├── js_eval.R ├── js_typeof.R ├── js_validate.R ├── jshint.R ├── onLoad.R └── uglify.R ├── README.md ├── appveyor.yml ├── inst ├── example │ └── demo.coffee └── js │ ├── coffee.min.js │ ├── esprima.min.js │ ├── jshint.min.js │ ├── uglify.min.js │ └── zzz.js ├── js.Rproj ├── man ├── coffee_compile.Rd ├── esprima.Rd ├── js_eval.Rd ├── js_typeof.Rd ├── js_validate_script.Rd ├── jshint.Rd └── uglify.Rd └── vignettes └── intro.Rmd /.Rbuildignore: -------------------------------------------------------------------------------- 1 | ^.*\.Rproj$ 2 | ^\.Rproj\.user$ 3 | .Rhistory 4 | js.Rproj 5 | .V8history 6 | ^appveyor\.yml$ 7 | ^.travis.yml$ 8 | ^README.md$ 9 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .Rproj.user 2 | .Rhistory 3 | .RData 4 | .V8history 5 | *.DS_Store 6 | inst/doc 7 | .travis.yml 8 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: r 2 | latex: false 3 | fortran: false 4 | 5 | matrix: 6 | include: 7 | - os: linux 8 | addons: 9 | apt: 10 | packages: libv8-dev 11 | - os: linux 12 | addons: 13 | apt: 14 | packages: libnode-dev 15 | - os: osx 16 | osx_image: xcode10.1 17 | -------------------------------------------------------------------------------- /DESCRIPTION: -------------------------------------------------------------------------------- 1 | Package: js 2 | Type: Package 3 | Title: Tools for Working with JavaScript in R 4 | Version: 1.2.1 5 | Authors@R: person("Jeroen", "Ooms", role = c("aut", "cre"), email = "jeroenooms@gmail.com", 6 | comment = c(ORCID = "0000-0002-4035-0289")) 7 | Description: A set of utilities for working with JavaScript syntax in R. 8 | Includes tools to parse, tokenize, compile, validate, reformat, optimize 9 | and analyze JavaScript code. 10 | License: MIT + file LICENSE 11 | URL: https://jeroen.r-universe.dev/js 12 | BugReports: https://github.com/jeroen/js/issues 13 | VignetteBuilder: knitr 14 | Imports: V8 (>= 0.5) 15 | Suggests: 16 | knitr, 17 | rmarkdown 18 | RoxygenNote: 6.0.1 19 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | YEAR: 2017 2 | COPYRIGHT HOLDER: Jeroen Ooms 3 | -------------------------------------------------------------------------------- /NAMESPACE: -------------------------------------------------------------------------------- 1 | # Generated by roxygen2: do not edit by hand 2 | 3 | export(coffee_compile) 4 | export(esprima_parse) 5 | export(esprima_tokenize) 6 | export(js_eval) 7 | export(js_typeof) 8 | export(js_validate_script) 9 | export(jshint) 10 | export(uglify_files) 11 | export(uglify_optimize) 12 | export(uglify_reformat) 13 | importFrom(V8,new_context) 14 | -------------------------------------------------------------------------------- /NEWS: -------------------------------------------------------------------------------- 1 | 1.1 2 | - Make parameters to ESprima explicit 3 | - Do not validate syntax before tokenizing or parsing with ESprima 4 | 5 | 1.0 6 | - Add wrappers for esprima parser and tokenizer 7 | 8 | 0.2 9 | - Add coffee script 10 | 11 | 0.1 12 | - Initial release 13 | -------------------------------------------------------------------------------- /R/coffee.R: -------------------------------------------------------------------------------- 1 | #' Coffee Script 2 | #' 3 | #' Compiles coffee script into JavaScript. 4 | #' 5 | #' @export 6 | #' @aliases coffee 7 | #' @param code a string with JavaScript code 8 | #' @param ... additional options passed to the compiler 9 | #' @examples # Hello world 10 | #' coffee_compile("square = (x) -> x * x") 11 | #' coffee_compile("square = (x) -> x * x", bare = TRUE) 12 | #' 13 | #' # Simple script 14 | #' demo <- readLines(system.file("example/demo.coffee", package = "js")) 15 | #' js <- coffee_compile(demo) 16 | #' cat(js) 17 | #' cat(uglify_optimize(js)) 18 | coffee_compile <- function(code, ...){ 19 | opts <- list(...) 20 | code <- paste(code, collapse = "\n") 21 | ct$call("coffee.compile", code, opts) 22 | } 23 | -------------------------------------------------------------------------------- /R/esprima.R: -------------------------------------------------------------------------------- 1 | #' JavaScrip Syntax Tree 2 | #' 3 | #' \href{https://www.npmjs.com/package/esprima}{Esprima} is a high performance, standard-compliant 4 | #' ECMAScript parser. It has full support for ECMAScript 2017 and returns a sensible syntax tree 5 | #' format as standardized by ESTree project. 6 | #' 7 | #' The \code{esprima_tokenize} function returns a data frame with JavaScript tokens. The 8 | #' \code{esprima_parse} function returns the Syntax Tree in JSON format. This can be parsed to R 9 | #' using e.g. \code{jsonlite::fromJSON}. 10 | #' 11 | #' @rdname esprima 12 | #' @name esprima 13 | #' @export 14 | #' @param text a character vector with JavaScript code 15 | #' @param range Annotate each token with its zero-based start and end location 16 | #' @param loc Annotate each token with its column and row-based location 17 | #' @param comment Include every line and block comment in the output 18 | #' @references Esprima documentation: \url{http://esprima.readthedocs.io/en/4.0/}. 19 | #' @examples code <- "function test(x, y){ x = x || 1; y = y || 1; return x*y;}" 20 | #' esprima_tokenize(code) 21 | #' esprima_parse(code) 22 | esprima_tokenize <- function(text, range = FALSE, loc = FALSE, comment = FALSE){ 23 | text <- paste(text, collapse = "\n") 24 | opts <- list(range = range, loc = loc, comment = comment) 25 | ct$call("esprima.tokenize", text, opts) 26 | } 27 | 28 | #' @export 29 | #' @rdname esprima 30 | #' @param jsx Support JSX syntax 31 | #' @param tolerant Tolerate a few cases of syntax errors 32 | #' @param tokens Collect every token 33 | esprima_parse <- function(text, jsx = FALSE, range = FALSE, loc = FALSE, tolerant = FALSE, 34 | tokens = FALSE, comment = FALSE){ 35 | text <- paste(text, collapse = "\n") 36 | opts <- list(jsx = jsx, range = range, loc = loc, tolerant = tolerant, tokens = tokens, comment = comment) 37 | structure(ct$call("esprima.parse_to_json", text, opts), class = c("json", "character")) 38 | } 39 | -------------------------------------------------------------------------------- /R/js_eval.R: -------------------------------------------------------------------------------- 1 | #' Evaluate JavaScript 2 | #' 3 | #' Evaluate a piece of JavaScript code in a disposable context. 4 | #' 5 | #' @param text JavaScript code 6 | #' @export 7 | #' @examples # Stateless evaluation 8 | #' js_eval("(function() {return 'foo'})()") 9 | #' 10 | #' # Use V8 for stateful evaluation 11 | #' ct <- V8::new_context() 12 | #' ct$eval("var foo = 123") 13 | #' ct$get("foo") 14 | js_eval <- function(text){ 15 | ct <- new_context(); 16 | ct$eval(text) 17 | } 18 | -------------------------------------------------------------------------------- /R/js_typeof.R: -------------------------------------------------------------------------------- 1 | #' Get the type of a JavaScript object 2 | #' 3 | #' JavaScript wrapper to \code{typeof} to test if a piece of JavaScript code is 4 | #' syntactically valid, and the type of object it evaluates to. Useful to 5 | #' verify that a piece of JavaScript code contains a proper function/object. 6 | #' 7 | #' @param text JavaScript code 8 | #' @export 9 | #' @examples 10 | #' js_typeof("function(x){return x+1}") 11 | #' js_typeof("(function() {return 'foo'})()") 12 | #' js_typeof("{foo : 123, bar : true}") 13 | js_typeof <- function(text){ 14 | text <- paste(text, collapse = "\n") 15 | code <- paste("typeof", text) 16 | type <- ct$eval(code) 17 | return(type) 18 | } 19 | -------------------------------------------------------------------------------- /R/js_validate.R: -------------------------------------------------------------------------------- 1 | #' Validate JavaScript 2 | #' 3 | #' Simple wrapper for \code{ct$validate} in V8. 4 | #' Tests if code constitutes a syntactically valid JS script. 5 | #' 6 | #' @export 7 | #' @param text character vector with JavaScript code 8 | #' @param error raise error on invalid code 9 | #' @examples js_validate_script("function foo(x){2*x}") #TRUE 10 | #' js_validate_script("foo = function(x){2*x}") #TRUE 11 | #' 12 | #' # Anonymous functions in global scope are invalid 13 | #' js_validate_script("function(x){2*x}", error = FALSE) #FALSE 14 | #' 15 | #' # Use ! or () to check anonymous function syntax 16 | #' js_validate_script("!function(x){2*x}") #TRUE 17 | #' js_validate_script("(function(x){2*x})") #TRUE 18 | js_validate_script <- function(text, error = TRUE){ 19 | res <- ct$validate(text) 20 | if(error && !res){ 21 | stop("Invalid JavaScript syntax", call. = FALSE) 22 | } else { 23 | return(res) 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /R/jshint.R: -------------------------------------------------------------------------------- 1 | #' Static analysis tool for JavaScript 2 | #' 3 | #' JSHint is a community-driven tool to detect errors and potential problems in JavaScript code. 4 | #' It is very flexible so you can easily adjust it to your particular coding guidelines and 5 | #' the environment you expect your code to execute in. 6 | #' 7 | #' @export 8 | #' @param text a string of JavaScript code 9 | #' @param globals a white list of global variables that are not formally defined in the source code 10 | #' @param ... additional jshint \href{http://jshint.com/docs/options/}{configuration options} 11 | #' @return a data frame where each row represents a jshint error or \code{NULL} if there were no errors 12 | #' @examples code = "var foo = 123" 13 | #' jshint(code) 14 | #' jshint(code, asi = TRUE) 15 | jshint <- function(text, ..., globals = NULL){ 16 | text <- paste(text, collapse = "\n") 17 | ct$call("jshint.run", text, list(...), globals) 18 | } 19 | -------------------------------------------------------------------------------- /R/onLoad.R: -------------------------------------------------------------------------------- 1 | #' @importFrom V8 new_context 2 | ct <- NULL 3 | 4 | .onLoad <- function(libname, pkgname){ 5 | ct <<- new_context() 6 | libs <- list.files(system.file("js", package = pkgname), full.names = TRUE, pattern="*.js"); 7 | lapply(sort(libs), function(path){ 8 | ct$source(path) 9 | }) 10 | } 11 | -------------------------------------------------------------------------------- /R/uglify.R: -------------------------------------------------------------------------------- 1 | #' Compress and Reformat JavaScript Code 2 | #' 3 | #' \href{https://www.npmjs.com/package/uglify-js}{UglifyJS} is a JavaScript 4 | #' compressor/minifier written in JavaScript. It also contains tools that allow one 5 | #' to automate working with JavaScript code. 6 | #' 7 | #' @rdname uglify 8 | #' @name uglify 9 | #' @export 10 | #' @param text a character vector with JavaScript code 11 | #' @param beautify prettify (instead of minify) code 12 | #' @param ... additional arguments for the \href{http://lisperator.net/uglifyjs/compress}{optimizer} 13 | #' or \href{http://lisperator.net/uglifyjs/codegen}{generator}. 14 | #' @references UglifyJS2 Documentation: \url{http://lisperator.net/uglifyjs/}. 15 | #' @examples code <- "function test(x, y){ x = x || 1; y = y || 1; return x*y;}" 16 | #' cat(uglify_optimize(code)) 17 | #' cat(uglify_reformat(code, beautify = TRUE, indent_level = 2)) 18 | uglify_reformat <- function(text, beautify = FALSE, ...){ 19 | text <- paste(text, collapse = "\n") 20 | js_validate_script(text) 21 | opts <- list(...) 22 | opts$beautify = beautify; 23 | ct$call("UglifyJS.reformat", text, opts) 24 | } 25 | 26 | #' @rdname uglify 27 | #' @export 28 | uglify_optimize <- function(text, ...){ 29 | text <- paste(text, collapse = "\n") 30 | js_validate_script(text) 31 | opts <- list(...) 32 | ct$call("UglifyJS.optimize", text, opts) 33 | } 34 | 35 | #' @rdname uglify 36 | #' @export 37 | uglify_files <- function(files, ...){ 38 | codelist <- lapply(files, function(f){ 39 | list( 40 | file = basename(f), 41 | code = rawToChar(readBin(f, raw(), file.info(f)$size)) 42 | ) 43 | }) 44 | fulltext <- vapply(codelist, `[[`, character(1), 'code') 45 | js_validate_script(paste(fulltext, collapse = "\n")) 46 | opts <- list(...) 47 | ct$call("UglifyJS.optimizeFiles", codelist, opts) 48 | } 49 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # js 2 | 3 | ##### *Tools for Working with JavaScript in R* 4 | 5 | [![Build Status](https://app.travis-ci.com/jeroen/js.svg?branch=master)](https://app.travis-ci.com/jeroen/js) 6 | [![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/github/jeroen/js?branch=master&svg=true)](https://ci.appveyor.com/project/jeroen/js) 7 | [![Coverage Status](https://codecov.io/github/jeroen/js/coverage.svg?branch=master)](https://app.codecov.io/github/jeroen/js?branch=master) 8 | [![CRAN_Status_Badge](http://www.r-pkg.org/badges/version/js)](http://cran.r-project.org/package=js) 9 | [![CRAN RStudio mirror downloads](http://cranlogs.r-pkg.org/badges/js)](http://cran.r-project.org/web/packages/js/index.html) 10 | [![Github Stars](https://img.shields.io/github/stars/jeroen/js.svg?style=social&label=Github)](https://github.com/jeroen/js) 11 | 12 | > A set of utility functions for working with JavaScript in R. 13 | Currently includes functions to compile, validate, reformat, optimize 14 | and analyze JavaScript code. 15 | 16 | ## Documentation 17 | 18 | - Vignette: [Working with JavaScript in R](https://cran.r-project.org/web/packages/js/vignettes/intro.html) 19 | 20 | 21 | 22 | The js package implements bindings to several popular JavaScript libraries for validating, reformatting, optimizing and analyzing JavaScript code. It builds on the [V8 package](https://cran.r-project.org/package=V8/vignettes/v8_intro.html) (a fully standalone JavaScript engine in R) to call out to these libraries. 23 | 24 | ## Syntax Validation 25 | 26 | Several R packages allow the user to supply JavaScript code to be used as callback function or configuration object within a visualization or web application. By validating in R that the JavaScript code is syntactically correct and of the right type before actually inserting it in the HTML, we can avoid many annoying bugs. 27 | 28 | The `js_typeof` function simply calls the `typeof` operator on the given code. If the code is invalid, a SyntaxError will be raised. 29 | 30 | 31 | ```r 32 | callback <- 'function test(x, y){ 33 | var z = x*y ; 34 | return z; 35 | }' 36 | js_typeof(callback) 37 | ``` 38 | 39 | ``` 40 | [1] "function" 41 | ``` 42 | 43 | Same for objects: 44 | 45 | 46 | ```r 47 | conf <- '{ 48 | foo : function (){}, 49 | bar : 123 50 | }' 51 | js_typeof(conf) 52 | ``` 53 | 54 | ``` 55 | [1] "object" 56 | ``` 57 | 58 | Catch JavaScript typos: 59 | 60 | 61 | ```r 62 | js_typeof('function(x,y){return x + y}}') 63 | ``` 64 | 65 | ``` 66 | Error in context_eval(join(src), private$context): SyntaxError: Unexpected token } 67 | ``` 68 | 69 | ## Script Validation 70 | 71 | A JavaScript program typically consists of script with a collection of JavaScript statements. The `js_validate_script` function can be used to validate an entire script. 72 | 73 | 74 | ```r 75 | jscode <- readLines(system.file("js/uglify.min.js", package="js"), warn = FALSE) 76 | js_validate_script(jscode) 77 | ``` 78 | 79 | ``` 80 | [1] TRUE 81 | ``` 82 | 83 | Note that JavaScript does not allow for defining anonymous functions in the global scope: 84 | 85 | 86 | ```r 87 | js_validate_script('function(x, y){return x + y}', error = FALSE) 88 | ``` 89 | 90 | ``` 91 | [1] FALSE 92 | ``` 93 | 94 | To validate individual functions or objects, use the `js_typeof` function. 95 | 96 | ## ESprima: Parsing 97 | 98 | Esprima is a high performance, standard-compliant ECMAScript parser. It has full support for ECMAScript 2017 and returns a sensible syntax tree format as standardized by ESTree project. 99 | 100 | 101 | 102 | ```r 103 | esprima_tokenize(callback) 104 | ``` 105 | 106 | ``` 107 | type value 108 | 1 Keyword function 109 | 2 Identifier test 110 | 3 Punctuator ( 111 | 4 Identifier x 112 | 5 Punctuator , 113 | 6 Identifier y 114 | 7 Punctuator ) 115 | 8 Punctuator { 116 | 9 Keyword var 117 | 10 Identifier z 118 | 11 Punctuator = 119 | 12 Identifier x 120 | 13 Punctuator * 121 | 14 Identifier y 122 | 15 Punctuator ; 123 | 16 Keyword return 124 | 17 Identifier z 125 | 18 Punctuator ; 126 | 19 Punctuator } 127 | ``` 128 | 129 | ```r 130 | esprima_parse(callback) 131 | ``` 132 | 133 | ```js 134 | { 135 | "type": "Program", 136 | "body": [ 137 | { 138 | "type": "FunctionDeclaration", 139 | "id": { 140 | "type": "Identifier", 141 | "name": "test" 142 | }, 143 | "params": [ 144 | { 145 | "type": "Identifier", 146 | "name": "x" 147 | }, 148 | { 149 | "type": "Identifier", 150 | "name": "y" 151 | } 152 | ], 153 | "body": { 154 | "type": "BlockStatement", 155 | "body": [ 156 | { 157 | "type": "VariableDeclaration", 158 | "declarations": [ 159 | { 160 | "type": "VariableDeclarator", 161 | "id": { 162 | "type": "Identifier", 163 | "name": "z" 164 | }, 165 | "init": { 166 | "type": "BinaryExpression", 167 | "operator": "*", 168 | "left": { 169 | "type": "Identifier", 170 | "name": "x" 171 | }, 172 | "right": { 173 | "type": "Identifier", 174 | "name": "y" 175 | } 176 | } 177 | } 178 | ], 179 | "kind": "var" 180 | }, 181 | { 182 | "type": "ReturnStatement", 183 | "argument": { 184 | "type": "Identifier", 185 | "name": "z" 186 | } 187 | } 188 | ] 189 | }, 190 | "generator": false, 191 | "expression": false, 192 | "async": false 193 | } 194 | ], 195 | "sourceType": "script" 196 | } 197 | ``` 198 | 199 | ## Compiling CoffeeScript 200 | 201 | [CoffeeScript](http://coffeescript.org/) is a little language that compiles into JavaScript. It is an attempt to expose the good parts of JavaScript in a simple way. The `coffee_compile` function binds to the coffee script compiler. 202 | 203 | 204 | ```r 205 | # Hello world 206 | cat(coffee_compile("square = (x) -> x * x")) 207 | ``` 208 | 209 | ```js 210 | (function() { 211 | var square; 212 | 213 | square = function(x) { 214 | return x * x; 215 | }; 216 | 217 | }).call(this); 218 | ``` 219 | 220 | ```r 221 | cat(coffee_compile("square = (x) -> x * x", bare = TRUE)) 222 | ``` 223 | 224 | ``` 225 | var square; 226 | 227 | square = function(x) { 228 | return x * x; 229 | }; 230 | ``` 231 | 232 | 233 | The golden rule of CoffeeScript is: *"It's just JavaScript"*. The code compiles one-to-one into the equivalent JS, and there is no interpretation at runtime. You can use any existing JavaScript library seamlessly from CoffeeScript (and vice-versa). The compiled output is readable and pretty-printed, will work in every JavaScript runtime, and tends to run as fast or faster than the equivalent handwritten JavaScript. 234 | 235 | 236 | ```r 237 | # Simple script 238 | demo <- readLines(system.file("example/demo.coffee", package = "js")) 239 | cat(demo, sep = "\n") 240 | ``` 241 | 242 | ``` 243 | # Assignment: 244 | number = 42 245 | opposite = true 246 | 247 | # Conditions: 248 | number = -42 if opposite 249 | 250 | # Functions: 251 | square = (x) -> x * x 252 | 253 | # Arrays: 254 | list = [1, 2, 3, 4, 5] 255 | 256 | # Objects: 257 | math = 258 | root: Math.sqrt 259 | square: square 260 | cube: (x) -> x * square x 261 | 262 | # Splats: 263 | race = (winner, runners...) -> 264 | print winner, runners 265 | 266 | # Existence: 267 | alert "I knew it!" if elvis? 268 | 269 | # Array comprehensions: 270 | cubes = (math.cube num for num in list) 271 | ``` 272 | 273 | ```r 274 | js <- coffee_compile(demo) 275 | cat(js) 276 | ``` 277 | 278 | ```js 279 | (function() { 280 | var cubes, list, math, num, number, opposite, race, square, 281 | slice = [].slice; 282 | 283 | number = 42; 284 | 285 | opposite = true; 286 | 287 | if (opposite) { 288 | number = -42; 289 | } 290 | 291 | square = function(x) { 292 | return x * x; 293 | }; 294 | 295 | list = [1, 2, 3, 4, 5]; 296 | 297 | math = { 298 | root: Math.sqrt, 299 | square: square, 300 | cube: function(x) { 301 | return x * square(x); 302 | } 303 | }; 304 | 305 | race = function() { 306 | var runners, winner; 307 | winner = arguments[0], runners = 2 <= arguments.length ? slice.call(arguments, 1) : []; 308 | return print(winner, runners); 309 | }; 310 | 311 | if (typeof elvis !== "undefined" && elvis !== null) { 312 | alert("I knew it!"); 313 | } 314 | 315 | cubes = (function() { 316 | var i, len, results; 317 | results = []; 318 | for (i = 0, len = list.length; i < len; i++) { 319 | num = list[i]; 320 | results.push(math.cube(num)); 321 | } 322 | return results; 323 | })(); 324 | 325 | }).call(this); 326 | ``` 327 | 328 | ```r 329 | cat(uglify_optimize(js)) 330 | ``` 331 | 332 | ``` 333 | (function(){var cubes,list,math,num,number,opposite,race,square,slice=[].slice;number=42,opposite=!0,opposite&&(number=-42),square=function(x){return x*x},list=[1,2,3,4,5],math={root:Math.sqrt,square:square,cube:function(x){return x*square(x)}},race=function(){var runners,winner;return winner=arguments[0],runners=2<=arguments.length?slice.call(arguments,1):[],print(winner,runners)},"undefined"!=typeof elvis&&null!==elvis&&alert("I knew it!"),cubes=function(){var i,len,results;for(results=[],i=0,len=list.length;len>i;i++)num=list[i],results.push(math.cube(num));return results}()}).call(this); 334 | ``` 335 | 336 | 337 | ## Uglify: reformatting 338 | 339 | One of the most popular and powerful libraries for working with JavaScript code is [uglify-js](https://www.npmjs.com/package/uglify-js). Uglify provides an extensive toolkit for manipulating the syntax tree of a piece of JavaScript code. 340 | 341 | The `uglify_reformat` binding parses a string with code and then feeds it to the [uglify code generator](https://lisperator.net/uglifyjs/codegen) which converts it back to JavaScript text, with custom formatting options. This is nice for fixing whitespace, semicolons, etc. 342 | 343 | 344 | ```r 345 | code <- "function test(x, y){ x = x || 1; y = y || 1; return x*y;}" 346 | cat(uglify_reformat(code, beautify = TRUE, indent_level = 2)) 347 | ``` 348 | 349 | ```js 350 | function test(x, y) { 351 | x = x || 1; 352 | y = y || 1; 353 | return x * y; 354 | } 355 | ``` 356 | 357 | ## Uglify: optimization 358 | 359 | The more impressive part of uglify-js is the [compressor](https://lisperator.net/uglifyjs/compress) which refactors the entire syntax tree, effectively rewriting your code into a more compact but equivalent program. The `uglify_optimize` function in R is a simple wrapper which parses code and then feeds it to the compressor. 360 | 361 | 362 | ```r 363 | cat(code) 364 | ``` 365 | 366 | ``` 367 | function test(x, y){ x = x || 1; y = y || 1; return x*y;} 368 | ``` 369 | 370 | ```r 371 | cat(uglify_optimize(code)) 372 | ``` 373 | 374 | ```js 375 | function test(x,y){return x=x||1,y=y||1,x*y} 376 | ``` 377 | 378 | You can pass [compressor options](https://lisperator.net/uglifyjs/compress) to `uglify_optimize` to control the various uglify optimization techniques. 379 | 380 | ## JSHint: code analysis 381 | 382 | JSHint will automatically detect errors and potential problems in JavaScript code. The `jshint` function is R will return a data frame where each row is a problem detected by the library (type, line and reason of error): 383 | 384 | 385 | ```r 386 | code <- "var foo = 123" 387 | jshint(code) 388 | ``` 389 | 390 | ``` 391 | id raw code evidence line character scope reason 392 | 1 (error) Missing semicolon. W033 var foo = 123 1 14 (main) Missing semicolon. 393 | ``` 394 | 395 | JSHint has many [configuration options](https://jshint.com/docs/options/) to control which types of code propblems it will report on. 396 | -------------------------------------------------------------------------------- /appveyor.yml: -------------------------------------------------------------------------------- 1 | # DO NOT CHANGE the "init" and "install" sections below 2 | 3 | # Download script file from GitHub 4 | init: 5 | ps: | 6 | $ErrorActionPreference = "Stop" 7 | Invoke-WebRequest http://raw.github.com/krlmlr/r-appveyor/master/scripts/appveyor-tool.ps1 -OutFile "..\appveyor-tool.ps1" 8 | Import-Module '..\appveyor-tool.ps1' 9 | 10 | install: 11 | ps: Bootstrap 12 | 13 | # Adapt as necessary starting from here 14 | 15 | build_script: 16 | - travis-tool.sh install_deps 17 | 18 | test_script: 19 | - travis-tool.sh run_tests 20 | 21 | on_failure: 22 | - 7z a failure.zip *.Rcheck\* 23 | - appveyor PushArtifact failure.zip 24 | 25 | artifacts: 26 | - path: '*.Rcheck\**\*.log' 27 | name: Logs 28 | 29 | - path: '*.Rcheck\**\*.out' 30 | name: Logs 31 | 32 | - path: '*.Rcheck\**\*.fail' 33 | name: Logs 34 | 35 | - path: '*.Rcheck\**\*.Rout' 36 | name: Logs 37 | 38 | - path: '\*_*.tar.gz' 39 | name: Bits 40 | 41 | - path: '\*_*.zip' 42 | name: Bits 43 | -------------------------------------------------------------------------------- /inst/example/demo.coffee: -------------------------------------------------------------------------------- 1 | # Assignment: 2 | number = 42 3 | opposite = true 4 | 5 | # Conditions: 6 | number = -42 if opposite 7 | 8 | # Functions: 9 | square = (x) -> x * x 10 | 11 | # Arrays: 12 | list = [1, 2, 3, 4, 5] 13 | 14 | # Objects: 15 | math = 16 | root: Math.sqrt 17 | square: square 18 | cube: (x) -> x * square x 19 | 20 | # Splats: 21 | race = (winner, runners...) -> 22 | print winner, runners 23 | 24 | # Existence: 25 | alert "I knew it!" if elvis? 26 | 27 | # Array comprehensions: 28 | cubes = (math.cube num for num in list) 29 | -------------------------------------------------------------------------------- /inst/js/esprima.min.js: -------------------------------------------------------------------------------- 1 | (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o=0;--i){var entry=this.leading[i];if(metadata.end.offset>=entry.start){innerComments.unshift(entry.comment);this.leading.splice(i,1);this.trailing.splice(i,1)}}if(innerComments.length){node.innerComments=innerComments}}};CommentHandler.prototype.findTrailingComments=function(metadata){var trailingComments=[];if(this.trailing.length>0){for(var i=this.trailing.length-1;i>=0;--i){var entry_1=this.trailing[i];if(entry_1.start>=metadata.end.offset){trailingComments.unshift(entry_1.comment)}}this.trailing.length=0;return trailingComments}var entry=this.stack[this.stack.length-1];if(entry&&entry.node.trailingComments){var firstComment=entry.node.trailingComments[0];if(firstComment&&firstComment.range[0]>=metadata.end.offset){trailingComments=entry.node.trailingComments;delete entry.node.trailingComments}}return trailingComments};CommentHandler.prototype.findLeadingComments=function(metadata){var leadingComments=[];var target;while(this.stack.length>0){var entry=this.stack[this.stack.length-1];if(entry&&entry.start>=metadata.start.offset){target=entry.node;this.stack.pop()}else{break}}if(target){var count=target.leadingComments?target.leadingComments.length:0;for(var i=count-1;i>=0;--i){var comment=target.leadingComments[i];if(comment.range[1]<=metadata.start.offset){leadingComments.unshift(comment);target.leadingComments.splice(i,1)}}if(target.leadingComments&&target.leadingComments.length===0){delete target.leadingComments}return leadingComments}for(var i=this.leading.length-1;i>=0;--i){var entry=this.leading[i];if(entry.start<=metadata.start.offset){leadingComments.unshift(entry.comment);this.leading.splice(i,1)}}return leadingComments};CommentHandler.prototype.visitNode=function(node,metadata){if(node.type===syntax_1.Syntax.Program&&node.body.length>0){return}this.insertInnerComments(node,metadata);var trailingComments=this.findTrailingComments(metadata);var leadingComments=this.findLeadingComments(metadata);if(leadingComments.length>0){node.leadingComments=leadingComments}if(trailingComments.length>0){node.trailingComments=trailingComments}this.stack.push({node:node,start:metadata.start.offset})};CommentHandler.prototype.visitComment=function(node,metadata){var type=node.type[0]==="L"?"Line":"Block";var comment={type:type,value:node.value};if(node.range){comment.range=node.range}if(node.loc){comment.loc=node.loc}this.comments.push(comment);if(this.attach){var entry={comment:{type:type,value:node.value,range:[metadata.start.offset,metadata.end.offset]},start:metadata.start.offset};if(node.loc){entry.comment.loc=node.loc}node.type=type;this.leading.push(entry);this.trailing.push(entry)}};CommentHandler.prototype.visit=function(node,metadata){if(node.type==="LineComment"){this.visitComment(node,metadata)}else if(node.type==="BlockComment"){this.visitComment(node,metadata)}else if(this.attach){this.visitNode(node,metadata)}};return CommentHandler}();exports.CommentHandler=CommentHandler},function(module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.Syntax={AssignmentExpression:"AssignmentExpression",AssignmentPattern:"AssignmentPattern",ArrayExpression:"ArrayExpression",ArrayPattern:"ArrayPattern",ArrowFunctionExpression:"ArrowFunctionExpression",AwaitExpression:"AwaitExpression",BlockStatement:"BlockStatement",BinaryExpression:"BinaryExpression",BreakStatement:"BreakStatement",CallExpression:"CallExpression",CatchClause:"CatchClause",ClassBody:"ClassBody",ClassDeclaration:"ClassDeclaration",ClassExpression:"ClassExpression",ConditionalExpression:"ConditionalExpression",ContinueStatement:"ContinueStatement",DoWhileStatement:"DoWhileStatement",DebuggerStatement:"DebuggerStatement",EmptyStatement:"EmptyStatement",ExportAllDeclaration:"ExportAllDeclaration",ExportDefaultDeclaration:"ExportDefaultDeclaration",ExportNamedDeclaration:"ExportNamedDeclaration",ExportSpecifier:"ExportSpecifier",ExpressionStatement:"ExpressionStatement",ForStatement:"ForStatement",ForOfStatement:"ForOfStatement",ForInStatement:"ForInStatement",FunctionDeclaration:"FunctionDeclaration",FunctionExpression:"FunctionExpression",Identifier:"Identifier",IfStatement:"IfStatement",ImportDeclaration:"ImportDeclaration",ImportDefaultSpecifier:"ImportDefaultSpecifier",ImportNamespaceSpecifier:"ImportNamespaceSpecifier",ImportSpecifier:"ImportSpecifier",Literal:"Literal",LabeledStatement:"LabeledStatement",LogicalExpression:"LogicalExpression",MemberExpression:"MemberExpression",MetaProperty:"MetaProperty",MethodDefinition:"MethodDefinition",NewExpression:"NewExpression",ObjectExpression:"ObjectExpression",ObjectPattern:"ObjectPattern",Program:"Program",Property:"Property",RestElement:"RestElement",ReturnStatement:"ReturnStatement",SequenceExpression:"SequenceExpression",SpreadElement:"SpreadElement",Super:"Super",SwitchCase:"SwitchCase",SwitchStatement:"SwitchStatement",TaggedTemplateExpression:"TaggedTemplateExpression",TemplateElement:"TemplateElement",TemplateLiteral:"TemplateLiteral",ThisExpression:"ThisExpression",ThrowStatement:"ThrowStatement",TryStatement:"TryStatement",UnaryExpression:"UnaryExpression",UpdateExpression:"UpdateExpression",VariableDeclaration:"VariableDeclaration",VariableDeclarator:"VariableDeclarator",WhileStatement:"WhileStatement",WithStatement:"WithStatement",YieldExpression:"YieldExpression"}},function(module,exports,__webpack_require__){"use strict";var __extends=this&&this.__extends||function(){var extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d,b){d.__proto__=b}||function(d,b){for(var p in b)if(b.hasOwnProperty(p))d[p]=b[p]};return function(d,b){extendStatics(d,b);function __(){this.constructor=d}d.prototype=b===null?Object.create(b):(__.prototype=b.prototype,new __)}}();Object.defineProperty(exports,"__esModule",{value:true});var character_1=__webpack_require__(4);var JSXNode=__webpack_require__(5);var jsx_syntax_1=__webpack_require__(6);var Node=__webpack_require__(7);var parser_1=__webpack_require__(8);var token_1=__webpack_require__(13);var xhtml_entities_1=__webpack_require__(14);token_1.TokenName[100]="JSXIdentifier";token_1.TokenName[101]="JSXText";function getQualifiedElementName(elementName){var qualifiedName;switch(elementName.type){case jsx_syntax_1.JSXSyntax.JSXIdentifier:var id=elementName;qualifiedName=id.name;break;case jsx_syntax_1.JSXSyntax.JSXNamespacedName:var ns=elementName;qualifiedName=getQualifiedElementName(ns.namespace)+":"+getQualifiedElementName(ns.name);break;case jsx_syntax_1.JSXSyntax.JSXMemberExpression:var expr=elementName;qualifiedName=getQualifiedElementName(expr.object)+"."+getQualifiedElementName(expr.property);break;default:break}return qualifiedName}var JSXParser=function(_super){__extends(JSXParser,_super);function JSXParser(code,options,delegate){return _super.call(this,code,options,delegate)||this}JSXParser.prototype.parsePrimaryExpression=function(){return this.match("<")?this.parseJSXRoot():_super.prototype.parsePrimaryExpression.call(this)};JSXParser.prototype.startJSX=function(){this.scanner.index=this.startMarker.index;this.scanner.lineNumber=this.startMarker.line;this.scanner.lineStart=this.startMarker.index-this.startMarker.column};JSXParser.prototype.finishJSX=function(){this.nextToken()};JSXParser.prototype.reenterJSX=function(){this.startJSX();this.expectJSX("}");if(this.config.tokens){this.tokens.pop()}};JSXParser.prototype.createJSXNode=function(){this.collectComments();return{index:this.scanner.index,line:this.scanner.lineNumber,column:this.scanner.index-this.scanner.lineStart}};JSXParser.prototype.createJSXChildNode=function(){return{index:this.scanner.index,line:this.scanner.lineNumber,column:this.scanner.index-this.scanner.lineStart}};JSXParser.prototype.scanXHTMLEntity=function(quote){var result="&";var valid=true;var terminated=false;var numeric=false;var hex=false;while(!this.scanner.eof()&&valid&&!terminated){var ch=this.scanner.source[this.scanner.index];if(ch===quote){break}terminated=ch===";";result+=ch;++this.scanner.index;if(!terminated){switch(result.length){case 2:numeric=ch==="#";break;case 3:if(numeric){hex=ch==="x";valid=hex||character_1.Character.isDecimalDigit(ch.charCodeAt(0));numeric=numeric&&!hex}break;default:valid=valid&&!(numeric&&!character_1.Character.isDecimalDigit(ch.charCodeAt(0)));valid=valid&&!(hex&&!character_1.Character.isHexDigit(ch.charCodeAt(0)));break}}}if(valid&&terminated&&result.length>2){var str=result.substr(1,result.length-2);if(numeric&&str.length>1){result=String.fromCharCode(parseInt(str.substr(1),10))}else if(hex&&str.length>2){result=String.fromCharCode(parseInt("0"+str.substr(1),16))}else if(!numeric&&!hex&&xhtml_entities_1.XHTMLEntities[str]){result=xhtml_entities_1.XHTMLEntities[str]}}return result};JSXParser.prototype.lexJSX=function(){var cp=this.scanner.source.charCodeAt(this.scanner.index);if(cp===60||cp===62||cp===47||cp===58||cp===61||cp===123||cp===125){var value=this.scanner.source[this.scanner.index++];return{type:7,value:value,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:this.scanner.index-1,end:this.scanner.index}}if(cp===34||cp===39){var start=this.scanner.index;var quote=this.scanner.source[this.scanner.index++];var str="";while(!this.scanner.eof()){var ch=this.scanner.source[this.scanner.index++];if(ch===quote){break}else if(ch==="&"){str+=this.scanXHTMLEntity(quote)}else{str+=ch}}return{type:8,value:str,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:start,end:this.scanner.index}}if(cp===46){var n1=this.scanner.source.charCodeAt(this.scanner.index+1);var n2=this.scanner.source.charCodeAt(this.scanner.index+2);var value=n1===46&&n2===46?"...":".";var start=this.scanner.index;this.scanner.index+=value.length;return{type:7,value:value,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:start,end:this.scanner.index}}if(cp===96){return{type:10,value:"",lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:this.scanner.index,end:this.scanner.index}}if(character_1.Character.isIdentifierStart(cp)&&cp!==92){var start=this.scanner.index;++this.scanner.index;while(!this.scanner.eof()){var ch=this.scanner.source.charCodeAt(this.scanner.index);if(character_1.Character.isIdentifierPart(ch)&&ch!==92){++this.scanner.index}else if(ch===45){++this.scanner.index}else{break}}var id=this.scanner.source.slice(start,this.scanner.index);return{type:100,value:id,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:start,end:this.scanner.index}}return this.scanner.lex()};JSXParser.prototype.nextJSXToken=function(){this.collectComments();this.startMarker.index=this.scanner.index;this.startMarker.line=this.scanner.lineNumber;this.startMarker.column=this.scanner.index-this.scanner.lineStart;var token=this.lexJSX();this.lastMarker.index=this.scanner.index;this.lastMarker.line=this.scanner.lineNumber;this.lastMarker.column=this.scanner.index-this.scanner.lineStart;if(this.config.tokens){this.tokens.push(this.convertToken(token))}return token};JSXParser.prototype.nextJSXText=function(){this.startMarker.index=this.scanner.index;this.startMarker.line=this.scanner.lineNumber;this.startMarker.column=this.scanner.index-this.scanner.lineStart;var start=this.scanner.index;var text="";while(!this.scanner.eof()){var ch=this.scanner.source[this.scanner.index];if(ch==="{"||ch==="<"){break}++this.scanner.index;text+=ch;if(character_1.Character.isLineTerminator(ch.charCodeAt(0))){++this.scanner.lineNumber;if(ch==="\r"&&this.scanner.source[this.scanner.index]==="\n"){++this.scanner.index}this.scanner.lineStart=this.scanner.index}}this.lastMarker.index=this.scanner.index;this.lastMarker.line=this.scanner.lineNumber;this.lastMarker.column=this.scanner.index-this.scanner.lineStart;var token={type:101,value:text,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:start,end:this.scanner.index};if(text.length>0&&this.config.tokens){this.tokens.push(this.convertToken(token))}return token};JSXParser.prototype.peekJSXToken=function(){var state=this.scanner.saveState();this.scanner.scanComments();var next=this.lexJSX();this.scanner.restoreState(state);return next};JSXParser.prototype.expectJSX=function(value){var token=this.nextJSXToken();if(token.type!==7||token.value!==value){this.throwUnexpectedToken(token)}};JSXParser.prototype.matchJSX=function(value){var next=this.peekJSXToken();return next.type===7&&next.value===value};JSXParser.prototype.parseJSXIdentifier=function(){var node=this.createJSXNode();var token=this.nextJSXToken();if(token.type!==100){this.throwUnexpectedToken(token)}return this.finalize(node,new JSXNode.JSXIdentifier(token.value))};JSXParser.prototype.parseJSXElementName=function(){var node=this.createJSXNode();var elementName=this.parseJSXIdentifier();if(this.matchJSX(":")){var namespace=elementName;this.expectJSX(":");var name_1=this.parseJSXIdentifier();elementName=this.finalize(node,new JSXNode.JSXNamespacedName(namespace,name_1))}else if(this.matchJSX(".")){while(this.matchJSX(".")){var object=elementName;this.expectJSX(".");var property=this.parseJSXIdentifier();elementName=this.finalize(node,new JSXNode.JSXMemberExpression(object,property))}}return elementName};JSXParser.prototype.parseJSXAttributeName=function(){var node=this.createJSXNode();var attributeName;var identifier=this.parseJSXIdentifier();if(this.matchJSX(":")){var namespace=identifier;this.expectJSX(":");var name_2=this.parseJSXIdentifier();attributeName=this.finalize(node,new JSXNode.JSXNamespacedName(namespace,name_2))}else{attributeName=identifier}return attributeName};JSXParser.prototype.parseJSXStringLiteralAttribute=function(){var node=this.createJSXNode();var token=this.nextJSXToken();if(token.type!==8){this.throwUnexpectedToken(token)}var raw=this.getTokenRaw(token);return this.finalize(node,new Node.Literal(token.value,raw))};JSXParser.prototype.parseJSXExpressionAttribute=function(){var node=this.createJSXNode();this.expectJSX("{");this.finishJSX();if(this.match("}")){this.tolerateError("JSX attributes must only be assigned a non-empty expression")}var expression=this.parseAssignmentExpression();this.reenterJSX();return this.finalize(node,new JSXNode.JSXExpressionContainer(expression))};JSXParser.prototype.parseJSXAttributeValue=function(){return this.matchJSX("{")?this.parseJSXExpressionAttribute():this.matchJSX("<")?this.parseJSXElement():this.parseJSXStringLiteralAttribute()};JSXParser.prototype.parseJSXNameValueAttribute=function(){var node=this.createJSXNode();var name=this.parseJSXAttributeName();var value=null;if(this.matchJSX("=")){this.expectJSX("=");value=this.parseJSXAttributeValue()}return this.finalize(node,new JSXNode.JSXAttribute(name,value))};JSXParser.prototype.parseJSXSpreadAttribute=function(){var node=this.createJSXNode();this.expectJSX("{");this.expectJSX("...");this.finishJSX();var argument=this.parseAssignmentExpression();this.reenterJSX();return this.finalize(node,new JSXNode.JSXSpreadAttribute(argument))};JSXParser.prototype.parseJSXAttributes=function(){var attributes=[];while(!this.matchJSX("/")&&!this.matchJSX(">")){var attribute=this.matchJSX("{")?this.parseJSXSpreadAttribute():this.parseJSXNameValueAttribute();attributes.push(attribute)}return attributes};JSXParser.prototype.parseJSXOpeningElement=function(){var node=this.createJSXNode();this.expectJSX("<");var name=this.parseJSXElementName();var attributes=this.parseJSXAttributes();var selfClosing=this.matchJSX("/");if(selfClosing){this.expectJSX("/")}this.expectJSX(">");return this.finalize(node,new JSXNode.JSXOpeningElement(name,selfClosing,attributes))};JSXParser.prototype.parseJSXBoundaryElement=function(){var node=this.createJSXNode();this.expectJSX("<");if(this.matchJSX("/")){this.expectJSX("/");var name_3=this.parseJSXElementName();this.expectJSX(">");return this.finalize(node,new JSXNode.JSXClosingElement(name_3))}var name=this.parseJSXElementName();var attributes=this.parseJSXAttributes();var selfClosing=this.matchJSX("/");if(selfClosing){this.expectJSX("/")}this.expectJSX(">");return this.finalize(node,new JSXNode.JSXOpeningElement(name,selfClosing,attributes))};JSXParser.prototype.parseJSXEmptyExpression=function(){var node=this.createJSXChildNode();this.collectComments();this.lastMarker.index=this.scanner.index;this.lastMarker.line=this.scanner.lineNumber;this.lastMarker.column=this.scanner.index-this.scanner.lineStart;return this.finalize(node,new JSXNode.JSXEmptyExpression)};JSXParser.prototype.parseJSXExpressionContainer=function(){var node=this.createJSXNode();this.expectJSX("{");var expression;if(this.matchJSX("}")){expression=this.parseJSXEmptyExpression();this.expectJSX("}")}else{this.finishJSX();expression=this.parseAssignmentExpression();this.reenterJSX()}return this.finalize(node,new JSXNode.JSXExpressionContainer(expression))};JSXParser.prototype.parseJSXChildren=function(){var children=[];while(!this.scanner.eof()){var node=this.createJSXChildNode();var token=this.nextJSXText();if(token.start0){var child=this.finalize(el.node,new JSXNode.JSXElement(el.opening,el.children,el.closing));el=stack[stack.length-1];el.children.push(child);stack.pop()}else{break}}}return el};JSXParser.prototype.parseJSXElement=function(){var node=this.createJSXNode();var opening=this.parseJSXOpeningElement();var children=[];var closing=null;if(!opening.selfClosing){var el=this.parseComplexJSXElement({node:node,opening:opening,closing:closing,children:children});children=el.children;closing=el.closing}return this.finalize(node,new JSXNode.JSXElement(opening,children,closing))};JSXParser.prototype.parseJSXRoot=function(){if(this.config.tokens){this.tokens.pop()}this.startJSX();var element=this.parseJSXElement();this.finishJSX();return element};JSXParser.prototype.isStartOfExpression=function(){return _super.prototype.isStartOfExpression.call(this)||this.match("<")};return JSXParser}(parser_1.Parser);exports.JSXParser=JSXParser},function(module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var Regex={NonAsciiIdentifierStart:/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]/,NonAsciiIdentifierPart:/[\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/};exports.Character={fromCodePoint:function(cp){return cp<65536?String.fromCharCode(cp):String.fromCharCode(55296+(cp-65536>>10))+String.fromCharCode(56320+(cp-65536&1023))},isWhiteSpace:function(cp){return cp===32||cp===9||cp===11||cp===12||cp===160||cp>=5760&&[5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279].indexOf(cp)>=0},isLineTerminator:function(cp){return cp===10||cp===13||cp===8232||cp===8233},isIdentifierStart:function(cp){return cp===36||cp===95||cp>=65&&cp<=90||cp>=97&&cp<=122||cp===92||cp>=128&&Regex.NonAsciiIdentifierStart.test(exports.Character.fromCodePoint(cp))},isIdentifierPart:function(cp){return cp===36||cp===95||cp>=65&&cp<=90||cp>=97&&cp<=122||cp>=48&&cp<=57||cp===92||cp>=128&&Regex.NonAsciiIdentifierPart.test(exports.Character.fromCodePoint(cp))},isDecimalDigit:function(cp){return cp>=48&&cp<=57},isHexDigit:function(cp){return cp>=48&&cp<=57||cp>=65&&cp<=70||cp>=97&&cp<=102},isOctalDigit:function(cp){return cp>=48&&cp<=55}}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var jsx_syntax_1=__webpack_require__(6);var JSXClosingElement=function(){function JSXClosingElement(name){this.type=jsx_syntax_1.JSXSyntax.JSXClosingElement;this.name=name}return JSXClosingElement}();exports.JSXClosingElement=JSXClosingElement;var JSXElement=function(){function JSXElement(openingElement,children,closingElement){this.type=jsx_syntax_1.JSXSyntax.JSXElement;this.openingElement=openingElement;this.children=children;this.closingElement=closingElement}return JSXElement}();exports.JSXElement=JSXElement;var JSXEmptyExpression=function(){function JSXEmptyExpression(){this.type=jsx_syntax_1.JSXSyntax.JSXEmptyExpression}return JSXEmptyExpression}();exports.JSXEmptyExpression=JSXEmptyExpression;var JSXExpressionContainer=function(){function JSXExpressionContainer(expression){this.type=jsx_syntax_1.JSXSyntax.JSXExpressionContainer;this.expression=expression}return JSXExpressionContainer}();exports.JSXExpressionContainer=JSXExpressionContainer;var JSXIdentifier=function(){function JSXIdentifier(name){this.type=jsx_syntax_1.JSXSyntax.JSXIdentifier;this.name=name}return JSXIdentifier}();exports.JSXIdentifier=JSXIdentifier;var JSXMemberExpression=function(){function JSXMemberExpression(object,property){this.type=jsx_syntax_1.JSXSyntax.JSXMemberExpression;this.object=object;this.property=property}return JSXMemberExpression}();exports.JSXMemberExpression=JSXMemberExpression;var JSXAttribute=function(){function JSXAttribute(name,value){this.type=jsx_syntax_1.JSXSyntax.JSXAttribute;this.name=name;this.value=value}return JSXAttribute}();exports.JSXAttribute=JSXAttribute;var JSXNamespacedName=function(){function JSXNamespacedName(namespace,name){this.type=jsx_syntax_1.JSXSyntax.JSXNamespacedName;this.namespace=namespace;this.name=name}return JSXNamespacedName}();exports.JSXNamespacedName=JSXNamespacedName;var JSXOpeningElement=function(){function JSXOpeningElement(name,selfClosing,attributes){this.type=jsx_syntax_1.JSXSyntax.JSXOpeningElement;this.name=name;this.selfClosing=selfClosing;this.attributes=attributes}return JSXOpeningElement}();exports.JSXOpeningElement=JSXOpeningElement;var JSXSpreadAttribute=function(){function JSXSpreadAttribute(argument){this.type=jsx_syntax_1.JSXSyntax.JSXSpreadAttribute;this.argument=argument}return JSXSpreadAttribute}();exports.JSXSpreadAttribute=JSXSpreadAttribute;var JSXText=function(){function JSXText(value,raw){this.type=jsx_syntax_1.JSXSyntax.JSXText;this.value=value;this.raw=raw}return JSXText}();exports.JSXText=JSXText},function(module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.JSXSyntax={JSXAttribute:"JSXAttribute",JSXClosingElement:"JSXClosingElement",JSXElement:"JSXElement",JSXEmptyExpression:"JSXEmptyExpression",JSXExpressionContainer:"JSXExpressionContainer",JSXIdentifier:"JSXIdentifier",JSXMemberExpression:"JSXMemberExpression",JSXNamespacedName:"JSXNamespacedName",JSXOpeningElement:"JSXOpeningElement",JSXSpreadAttribute:"JSXSpreadAttribute",JSXText:"JSXText"}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var syntax_1=__webpack_require__(2);var ArrayExpression=function(){function ArrayExpression(elements){this.type=syntax_1.Syntax.ArrayExpression;this.elements=elements}return ArrayExpression}();exports.ArrayExpression=ArrayExpression;var ArrayPattern=function(){function ArrayPattern(elements){this.type=syntax_1.Syntax.ArrayPattern;this.elements=elements}return ArrayPattern}();exports.ArrayPattern=ArrayPattern;var ArrowFunctionExpression=function(){function ArrowFunctionExpression(params,body,expression){this.type=syntax_1.Syntax.ArrowFunctionExpression;this.id=null;this.params=params;this.body=body;this.generator=false;this.expression=expression;this.async=false}return ArrowFunctionExpression}();exports.ArrowFunctionExpression=ArrowFunctionExpression;var AssignmentExpression=function(){function AssignmentExpression(operator,left,right){this.type=syntax_1.Syntax.AssignmentExpression;this.operator=operator;this.left=left;this.right=right}return AssignmentExpression}();exports.AssignmentExpression=AssignmentExpression;var AssignmentPattern=function(){function AssignmentPattern(left,right){this.type=syntax_1.Syntax.AssignmentPattern;this.left=left;this.right=right}return AssignmentPattern}();exports.AssignmentPattern=AssignmentPattern;var AsyncArrowFunctionExpression=function(){function AsyncArrowFunctionExpression(params,body,expression){this.type=syntax_1.Syntax.ArrowFunctionExpression;this.id=null;this.params=params;this.body=body;this.generator=false;this.expression=expression;this.async=true}return AsyncArrowFunctionExpression}();exports.AsyncArrowFunctionExpression=AsyncArrowFunctionExpression;var AsyncFunctionDeclaration=function(){function AsyncFunctionDeclaration(id,params,body){this.type=syntax_1.Syntax.FunctionDeclaration;this.id=id;this.params=params;this.body=body;this.generator=false;this.expression=false;this.async=true}return AsyncFunctionDeclaration}();exports.AsyncFunctionDeclaration=AsyncFunctionDeclaration;var AsyncFunctionExpression=function(){function AsyncFunctionExpression(id,params,body){this.type=syntax_1.Syntax.FunctionExpression;this.id=id;this.params=params;this.body=body;this.generator=false;this.expression=false;this.async=true}return AsyncFunctionExpression}();exports.AsyncFunctionExpression=AsyncFunctionExpression;var AwaitExpression=function(){function AwaitExpression(argument){this.type=syntax_1.Syntax.AwaitExpression;this.argument=argument}return AwaitExpression}();exports.AwaitExpression=AwaitExpression;var BinaryExpression=function(){function BinaryExpression(operator,left,right){var logical=operator==="||"||operator==="&&";this.type=logical?syntax_1.Syntax.LogicalExpression:syntax_1.Syntax.BinaryExpression;this.operator=operator;this.left=left;this.right=right}return BinaryExpression}();exports.BinaryExpression=BinaryExpression;var BlockStatement=function(){function BlockStatement(body){this.type=syntax_1.Syntax.BlockStatement;this.body=body}return BlockStatement}();exports.BlockStatement=BlockStatement;var BreakStatement=function(){function BreakStatement(label){this.type=syntax_1.Syntax.BreakStatement;this.label=label}return BreakStatement}();exports.BreakStatement=BreakStatement;var CallExpression=function(){function CallExpression(callee,args){this.type=syntax_1.Syntax.CallExpression;this.callee=callee;this.arguments=args}return CallExpression}();exports.CallExpression=CallExpression;var CatchClause=function(){function CatchClause(param,body){this.type=syntax_1.Syntax.CatchClause;this.param=param;this.body=body}return CatchClause}();exports.CatchClause=CatchClause;var ClassBody=function(){function ClassBody(body){this.type=syntax_1.Syntax.ClassBody;this.body=body}return ClassBody}();exports.ClassBody=ClassBody;var ClassDeclaration=function(){function ClassDeclaration(id,superClass,body){this.type=syntax_1.Syntax.ClassDeclaration;this.id=id;this.superClass=superClass;this.body=body}return ClassDeclaration}();exports.ClassDeclaration=ClassDeclaration;var ClassExpression=function(){function ClassExpression(id,superClass,body){this.type=syntax_1.Syntax.ClassExpression;this.id=id;this.superClass=superClass;this.body=body}return ClassExpression}();exports.ClassExpression=ClassExpression;var ComputedMemberExpression=function(){function ComputedMemberExpression(object,property){this.type=syntax_1.Syntax.MemberExpression;this.computed=true;this.object=object;this.property=property}return ComputedMemberExpression}();exports.ComputedMemberExpression=ComputedMemberExpression;var ConditionalExpression=function(){function ConditionalExpression(test,consequent,alternate){this.type=syntax_1.Syntax.ConditionalExpression;this.test=test;this.consequent=consequent;this.alternate=alternate}return ConditionalExpression}();exports.ConditionalExpression=ConditionalExpression;var ContinueStatement=function(){function ContinueStatement(label){this.type=syntax_1.Syntax.ContinueStatement;this.label=label}return ContinueStatement}();exports.ContinueStatement=ContinueStatement;var DebuggerStatement=function(){function DebuggerStatement(){this.type=syntax_1.Syntax.DebuggerStatement}return DebuggerStatement}();exports.DebuggerStatement=DebuggerStatement;var Directive=function(){function Directive(expression,directive){this.type=syntax_1.Syntax.ExpressionStatement;this.expression=expression;this.directive=directive}return Directive}();exports.Directive=Directive;var DoWhileStatement=function(){function DoWhileStatement(body,test){this.type=syntax_1.Syntax.DoWhileStatement;this.body=body;this.test=test}return DoWhileStatement}();exports.DoWhileStatement=DoWhileStatement;var EmptyStatement=function(){function EmptyStatement(){this.type=syntax_1.Syntax.EmptyStatement}return EmptyStatement}();exports.EmptyStatement=EmptyStatement;var ExportAllDeclaration=function(){function ExportAllDeclaration(source){this.type=syntax_1.Syntax.ExportAllDeclaration;this.source=source}return ExportAllDeclaration}();exports.ExportAllDeclaration=ExportAllDeclaration;var ExportDefaultDeclaration=function(){function ExportDefaultDeclaration(declaration){this.type=syntax_1.Syntax.ExportDefaultDeclaration;this.declaration=declaration}return ExportDefaultDeclaration}();exports.ExportDefaultDeclaration=ExportDefaultDeclaration;var ExportNamedDeclaration=function(){function ExportNamedDeclaration(declaration,specifiers,source){this.type=syntax_1.Syntax.ExportNamedDeclaration;this.declaration=declaration;this.specifiers=specifiers;this.source=source}return ExportNamedDeclaration}();exports.ExportNamedDeclaration=ExportNamedDeclaration;var ExportSpecifier=function(){function ExportSpecifier(local,exported){this.type=syntax_1.Syntax.ExportSpecifier;this.exported=exported;this.local=local}return ExportSpecifier}();exports.ExportSpecifier=ExportSpecifier;var ExpressionStatement=function(){function ExpressionStatement(expression){this.type=syntax_1.Syntax.ExpressionStatement;this.expression=expression}return ExpressionStatement}();exports.ExpressionStatement=ExpressionStatement;var ForInStatement=function(){function ForInStatement(left,right,body){this.type=syntax_1.Syntax.ForInStatement;this.left=left;this.right=right;this.body=body;this.each=false}return ForInStatement}();exports.ForInStatement=ForInStatement;var ForOfStatement=function(){function ForOfStatement(left,right,body){this.type=syntax_1.Syntax.ForOfStatement;this.left=left;this.right=right;this.body=body}return ForOfStatement}();exports.ForOfStatement=ForOfStatement;var ForStatement=function(){function ForStatement(init,test,update,body){this.type=syntax_1.Syntax.ForStatement;this.init=init;this.test=test;this.update=update;this.body=body}return ForStatement}();exports.ForStatement=ForStatement;var FunctionDeclaration=function(){function FunctionDeclaration(id,params,body,generator){this.type=syntax_1.Syntax.FunctionDeclaration;this.id=id;this.params=params;this.body=body;this.generator=generator;this.expression=false;this.async=false}return FunctionDeclaration}();exports.FunctionDeclaration=FunctionDeclaration;var FunctionExpression=function(){function FunctionExpression(id,params,body,generator){this.type=syntax_1.Syntax.FunctionExpression;this.id=id;this.params=params;this.body=body;this.generator=generator;this.expression=false;this.async=false}return FunctionExpression}();exports.FunctionExpression=FunctionExpression;var Identifier=function(){function Identifier(name){this.type=syntax_1.Syntax.Identifier;this.name=name}return Identifier}();exports.Identifier=Identifier;var IfStatement=function(){function IfStatement(test,consequent,alternate){this.type=syntax_1.Syntax.IfStatement;this.test=test;this.consequent=consequent;this.alternate=alternate}return IfStatement}();exports.IfStatement=IfStatement;var ImportDeclaration=function(){function ImportDeclaration(specifiers,source){this.type=syntax_1.Syntax.ImportDeclaration;this.specifiers=specifiers;this.source=source}return ImportDeclaration}();exports.ImportDeclaration=ImportDeclaration;var ImportDefaultSpecifier=function(){function ImportDefaultSpecifier(local){this.type=syntax_1.Syntax.ImportDefaultSpecifier;this.local=local}return ImportDefaultSpecifier}();exports.ImportDefaultSpecifier=ImportDefaultSpecifier;var ImportNamespaceSpecifier=function(){function ImportNamespaceSpecifier(local){this.type=syntax_1.Syntax.ImportNamespaceSpecifier;this.local=local}return ImportNamespaceSpecifier}();exports.ImportNamespaceSpecifier=ImportNamespaceSpecifier;var ImportSpecifier=function(){function ImportSpecifier(local,imported){this.type=syntax_1.Syntax.ImportSpecifier;this.local=local;this.imported=imported}return ImportSpecifier}();exports.ImportSpecifier=ImportSpecifier;var LabeledStatement=function(){function LabeledStatement(label,body){this.type=syntax_1.Syntax.LabeledStatement;this.label=label;this.body=body}return LabeledStatement}();exports.LabeledStatement=LabeledStatement;var Literal=function(){function Literal(value,raw){this.type=syntax_1.Syntax.Literal;this.value=value;this.raw=raw}return Literal}();exports.Literal=Literal;var MetaProperty=function(){function MetaProperty(meta,property){this.type=syntax_1.Syntax.MetaProperty;this.meta=meta;this.property=property}return MetaProperty}();exports.MetaProperty=MetaProperty;var MethodDefinition=function(){function MethodDefinition(key,computed,value,kind,isStatic){this.type=syntax_1.Syntax.MethodDefinition;this.key=key;this.computed=computed;this.value=value;this.kind=kind;this.static=isStatic}return MethodDefinition}();exports.MethodDefinition=MethodDefinition;var Module=function(){function Module(body){this.type=syntax_1.Syntax.Program;this.body=body;this.sourceType="module"}return Module}();exports.Module=Module;var NewExpression=function(){function NewExpression(callee,args){this.type=syntax_1.Syntax.NewExpression;this.callee=callee;this.arguments=args}return NewExpression}();exports.NewExpression=NewExpression;var ObjectExpression=function(){function ObjectExpression(properties){this.type=syntax_1.Syntax.ObjectExpression;this.properties=properties}return ObjectExpression}();exports.ObjectExpression=ObjectExpression;var ObjectPattern=function(){function ObjectPattern(properties){this.type=syntax_1.Syntax.ObjectPattern;this.properties=properties}return ObjectPattern}();exports.ObjectPattern=ObjectPattern;var Property=function(){function Property(kind,key,computed,value,method,shorthand){this.type=syntax_1.Syntax.Property;this.key=key;this.computed=computed;this.value=value;this.kind=kind;this.method=method;this.shorthand=shorthand}return Property}();exports.Property=Property;var RegexLiteral=function(){function RegexLiteral(value,raw,pattern,flags){this.type=syntax_1.Syntax.Literal;this.value=value;this.raw=raw;this.regex={pattern:pattern,flags:flags}}return RegexLiteral}();exports.RegexLiteral=RegexLiteral;var RestElement=function(){function RestElement(argument){this.type=syntax_1.Syntax.RestElement;this.argument=argument}return RestElement}();exports.RestElement=RestElement;var ReturnStatement=function(){function ReturnStatement(argument){this.type=syntax_1.Syntax.ReturnStatement;this.argument=argument}return ReturnStatement}();exports.ReturnStatement=ReturnStatement;var Script=function(){function Script(body){this.type=syntax_1.Syntax.Program;this.body=body;this.sourceType="script"}return Script}();exports.Script=Script;var SequenceExpression=function(){function SequenceExpression(expressions){this.type=syntax_1.Syntax.SequenceExpression;this.expressions=expressions}return SequenceExpression}();exports.SequenceExpression=SequenceExpression;var SpreadElement=function(){function SpreadElement(argument){this.type=syntax_1.Syntax.SpreadElement;this.argument=argument}return SpreadElement}();exports.SpreadElement=SpreadElement;var StaticMemberExpression=function(){function StaticMemberExpression(object,property){this.type=syntax_1.Syntax.MemberExpression;this.computed=false;this.object=object;this.property=property}return StaticMemberExpression}();exports.StaticMemberExpression=StaticMemberExpression;var Super=function(){function Super(){this.type=syntax_1.Syntax.Super}return Super}();exports.Super=Super;var SwitchCase=function(){function SwitchCase(test,consequent){this.type=syntax_1.Syntax.SwitchCase;this.test=test;this.consequent=consequent}return SwitchCase}();exports.SwitchCase=SwitchCase;var SwitchStatement=function(){function SwitchStatement(discriminant,cases){this.type=syntax_1.Syntax.SwitchStatement;this.discriminant=discriminant;this.cases=cases}return SwitchStatement}();exports.SwitchStatement=SwitchStatement;var TaggedTemplateExpression=function(){function TaggedTemplateExpression(tag,quasi){this.type=syntax_1.Syntax.TaggedTemplateExpression;this.tag=tag;this.quasi=quasi}return TaggedTemplateExpression}();exports.TaggedTemplateExpression=TaggedTemplateExpression;var TemplateElement=function(){function TemplateElement(value,tail){this.type=syntax_1.Syntax.TemplateElement;this.value=value;this.tail=tail}return TemplateElement}();exports.TemplateElement=TemplateElement;var TemplateLiteral=function(){function TemplateLiteral(quasis,expressions){this.type=syntax_1.Syntax.TemplateLiteral;this.quasis=quasis;this.expressions=expressions}return TemplateLiteral}();exports.TemplateLiteral=TemplateLiteral;var ThisExpression=function(){function ThisExpression(){this.type=syntax_1.Syntax.ThisExpression}return ThisExpression}();exports.ThisExpression=ThisExpression;var ThrowStatement=function(){function ThrowStatement(argument){this.type=syntax_1.Syntax.ThrowStatement;this.argument=argument}return ThrowStatement}();exports.ThrowStatement=ThrowStatement;var TryStatement=function(){function TryStatement(block,handler,finalizer){this.type=syntax_1.Syntax.TryStatement;this.block=block;this.handler=handler;this.finalizer=finalizer}return TryStatement}();exports.TryStatement=TryStatement;var UnaryExpression=function(){function UnaryExpression(operator,argument){this.type=syntax_1.Syntax.UnaryExpression;this.operator=operator;this.argument=argument;this.prefix=true}return UnaryExpression}();exports.UnaryExpression=UnaryExpression;var UpdateExpression=function(){function UpdateExpression(operator,argument,prefix){this.type=syntax_1.Syntax.UpdateExpression;this.operator=operator;this.argument=argument;this.prefix=prefix}return UpdateExpression}();exports.UpdateExpression=UpdateExpression;var VariableDeclaration=function(){function VariableDeclaration(declarations,kind){this.type=syntax_1.Syntax.VariableDeclaration;this.declarations=declarations;this.kind=kind}return VariableDeclaration}();exports.VariableDeclaration=VariableDeclaration;var VariableDeclarator=function(){function VariableDeclarator(id,init){this.type=syntax_1.Syntax.VariableDeclarator;this.id=id;this.init=init}return VariableDeclarator}();exports.VariableDeclarator=VariableDeclarator;var WhileStatement=function(){function WhileStatement(test,body){this.type=syntax_1.Syntax.WhileStatement;this.test=test;this.body=body}return WhileStatement}();exports.WhileStatement=WhileStatement;var WithStatement=function(){function WithStatement(object,body){this.type=syntax_1.Syntax.WithStatement;this.object=object;this.body=body}return WithStatement}();exports.WithStatement=WithStatement;var YieldExpression=function(){function YieldExpression(argument,delegate){this.type=syntax_1.Syntax.YieldExpression;this.argument=argument;this.delegate=delegate}return YieldExpression}();exports.YieldExpression=YieldExpression},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var assert_1=__webpack_require__(9);var error_handler_1=__webpack_require__(10);var messages_1=__webpack_require__(11);var Node=__webpack_require__(7);var scanner_1=__webpack_require__(12);var syntax_1=__webpack_require__(2);var token_1=__webpack_require__(13);var ArrowParameterPlaceHolder="ArrowParameterPlaceHolder";var Parser=function(){function Parser(code,options,delegate){if(options===void 0){options={}}this.config={range:typeof options.range==="boolean"&&options.range,loc:typeof options.loc==="boolean"&&options.loc,source:null,tokens:typeof options.tokens==="boolean"&&options.tokens,comment:typeof options.comment==="boolean"&&options.comment,tolerant:typeof options.tolerant==="boolean"&&options.tolerant};if(this.config.loc&&options.source&&options.source!==null){this.config.source=String(options.source)}this.delegate=delegate;this.errorHandler=new error_handler_1.ErrorHandler;this.errorHandler.tolerant=this.config.tolerant;this.scanner=new scanner_1.Scanner(code,this.errorHandler);this.scanner.trackComment=this.config.comment;this.operatorPrecedence={")":0,";":0,",":0,"=":0,"]":0,"||":1,"&&":2,"|":3,"^":4,"&":5,"==":6,"!=":6,"===":6,"!==":6,"<":7,">":7,"<=":7,">=":7,"<<":8,">>":8,">>>":8,"+":9,"-":9,"*":11,"/":11,"%":11};this.lookahead={type:2,value:"",lineNumber:this.scanner.lineNumber,lineStart:0,start:0,end:0};this.hasLineTerminator=false;this.context={isModule:false,await:false,allowIn:true,allowStrictDirective:true,allowYield:true,firstCoverInitializedNameError:null,isAssignmentTarget:false,isBindingElement:false,inFunctionBody:false,inIteration:false,inSwitch:false,labelSet:{},strict:false};this.tokens=[];this.startMarker={index:0,line:this.scanner.lineNumber,column:0};this.lastMarker={index:0,line:this.scanner.lineNumber,column:0};this.nextToken();this.lastMarker={index:this.scanner.index,line:this.scanner.lineNumber,column:this.scanner.index-this.scanner.lineStart}}Parser.prototype.throwError=function(messageFormat){var values=[];for(var _i=1;_i0&&this.delegate){for(var i=0;i>="||op===">>>="||op==="&="||op==="^="||op==="|="};Parser.prototype.isolateCoverGrammar=function(parseFunction){var previousIsBindingElement=this.context.isBindingElement;var previousIsAssignmentTarget=this.context.isAssignmentTarget;var previousFirstCoverInitializedNameError=this.context.firstCoverInitializedNameError;this.context.isBindingElement=true;this.context.isAssignmentTarget=true;this.context.firstCoverInitializedNameError=null;var result=parseFunction.call(this);if(this.context.firstCoverInitializedNameError!==null){this.throwUnexpectedToken(this.context.firstCoverInitializedNameError)}this.context.isBindingElement=previousIsBindingElement;this.context.isAssignmentTarget=previousIsAssignmentTarget;this.context.firstCoverInitializedNameError=previousFirstCoverInitializedNameError;return result};Parser.prototype.inheritCoverGrammar=function(parseFunction){var previousIsBindingElement=this.context.isBindingElement;var previousIsAssignmentTarget=this.context.isAssignmentTarget;var previousFirstCoverInitializedNameError=this.context.firstCoverInitializedNameError;this.context.isBindingElement=true;this.context.isAssignmentTarget=true;this.context.firstCoverInitializedNameError=null;var result=parseFunction.call(this);this.context.isBindingElement=this.context.isBindingElement&&previousIsBindingElement;this.context.isAssignmentTarget=this.context.isAssignmentTarget&&previousIsAssignmentTarget;this.context.firstCoverInitializedNameError=previousFirstCoverInitializedNameError||this.context.firstCoverInitializedNameError;return result};Parser.prototype.consumeSemicolon=function(){if(this.match(";")){this.nextToken()}else if(!this.hasLineTerminator){if(this.lookahead.type!==2&&!this.match("}")){this.throwUnexpectedToken(this.lookahead)}this.lastMarker.index=this.startMarker.index;this.lastMarker.line=this.startMarker.line;this.lastMarker.column=this.startMarker.column}};Parser.prototype.parsePrimaryExpression=function(){var node=this.createNode();var expr;var token,raw;switch(this.lookahead.type){case 3:if((this.context.isModule||this.context.await)&&this.lookahead.value==="await"){this.tolerateUnexpectedToken(this.lookahead)}expr=this.matchAsyncFunction()?this.parseFunctionExpression():this.finalize(node,new Node.Identifier(this.nextToken().value));break;case 6:case 8:if(this.context.strict&&this.lookahead.octal){this.tolerateUnexpectedToken(this.lookahead,messages_1.Messages.StrictOctalLiteral)}this.context.isAssignmentTarget=false;this.context.isBindingElement=false;token=this.nextToken();raw=this.getTokenRaw(token);expr=this.finalize(node,new Node.Literal(token.value,raw));break;case 1:this.context.isAssignmentTarget=false;this.context.isBindingElement=false;token=this.nextToken();raw=this.getTokenRaw(token);expr=this.finalize(node,new Node.Literal(token.value==="true",raw));break;case 5:this.context.isAssignmentTarget=false;this.context.isBindingElement=false;token=this.nextToken();raw=this.getTokenRaw(token);expr=this.finalize(node,new Node.Literal(null,raw));break;case 10:expr=this.parseTemplateLiteral();break;case 7:switch(this.lookahead.value){case"(":this.context.isBindingElement=false;expr=this.inheritCoverGrammar(this.parseGroupExpression);break;case"[":expr=this.inheritCoverGrammar(this.parseArrayInitializer);break;case"{":expr=this.inheritCoverGrammar(this.parseObjectInitializer);break;case"/":case"/=":this.context.isAssignmentTarget=false;this.context.isBindingElement=false;this.scanner.index=this.startMarker.index;token=this.nextRegexToken();raw=this.getTokenRaw(token);expr=this.finalize(node,new Node.RegexLiteral(token.regex,raw,token.pattern,token.flags));break;default:expr=this.throwUnexpectedToken(this.nextToken())}break;case 4:if(!this.context.strict&&this.context.allowYield&&this.matchKeyword("yield")){expr=this.parseIdentifierName()}else if(!this.context.strict&&this.matchKeyword("let")){expr=this.finalize(node,new Node.Identifier(this.nextToken().value))}else{this.context.isAssignmentTarget=false;this.context.isBindingElement=false;if(this.matchKeyword("function")){expr=this.parseFunctionExpression()}else if(this.matchKeyword("this")){this.nextToken();expr=this.finalize(node,new Node.ThisExpression)}else if(this.matchKeyword("class")){expr=this.parseClassExpression()}else{expr=this.throwUnexpectedToken(this.nextToken())}}break;default:expr=this.throwUnexpectedToken(this.nextToken())}return expr};Parser.prototype.parseSpreadElement=function(){var node=this.createNode();this.expect("...");var arg=this.inheritCoverGrammar(this.parseAssignmentExpression);return this.finalize(node,new Node.SpreadElement(arg))};Parser.prototype.parseArrayInitializer=function(){var node=this.createNode();var elements=[];this.expect("[");while(!this.match("]")){if(this.match(",")){this.nextToken();elements.push(null)}else if(this.match("...")){var element=this.parseSpreadElement();if(!this.match("]")){this.context.isAssignmentTarget=false;this.context.isBindingElement=false;this.expect(",")}elements.push(element)}else{elements.push(this.inheritCoverGrammar(this.parseAssignmentExpression));if(!this.match("]")){this.expect(",")}}}this.expect("]");return this.finalize(node,new Node.ArrayExpression(elements))};Parser.prototype.parsePropertyMethod=function(params){this.context.isAssignmentTarget=false;this.context.isBindingElement=false;var previousStrict=this.context.strict;var previousAllowStrictDirective=this.context.allowStrictDirective;this.context.allowStrictDirective=params.simple;var body=this.isolateCoverGrammar(this.parseFunctionSourceElements);if(this.context.strict&¶ms.firstRestricted){this.tolerateUnexpectedToken(params.firstRestricted,params.message)}if(this.context.strict&¶ms.stricted){this.tolerateUnexpectedToken(params.stricted,params.message)}this.context.strict=previousStrict;this.context.allowStrictDirective=previousAllowStrictDirective;return body};Parser.prototype.parsePropertyMethodFunction=function(){var isGenerator=false;var node=this.createNode();var previousAllowYield=this.context.allowYield;this.context.allowYield=false;var params=this.parseFormalParameters();var method=this.parsePropertyMethod(params);this.context.allowYield=previousAllowYield;return this.finalize(node,new Node.FunctionExpression(null,params.params,method,isGenerator))};Parser.prototype.parsePropertyMethodAsyncFunction=function(){var node=this.createNode();var previousAllowYield=this.context.allowYield;var previousAwait=this.context.await;this.context.allowYield=false;this.context.await=true;var params=this.parseFormalParameters();var method=this.parsePropertyMethod(params);this.context.allowYield=previousAllowYield;this.context.await=previousAwait;return this.finalize(node,new Node.AsyncFunctionExpression(null,params.params,method))};Parser.prototype.parseObjectPropertyKey=function(){var node=this.createNode();var token=this.nextToken();var key;switch(token.type){case 8:case 6:if(this.context.strict&&token.octal){this.tolerateUnexpectedToken(token,messages_1.Messages.StrictOctalLiteral)}var raw=this.getTokenRaw(token);key=this.finalize(node,new Node.Literal(token.value,raw));break;case 3:case 1:case 5:case 4:key=this.finalize(node,new Node.Identifier(token.value));break;case 7:if(token.value==="["){key=this.isolateCoverGrammar(this.parseAssignmentExpression);this.expect("]")}else{key=this.throwUnexpectedToken(token)}break;default:key=this.throwUnexpectedToken(token)}return key};Parser.prototype.isPropertyKey=function(key,value){return key.type===syntax_1.Syntax.Identifier&&key.name===value||key.type===syntax_1.Syntax.Literal&&key.value===value};Parser.prototype.parseObjectProperty=function(hasProto){var node=this.createNode();var token=this.lookahead;var kind;var key=null;var value=null;var computed=false;var method=false;var shorthand=false;var isAsync=false;if(token.type===3){var id=token.value;this.nextToken();computed=this.match("[");isAsync=!this.hasLineTerminator&&id==="async"&&!this.match(":")&&!this.match("(")&&!this.match("*");key=isAsync?this.parseObjectPropertyKey():this.finalize(node,new Node.Identifier(id))}else if(this.match("*")){this.nextToken()}else{computed=this.match("[");key=this.parseObjectPropertyKey()}var lookaheadPropertyKey=this.qualifiedPropertyName(this.lookahead);if(token.type===3&&!isAsync&&token.value==="get"&&lookaheadPropertyKey){kind="get";computed=this.match("[");key=this.parseObjectPropertyKey();this.context.allowYield=false;value=this.parseGetterMethod()}else if(token.type===3&&!isAsync&&token.value==="set"&&lookaheadPropertyKey){kind="set";computed=this.match("[");key=this.parseObjectPropertyKey();value=this.parseSetterMethod()}else if(token.type===7&&token.value==="*"&&lookaheadPropertyKey){kind="init";computed=this.match("[");key=this.parseObjectPropertyKey();value=this.parseGeneratorMethod();method=true}else{if(!key){this.throwUnexpectedToken(this.lookahead)}kind="init";if(this.match(":")&&!isAsync){if(!computed&&this.isPropertyKey(key,"__proto__")){if(hasProto.value){this.tolerateError(messages_1.Messages.DuplicateProtoProperty)}hasProto.value=true}this.nextToken();value=this.inheritCoverGrammar(this.parseAssignmentExpression)}else if(this.match("(")){value=isAsync?this.parsePropertyMethodAsyncFunction():this.parsePropertyMethodFunction();method=true}else if(token.type===3){var id=this.finalize(node,new Node.Identifier(token.value));if(this.match("=")){this.context.firstCoverInitializedNameError=this.lookahead;this.nextToken();shorthand=true;var init=this.isolateCoverGrammar(this.parseAssignmentExpression);value=this.finalize(node,new Node.AssignmentPattern(id,init))}else{shorthand=true;value=id}}else{this.throwUnexpectedToken(this.nextToken())}}return this.finalize(node,new Node.Property(kind,key,computed,value,method,shorthand))};Parser.prototype.parseObjectInitializer=function(){var node=this.createNode();this.expect("{");var properties=[];var hasProto={value:false};while(!this.match("}")){properties.push(this.parseObjectProperty(hasProto));if(!this.match("}")){this.expectCommaSeparator()}}this.expect("}");return this.finalize(node,new Node.ObjectExpression(properties))};Parser.prototype.parseTemplateHead=function(){assert_1.assert(this.lookahead.head,"Template literal must start with a template head");var node=this.createNode();var token=this.nextToken();var raw=token.value;var cooked=token.cooked;return this.finalize(node,new Node.TemplateElement({raw:raw,cooked:cooked},token.tail))};Parser.prototype.parseTemplateElement=function(){if(this.lookahead.type!==10){this.throwUnexpectedToken()}var node=this.createNode();var token=this.nextToken();var raw=token.value;var cooked=token.cooked;return this.finalize(node,new Node.TemplateElement({raw:raw,cooked:cooked},token.tail))};Parser.prototype.parseTemplateLiteral=function(){var node=this.createNode();var expressions=[];var quasis=[];var quasi=this.parseTemplateHead();quasis.push(quasi);while(!quasi.tail){expressions.push(this.parseExpression());quasi=this.parseTemplateElement();quasis.push(quasi)}return this.finalize(node,new Node.TemplateLiteral(quasis,expressions))};Parser.prototype.reinterpretExpressionAsPattern=function(expr){switch(expr.type){case syntax_1.Syntax.Identifier:case syntax_1.Syntax.MemberExpression:case syntax_1.Syntax.RestElement:case syntax_1.Syntax.AssignmentPattern:break;case syntax_1.Syntax.SpreadElement:expr.type=syntax_1.Syntax.RestElement;this.reinterpretExpressionAsPattern(expr.argument);break;case syntax_1.Syntax.ArrayExpression:expr.type=syntax_1.Syntax.ArrayPattern;for(var i=0;i")){this.expect("=>")}expr={type:ArrowParameterPlaceHolder,params:[],async:false}}else{var startToken=this.lookahead;var params=[];if(this.match("...")){expr=this.parseRestElement(params);this.expect(")");if(!this.match("=>")){this.expect("=>")}expr={type:ArrowParameterPlaceHolder,params:[expr],async:false}}else{var arrow=false;this.context.isBindingElement=true;expr=this.inheritCoverGrammar(this.parseAssignmentExpression);if(this.match(",")){var expressions=[];this.context.isAssignmentTarget=false;expressions.push(expr);while(this.lookahead.type!==2){if(!this.match(",")){break}this.nextToken();if(this.match(")")){this.nextToken();for(var i=0;i")){this.expect("=>")}this.context.isBindingElement=false;for(var i=0;i")){if(expr.type===syntax_1.Syntax.Identifier&&expr.name==="yield"){arrow=true;expr={type:ArrowParameterPlaceHolder,params:[expr],async:false}}if(!arrow){if(!this.context.isBindingElement){this.throwUnexpectedToken(this.lookahead)}if(expr.type===syntax_1.Syntax.SequenceExpression){for(var i=0;i")){for(var i=0;i0){this.nextToken();this.context.isAssignmentTarget=false;this.context.isBindingElement=false;var markers=[startToken,this.lookahead];var left=expr;var right=this.isolateCoverGrammar(this.parseExponentiationExpression);var stack=[left,token.value,right];var precedences=[prec];while(true){prec=this.binaryPrecedence(this.lookahead);if(prec<=0){break}while(stack.length>2&&prec<=precedences[precedences.length-1]){right=stack.pop();var operator=stack.pop();precedences.pop();left=stack.pop();markers.pop();var node=this.startNode(markers[markers.length-1]);stack.push(this.finalize(node,new Node.BinaryExpression(operator,left,right)))}stack.push(this.nextToken().value);precedences.push(prec);markers.push(this.lookahead);stack.push(this.isolateCoverGrammar(this.parseExponentiationExpression))}var i=stack.length-1;expr=stack[i];markers.pop();while(i>1){var node=this.startNode(markers.pop());var operator=stack[i-1];expr=this.finalize(node,new Node.BinaryExpression(operator,stack[i-2],expr));i-=2}}return expr};Parser.prototype.parseConditionalExpression=function(){var startToken=this.lookahead;var expr=this.inheritCoverGrammar(this.parseBinaryExpression);if(this.match("?")){this.nextToken();var previousAllowIn=this.context.allowIn;this.context.allowIn=true;var consequent=this.isolateCoverGrammar(this.parseAssignmentExpression);this.context.allowIn=previousAllowIn;this.expect(":");var alternate=this.isolateCoverGrammar(this.parseAssignmentExpression);expr=this.finalize(this.startNode(startToken),new Node.ConditionalExpression(expr,consequent,alternate));this.context.isAssignmentTarget=false;this.context.isBindingElement=false}return expr};Parser.prototype.checkPatternParam=function(options,param){switch(param.type){case syntax_1.Syntax.Identifier:this.validateParam(options,param,param.name);break;case syntax_1.Syntax.RestElement:this.checkPatternParam(options,param.argument);break;case syntax_1.Syntax.AssignmentPattern:this.checkPatternParam(options,param.left);break;case syntax_1.Syntax.ArrayPattern:for(var i=0;i")){this.context.isAssignmentTarget=false;this.context.isBindingElement=false;var isAsync=expr.async;var list=this.reinterpretAsCoverFormalsList(expr);if(list){if(this.hasLineTerminator){this.tolerateUnexpectedToken(this.lookahead)}this.context.firstCoverInitializedNameError=null;var previousStrict=this.context.strict;var previousAllowStrictDirective=this.context.allowStrictDirective;this.context.allowStrictDirective=list.simple;var previousAllowYield=this.context.allowYield;var previousAwait=this.context.await;this.context.allowYield=true;this.context.await=isAsync;var node=this.startNode(startToken);this.expect("=>");var body=void 0;if(this.match("{")){var previousAllowIn=this.context.allowIn;this.context.allowIn=true;body=this.parseFunctionSourceElements();this.context.allowIn=previousAllowIn}else{body=this.isolateCoverGrammar(this.parseAssignmentExpression)}var expression=body.type!==syntax_1.Syntax.BlockStatement;if(this.context.strict&&list.firstRestricted){this.throwUnexpectedToken(list.firstRestricted,list.message)}if(this.context.strict&&list.stricted){this.tolerateUnexpectedToken(list.stricted,list.message)}expr=isAsync?this.finalize(node,new Node.AsyncArrowFunctionExpression(list.params,body,expression)):this.finalize(node,new Node.ArrowFunctionExpression(list.params,body,expression));this.context.strict=previousStrict;this.context.allowStrictDirective=previousAllowStrictDirective;this.context.allowYield=previousAllowYield;this.context.await=previousAwait}}else{if(this.matchAssign()){if(!this.context.isAssignmentTarget){this.tolerateError(messages_1.Messages.InvalidLHSInAssignment)}if(this.context.strict&&expr.type===syntax_1.Syntax.Identifier){var id=expr;if(this.scanner.isRestrictedWord(id.name)){this.tolerateUnexpectedToken(token,messages_1.Messages.StrictLHSAssignment)}if(this.scanner.isStrictModeReservedWord(id.name)){this.tolerateUnexpectedToken(token,messages_1.Messages.StrictReservedWord)}}if(!this.match("=")){this.context.isAssignmentTarget=false;this.context.isBindingElement=false}else{this.reinterpretExpressionAsPattern(expr)}token=this.nextToken();var operator=token.value;var right=this.isolateCoverGrammar(this.parseAssignmentExpression);expr=this.finalize(this.startNode(startToken),new Node.AssignmentExpression(operator,expr,right));this.context.firstCoverInitializedNameError=null}}}return expr};Parser.prototype.parseExpression=function(){var startToken=this.lookahead;var expr=this.isolateCoverGrammar(this.parseAssignmentExpression);if(this.match(",")){var expressions=[];expressions.push(expr);while(this.lookahead.type!==2){if(!this.match(",")){break}this.nextToken();expressions.push(this.isolateCoverGrammar(this.parseAssignmentExpression))}expr=this.finalize(this.startNode(startToken),new Node.SequenceExpression(expressions))}return expr};Parser.prototype.parseStatementListItem=function(){var statement;this.context.isAssignmentTarget=true;this.context.isBindingElement=true;if(this.lookahead.type===4){switch(this.lookahead.value){case"export":if(!this.context.isModule){this.tolerateUnexpectedToken(this.lookahead,messages_1.Messages.IllegalExportDeclaration)}statement=this.parseExportDeclaration();break;case"import":if(!this.context.isModule){this.tolerateUnexpectedToken(this.lookahead,messages_1.Messages.IllegalImportDeclaration)}statement=this.parseImportDeclaration();break;case"const":statement=this.parseLexicalDeclaration({inFor:false});break;case"function":statement=this.parseFunctionDeclaration();break;case"class":statement=this.parseClassDeclaration();break;case"let":statement=this.isLexicalDeclaration()?this.parseLexicalDeclaration({inFor:false}):this.parseStatement();break;default:statement=this.parseStatement();break}}else{statement=this.parseStatement()}return statement};Parser.prototype.parseBlock=function(){var node=this.createNode();this.expect("{");var block=[];while(true){if(this.match("}")){break}block.push(this.parseStatementListItem())}this.expect("}");return this.finalize(node,new Node.BlockStatement(block))};Parser.prototype.parseLexicalBinding=function(kind,options){var node=this.createNode();var params=[];var id=this.parsePattern(params,kind);if(this.context.strict&&id.type===syntax_1.Syntax.Identifier){if(this.scanner.isRestrictedWord(id.name)){this.tolerateError(messages_1.Messages.StrictVarName)}}var init=null;if(kind==="const"){if(!this.matchKeyword("in")&&!this.matchContextualKeyword("of")){if(this.match("=")){this.nextToken();init=this.isolateCoverGrammar(this.parseAssignmentExpression)}else{this.throwError(messages_1.Messages.DeclarationMissingInitializer,"const")}}}else if(!options.inFor&&id.type!==syntax_1.Syntax.Identifier||this.match("=")){this.expect("=");init=this.isolateCoverGrammar(this.parseAssignmentExpression)}return this.finalize(node,new Node.VariableDeclarator(id,init))};Parser.prototype.parseBindingList=function(kind,options){var list=[this.parseLexicalBinding(kind,options)];while(this.match(",")){this.nextToken();list.push(this.parseLexicalBinding(kind,options))}return list};Parser.prototype.isLexicalDeclaration=function(){var state=this.scanner.saveState();this.scanner.scanComments();var next=this.scanner.lex();this.scanner.restoreState(state);return next.type===3||next.type===7&&next.value==="["||next.type===7&&next.value==="{"||next.type===4&&next.value==="let"||next.type===4&&next.value==="yield"};Parser.prototype.parseLexicalDeclaration=function(options){var node=this.createNode();var kind=this.nextToken().value;assert_1.assert(kind==="let"||kind==="const","Lexical declaration must be either let or const");var declarations=this.parseBindingList(kind,options);this.consumeSemicolon();return this.finalize(node,new Node.VariableDeclaration(declarations,kind))};Parser.prototype.parseBindingRestElement=function(params,kind){var node=this.createNode();this.expect("...");var arg=this.parsePattern(params,kind);return this.finalize(node,new Node.RestElement(arg))};Parser.prototype.parseArrayPattern=function(params,kind){var node=this.createNode();this.expect("[");var elements=[];while(!this.match("]")){if(this.match(",")){this.nextToken();elements.push(null)}else{if(this.match("...")){elements.push(this.parseBindingRestElement(params,kind));break}else{elements.push(this.parsePatternWithDefault(params,kind))}if(!this.match("]")){this.expect(",")}}}this.expect("]");return this.finalize(node,new Node.ArrayPattern(elements))};Parser.prototype.parsePropertyPattern=function(params,kind){var node=this.createNode();var computed=false;var shorthand=false;var method=false;var key;var value;if(this.lookahead.type===3){var keyToken=this.lookahead;key=this.parseVariableIdentifier();var init=this.finalize(node,new Node.Identifier(keyToken.value));if(this.match("=")){params.push(keyToken);shorthand=true;this.nextToken();var expr=this.parseAssignmentExpression();value=this.finalize(this.startNode(keyToken),new Node.AssignmentPattern(init,expr))}else if(!this.match(":")){params.push(keyToken);shorthand=true;value=init}else{this.expect(":");value=this.parsePatternWithDefault(params,kind)}}else{computed=this.match("[");key=this.parseObjectPropertyKey();this.expect(":");value=this.parsePatternWithDefault(params,kind)}return this.finalize(node,new Node.Property("init",key,computed,value,method,shorthand))};Parser.prototype.parseObjectPattern=function(params,kind){var node=this.createNode();var properties=[];this.expect("{");while(!this.match("}")){properties.push(this.parsePropertyPattern(params,kind));if(!this.match("}")){this.expect(",")}}this.expect("}");return this.finalize(node,new Node.ObjectPattern(properties))};Parser.prototype.parsePattern=function(params,kind){var pattern;if(this.match("[")){pattern=this.parseArrayPattern(params,kind)}else if(this.match("{")){pattern=this.parseObjectPattern(params,kind)}else{if(this.matchKeyword("let")&&(kind==="const"||kind==="let")){this.tolerateUnexpectedToken(this.lookahead,messages_1.Messages.LetInLexicalBinding)}params.push(this.lookahead);pattern=this.parseVariableIdentifier(kind)}return pattern};Parser.prototype.parsePatternWithDefault=function(params,kind){var startToken=this.lookahead;var pattern=this.parsePattern(params,kind);if(this.match("=")){this.nextToken();var previousAllowYield=this.context.allowYield;this.context.allowYield=true;var right=this.isolateCoverGrammar(this.parseAssignmentExpression);this.context.allowYield=previousAllowYield;pattern=this.finalize(this.startNode(startToken),new Node.AssignmentPattern(pattern,right))}return pattern};Parser.prototype.parseVariableIdentifier=function(kind){var node=this.createNode();var token=this.nextToken();if(token.type===4&&token.value==="yield"){if(this.context.strict){this.tolerateUnexpectedToken(token,messages_1.Messages.StrictReservedWord)}else if(!this.context.allowYield){this.throwUnexpectedToken(token)}}else if(token.type!==3){if(this.context.strict&&token.type===4&&this.scanner.isStrictModeReservedWord(token.value)){this.tolerateUnexpectedToken(token,messages_1.Messages.StrictReservedWord)}else{if(this.context.strict||token.value!=="let"||kind!=="var"){this.throwUnexpectedToken(token)}}}else if((this.context.isModule||this.context.await)&&token.type===3&&token.value==="await"){this.tolerateUnexpectedToken(token)}return this.finalize(node,new Node.Identifier(token.value))};Parser.prototype.parseVariableDeclaration=function(options){var node=this.createNode();var params=[];var id=this.parsePattern(params,"var");if(this.context.strict&&id.type===syntax_1.Syntax.Identifier){if(this.scanner.isRestrictedWord(id.name)){this.tolerateError(messages_1.Messages.StrictVarName)}}var init=null;if(this.match("=")){this.nextToken();init=this.isolateCoverGrammar(this.parseAssignmentExpression)}else if(id.type!==syntax_1.Syntax.Identifier&&!options.inFor){this.expect("=")}return this.finalize(node,new Node.VariableDeclarator(id,init))};Parser.prototype.parseVariableDeclarationList=function(options){var opt={inFor:options.inFor};var list=[];list.push(this.parseVariableDeclaration(opt));while(this.match(",")){this.nextToken();list.push(this.parseVariableDeclaration(opt))}return list};Parser.prototype.parseVariableStatement=function(){var node=this.createNode();this.expectKeyword("var");var declarations=this.parseVariableDeclarationList({inFor:false});this.consumeSemicolon();return this.finalize(node,new Node.VariableDeclaration(declarations,"var"))};Parser.prototype.parseEmptyStatement=function(){var node=this.createNode();this.expect(";");return this.finalize(node,new Node.EmptyStatement)};Parser.prototype.parseExpressionStatement=function(){var node=this.createNode();var expr=this.parseExpression();this.consumeSemicolon();return this.finalize(node,new Node.ExpressionStatement(expr))};Parser.prototype.parseIfClause=function(){if(this.context.strict&&this.matchKeyword("function")){this.tolerateError(messages_1.Messages.StrictFunction)}return this.parseStatement()};Parser.prototype.parseIfStatement=function(){var node=this.createNode();var consequent;var alternate=null;this.expectKeyword("if");this.expect("(");var test=this.parseExpression();if(!this.match(")")&&this.config.tolerant){this.tolerateUnexpectedToken(this.nextToken());consequent=this.finalize(this.createNode(),new Node.EmptyStatement)}else{this.expect(")");consequent=this.parseIfClause();if(this.matchKeyword("else")){this.nextToken();alternate=this.parseIfClause()}}return this.finalize(node,new Node.IfStatement(test,consequent,alternate))};Parser.prototype.parseDoWhileStatement=function(){var node=this.createNode();this.expectKeyword("do");var previousInIteration=this.context.inIteration;this.context.inIteration=true;var body=this.parseStatement();this.context.inIteration=previousInIteration;this.expectKeyword("while");this.expect("(");var test=this.parseExpression();if(!this.match(")")&&this.config.tolerant){this.tolerateUnexpectedToken(this.nextToken())}else{this.expect(")");if(this.match(";")){this.nextToken()}}return this.finalize(node,new Node.DoWhileStatement(body,test))};Parser.prototype.parseWhileStatement=function(){var node=this.createNode();var body;this.expectKeyword("while");this.expect("(");var test=this.parseExpression();if(!this.match(")")&&this.config.tolerant){this.tolerateUnexpectedToken(this.nextToken());body=this.finalize(this.createNode(),new Node.EmptyStatement)}else{this.expect(")");var previousInIteration=this.context.inIteration;this.context.inIteration=true;body=this.parseStatement();this.context.inIteration=previousInIteration}return this.finalize(node,new Node.WhileStatement(test,body))};Parser.prototype.parseForStatement=function(){var init=null;var test=null;var update=null;var forIn=true;var left,right;var node=this.createNode();this.expectKeyword("for");this.expect("(");if(this.match(";")){this.nextToken()}else{if(this.matchKeyword("var")){init=this.createNode();this.nextToken();var previousAllowIn=this.context.allowIn;this.context.allowIn=false;var declarations=this.parseVariableDeclarationList({inFor:true});this.context.allowIn=previousAllowIn;if(declarations.length===1&&this.matchKeyword("in")){var decl=declarations[0];if(decl.init&&(decl.id.type===syntax_1.Syntax.ArrayPattern||decl.id.type===syntax_1.Syntax.ObjectPattern||this.context.strict)){this.tolerateError(messages_1.Messages.ForInOfLoopInitializer,"for-in")}init=this.finalize(init,new Node.VariableDeclaration(declarations,"var"));this.nextToken();left=init;right=this.parseExpression();init=null}else if(declarations.length===1&&declarations[0].init===null&&this.matchContextualKeyword("of")){init=this.finalize(init,new Node.VariableDeclaration(declarations,"var"));this.nextToken();left=init;right=this.parseAssignmentExpression();init=null;forIn=false}else{init=this.finalize(init,new Node.VariableDeclaration(declarations,"var"));this.expect(";")}}else if(this.matchKeyword("const")||this.matchKeyword("let")){init=this.createNode();var kind=this.nextToken().value;if(!this.context.strict&&this.lookahead.value==="in"){init=this.finalize(init,new Node.Identifier(kind));this.nextToken();left=init;right=this.parseExpression();init=null}else{var previousAllowIn=this.context.allowIn;this.context.allowIn=false;var declarations=this.parseBindingList(kind,{inFor:true});this.context.allowIn=previousAllowIn;if(declarations.length===1&&declarations[0].init===null&&this.matchKeyword("in")){init=this.finalize(init,new Node.VariableDeclaration(declarations,kind));this.nextToken();left=init;right=this.parseExpression();init=null}else if(declarations.length===1&&declarations[0].init===null&&this.matchContextualKeyword("of")){init=this.finalize(init,new Node.VariableDeclaration(declarations,kind));this.nextToken();left=init;right=this.parseAssignmentExpression();init=null;forIn=false}else{this.consumeSemicolon();init=this.finalize(init,new Node.VariableDeclaration(declarations,kind))}}}else{var initStartToken=this.lookahead;var previousAllowIn=this.context.allowIn;this.context.allowIn=false;init=this.inheritCoverGrammar(this.parseAssignmentExpression);this.context.allowIn=previousAllowIn;if(this.matchKeyword("in")){if(!this.context.isAssignmentTarget||init.type===syntax_1.Syntax.AssignmentExpression){this.tolerateError(messages_1.Messages.InvalidLHSInForIn)}this.nextToken();this.reinterpretExpressionAsPattern(init);left=init;right=this.parseExpression();init=null}else if(this.matchContextualKeyword("of")){if(!this.context.isAssignmentTarget||init.type===syntax_1.Syntax.AssignmentExpression){this.tolerateError(messages_1.Messages.InvalidLHSInForLoop)}this.nextToken();this.reinterpretExpressionAsPattern(init);left=init;right=this.parseAssignmentExpression();init=null;forIn=false}else{if(this.match(",")){var initSeq=[init];while(this.match(",")){this.nextToken();initSeq.push(this.isolateCoverGrammar(this.parseAssignmentExpression))}init=this.finalize(this.startNode(initStartToken),new Node.SequenceExpression(initSeq))}this.expect(";")}}}if(typeof left==="undefined"){if(!this.match(";")){test=this.parseExpression()}this.expect(";");if(!this.match(")")){update=this.parseExpression()}}var body;if(!this.match(")")&&this.config.tolerant){this.tolerateUnexpectedToken(this.nextToken());body=this.finalize(this.createNode(),new Node.EmptyStatement)}else{this.expect(")");var previousInIteration=this.context.inIteration;this.context.inIteration=true;body=this.isolateCoverGrammar(this.parseStatement);this.context.inIteration=previousInIteration}return typeof left==="undefined"?this.finalize(node,new Node.ForStatement(init,test,update,body)):forIn?this.finalize(node,new Node.ForInStatement(left,right,body)):this.finalize(node,new Node.ForOfStatement(left,right,body))};Parser.prototype.parseContinueStatement=function(){var node=this.createNode();this.expectKeyword("continue");var label=null;if(this.lookahead.type===3&&!this.hasLineTerminator){var id=this.parseVariableIdentifier();label=id;var key="$"+id.name;if(!Object.prototype.hasOwnProperty.call(this.context.labelSet,key)){this.throwError(messages_1.Messages.UnknownLabel,id.name)}}this.consumeSemicolon();if(label===null&&!this.context.inIteration){this.throwError(messages_1.Messages.IllegalContinue)}return this.finalize(node,new Node.ContinueStatement(label))};Parser.prototype.parseBreakStatement=function(){var node=this.createNode();this.expectKeyword("break");var label=null;if(this.lookahead.type===3&&!this.hasLineTerminator){var id=this.parseVariableIdentifier();var key="$"+id.name;if(!Object.prototype.hasOwnProperty.call(this.context.labelSet,key)){this.throwError(messages_1.Messages.UnknownLabel,id.name)}label=id}this.consumeSemicolon();if(label===null&&!this.context.inIteration&&!this.context.inSwitch){this.throwError(messages_1.Messages.IllegalBreak)}return this.finalize(node,new Node.BreakStatement(label))};Parser.prototype.parseReturnStatement=function(){if(!this.context.inFunctionBody){this.tolerateError(messages_1.Messages.IllegalReturn)}var node=this.createNode();this.expectKeyword("return");var hasArgument=!this.match(";")&&!this.match("}")&&!this.hasLineTerminator&&this.lookahead.type!==2;var argument=hasArgument?this.parseExpression():null;this.consumeSemicolon();return this.finalize(node,new Node.ReturnStatement(argument))};Parser.prototype.parseWithStatement=function(){if(this.context.strict){this.tolerateError(messages_1.Messages.StrictModeWith)}var node=this.createNode();var body;this.expectKeyword("with");this.expect("(");var object=this.parseExpression();if(!this.match(")")&&this.config.tolerant){this.tolerateUnexpectedToken(this.nextToken());body=this.finalize(this.createNode(),new Node.EmptyStatement)}else{this.expect(")");body=this.parseStatement()}return this.finalize(node,new Node.WithStatement(object,body))};Parser.prototype.parseSwitchCase=function(){var node=this.createNode();var test;if(this.matchKeyword("default")){this.nextToken();test=null}else{this.expectKeyword("case");test=this.parseExpression()}this.expect(":");var consequent=[];while(true){if(this.match("}")||this.matchKeyword("default")||this.matchKeyword("case")){break}consequent.push(this.parseStatementListItem())}return this.finalize(node,new Node.SwitchCase(test,consequent))};Parser.prototype.parseSwitchStatement=function(){var node=this.createNode();this.expectKeyword("switch");this.expect("(");var discriminant=this.parseExpression();this.expect(")");var previousInSwitch=this.context.inSwitch;this.context.inSwitch=true;var cases=[];var defaultFound=false;this.expect("{");while(true){if(this.match("}")){break}var clause=this.parseSwitchCase();if(clause.test===null){if(defaultFound){this.throwError(messages_1.Messages.MultipleDefaultsInSwitch)}defaultFound=true}cases.push(clause)}this.expect("}");this.context.inSwitch=previousInSwitch;return this.finalize(node,new Node.SwitchStatement(discriminant,cases))};Parser.prototype.parseLabelledStatement=function(){var node=this.createNode();var expr=this.parseExpression();var statement;if(expr.type===syntax_1.Syntax.Identifier&&this.match(":")){this.nextToken();var id=expr;var key="$"+id.name;if(Object.prototype.hasOwnProperty.call(this.context.labelSet,key)){this.throwError(messages_1.Messages.Redeclaration,"Label",id.name)}this.context.labelSet[key]=true;var body=void 0;if(this.matchKeyword("class")){this.tolerateUnexpectedToken(this.lookahead);body=this.parseClassDeclaration()}else if(this.matchKeyword("function")){var token=this.lookahead;var declaration=this.parseFunctionDeclaration();if(this.context.strict){this.tolerateUnexpectedToken(token,messages_1.Messages.StrictFunction)}else if(declaration.generator){this.tolerateUnexpectedToken(token,messages_1.Messages.GeneratorInLegacyContext)}body=declaration}else{body=this.parseStatement()}delete this.context.labelSet[key];statement=new Node.LabeledStatement(id,body)}else{this.consumeSemicolon();statement=new Node.ExpressionStatement(expr)}return this.finalize(node,statement)};Parser.prototype.parseThrowStatement=function(){var node=this.createNode();this.expectKeyword("throw");if(this.hasLineTerminator){this.throwError(messages_1.Messages.NewlineAfterThrow)}var argument=this.parseExpression();this.consumeSemicolon();return this.finalize(node,new Node.ThrowStatement(argument))};Parser.prototype.parseCatchClause=function(){var node=this.createNode();this.expectKeyword("catch");this.expect("(");if(this.match(")")){this.throwUnexpectedToken(this.lookahead)}var params=[];var param=this.parsePattern(params);var paramMap={};for(var i=0;i0){this.tolerateError(messages_1.Messages.BadGetterArity)}var method=this.parsePropertyMethod(formalParameters);this.context.allowYield=previousAllowYield;return this.finalize(node,new Node.FunctionExpression(null,formalParameters.params,method,isGenerator))};Parser.prototype.parseSetterMethod=function(){var node=this.createNode();var isGenerator=false;var previousAllowYield=this.context.allowYield;this.context.allowYield=false;var formalParameters=this.parseFormalParameters();if(formalParameters.params.length!==1){this.tolerateError(messages_1.Messages.BadSetterArity)}else if(formalParameters.params[0]instanceof Node.RestElement){this.tolerateError(messages_1.Messages.BadSetterRestParameter)}var method=this.parsePropertyMethod(formalParameters);this.context.allowYield=previousAllowYield;return this.finalize(node,new Node.FunctionExpression(null,formalParameters.params,method,isGenerator))};Parser.prototype.parseGeneratorMethod=function(){var node=this.createNode();var isGenerator=true;var previousAllowYield=this.context.allowYield;this.context.allowYield=true;var params=this.parseFormalParameters();this.context.allowYield=false;var method=this.parsePropertyMethod(params);this.context.allowYield=previousAllowYield;return this.finalize(node,new Node.FunctionExpression(null,params.params,method,isGenerator))};Parser.prototype.isStartOfExpression=function(){var start=true;var value=this.lookahead.value;switch(this.lookahead.type){case 7:start=value==="["||value==="("||value==="{"||value==="+"||value==="-"||value==="!"||value==="~"||value==="++"||value==="--"||value==="/"||value==="/=";break;case 4:start=value==="class"||value==="delete"||value==="function"||value==="let"||value==="new"||value==="super"||value==="this"||value==="typeof"||value==="void"||value==="yield";break;default:break}return start};Parser.prototype.parseYieldExpression=function(){var node=this.createNode();this.expectKeyword("yield");var argument=null;var delegate=false;if(!this.hasLineTerminator){var previousAllowYield=this.context.allowYield;this.context.allowYield=false;delegate=this.match("*");if(delegate){this.nextToken();argument=this.parseAssignmentExpression()}else if(this.isStartOfExpression()){argument=this.parseAssignmentExpression()}this.context.allowYield=previousAllowYield}return this.finalize(node,new Node.YieldExpression(argument,delegate))};Parser.prototype.parseClassElement=function(hasConstructor){var token=this.lookahead;var node=this.createNode();var kind="";var key=null;var value=null;var computed=false;var method=false;var isStatic=false;var isAsync=false;if(this.match("*")){this.nextToken()}else{computed=this.match("[");key=this.parseObjectPropertyKey();var id=key;if(id.name==="static"&&(this.qualifiedPropertyName(this.lookahead)||this.match("*"))){token=this.lookahead;isStatic=true;computed=this.match("[");if(this.match("*")){this.nextToken()}else{key=this.parseObjectPropertyKey()}}if(token.type===3&&!this.hasLineTerminator&&token.value==="async"){var punctuator=this.lookahead.value;if(punctuator!==":"&&punctuator!=="("&&punctuator!=="*"){isAsync=true;token=this.lookahead;key=this.parseObjectPropertyKey();if(token.type===3){if(token.value==="get"||token.value==="set"){this.tolerateUnexpectedToken(token)}else if(token.value==="constructor"){this.tolerateUnexpectedToken(token,messages_1.Messages.ConstructorIsAsync)}}}}}var lookaheadPropertyKey=this.qualifiedPropertyName(this.lookahead);if(token.type===3){if(token.value==="get"&&lookaheadPropertyKey){kind="get";computed=this.match("[");key=this.parseObjectPropertyKey();this.context.allowYield=false;value=this.parseGetterMethod()}else if(token.value==="set"&&lookaheadPropertyKey){kind="set";computed=this.match("[");key=this.parseObjectPropertyKey();value=this.parseSetterMethod()}}else if(token.type===7&&token.value==="*"&&lookaheadPropertyKey){kind="init";computed=this.match("[");key=this.parseObjectPropertyKey();value=this.parseGeneratorMethod();method=true}if(!kind&&key&&this.match("(")){kind="init";value=isAsync?this.parsePropertyMethodAsyncFunction():this.parsePropertyMethodFunction();method=true}if(!kind){this.throwUnexpectedToken(this.lookahead)}if(kind==="init"){kind="method"}if(!computed){if(isStatic&&this.isPropertyKey(key,"prototype")){this.throwUnexpectedToken(token,messages_1.Messages.StaticPrototype)}if(!isStatic&&this.isPropertyKey(key,"constructor")){if(kind!=="method"||!method||value&&value.generator){this.throwUnexpectedToken(token,messages_1.Messages.ConstructorSpecialMethod)}if(hasConstructor.value){this.throwUnexpectedToken(token,messages_1.Messages.DuplicateConstructor)}else{hasConstructor.value=true}kind="constructor"}}return this.finalize(node,new Node.MethodDefinition(key,computed,value,kind,isStatic))};Parser.prototype.parseClassElementList=function(){var body=[];var hasConstructor={value:false};this.expect("{");while(!this.match("}")){if(this.match(";")){this.nextToken()}else{body.push(this.parseClassElement(hasConstructor))}}this.expect("}");return body};Parser.prototype.parseClassBody=function(){var node=this.createNode();var elementList=this.parseClassElementList();return this.finalize(node,new Node.ClassBody(elementList))};Parser.prototype.parseClassDeclaration=function(identifierIsOptional){var node=this.createNode();var previousStrict=this.context.strict;this.context.strict=true;this.expectKeyword("class");var id=identifierIsOptional&&this.lookahead.type!==3?null:this.parseVariableIdentifier();var superClass=null;if(this.matchKeyword("extends")){this.nextToken();superClass=this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall)}var classBody=this.parseClassBody();this.context.strict=previousStrict;return this.finalize(node,new Node.ClassDeclaration(id,superClass,classBody))};Parser.prototype.parseClassExpression=function(){var node=this.createNode();var previousStrict=this.context.strict;this.context.strict=true;this.expectKeyword("class");var id=this.lookahead.type===3?this.parseVariableIdentifier():null;var superClass=null;if(this.matchKeyword("extends")){this.nextToken();superClass=this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall)}var classBody=this.parseClassBody();this.context.strict=previousStrict;return this.finalize(node,new Node.ClassExpression(id,superClass,classBody))};Parser.prototype.parseModule=function(){this.context.strict=true;this.context.isModule=true;var node=this.createNode();var body=this.parseDirectivePrologues();while(this.lookahead.type!==2){body.push(this.parseStatementListItem())}return this.finalize(node,new Node.Module(body))};Parser.prototype.parseScript=function(){var node=this.createNode();var body=this.parseDirectivePrologues();while(this.lookahead.type!==2){body.push(this.parseStatementListItem())}return this.finalize(node,new Node.Script(body))};Parser.prototype.parseModuleSpecifier=function(){var node=this.createNode();if(this.lookahead.type!==8){this.throwError(messages_1.Messages.InvalidModuleSpecifier)}var token=this.nextToken();var raw=this.getTokenRaw(token);return this.finalize(node,new Node.Literal(token.value,raw))};Parser.prototype.parseImportSpecifier=function(){var node=this.createNode();var imported;var local;if(this.lookahead.type===3){imported=this.parseVariableIdentifier();local=imported;if(this.matchContextualKeyword("as")){this.nextToken();local=this.parseVariableIdentifier()}}else{imported=this.parseIdentifierName();local=imported;if(this.matchContextualKeyword("as")){this.nextToken();local=this.parseVariableIdentifier()}else{this.throwUnexpectedToken(this.nextToken())}}return this.finalize(node,new Node.ImportSpecifier(local,imported))};Parser.prototype.parseNamedImports=function(){this.expect("{");var specifiers=[];while(!this.match("}")){specifiers.push(this.parseImportSpecifier());if(!this.match("}")){this.expect(",")}}this.expect("}");return specifiers};Parser.prototype.parseImportDefaultSpecifier=function(){var node=this.createNode();var local=this.parseIdentifierName();return this.finalize(node,new Node.ImportDefaultSpecifier(local))};Parser.prototype.parseImportNamespaceSpecifier=function(){var node=this.createNode();this.expect("*");if(!this.matchContextualKeyword("as")){this.throwError(messages_1.Messages.NoAsAfterImportNamespace)}this.nextToken();var local=this.parseIdentifierName();return this.finalize(node,new Node.ImportNamespaceSpecifier(local))};Parser.prototype.parseImportDeclaration=function(){if(this.context.inFunctionBody){this.throwError(messages_1.Messages.IllegalImportDeclaration)}var node=this.createNode();this.expectKeyword("import");var src;var specifiers=[];if(this.lookahead.type===8){src=this.parseModuleSpecifier()}else{if(this.match("{")){specifiers=specifiers.concat(this.parseNamedImports())}else if(this.match("*")){specifiers.push(this.parseImportNamespaceSpecifier())}else if(this.isIdentifierName(this.lookahead)&&!this.matchKeyword("default")){specifiers.push(this.parseImportDefaultSpecifier());if(this.match(",")){this.nextToken();if(this.match("*")){specifiers.push(this.parseImportNamespaceSpecifier())}else if(this.match("{")){specifiers=specifiers.concat(this.parseNamedImports())}else{this.throwUnexpectedToken(this.lookahead)}}}else{this.throwUnexpectedToken(this.nextToken())}if(!this.matchContextualKeyword("from")){var message=this.lookahead.value?messages_1.Messages.UnexpectedToken:messages_1.Messages.MissingFromClause;this.throwError(message,this.lookahead.value)}this.nextToken();src=this.parseModuleSpecifier()}this.consumeSemicolon();return this.finalize(node,new Node.ImportDeclaration(specifiers,src))};Parser.prototype.parseExportSpecifier=function(){var node=this.createNode();var local=this.parseIdentifierName();var exported=local;if(this.matchContextualKeyword("as")){this.nextToken();exported=this.parseIdentifierName()}return this.finalize(node,new Node.ExportSpecifier(local,exported))};Parser.prototype.parseExportDeclaration=function(){if(this.context.inFunctionBody){this.throwError(messages_1.Messages.IllegalExportDeclaration)}var node=this.createNode();this.expectKeyword("export");var exportDeclaration;if(this.matchKeyword("default")){this.nextToken();if(this.matchKeyword("function")){var declaration=this.parseFunctionDeclaration(true);exportDeclaration=this.finalize(node,new Node.ExportDefaultDeclaration(declaration))}else if(this.matchKeyword("class")){var declaration=this.parseClassDeclaration(true);exportDeclaration=this.finalize(node,new Node.ExportDefaultDeclaration(declaration))}else if(this.matchContextualKeyword("async")){var declaration=this.matchAsyncFunction()?this.parseFunctionDeclaration(true):this.parseAssignmentExpression();exportDeclaration=this.finalize(node,new Node.ExportDefaultDeclaration(declaration))}else{if(this.matchContextualKeyword("from")){this.throwError(messages_1.Messages.UnexpectedToken,this.lookahead.value)}var declaration=this.match("{")?this.parseObjectInitializer():this.match("[")?this.parseArrayInitializer():this.parseAssignmentExpression();this.consumeSemicolon();exportDeclaration=this.finalize(node,new Node.ExportDefaultDeclaration(declaration))}}else if(this.match("*")){this.nextToken();if(!this.matchContextualKeyword("from")){var message=this.lookahead.value?messages_1.Messages.UnexpectedToken:messages_1.Messages.MissingFromClause;this.throwError(message,this.lookahead.value)}this.nextToken();var src=this.parseModuleSpecifier();this.consumeSemicolon();exportDeclaration=this.finalize(node,new Node.ExportAllDeclaration(src))}else if(this.lookahead.type===4){var declaration=void 0;switch(this.lookahead.value){case"let":case"const":declaration=this.parseLexicalDeclaration({inFor:false});break;case"var":case"class":case"function":declaration=this.parseStatementListItem();break;default:this.throwUnexpectedToken(this.lookahead)}exportDeclaration=this.finalize(node,new Node.ExportNamedDeclaration(declaration,[],null))}else if(this.matchAsyncFunction()){var declaration=this.parseFunctionDeclaration();exportDeclaration=this.finalize(node,new Node.ExportNamedDeclaration(declaration,[],null))}else{var specifiers=[];var source=null;var isExportFromIdentifier=false;this.expect("{");while(!this.match("}")){isExportFromIdentifier=isExportFromIdentifier||this.matchKeyword("default");specifiers.push(this.parseExportSpecifier());if(!this.match("}")){this.expect(",")}}this.expect("}");if(this.matchContextualKeyword("from")){this.nextToken();source=this.parseModuleSpecifier();this.consumeSemicolon()}else if(isExportFromIdentifier){var message=this.lookahead.value?messages_1.Messages.UnexpectedToken:messages_1.Messages.MissingFromClause;this.throwError(message,this.lookahead.value)}else{this.consumeSemicolon()}exportDeclaration=this.finalize(node,new Node.ExportNamedDeclaration(null,specifiers,source))}return exportDeclaration};return Parser}();exports.Parser=Parser},function(module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});function assert(condition,message){if(!condition){throw new Error("ASSERT: "+message)}}exports.assert=assert},function(module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var ErrorHandler=function(){function ErrorHandler(){this.errors=[];this.tolerant=false}ErrorHandler.prototype.recordError=function(error){this.errors.push(error)};ErrorHandler.prototype.tolerate=function(error){if(this.tolerant){this.recordError(error)}else{throw error}};ErrorHandler.prototype.constructError=function(msg,column){var error=new Error(msg);try{throw error}catch(base){if(Object.create&&Object.defineProperty){error=Object.create(base);Object.defineProperty(error,"column",{value:column})}}return error};ErrorHandler.prototype.createError=function(index,line,col,description){var msg="Line "+line+": "+description;var error=this.constructError(msg,col);error.index=index;error.lineNumber=line;error.description=description;return error};ErrorHandler.prototype.throwError=function(index,line,col,description){throw this.createError(index,line,col,description)};ErrorHandler.prototype.tolerateError=function(index,line,col,description){var error=this.createError(index,line,col,description);if(this.tolerant){this.recordError(error)}else{throw error}};return ErrorHandler}();exports.ErrorHandler=ErrorHandler},function(module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.Messages={BadGetterArity:"Getter must not have any formal parameters",BadSetterArity:"Setter must have exactly one formal parameter",BadSetterRestParameter:"Setter function argument must not be a rest parameter",ConstructorIsAsync:"Class constructor may not be an async method",ConstructorSpecialMethod:"Class constructor may not be an accessor",DeclarationMissingInitializer:"Missing initializer in %0 declaration",DefaultRestParameter:"Unexpected token =",DuplicateBinding:"Duplicate binding %0",DuplicateConstructor:"A class may only have one constructor",DuplicateProtoProperty:"Duplicate __proto__ fields are not allowed in object literals",ForInOfLoopInitializer:"%0 loop variable declaration may not have an initializer",GeneratorInLegacyContext:"Generator declarations are not allowed in legacy contexts",IllegalBreak:"Illegal break statement",IllegalContinue:"Illegal continue statement",IllegalExportDeclaration:"Unexpected token",IllegalImportDeclaration:"Unexpected token",IllegalLanguageModeDirective:"Illegal 'use strict' directive in function with non-simple parameter list",IllegalReturn:"Illegal return statement",InvalidEscapedReservedWord:"Keyword must not contain escaped characters",InvalidHexEscapeSequence:"Invalid hexadecimal escape sequence",InvalidLHSInAssignment:"Invalid left-hand side in assignment",InvalidLHSInForIn:"Invalid left-hand side in for-in",InvalidLHSInForLoop:"Invalid left-hand side in for-loop",InvalidModuleSpecifier:"Unexpected token",InvalidRegExp:"Invalid regular expression",LetInLexicalBinding:"let is disallowed as a lexically bound name",MissingFromClause:"Unexpected token",MultipleDefaultsInSwitch:"More than one default clause in switch statement",NewlineAfterThrow:"Illegal newline after throw",NoAsAfterImportNamespace:"Unexpected token",NoCatchOrFinally:"Missing catch or finally after try",ParameterAfterRestParameter:"Rest parameter must be last formal parameter",Redeclaration:"%0 '%1' has already been declared",StaticPrototype:"Classes may not have static property named prototype",StrictCatchVariable:"Catch variable may not be eval or arguments in strict mode",StrictDelete:"Delete of an unqualified identifier in strict mode.",StrictFunction:"In strict mode code, functions can only be declared at top level or inside a block",StrictFunctionName:"Function name may not be eval or arguments in strict mode",StrictLHSAssignment:"Assignment to eval or arguments is not allowed in strict mode",StrictLHSPostfix:"Postfix increment/decrement may not have eval or arguments operand in strict mode",StrictLHSPrefix:"Prefix increment/decrement may not have eval or arguments operand in strict mode",StrictModeWith:"Strict mode code may not include a with statement",StrictOctalLiteral:"Octal literals are not allowed in strict mode.",StrictParamDupe:"Strict mode function may not have duplicate parameter names",StrictParamName:"Parameter name eval or arguments is not allowed in strict mode",StrictReservedWord:"Use of future reserved word in strict mode",StrictVarName:"Variable name may not be eval or arguments in strict mode",TemplateOctalLiteral:"Octal literals are not allowed in template strings.",UnexpectedEOS:"Unexpected end of input",UnexpectedIdentifier:"Unexpected identifier",UnexpectedNumber:"Unexpected number",UnexpectedReserved:"Unexpected reserved word",UnexpectedString:"Unexpected string",UnexpectedTemplate:"Unexpected quasi %0",UnexpectedToken:"Unexpected token %0",UnexpectedTokenIllegal:"Unexpected token ILLEGAL",UnknownLabel:"Undefined label '%0'",UnterminatedRegExp:"Invalid regular expression: missing /"}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var assert_1=__webpack_require__(9);var character_1=__webpack_require__(4);var messages_1=__webpack_require__(11);function hexValue(ch){return"0123456789abcdef".indexOf(ch.toLowerCase())}function octalValue(ch){return"01234567".indexOf(ch)}var Scanner=function(){function Scanner(code,handler){this.source=code;this.errorHandler=handler;this.trackComment=false;this.length=code.length;this.index=0;this.lineNumber=code.length>0?1:0;this.lineStart=0;this.curlyStack=[]}Scanner.prototype.saveState=function(){return{index:this.index,lineNumber:this.lineNumber,lineStart:this.lineStart}};Scanner.prototype.restoreState=function(state){this.index=state.index;this.lineNumber=state.lineNumber;this.lineStart=state.lineStart};Scanner.prototype.eof=function(){return this.index>=this.length};Scanner.prototype.throwUnexpectedToken=function(message){if(message===void 0){message=messages_1.Messages.UnexpectedTokenIllegal}return this.errorHandler.throwError(this.index,this.lineNumber,this.index-this.lineStart+1,message)};Scanner.prototype.tolerateUnexpectedToken=function(message){if(message===void 0){message=messages_1.Messages.UnexpectedTokenIllegal}this.errorHandler.tolerateError(this.index,this.lineNumber,this.index-this.lineStart+1,message)};Scanner.prototype.skipSingleLineComment=function(offset){var comments=[];var start,loc;if(this.trackComment){comments=[];start=this.index-offset;loc={start:{line:this.lineNumber,column:this.index-this.lineStart-offset},end:{}}}while(!this.eof()){var ch=this.source.charCodeAt(this.index);++this.index;if(character_1.Character.isLineTerminator(ch)){if(this.trackComment){loc.end={line:this.lineNumber,column:this.index-this.lineStart-1};var entry={multiLine:false,slice:[start+offset,this.index-1],range:[start,this.index-1],loc:loc};comments.push(entry)}if(ch===13&&this.source.charCodeAt(this.index)===10){++this.index}++this.lineNumber;this.lineStart=this.index;return comments}}if(this.trackComment){loc.end={line:this.lineNumber,column:this.index-this.lineStart};var entry={multiLine:false,slice:[start+offset,this.index],range:[start,this.index],loc:loc};comments.push(entry)}return comments};Scanner.prototype.skipMultiLineComment=function(){var comments=[];var start,loc;if(this.trackComment){comments=[];start=this.index-2;loc={start:{line:this.lineNumber,column:this.index-this.lineStart-2},end:{}}}while(!this.eof()){var ch=this.source.charCodeAt(this.index);if(character_1.Character.isLineTerminator(ch)){if(ch===13&&this.source.charCodeAt(this.index+1)===10){++this.index}++this.lineNumber;++this.index;this.lineStart=this.index}else if(ch===42){if(this.source.charCodeAt(this.index+1)===47){this.index+=2;if(this.trackComment){loc.end={line:this.lineNumber,column:this.index-this.lineStart};var entry={multiLine:true,slice:[start+2,this.index-2],range:[start,this.index],loc:loc};comments.push(entry)}return comments}++this.index}else{++this.index}}if(this.trackComment){loc.end={line:this.lineNumber,column:this.index-this.lineStart};var entry={multiLine:true,slice:[start+2,this.index],range:[start,this.index],loc:loc};comments.push(entry)}this.tolerateUnexpectedToken();return comments};Scanner.prototype.scanComments=function(){var comments;if(this.trackComment){comments=[]}var start=this.index===0;while(!this.eof()){var ch=this.source.charCodeAt(this.index);if(character_1.Character.isWhiteSpace(ch)){++this.index}else if(character_1.Character.isLineTerminator(ch)){++this.index;if(ch===13&&this.source.charCodeAt(this.index)===10){++this.index}++this.lineNumber;this.lineStart=this.index;start=true}else if(ch===47){ch=this.source.charCodeAt(this.index+1);if(ch===47){this.index+=2;var comment=this.skipSingleLineComment(2);if(this.trackComment){comments=comments.concat(comment)}start=true}else if(ch===42){this.index+=2;var comment=this.skipMultiLineComment();if(this.trackComment){comments=comments.concat(comment)}}else{break}}else if(start&&ch===45){if(this.source.charCodeAt(this.index+1)===45&&this.source.charCodeAt(this.index+2)===62){this.index+=3;var comment=this.skipSingleLineComment(3);if(this.trackComment){comments=comments.concat(comment)}}else{break}}else if(ch===60){if(this.source.slice(this.index+1,this.index+4)==="!--"){this.index+=4;var comment=this.skipSingleLineComment(4);if(this.trackComment){comments=comments.concat(comment)}}else{break}}else{break}}return comments};Scanner.prototype.isFutureReservedWord=function(id){switch(id){case"enum":case"export":case"import":case"super":return true;default:return false}};Scanner.prototype.isStrictModeReservedWord=function(id){switch(id){case"implements":case"interface":case"package":case"private":case"protected":case"public":case"static":case"yield":case"let":return true;default:return false}};Scanner.prototype.isRestrictedWord=function(id){return id==="eval"||id==="arguments"};Scanner.prototype.isKeyword=function(id){switch(id.length){case 2:return id==="if"||id==="in"||id==="do";case 3:return id==="var"||id==="for"||id==="new"||id==="try"||id==="let";case 4:return id==="this"||id==="else"||id==="case"||id==="void"||id==="with"||id==="enum";case 5:return id==="while"||id==="break"||id==="catch"||id==="throw"||id==="const"||id==="yield"||id==="class"||id==="super";case 6:return id==="return"||id==="typeof"||id==="delete"||id==="switch"||id==="export"||id==="import";case 7:return id==="default"||id==="finally"||id==="extends";case 8:return id==="function"||id==="continue"||id==="debugger";case 10:return id==="instanceof";default:return false}};Scanner.prototype.codePointAt=function(i){var cp=this.source.charCodeAt(i);if(cp>=55296&&cp<=56319){var second=this.source.charCodeAt(i+1);if(second>=56320&&second<=57343){var first=cp;cp=(first-55296)*1024+second-56320+65536}}return cp};Scanner.prototype.scanHexEscape=function(prefix){var len=prefix==="u"?4:2;var code=0;for(var i=0;i1114111||ch!=="}"){this.throwUnexpectedToken()}return character_1.Character.fromCodePoint(code)};Scanner.prototype.getIdentifier=function(){var start=this.index++;while(!this.eof()){var ch=this.source.charCodeAt(this.index);if(ch===92){this.index=start;return this.getComplexIdentifier()}else if(ch>=55296&&ch<57343){this.index=start;return this.getComplexIdentifier()}if(character_1.Character.isIdentifierPart(ch)){++this.index}else{break}}return this.source.slice(start,this.index)};Scanner.prototype.getComplexIdentifier=function(){var cp=this.codePointAt(this.index);var id=character_1.Character.fromCodePoint(cp);this.index+=id.length;var ch;if(cp===92){if(this.source.charCodeAt(this.index)!==117){this.throwUnexpectedToken()}++this.index;if(this.source[this.index]==="{"){++this.index;ch=this.scanUnicodeCodePointEscape()}else{ch=this.scanHexEscape("u");if(ch===null||ch==="\\"||!character_1.Character.isIdentifierStart(ch.charCodeAt(0))){this.throwUnexpectedToken()}}id=ch}while(!this.eof()){cp=this.codePointAt(this.index);if(!character_1.Character.isIdentifierPart(cp)){break}ch=character_1.Character.fromCodePoint(cp);id+=ch;this.index+=ch.length;if(cp===92){id=id.substr(0,id.length-1);if(this.source.charCodeAt(this.index)!==117){this.throwUnexpectedToken()}++this.index;if(this.source[this.index]==="{"){++this.index;ch=this.scanUnicodeCodePointEscape()}else{ch=this.scanHexEscape("u");if(ch===null||ch==="\\"||!character_1.Character.isIdentifierPart(ch.charCodeAt(0))){this.throwUnexpectedToken()}}id+=ch}}return id};Scanner.prototype.octalToDecimal=function(ch){var octal=ch!=="0";var code=octalValue(ch);if(!this.eof()&&character_1.Character.isOctalDigit(this.source.charCodeAt(this.index))){octal=true;code=code*8+octalValue(this.source[this.index++]);if("0123".indexOf(ch)>=0&&!this.eof()&&character_1.Character.isOctalDigit(this.source.charCodeAt(this.index))){code=code*8+octalValue(this.source[this.index++])}}return{code:code,octal:octal}};Scanner.prototype.scanIdentifier=function(){var type;var start=this.index;var id=this.source.charCodeAt(start)===92?this.getComplexIdentifier():this.getIdentifier();if(id.length===1){type=3}else if(this.isKeyword(id)){type=4}else if(id==="null"){type=5}else if(id==="true"||id==="false"){type=1}else{type=3}if(type!==3&&start+id.length!==this.index){var restore=this.index;this.index=start;this.tolerateUnexpectedToken(messages_1.Messages.InvalidEscapedReservedWord);this.index=restore}return{type:type,value:id,lineNumber:this.lineNumber,lineStart:this.lineStart,start:start,end:this.index}};Scanner.prototype.scanPunctuator=function(){var start=this.index;var str=this.source[this.index];switch(str){case"(":case"{":if(str==="{"){this.curlyStack.push("{")}++this.index;break;case".":++this.index;if(this.source[this.index]==="."&&this.source[this.index+1]==="."){this.index+=2;str="..."}break;case"}":++this.index;this.curlyStack.pop();break;case")":case";":case",":case"[":case"]":case":":case"?":case"~":++this.index;break;default:str=this.source.substr(this.index,4);if(str===">>>="){this.index+=4}else{str=str.substr(0,3);if(str==="==="||str==="!=="||str===">>>"||str==="<<="||str===">>="||str==="**="){this.index+=3}else{str=str.substr(0,2);if(str==="&&"||str==="||"||str==="=="||str==="!="||str==="+="||str==="-="||str==="*="||str==="/="||str==="++"||str==="--"||str==="<<"||str===">>"||str==="&="||str==="|="||str==="^="||str==="%="||str==="<="||str===">="||str==="=>"||str==="**"){this.index+=2}else{str=this.source[this.index];if("<>=!+-*%&|^/".indexOf(str)>=0){++this.index}}}}}if(this.index===start){this.throwUnexpectedToken()}return{type:7,value:str,lineNumber:this.lineNumber,lineStart:this.lineStart,start:start,end:this.index}};Scanner.prototype.scanHexLiteral=function(start){var num="";while(!this.eof()){if(!character_1.Character.isHexDigit(this.source.charCodeAt(this.index))){break}num+=this.source[this.index++]}if(num.length===0){this.throwUnexpectedToken()}if(character_1.Character.isIdentifierStart(this.source.charCodeAt(this.index))){this.throwUnexpectedToken()}return{type:6,value:parseInt("0x"+num,16),lineNumber:this.lineNumber,lineStart:this.lineStart,start:start,end:this.index}};Scanner.prototype.scanBinaryLiteral=function(start){var num="";var ch;while(!this.eof()){ch=this.source[this.index];if(ch!=="0"&&ch!=="1"){break}num+=this.source[this.index++]}if(num.length===0){this.throwUnexpectedToken()}if(!this.eof()){ch=this.source.charCodeAt(this.index);if(character_1.Character.isIdentifierStart(ch)||character_1.Character.isDecimalDigit(ch)){this.throwUnexpectedToken()}}return{type:6,value:parseInt(num,2),lineNumber:this.lineNumber,lineStart:this.lineStart,start:start,end:this.index}};Scanner.prototype.scanOctalLiteral=function(prefix,start){var num="";var octal=false;if(character_1.Character.isOctalDigit(prefix.charCodeAt(0))){octal=true;num="0"+this.source[this.index++]}else{++this.index}while(!this.eof()){if(!character_1.Character.isOctalDigit(this.source.charCodeAt(this.index))){break}num+=this.source[this.index++]}if(!octal&&num.length===0){this.throwUnexpectedToken()}if(character_1.Character.isIdentifierStart(this.source.charCodeAt(this.index))||character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))){this.throwUnexpectedToken()}return{type:6,value:parseInt(num,8),octal:octal,lineNumber:this.lineNumber,lineStart:this.lineStart,start:start,end:this.index}};Scanner.prototype.isImplicitOctalLiteral=function(){for(var i=this.index+1;i=0){tmp=tmp.replace(/\\u\{([0-9a-fA-F]+)\}|\\u([a-fA-F0-9]{4})/g,function($0,$1,$2){var codePoint=parseInt($1||$2,16);if(codePoint>1114111){self.throwUnexpectedToken(messages_1.Messages.InvalidRegExp)}if(codePoint<=65535){return String.fromCharCode(codePoint)}return astralSubstitute}).replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,astralSubstitute)}try{RegExp(tmp)}catch(e){this.throwUnexpectedToken(messages_1.Messages.InvalidRegExp)}try{return new RegExp(pattern,flags)}catch(exception){return null}};Scanner.prototype.scanRegExpBody=function(){var ch=this.source[this.index];assert_1.assert(ch==="/","Regular expression literal must start with a slash");var str=this.source[this.index++];var classMarker=false;var terminated=false;while(!this.eof()){ch=this.source[this.index++];str+=ch;if(ch==="\\"){ch=this.source[this.index++];if(character_1.Character.isLineTerminator(ch.charCodeAt(0))){this.throwUnexpectedToken(messages_1.Messages.UnterminatedRegExp)}str+=ch}else if(character_1.Character.isLineTerminator(ch.charCodeAt(0))){this.throwUnexpectedToken(messages_1.Messages.UnterminatedRegExp)}else if(classMarker){if(ch==="]"){classMarker=false}}else{if(ch==="/"){terminated=true;break}else if(ch==="["){classMarker=true}}}if(!terminated){this.throwUnexpectedToken(messages_1.Messages.UnterminatedRegExp)}return str.substr(1,str.length-2)};Scanner.prototype.scanRegExpFlags=function(){var str="";var flags="";while(!this.eof()){var ch=this.source[this.index];if(!character_1.Character.isIdentifierPart(ch.charCodeAt(0))){break}++this.index;if(ch==="\\"&&!this.eof()){ch=this.source[this.index];if(ch==="u"){++this.index;var restore=this.index;var char=this.scanHexEscape("u");if(char!==null){flags+=char;for(str+="\\u";restore=55296&&cp<57343){if(character_1.Character.isIdentifierStart(this.codePointAt(this.index))){return this.scanIdentifier()}}return this.scanPunctuator()};return Scanner}();exports.Scanner=Scanner},function(module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.TokenName={};exports.TokenName[1]="Boolean";exports.TokenName[2]="";exports.TokenName[3]="Identifier";exports.TokenName[4]="Keyword";exports.TokenName[5]="Null";exports.TokenName[6]="Numeric";exports.TokenName[7]="Punctuator";exports.TokenName[8]="String";exports.TokenName[9]="RegularExpression";exports.TokenName[10]="Template"},function(module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.XHTMLEntities={quot:'"',amp:"&",apos:"'",gt:">",nbsp:" ",iexcl:"¡",cent:"¢",pound:"£",curren:"¤",yen:"¥",brvbar:"¦",sect:"§",uml:"¨",copy:"©",ordf:"ª",laquo:"«",not:"¬",shy:"­",reg:"®",macr:"¯",deg:"°",plusmn:"±",sup2:"²",sup3:"³",acute:"´",micro:"µ",para:"¶",middot:"·",cedil:"¸",sup1:"¹",ordm:"º",raquo:"»",frac14:"¼",frac12:"½",frac34:"¾",iquest:"¿",Agrave:"À",Aacute:"Á",Acirc:"Â",Atilde:"Ã",Auml:"Ä",Aring:"Å",AElig:"Æ",Ccedil:"Ç",Egrave:"È",Eacute:"É",Ecirc:"Ê",Euml:"Ë",Igrave:"Ì",Iacute:"Í",Icirc:"Î",Iuml:"Ï",ETH:"Ð",Ntilde:"Ñ",Ograve:"Ò",Oacute:"Ó",Ocirc:"Ô",Otilde:"Õ",Ouml:"Ö",times:"×",Oslash:"Ø",Ugrave:"Ù",Uacute:"Ú",Ucirc:"Û",Uuml:"Ü",Yacute:"Ý",THORN:"Þ",szlig:"ß",agrave:"à",aacute:"á",acirc:"â",atilde:"ã",auml:"ä",aring:"å",aelig:"æ",ccedil:"ç",egrave:"è",eacute:"é",ecirc:"ê",euml:"ë",igrave:"ì",iacute:"í",icirc:"î",iuml:"ï",eth:"ð",ntilde:"ñ",ograve:"ò",oacute:"ó",ocirc:"ô",otilde:"õ",ouml:"ö",divide:"÷",oslash:"ø",ugrave:"ù",uacute:"ú",ucirc:"û",uuml:"ü",yacute:"ý",thorn:"þ",yuml:"ÿ",OElig:"Œ",oelig:"œ",Scaron:"Š",scaron:"š",Yuml:"Ÿ",fnof:"ƒ",circ:"ˆ",tilde:"˜",Alpha:"Α",Beta:"Β",Gamma:"Γ",Delta:"Δ",Epsilon:"Ε",Zeta:"Ζ",Eta:"Η",Theta:"Θ",Iota:"Ι",Kappa:"Κ",Lambda:"Λ",Mu:"Μ",Nu:"Ν",Xi:"Ξ",Omicron:"Ο",Pi:"Π",Rho:"Ρ",Sigma:"Σ",Tau:"Τ",Upsilon:"Υ",Phi:"Φ",Chi:"Χ",Psi:"Ψ",Omega:"Ω",alpha:"α",beta:"β",gamma:"γ",delta:"δ",epsilon:"ε",zeta:"ζ",eta:"η",theta:"θ",iota:"ι",kappa:"κ",lambda:"λ",mu:"μ",nu:"ν",xi:"ξ",omicron:"ο",pi:"π",rho:"ρ",sigmaf:"ς",sigma:"σ",tau:"τ",upsilon:"υ",phi:"φ",chi:"χ",psi:"ψ",omega:"ω",thetasym:"ϑ",upsih:"ϒ",piv:"ϖ",ensp:" ",emsp:" ",thinsp:" ",zwnj:"‌",zwj:"‍",lrm:"‎",rlm:"‏",ndash:"–",mdash:"—",lsquo:"‘",rsquo:"’",sbquo:"‚",ldquo:"“",rdquo:"”",bdquo:"„",dagger:"†",Dagger:"‡",bull:"•",hellip:"…",permil:"‰",prime:"′",Prime:"″",lsaquo:"‹",rsaquo:"›",oline:"‾",frasl:"⁄",euro:"€",image:"ℑ",weierp:"℘",real:"ℜ",trade:"™",alefsym:"ℵ",larr:"←",uarr:"↑",rarr:"→",darr:"↓",harr:"↔",crarr:"↵",lArr:"⇐",uArr:"⇑",rArr:"⇒",dArr:"⇓",hArr:"⇔",forall:"∀",part:"∂",exist:"∃",empty:"∅",nabla:"∇",isin:"∈",notin:"∉",ni:"∋",prod:"∏",sum:"∑",minus:"−",lowast:"∗",radic:"√",prop:"∝",infin:"∞",ang:"∠",and:"∧",or:"∨",cap:"∩",cup:"∪",int:"∫",there4:"∴",sim:"∼",cong:"≅",asymp:"≈",ne:"≠",equiv:"≡",le:"≤",ge:"≥",sub:"⊂",sup:"⊃",nsub:"⊄",sube:"⊆",supe:"⊇",oplus:"⊕",otimes:"⊗",perp:"⊥",sdot:"⋅",lceil:"⌈",rceil:"⌉",lfloor:"⌊",rfloor:"⌋",loz:"◊",spades:"♠",clubs:"♣",hearts:"♥",diams:"♦",lang:"⟨",rang:"⟩"}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var error_handler_1=__webpack_require__(10);var scanner_1=__webpack_require__(12);var token_1=__webpack_require__(13);var Reader=function(){function Reader(){this.values=[];this.curly=this.paren=-1}Reader.prototype.beforeFunctionExpression=function(t){return["(","{","[","in","typeof","instanceof","new","return","case","delete","throw","void","=","+=","-=","*=","**=","/=","%=","<<=",">>=",">>>=","&=","|=","^=",",","+","-","*","**","/","%","++","--","<<",">>",">>>","&","|","^","!","~","&&","||","?",":","===","==",">=","<=","<",">","!=","!=="].indexOf(t)>=0};Reader.prototype.isRegexStart=function(){var previous=this.values[this.values.length-1];var regex=previous!==null;switch(previous){case"this":case"]":regex=false;break;case")":var keyword=this.values[this.paren-1];regex=keyword==="if"||keyword==="while"||keyword==="for"||keyword==="with";break;case"}":regex=false;if(this.values[this.curly-3]==="function"){var check=this.values[this.curly-4];regex=check?!this.beforeFunctionExpression(check):false}else if(this.values[this.curly-4]==="function"){var check=this.values[this.curly-5];regex=check?!this.beforeFunctionExpression(check):true}break;default:break}return regex};Reader.prototype.push=function(token){if(token.type===7||token.type===4){if(token.value==="{"){this.curly=this.values.length}else if(token.value==="("){this.paren=this.values.length}this.values.push(token.value)}else{this.values.push(null)}};return Reader}();var Tokenizer=function(){function Tokenizer(code,config){this.errorHandler=new error_handler_1.ErrorHandler;this.errorHandler.tolerant=config?typeof config.tolerant==="boolean"&&config.tolerant:false;this.scanner=new scanner_1.Scanner(code,this.errorHandler);this.scanner.trackComment=config?typeof config.comment==="boolean"&&config.comment:false;this.trackRange=config?typeof config.range==="boolean"&&config.range:false;this.trackLoc=config?typeof config.loc==="boolean"&&config.loc:false;this.buffer=[];this.reader=new Reader}Tokenizer.prototype.errors=function(){return this.errorHandler.errors};Tokenizer.prototype.getNextToken=function(){if(this.buffer.length===0){var comments=this.scanner.scanComments();if(this.scanner.trackComment){for(var i=0;i x * x") 21 | coffee_compile("square = (x) -> x * x", bare = TRUE) 22 | 23 | # Simple script 24 | demo <- readLines(system.file("example/demo.coffee", package = "js")) 25 | js <- coffee_compile(demo) 26 | cat(js) 27 | cat(uglify_optimize(js)) 28 | } 29 | -------------------------------------------------------------------------------- /man/esprima.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/esprima.R 3 | \name{esprima} 4 | \alias{esprima} 5 | \alias{esprima_tokenize} 6 | \alias{esprima_parse} 7 | \title{JavaScrip Syntax Tree} 8 | \usage{ 9 | esprima_tokenize(text, range = FALSE, loc = FALSE, comment = FALSE) 10 | 11 | esprima_parse(text, jsx = FALSE, range = FALSE, loc = FALSE, 12 | tolerant = FALSE, tokens = FALSE, comment = FALSE) 13 | } 14 | \arguments{ 15 | \item{text}{a character vector with JavaScript code} 16 | 17 | \item{range}{Annotate each token with its zero-based start and end location} 18 | 19 | \item{loc}{Annotate each token with its column and row-based location} 20 | 21 | \item{comment}{Include every line and block comment in the output} 22 | 23 | \item{jsx}{Support JSX syntax} 24 | 25 | \item{tolerant}{Tolerate a few cases of syntax errors} 26 | 27 | \item{tokens}{Collect every token} 28 | } 29 | \description{ 30 | \href{https://www.npmjs.com/package/esprima}{Esprima} is a high performance, standard-compliant 31 | ECMAScript parser. It has full support for ECMAScript 2017 and returns a sensible syntax tree 32 | format as standardized by ESTree project. 33 | } 34 | \details{ 35 | The \code{esprima_tokenize} function returns a data frame with JavaScript tokens. The 36 | \code{esprima_parse} function returns the Syntax Tree in JSON format. This can be parsed to R 37 | using e.g. \code{jsonlite::fromJSON}. 38 | } 39 | \examples{ 40 | code <- "function test(x, y){ x = x || 1; y = y || 1; return x*y;}" 41 | esprima_tokenize(code) 42 | esprima_parse(code) 43 | } 44 | \references{ 45 | Esprima documentation: \url{http://esprima.readthedocs.io/en/4.0/}. 46 | } 47 | -------------------------------------------------------------------------------- /man/js_eval.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/js_eval.R 3 | \name{js_eval} 4 | \alias{js_eval} 5 | \title{Evaluate JavaScript} 6 | \usage{ 7 | js_eval(text) 8 | } 9 | \arguments{ 10 | \item{text}{JavaScript code} 11 | } 12 | \description{ 13 | Evaluate a piece of JavaScript code in a disposable context. 14 | } 15 | \examples{ 16 | # Stateless evaluation 17 | js_eval("(function() {return 'foo'})()") 18 | 19 | # Use V8 for stateful evaluation 20 | ct <- V8::new_context() 21 | ct$eval("var foo = 123") 22 | ct$get("foo") 23 | } 24 | -------------------------------------------------------------------------------- /man/js_typeof.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/js_typeof.R 3 | \name{js_typeof} 4 | \alias{js_typeof} 5 | \title{Get the type of a JavaScript object} 6 | \usage{ 7 | js_typeof(text) 8 | } 9 | \arguments{ 10 | \item{text}{JavaScript code} 11 | } 12 | \description{ 13 | JavaScript wrapper to \code{typeof} to test if a piece of JavaScript code is 14 | syntactically valid, and the type of object it evaluates to. Useful to 15 | verify that a piece of JavaScript code contains a proper function/object. 16 | } 17 | \examples{ 18 | js_typeof("function(x){return x+1}") 19 | js_typeof("(function() {return 'foo'})()") 20 | js_typeof("{foo : 123, bar : true}") 21 | } 22 | -------------------------------------------------------------------------------- /man/js_validate_script.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/js_validate.R 3 | \name{js_validate_script} 4 | \alias{js_validate_script} 5 | \title{Validate JavaScript} 6 | \usage{ 7 | js_validate_script(text, error = TRUE) 8 | } 9 | \arguments{ 10 | \item{text}{character vector with JavaScript code} 11 | 12 | \item{error}{raise error on invalid code} 13 | } 14 | \description{ 15 | Simple wrapper for \code{ct$validate} in V8. 16 | Tests if code constitutes a syntactically valid JS script. 17 | } 18 | \examples{ 19 | js_validate_script("function foo(x){2*x}") #TRUE 20 | js_validate_script("foo = function(x){2*x}") #TRUE 21 | 22 | # Anonymous functions in global scope are invalid 23 | js_validate_script("function(x){2*x}", error = FALSE) #FALSE 24 | 25 | # Use ! or () to check anonymous function syntax 26 | js_validate_script("!function(x){2*x}") #TRUE 27 | js_validate_script("(function(x){2*x})") #TRUE 28 | } 29 | -------------------------------------------------------------------------------- /man/jshint.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/jshint.R 3 | \name{jshint} 4 | \alias{jshint} 5 | \title{Static analysis tool for JavaScript} 6 | \usage{ 7 | jshint(text, ..., globals = NULL) 8 | } 9 | \arguments{ 10 | \item{text}{a string of JavaScript code} 11 | 12 | \item{...}{additional jshint \href{https://jshint.com/docs/options/}{configuration options}} 13 | 14 | \item{globals}{a white list of global variables that are not formally defined in the source code} 15 | } 16 | \value{ 17 | a data frame where each row represents a jshint error or \code{NULL} if there were no errors 18 | } 19 | \description{ 20 | JSHint is a community-driven tool to detect errors and potential problems in JavaScript code. 21 | It is very flexible so you can easily adjust it to your particular coding guidelines and 22 | the environment you expect your code to execute in. 23 | } 24 | \examples{ 25 | code = "var foo = 123" 26 | jshint(code) 27 | jshint(code, asi = TRUE) 28 | } 29 | -------------------------------------------------------------------------------- /man/uglify.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/uglify.R 3 | \name{uglify} 4 | \alias{uglify} 5 | \alias{uglify_reformat} 6 | \alias{uglify_optimize} 7 | \alias{uglify_files} 8 | \title{Compress and Reformat JavaScript Code} 9 | \usage{ 10 | uglify_reformat(text, beautify = FALSE, ...) 11 | 12 | uglify_optimize(text, ...) 13 | 14 | uglify_files(files, ...) 15 | } 16 | \arguments{ 17 | \item{text}{a character vector with JavaScript code} 18 | 19 | \item{beautify}{prettify (instead of minify) code} 20 | 21 | \item{files}{a character vector of filenames} 22 | 23 | \item{...}{additional arguments for the \href{https://lisperator.net/uglifyjs/compress}{optimizer} 24 | or \href{https://lisperator.net/uglifyjs/codegen}{generator}.} 25 | } 26 | \description{ 27 | \href{https://www.npmjs.com/package/uglify-js}{UglifyJS} is a JavaScript 28 | compressor/minifier written in JavaScript. It also contains tools that allow one 29 | to automate working with JavaScript code. 30 | } 31 | \examples{ 32 | code <- "function test(x, y){ x = x || 1; y = y || 1; return x*y;}" 33 | cat(uglify_optimize(code)) 34 | cat(uglify_reformat(code, beautify = TRUE, indent_level = 2)) 35 | } 36 | \references{ 37 | UglifyJS2 Documentation: \url{https://lisperator.net/uglifyjs/}. 38 | } 39 | -------------------------------------------------------------------------------- /vignettes/intro.Rmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Working with JavaScript Syntax in R" 3 | author: "Jeroen Ooms" 4 | output: 5 | html_document: 6 | highlight : "kate" 7 | fig_caption: false 8 | toc: true 9 | toc_float: 10 | collapsed: false 11 | smooth_scroll: false 12 | toc_depth: 3 13 | vignette: > 14 | %\VignetteIndexEntry{Working with JavaScript Syntax in R} 15 | %\VignetteEngine{knitr::rmarkdown} 16 | %\VignetteEncoding{UTF-8} 17 | --- 18 | 19 | ```{r, echo = FALSE, message = FALSE} 20 | knitr::opts_chunk$set(comment = "") 21 | options(width=100L) 22 | library(js) 23 | ``` 24 | 25 | 26 | The js package implements bindings to several popular JavaScript libraries for validating, reformatting, optimizing and analyzing JavaScript code. It builds on the [V8 package](https://cran.r-project.org/package=V8/vignettes/v8_intro.html) (a fully standalone JavaScript engine in R) to call out to these libraries. 27 | 28 | ## Syntax Validation 29 | 30 | Several R packages allow the user to supply JavaScript code to be used as callback function or configuration object within a visualization or web application. By validating in R that the JavaScript code is syntactically correct and of the right type before actually inserting it in the HTML, we can avoid many annoying bugs. 31 | 32 | The `js_typeof` function simply calls the `typeof` operator on the given code. If the code is invalid, a SyntaxError will be raised. 33 | 34 | ```{r} 35 | callback <- 'function test(x, y){ 36 | var z = x*y ; 37 | return z; 38 | }' 39 | js_typeof(callback) 40 | ``` 41 | 42 | Same for objects: 43 | 44 | ```{r} 45 | conf <- '{ 46 | foo : function (){}, 47 | bar : 123 48 | }' 49 | js_typeof(conf) 50 | ``` 51 | 52 | Catch JavaScript typos: 53 | 54 | ```{r error=TRUE, purl = FALSE} 55 | js_typeof('function(x,y){return x + y}}') 56 | ``` 57 | 58 | ## Script Validation 59 | 60 | A JavaScript program typically consists of script with a collection of JavaScript statements. The `js_validate_script` function can be used to validate an entire script. 61 | 62 | ```{r} 63 | jscode <- readLines(system.file("js/uglify.min.js", package="js"), warn = FALSE) 64 | js_validate_script(jscode) 65 | ``` 66 | 67 | Note that JavaScript does not allow for defining anonymous functions in the global scope: 68 | 69 | ```{r} 70 | js_validate_script('function(x, y){return x + y}', error = FALSE) 71 | ``` 72 | 73 | To validate individual functions or objects, use the `js_typeof` function. 74 | 75 | ## ESprima: Parsing 76 | 77 | Esprima is a high performance, standard-compliant ECMAScript parser. It has full support for ECMAScript 2017 and returns a sensible syntax tree format as standardized by ESTree project. 78 | 79 | 80 | ```{r} 81 | esprima_tokenize(callback) 82 | esprima_parse(callback) 83 | ``` 84 | 85 | ## Compiling CoffeeScript 86 | 87 | [CoffeeScript](http://coffeescript.org/) is a little language that compiles into JavaScript. It is an attempt to expose the good parts of JavaScript in a simple way. The `coffee_compile` function binds to the coffee script compiler. 88 | 89 | ```{r} 90 | # Hello world 91 | cat(coffee_compile("square = (x) -> x * x")) 92 | cat(coffee_compile("square = (x) -> x * x", bare = TRUE)) 93 | ``` 94 | 95 | 96 | The golden rule of CoffeeScript is: *"It's just JavaScript"*. The code compiles one-to-one into the equivalent JS, and there is no interpretation at runtime. You can use any existing JavaScript library seamlessly from CoffeeScript (and vice-versa). The compiled output is readable and pretty-printed, will work in every JavaScript runtime, and tends to run as fast or faster than the equivalent handwritten JavaScript. 97 | 98 | ```{r} 99 | # Simple script 100 | demo <- readLines(system.file("example/demo.coffee", package = "js")) 101 | cat(demo, sep = "\n") 102 | js <- coffee_compile(demo) 103 | cat(js) 104 | cat(uglify_optimize(js)) 105 | ``` 106 | 107 | 108 | ## Uglify: reformatting 109 | 110 | One of the most popular and powerful libraries for working with JavaScript code is [uglify-js](https://www.npmjs.com/package/uglify-js). Uglify provides an extensive toolkit for manipulating the syntax tree of a piece of JavaScript code. 111 | 112 | The `uglify_reformat` binding parses a string with code and then feeds it to the [uglify code generator](https://lisperator.net/uglifyjs/codegen) which converts it back to JavaScript text, with custom formatting options. This is nice for fixing whitespace, semicolons, etc. 113 | 114 | ```{r} 115 | code <- "function test(x, y){ x = x || 1; y = y || 1; return x*y;}" 116 | cat(uglify_reformat(code, beautify = TRUE, indent_level = 2)) 117 | ``` 118 | 119 | ## Uglify: optimization 120 | 121 | The more impressive part of uglify-js is the [compressor](https://lisperator.net/uglifyjs/compress) which refactors the entire syntax tree, effectively rewriting your code into a more compact but equivalent program. The `uglify_optimize` function in R is a simple wrapper which parses code and then feeds it to the compressor. 122 | 123 | ```{r} 124 | cat(code) 125 | cat(uglify_optimize(code)) 126 | ``` 127 | 128 | You can pass [compressor options](https://lisperator.net/uglifyjs/compress) to `uglify_optimize` to control the various uglify optimization techniques. 129 | 130 | ## JSHint: code analysis 131 | 132 | JSHint will automatically detect errors and potential problems in JavaScript code. The `jshint` function is R will return a data frame where each row is a problem detected by the library (type, line and reason of error): 133 | 134 | ```{r} 135 | code <- "var foo = 123" 136 | jshint(code) 137 | ``` 138 | 139 | JSHint has many [configuration options](https://jshint.com/docs/options/) to control which types of code problems it will report on. 140 | --------------------------------------------------------------------------------