8889841cREADME.md000066600000031224150425117220006030 0ustar00# HTMLMinifier [![NPM version](https://img.shields.io/npm/v/html-minifier-terser.svg)](https://www.npmjs.com/package/html-minifier-terser) [![Build Status](https://img.shields.io/travis/DanielRuf/html-minifier-terser.svg)](https://travis-ci.org/DanielRuf/html-minifier-terser) [![Dependency Status](https://img.shields.io/david/DanielRuf/html-minifier-terser.svg)](https://david-dm.org/DanielRuf/html-minifier-terser) [HTMLMinifier](https://danielruf.github.io/html-minifier-terser/) is a highly **configurable**, **well-tested**, JavaScript-based HTML minifier. See [corresponding blog post](http://perfectionkills.com/experimenting-with-html-minifier/) for all the gory details of [how it works](http://perfectionkills.com/experimenting-with-html-minifier/#how_it_works), [description of each option](http://perfectionkills.com/experimenting-with-html-minifier/#options), [testing results](http://perfectionkills.com/experimenting-with-html-minifier/#field_testing) and [conclusions](http://perfectionkills.com/experimenting-with-html-minifier/#cost_and_benefits). [Test suite is available online](https://danielruf.github.io/html-minifier-terser/tests/). Also see corresponding [Ruby wrapper](https://github.com/stereobooster/html_minifier), and for Node.js, [Grunt plugin](https://github.com/gruntjs/grunt-contrib-htmlmin), [Gulp module](https://github.com/jonschlinkert/gulp-htmlmin), [Koa middleware wrapper](https://github.com/koajs/html-minifier) and [Express middleware wrapper](https://github.com/melonmanchan/express-minify-html). For lint-like capabilities take a look at [HTMLLint](https://github.com/kangax/html-lint). ## Minification comparison How does HTMLMinifier compare to other solutions — [HTML Minifier from Will Peavy](http://www.willpeavy.com/minifier/) (1st result in [Google search for "html minifier"](https://www.google.com/#q=html+minifier)) as well as [htmlcompressor.com](http://htmlcompressor.com) and [minimize](https://github.com/Swaagie/minimize)? | Site | Original size *(KB)* | HTMLMinifier | minimize | Will Peavy | htmlcompressor.com | | ---------------------------------------------------------------------------- |:--------------------:| ------------:| --------:| ----------:| ------------------:| | [Google](https://www.google.com/) | 45 | **41** | 45 | 46 | 45 | | [Stack Overflow](https://stackoverflow.com/) | 115 | **82** | 90 | 92 | 88 | | [HTMLMinifier](https://github.com/kangax/html-minifier) | 132 | **105** | 118 | 123 | 118 | | [Bootstrap CSS](https://getbootstrap.com/docs/3.3/css/) | 271 | **260** | 269 | 229 | 269 | | [Twitter](https://twitter.com/) | 289 | **238** | 282 | 314 | 282 | | [BBC](https://www.bbc.co.uk/) | 298 | **233** | 289 | 291 | 269 | | [Wikipedia](https://en.wikipedia.org/wiki/President_of_the_United_States) | 574 | **468** | 557 | 578 | 557 | | [Amazon](https://www.amazon.co.uk/) | 702 | **343** | 692 | 704 | n/a | | [NBC](https://www.nbc.com/) | 844 | **805** | 843 | 844 | n/a | | [Eloquent Javascript](https://eloquentjavascript.net/1st_edition/print.html) | 870 | **815** | 840 | 864 | n/a | | [New York Times](https://www.nytimes.com/) | 1304 | **1183** | 1301 | 1295 | n/a | | [ES draft](https://tc39.github.io/ecma262/) | 6347 | **5686** | 5863 | n/a | n/a | ## Options Quick Reference Most of the options are disabled by default. | Option | Description | Default | |--------------------------------|-----------------|---------| | `caseSensitive` | Treat attributes in case sensitive manner (useful for custom HTML tags) | `false` | | `collapseBooleanAttributes` | [Omit attribute values from boolean attributes](http://perfectionkills.com/experimenting-with-html-minifier/#collapse_boolean_attributes) | `false` | | `collapseInlineTagWhitespace` | Don't leave any spaces between `display:inline;` elements when collapsing. Must be used in conjunction with `collapseWhitespace=true` | `false` | | `collapseWhitespace` | [Collapse white space that contributes to text nodes in a document tree](http://perfectionkills.com/experimenting-with-html-minifier/#collapse_whitespace) | `false` | | `conservativeCollapse` | Always collapse to 1 space (never remove it entirely). Must be used in conjunction with `collapseWhitespace=true` | `false` | | `continueOnParseError` | [Handle parse errors](https://html.spec.whatwg.org/multipage/parsing.html#parse-errors) instead of aborting. | `false` | | `customAttrAssign` | Arrays of regex'es that allow to support custom attribute assign expressions (e.g. `'
'`) | `[ ]` | | `customAttrCollapse` | Regex that specifies custom attribute to strip newlines from (e.g. `/ng-class/`) | | | `customAttrSurround` | Arrays of regex'es that allow to support custom attribute surround expressions (e.g. ``) | `[ ]` | | `customEventAttributes` | Arrays of regex'es that allow to support custom event attributes for `minifyJS` (e.g. `ng-click`) | `[ /^on[a-z]{3,}$/ ]` | | `decodeEntities` | Use direct Unicode characters whenever possible | `false` | | `html5` | Parse input according to HTML5 specifications | `true` | | `ignoreCustomComments` | Array of regex'es that allow to ignore certain comments, when matched | `[ /^!/, /^\s*#/ ]` | | `ignoreCustomFragments` | Array of regex'es that allow to ignore certain fragments, when matched (e.g. ``, `{{ ... }}`, etc.) | `[ /<%[\s\S]*?%>/, /<\?[\s\S]*?\?>/ ]` | | `includeAutoGeneratedTags` | Insert tags generated by HTML parser | `true` | | `keepClosingSlash` | Keep the trailing slash on singleton elements | `false` | | `maxLineLength` | Specify a maximum line length. Compressed output will be split by newlines at valid HTML split-points | | `minifyCSS` | Minify CSS in style elements and style attributes (uses [clean-css](https://github.com/jakubpawlowicz/clean-css)) | `false` (could be `true`, `Object`, `Function(text, type)`) | | `minifyJS` | Minify JavaScript in script elements and event attributes (uses [Terser](https://github.com/terser/terser)) | `false` (could be `true`, `Object`, `Function(text, inline)`) | | `minifyURLs` | Minify URLs in various attributes (uses [relateurl](https://github.com/stevenvachon/relateurl)) | `false` (could be `String`, `Object`, `Function(text)`) | | `preserveLineBreaks` | Always collapse to 1 line break (never remove it entirely) when whitespace between tags include a line break. Must be used in conjunction with `collapseWhitespace=true` | `false` | | `preventAttributesEscaping` | Prevents the escaping of the values of attributes | `false` | | `processConditionalComments` | Process contents of conditional comments through minifier | `false` | | `processScripts` | Array of strings corresponding to types of script elements to process through minifier (e.g. `text/ng-template`, `text/x-handlebars-template`, etc.) | `[ ]` | | `quoteCharacter` | Type of quote to use for attribute values (' or ") | | | `removeAttributeQuotes` | [Remove quotes around attributes when possible](http://perfectionkills.com/experimenting-with-html-minifier/#remove_attribute_quotes) | `false` | | `removeComments` | [Strip HTML comments](http://perfectionkills.com/experimenting-with-html-minifier/#remove_comments) | `false` | | `removeEmptyAttributes` | [Remove all attributes with whitespace-only values](http://perfectionkills.com/experimenting-with-html-minifier/#remove_empty_or_blank_attributes) | `false` (could be `true`, `Function(attrName, tag)`) | | `removeEmptyElements` | [Remove all elements with empty contents](http://perfectionkills.com/experimenting-with-html-minifier/#remove_empty_elements) | `false` | | `removeOptionalTags` | [Remove optional tags](http://perfectionkills.com/experimenting-with-html-minifier/#remove_optional_tags) | `false` | | `removeRedundantAttributes` | [Remove attributes when value matches default.](http://perfectionkills.com/experimenting-with-html-minifier/#remove_redundant_attributes) | `false` | | `removeScriptTypeAttributes` | Remove `type="text/javascript"` from `script` tags. Other `type` attribute values are left intact | `false` | | `removeStyleLinkTypeAttributes`| Remove `type="text/css"` from `style` and `link` tags. Other `type` attribute values are left intact | `false` | | `removeTagWhitespace` | Remove space between attributes whenever possible. **Note that this will result in invalid HTML!** | `false` | | `sortAttributes` | [Sort attributes by frequency](#sorting-attributes--style-classes) | `false` | | `sortClassName` | [Sort style classes by frequency](#sorting-attributes--style-classes) | `false` | | `trimCustomFragments` | Trim white space around `ignoreCustomFragments`. | `false` | | `useShortDoctype` | [Replaces the `doctype` with the short (HTML5) doctype](http://perfectionkills.com/experimenting-with-html-minifier/#use_short_doctype) | `false` | ### Sorting attributes / style classes Minifier options like `sortAttributes` and `sortClassName` won't impact the plain-text size of the output. However, they form long repetitive chains of characters that should improve compression ratio of gzip used in HTTP compression. ## Special cases ### Ignoring chunks of markup If you have chunks of markup you would like preserved, you can wrap them ``. ### Preserving SVG tags SVG tags are automatically recognized, and when they are minified, both case-sensitivity and closing-slashes are preserved, regardless of the minification settings used for the rest of the file. ### Working with invalid markup HTMLMinifier **can't work with invalid or partial chunks of markup**. This is because it parses markup into a tree structure, then modifies it (removing anything that was specified for removal, ignoring anything that was specified to be ignored, etc.), then it creates a markup out of that tree and returns it. Input markup (e.g. `

foo`) ↓ Internal representation of markup in a form of tree (e.g. `{ tag: "p", attr: "id", children: ["foo"] }`) ↓ Transformation of internal representation (e.g. removal of `id` attribute) ↓ Output of resulting markup (e.g. `

foo

`) HTMLMinifier can't know that original markup was only half of the tree; it does its best to try to parse it as a full tree and it loses information about tree being malformed or partial in the beginning. As a result, it can't create a partial/malformed tree at the time of the output. ## Installation Instructions From NPM for use as a command line app: ```shell npm install html-minifier-terser -g ``` From NPM for programmatic use: ```shell npm install html-minifier-terser ``` From Git: ```shell git clone git://github.com/DanielRuf/html-minifier-terser.git cd html-minifier-terser npm link . ``` ## Usage Note that almost all options are disabled by default. For command line usage please see `html-minifier-terser --help` for a list of available options. Experiment and find what works best for you and your project. * **Sample command line:** ``html-minifier-terser --collapse-whitespace --remove-comments --remove-optional-tags --remove-redundant-attributes --remove-script-type-attributes --remove-tag-whitespace --use-short-doctype --minify-css true --minify-js true`` ### Node.js ```js var minify = require('html-minifier-terser').minify; var result = minify('

foo

', { removeAttributeQuotes: true }); result; // '

foo

' ``` ## Running benchmarks Benchmarks for minified HTML: ```shell node benchmark.js ``` cli.js000066600000026737150425117220005673 0ustar00#!/usr/bin/env node /** * html-minifier-terser CLI tool * * The MIT License (MIT) * * Copyright (c) 2014-2016 Zoltan Frombach * * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in * the Software without restriction, including without limitation the rights to * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * the Software, and to permit persons to whom the Software is furnished to do so, * subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * */ 'use strict'; var camelCase = require('camel-case').camelCase; var fs = require('fs'); var info = require('./package.json'); var minify = require('./' + info.main).minify; var paramCase = require('param-case').paramCase; var path = require('path'); var program = require('commander'); program._name = info.name; program.version(info.version); function fatal(message) { console.error(message); process.exit(1); } /** * JSON does not support regexes, so, e.g., JSON.parse() will not create * a RegExp from the JSON value `[ "/matchString/" ]`, which is * technically just an array containing a string that begins and end with * a forward slash. To get a RegExp from a JSON string, it must be * constructed explicitly in JavaScript. * * The likelihood of actually wanting to match text that is enclosed in * forward slashes is probably quite rare, so if forward slashes were * included in an argument that requires a regex, the user most likely * thought they were part of the syntax for specifying a regex. * * In the unlikely case that forward slashes are indeed desired in the * search string, the user would need to enclose the expression in a * second set of slashes: * * --customAttrSrround "[\"//matchString//\"]" */ function parseRegExp(value) { if (value) { return new RegExp(value.replace(/^\/(.*)\/$/, '$1')); } } function parseJSON(value) { if (value) { try { return JSON.parse(value); } catch (e) { if (/^{/.test(value)) { fatal('Could not parse JSON value \'' + value + '\''); } return value; } } } function parseJSONArray(value) { if (value) { value = parseJSON(value); return Array.isArray(value) ? value : [value]; } } function parseJSONRegExpArray(value) { value = parseJSONArray(value); return value && value.map(parseRegExp); } function parseString(value) { return value; } var mainOptions = { caseSensitive: 'Treat attributes in case sensitive manner (useful for SVG; e.g. viewBox)', collapseBooleanAttributes: 'Omit attribute values from boolean attributes', collapseInlineTagWhitespace: 'Collapse white space around inline tag', collapseWhitespace: 'Collapse white space that contributes to text nodes in a document tree.', conservativeCollapse: 'Always collapse to 1 space (never remove it entirely)', continueOnParseError: 'Handle parse errors instead of aborting', customAttrAssign: ['Arrays of regex\'es that allow to support custom attribute assign expressions (e.g. \'
\')', parseJSONRegExpArray], customAttrCollapse: ['Regex that specifies custom attribute to strip newlines from (e.g. /ng-class/)', parseRegExp], customAttrSurround: ['Arrays of regex\'es that allow to support custom attribute surround expressions (e.g. )', parseJSONRegExpArray], customEventAttributes: ['Arrays of regex\'es that allow to support custom event attributes for minifyJS (e.g. ng-click)', parseJSONRegExpArray], decodeEntities: 'Use direct Unicode characters whenever possible', html5: 'Parse input according to HTML5 specifications', ignoreCustomComments: ['Array of regex\'es that allow to ignore certain comments, when matched', parseJSONRegExpArray], ignoreCustomFragments: ['Array of regex\'es that allow to ignore certain fragments, when matched (e.g. , {{ ... }})', parseJSONRegExpArray], includeAutoGeneratedTags: 'Insert tags generated by HTML parser', keepClosingSlash: 'Keep the trailing slash on singleton elements', maxLineLength: ['Max line length', parseInt], minifyCSS: ['Minify CSS in style elements and style attributes (uses clean-css)', parseJSON], minifyJS: ['Minify Javascript in script elements and on* attributes (uses terser)', parseJSON], minifyURLs: ['Minify URLs in various attributes (uses relateurl)', parseJSON], preserveLineBreaks: 'Always collapse to 1 line break (never remove it entirely) when whitespace between tags include a line break.', preventAttributesEscaping: 'Prevents the escaping of the values of attributes.', processConditionalComments: 'Process contents of conditional comments through minifier', processScripts: ['Array of strings corresponding to types of script elements to process through minifier (e.g. "text/ng-template", "text/x-handlebars-template", etc.)', parseJSONArray], quoteCharacter: ['Type of quote to use for attribute values (\' or ")', parseString], removeAttributeQuotes: 'Remove quotes around attributes when possible.', removeComments: 'Strip HTML comments', removeEmptyAttributes: 'Remove all attributes with whitespace-only values', removeEmptyElements: 'Remove all elements with empty contents', removeOptionalTags: 'Remove unrequired tags', removeRedundantAttributes: 'Remove attributes when value matches default.', removeScriptTypeAttributes: 'Remove type="text/javascript" from script tags. Other type attribute values are left intact.', removeStyleLinkTypeAttributes: 'Remove type="text/css" from style and link tags. Other type attribute values are left intact.', removeTagWhitespace: 'Remove space between attributes whenever possible', sortAttributes: 'Sort attributes by frequency', sortClassName: 'Sort style classes by frequency', trimCustomFragments: 'Trim white space around ignoreCustomFragments.', useShortDoctype: 'Replaces the doctype with the short (HTML5) doctype' }; var mainOptionKeys = Object.keys(mainOptions); mainOptionKeys.forEach(function(key) { var option = mainOptions[key]; if (Array.isArray(option)) { key = key === 'minifyURLs' ? '--minify-urls' : '--' + paramCase(key); key += option[1] === parseJSON ? ' [value]' : ' '; program.option(key, option[0], option[1]); } else if (~['html5', 'includeAutoGeneratedTags'].indexOf(key)) { program.option('--no-' + paramCase(key), option); } else { program.option('--' + paramCase(key), option); } }); program.option('-o --output ', 'Specify output file (if not specified STDOUT will be used for output)'); function readFile(file) { try { return fs.readFileSync(file, { encoding: 'utf8' }); } catch (e) { fatal('Cannot read ' + file + '\n' + e.message); } } var config = {}; program.option('-c --config-file ', 'Use config file', function(configPath) { var data = readFile(configPath); try { config = JSON.parse(data); } catch (je) { try { config = require(path.resolve(configPath)); } catch (ne) { fatal('Cannot read the specified config file.\nAs JSON: ' + je.message + '\nAs module: ' + ne.message); } } mainOptionKeys.forEach(function(key) { if (key in config) { var option = mainOptions[key]; if (Array.isArray(option)) { var value = config[key]; config[key] = option[1](typeof value === 'string' ? value : JSON.stringify(value)); } } }); }); program.option('--input-dir ', 'Specify an input directory'); program.option('--output-dir ', 'Specify an output directory'); program.option('--file-ext ', 'Specify an extension to be read, ex: html'); var content; program.arguments('[files...]').action(function(files) { content = files.map(readFile).join(''); }).parse(process.argv); function createOptions() { var options = {}; mainOptionKeys.forEach(function(key) { var param = program[key === 'minifyURLs' ? 'minifyUrls' : camelCase(key)]; if (typeof param !== 'undefined') { options[key] = param; } else if (key in config) { options[key] = config[key]; } }); return options; } function mkdir(outputDir, callback) { fs.mkdir(outputDir, function(err) { if (err) { switch (err.code) { case 'ENOENT': return mkdir(path.join(outputDir, '..'), function() { mkdir(outputDir, callback); }); case 'EEXIST': break; default: fatal('Cannot create directory ' + outputDir + '\n' + err.message); } } callback(); }); } function processFile(inputFile, outputFile) { fs.readFile(inputFile, { encoding: 'utf8' }, function(err, data) { if (err) { fatal('Cannot read ' + inputFile + '\n' + err.message); } var minified; try { minified = minify(data, createOptions()); } catch (e) { fatal('Minification error on ' + inputFile + '\n' + e.message); } fs.writeFile(outputFile, minified, { encoding: 'utf8' }, function(err) { if (err) { fatal('Cannot write ' + outputFile + '\n' + err.message); } }); }); } function processDirectory(inputDir, outputDir, fileExt) { fs.readdir(inputDir, function(err, files) { if (err) { fatal('Cannot read directory ' + inputDir + '\n' + err.message); } files.forEach(function(file) { var inputFile = path.join(inputDir, file); var outputFile = path.join(outputDir, file); fs.stat(inputFile, function(err, stat) { if (err) { fatal('Cannot read ' + inputFile + '\n' + err.message); } else if (stat.isDirectory()) { processDirectory(inputFile, outputFile, fileExt); } else if (!fileExt || path.extname(file) === '.' + fileExt) { mkdir(outputDir, function() { processFile(inputFile, outputFile); }); } }); }); }); } function writeMinify() { var minified; try { minified = minify(content, createOptions()); } catch (e) { fatal('Minification error:\n' + e.message); } (program.output ? fs.createWriteStream(program.output).on('error', function(e) { fatal('Cannot write ' + program.output + '\n' + e.message); }) : process.stdout).write(minified); } var inputDir = program.inputDir; var outputDir = program.outputDir; var fileExt = program.fileExt; if (inputDir || outputDir) { if (!inputDir) { fatal('The option output-dir needs to be used with the option input-dir. If you are working with a single file, use -o.'); } else if (!outputDir) { fatal('You need to specify where to write the output files with the option --output-dir'); } processDirectory(inputDir, outputDir, fileExt); } // Minifying one or more files specified on the CMD line else if (content) { writeMinify(); } // Minifying input coming from STDIN else { content = ''; process.stdin.setEncoding('utf8'); process.stdin.on('data', function(data) { content += data; }).on('end', writeMinify); } node_modules/terser/README.md000066600000163743150425117220012025 0ustar00

Terser

[![NPM Version][npm-image]][npm-url] [![NPM Downloads][downloads-image]][downloads-url] [![Travis Build][travis-image]][travis-url] [![Opencollective financial contributors][opencollective-contributors]][opencollective-url] A JavaScript parser and mangler/compressor toolkit for ES6+. *note*: You can support this project on patreon: patron. Check out [PATRONS.md](https://github.com/terser/terser/blob/master/PATRONS.md) for our first-tier patrons. Terser recommends you use RollupJS to bundle your modules, as that produces smaller code overall. *Beautification* has been undocumented and is *being removed* from terser, we recommend you use [prettier](https://npmjs.com/package/prettier). Find the changelog in [CHANGELOG.md](https://github.com/terser/terser/blob/master/CHANGELOG.md) [npm-image]: https://img.shields.io/npm/v/terser.svg [npm-url]: https://npmjs.org/package/terser [downloads-image]: https://img.shields.io/npm/dm/terser.svg [downloads-url]: https://npmjs.org/package/terser [travis-image]: https://img.shields.io/travis/terser/terser/master.svg [travis-url]: https://travis-ci.org/terser/terser [opencollective-contributors]: https://opencollective.com/terser/tiers/badge.svg [opencollective-url]: https://opencollective.com/terser Why choose terser? ------------------ `uglify-es` is [no longer maintained](https://github.com/mishoo/UglifyJS2/issues/3156#issuecomment-392943058) and `uglify-js` does not support ES6+. **`terser`** is a fork of `uglify-es` that mostly retains API and CLI compatibility with `uglify-es` and `uglify-js@3`. Install ------- First make sure you have installed the latest version of [node.js](http://nodejs.org/) (You may need to restart your computer after this step). From NPM for use as a command line app: npm install terser -g From NPM for programmatic use: npm install terser # Command line usage terser [input files] [options] Terser can take multiple input files. It's recommended that you pass the input files first, then pass the options. Terser will parse input files in sequence and apply any compression options. The files are parsed in the same global scope, that is, a reference from a file to some variable/function declared in another file will be matched properly. If no input file is specified, Terser will read from STDIN. If you wish to pass your options before the input files, separate the two with a double dash to prevent input files being used as option arguments: terser --compress --mangle -- input.js ### Command line options ``` -h, --help Print usage information. `--help options` for details on available options. -V, --version Print version number. -p, --parse Specify parser options: `acorn` Use Acorn for parsing. `bare_returns` Allow return outside of functions. Useful when minifying CommonJS modules and Userscripts that may be anonymous function wrapped (IIFE) by the .user.js engine `caller`. `expression` Parse a single expression, rather than a program (for parsing JSON). `spidermonkey` Assume input files are SpiderMonkey AST format (as JSON). -c, --compress [options] Enable compressor/specify compressor options: `pure_funcs` List of functions that can be safely removed when their return values are not used. -m, --mangle [options] Mangle names/specify mangler options: `reserved` List of names that should not be mangled. --mangle-props [options] Mangle properties/specify mangler options: `builtins` Mangle property names that overlaps with standard JavaScript globals and DOM API props. `debug` Add debug prefix and suffix. `keep_quoted` Only mangle unquoted properties, quoted properties are automatically reserved. `strict` disables quoted properties being automatically reserved. `regex` Only mangle matched property names. `reserved` List of names that should not be mangled. -b, --beautify [options] Specify output options: `preamble` Preamble to prepend to the output. You can use this to insert a comment, for example for licensing information. This will not be parsed, but the source map will adjust for its presence. `quote_style` Quote style: 0 - auto 1 - single 2 - double 3 - original `wrap_iife` Wrap IIFEs in parenthesis. Note: you may want to disable `negate_iife` under compressor options. `wrap_func_args` Wrap function arguments in parenthesis. -o, --output Output file path (default STDOUT). Specify `ast` or `spidermonkey` to write Terser or SpiderMonkey AST as JSON to STDOUT respectively. --comments [filter] Preserve copyright comments in the output. By default this works like Google Closure, keeping JSDoc-style comments that contain "@license" or "@preserve". You can optionally pass one of the following arguments to this flag: - "all" to keep all comments - `false` to omit comments in the output - a valid JS RegExp like `/foo/` or `/^!/` to keep only matching comments. Note that currently not *all* comments can be kept when compression is on, because of dead code removal or cascading statements into sequences. --config-file Read `minify()` options from JSON file. -d, --define [=value] Global definitions. --ecma Specify ECMAScript release: 5, 2015, 2016, etc. -e, --enclose [arg[:value]] Embed output in a big function with configurable arguments and values. --ie8 Support non-standard Internet Explorer 8. Equivalent to setting `ie8: true` in `minify()` for `compress`, `mangle` and `output` options. By default Terser will not try to be IE-proof. --keep-classnames Do not mangle/drop class names. --keep-fnames Do not mangle/drop function names. Useful for code relying on Function.prototype.name. --module Input is an ES6 module. If `compress` or `mangle` is enabled then the `toplevel` option will be enabled. --name-cache File to hold mangled name mappings. --safari10 Support non-standard Safari 10/11. Equivalent to setting `safari10: true` in `minify()` for `mangle` and `output` options. By default `terser` will not work around Safari 10/11 bugs. --source-map [options] Enable source map/specify source map options: `base` Path to compute relative paths from input files. `content` Input source map, useful if you're compressing JS that was generated from some other original code. Specify "inline" if the source map is included within the sources. `filename` Name and/or location of the output source. `includeSources` Pass this flag if you want to include the content of source files in the source map as sourcesContent property. `root` Path to the original source to be included in the source map. `url` If specified, path to the source map to append in `//# sourceMappingURL`. --timings Display operations run time on STDERR. --toplevel Compress and/or mangle variables in top level scope. --verbose Print diagnostic messages. --warn Print warning messages. --wrap Embed everything in a big function, making the “exports” and “global” variables available. You need to pass an argument to this option to specify the name that your module will take when included in, say, a browser. ``` Specify `--output` (`-o`) to declare the output file. Otherwise the output goes to STDOUT. ## CLI source map options Terser can generate a source map file, which is highly useful for debugging your compressed JavaScript. To get a source map, pass `--source-map --output output.js` (source map will be written out to `output.js.map`). Additional options: - `--source-map "filename=''"` to specify the name of the source map. - `--source-map "root=''"` to pass the URL where the original files can be found. - `--source-map "url=''"` to specify the URL where the source map can be found. Otherwise Terser assumes HTTP `X-SourceMap` is being used and will omit the `//# sourceMappingURL=` directive. For example: terser js/file1.js js/file2.js \ -o foo.min.js -c -m \ --source-map "root='http://foo.com/src',url='foo.min.js.map'" The above will compress and mangle `file1.js` and `file2.js`, will drop the output in `foo.min.js` and the source map in `foo.min.js.map`. The source mapping will refer to `http://foo.com/src/js/file1.js` and `http://foo.com/src/js/file2.js` (in fact it will list `http://foo.com/src` as the source map root, and the original files as `js/file1.js` and `js/file2.js`). ### Composed source map When you're compressing JS code that was output by a compiler such as CoffeeScript, mapping to the JS code won't be too helpful. Instead, you'd like to map back to the original code (i.e. CoffeeScript). Terser has an option to take an input source map. Assuming you have a mapping from CoffeeScript → compiled JS, Terser can generate a map from CoffeeScript → compressed JS by mapping every token in the compiled JS to its original location. To use this feature pass `--source-map "content='/path/to/input/source.map'"` or `--source-map "content=inline"` if the source map is included inline with the sources. ## CLI compress options You need to pass `--compress` (`-c`) to enable the compressor. Optionally you can pass a comma-separated list of [compress options](#compress-options). Options are in the form `foo=bar`, or just `foo` (the latter implies a boolean option that you want to set `true`; it's effectively a shortcut for `foo=true`). Example: terser file.js -c toplevel,sequences=false ## CLI mangle options To enable the mangler you need to pass `--mangle` (`-m`). The following (comma-separated) options are supported: - `toplevel` (default `false`) -- mangle names declared in the top level scope. - `eval` (default `false`) -- mangle names visible in scopes where `eval` or `with` are used. When mangling is enabled but you want to prevent certain names from being mangled, you can declare those names with `--mangle reserved` — pass a comma-separated list of names. For example: terser ... -m reserved=['$','require','exports'] to prevent the `require`, `exports` and `$` names from being changed. ### CLI mangling property names (`--mangle-props`) **Note:** THIS **WILL** BREAK YOUR CODE. A good rule of thumb is not to use this unless you know exactly what you're doing and how this works and read this section until the end. Mangling property names is a separate step, different from variable name mangling. Pass `--mangle-props` to enable it. The least dangerous way to use this is to use the `regex` option like so: ``` terser example.js -c -m --mangle-props regex=/_$/ ``` This will mangle all properties that end with an underscore. So you can use it to mangle internal methods. By default, it will mangle all properties in the input code with the exception of built in DOM properties and properties in core JavaScript classes, which is what will break your code if you don't: 1. Control all the code you're mangling 2. Avoid using a module bundler, as they usually will call Terser on each file individually, making it impossible to pass mangled objects between modules. 3. Avoid calling functions like `defineProperty` or `hasOwnProperty`, because they refer to object properties using strings and will break your code if you don't know what you are doing. An example: ```javascript // example.js var x = { baz_: 0, foo_: 1, calc: function() { return this.foo_ + this.baz_; } }; x.bar_ = 2; x["baz_"] = 3; console.log(x.calc()); ``` Mangle all properties (except for JavaScript `builtins`) (**very** unsafe): ```bash $ terser example.js -c passes=2 -m --mangle-props ``` ```javascript var x={o:3,t:1,i:function(){return this.t+this.o},s:2};console.log(x.i()); ``` Mangle all properties except for `reserved` properties (still very unsafe): ```bash $ terser example.js -c passes=2 -m --mangle-props reserved=[foo_,bar_] ``` ```javascript var x={o:3,foo_:1,t:function(){return this.foo_+this.o},bar_:2};console.log(x.t()); ``` Mangle all properties matching a `regex` (not as unsafe but still unsafe): ```bash $ terser example.js -c passes=2 -m --mangle-props regex=/_$/ ``` ```javascript var x={o:3,t:1,calc:function(){return this.t+this.o},i:2};console.log(x.calc()); ``` Combining mangle properties options: ```bash $ terser example.js -c passes=2 -m --mangle-props regex=/_$/,reserved=[bar_] ``` ```javascript var x={o:3,t:1,calc:function(){return this.t+this.o},bar_:2};console.log(x.calc()); ``` In order for this to be of any use, we avoid mangling standard JS names and DOM API properties by default (`--mangle-props builtins` to override). A regular expression can be used to define which property names should be mangled. For example, `--mangle-props regex=/^_/` will only mangle property names that start with an underscore. When you compress multiple files using this option, in order for them to work together in the end we need to ensure somehow that one property gets mangled to the same name in all of them. For this, pass `--name-cache filename.json` and Terser will maintain these mappings in a file which can then be reused. It should be initially empty. Example: ```bash $ rm -f /tmp/cache.json # start fresh $ terser file1.js file2.js --mangle-props --name-cache /tmp/cache.json -o part1.js $ terser file3.js file4.js --mangle-props --name-cache /tmp/cache.json -o part2.js ``` Now, `part1.js` and `part2.js` will be consistent with each other in terms of mangled property names. Using the name cache is not necessary if you compress all your files in a single call to Terser. ### Mangling unquoted names (`--mangle-props keep_quoted`) Using quoted property name (`o["foo"]`) reserves the property name (`foo`) so that it is not mangled throughout the entire script even when used in an unquoted style (`o.foo`). Example: ```javascript // stuff.js var o = { "foo": 1, bar: 3 }; o.foo += o.bar; console.log(o.foo); ``` ```bash $ terser stuff.js --mangle-props keep_quoted -c -m ``` ```javascript var o={foo:1,o:3};o.foo+=o.o,console.log(o.foo); ``` ### Debugging property name mangling You can also pass `--mangle-props debug` in order to mangle property names without completely obscuring them. For example the property `o.foo` would mangle to `o._$foo$_` with this option. This allows property mangling of a large codebase while still being able to debug the code and identify where mangling is breaking things. ```bash $ terser stuff.js --mangle-props debug -c -m ``` ```javascript var o={_$foo$_:1,_$bar$_:3};o._$foo$_+=o._$bar$_,console.log(o._$foo$_); ``` You can also pass a custom suffix using `--mangle-props debug=XYZ`. This would then mangle `o.foo` to `o._$foo$XYZ_`. You can change this each time you compile a script to identify how a property got mangled. One technique is to pass a random number on every compile to simulate mangling changing with different inputs (e.g. as you update the input script with new properties), and to help identify mistakes like writing mangled keys to storage. # API Reference Assuming installation via NPM, you can load Terser in your application like this: ```javascript var Terser = require("terser"); ``` Browser loading is also supported: ```html ``` There is a single high level function, **`minify(code, options)`**, which will perform all minification [phases](#minify-options) in a configurable manner. By default `minify()` will enable the options [`compress`](#compress-options) and [`mangle`](#mangle-options). Example: ```javascript var code = "function add(first, second) { return first + second; }"; var result = Terser.minify(code); console.log(result.error); // runtime error, or `undefined` if no error console.log(result.code); // minified output: function add(n,d){return n+d} ``` You can `minify` more than one JavaScript file at a time by using an object for the first argument where the keys are file names and the values are source code: ```javascript var code = { "file1.js": "function add(first, second) { return first + second; }", "file2.js": "console.log(add(1 + 2, 3 + 4));" }; var result = Terser.minify(code); console.log(result.code); // function add(d,n){return d+n}console.log(add(3,7)); ``` The `toplevel` option: ```javascript var code = { "file1.js": "function add(first, second) { return first + second; }", "file2.js": "console.log(add(1 + 2, 3 + 4));" }; var options = { toplevel: true }; var result = Terser.minify(code, options); console.log(result.code); // console.log(3+7); ``` The `nameCache` option: ```javascript var options = { mangle: { toplevel: true, }, nameCache: {} }; var result1 = Terser.minify({ "file1.js": "function add(first, second) { return first + second; }" }, options); var result2 = Terser.minify({ "file2.js": "console.log(add(1 + 2, 3 + 4));" }, options); console.log(result1.code); // function n(n,r){return n+r} console.log(result2.code); // console.log(n(3,7)); ``` You may persist the name cache to the file system in the following way: ```javascript var cacheFileName = "/tmp/cache.json"; var options = { mangle: { properties: true, }, nameCache: JSON.parse(fs.readFileSync(cacheFileName, "utf8")) }; fs.writeFileSync("part1.js", Terser.minify({ "file1.js": fs.readFileSync("file1.js", "utf8"), "file2.js": fs.readFileSync("file2.js", "utf8") }, options).code, "utf8"); fs.writeFileSync("part2.js", Terser.minify({ "file3.js": fs.readFileSync("file3.js", "utf8"), "file4.js": fs.readFileSync("file4.js", "utf8") }, options).code, "utf8"); fs.writeFileSync(cacheFileName, JSON.stringify(options.nameCache), "utf8"); ``` An example of a combination of `minify()` options: ```javascript var code = { "file1.js": "function add(first, second) { return first + second; }", "file2.js": "console.log(add(1 + 2, 3 + 4));" }; var options = { toplevel: true, compress: { global_defs: { "@console.log": "alert" }, passes: 2 }, output: { beautify: false, preamble: "/* minified */" } }; var result = Terser.minify(code, options); console.log(result.code); // /* minified */ // alert(10);" ``` To produce warnings: ```javascript var code = "function f(){ var u; return 2 + 3; }"; var options = { warnings: true }; var result = Terser.minify(code, options); console.log(result.error); // runtime error, `undefined` in this case console.log(result.warnings); // [ 'Dropping unused variable u [0:1,18]' ] console.log(result.code); // function f(){return 5} ``` An error example: ```javascript var result = Terser.minify({"foo.js" : "if (0) else console.log(1);"}); console.log(JSON.stringify(result.error)); // {"message":"Unexpected token: keyword (else)","filename":"foo.js","line":1,"col":7,"pos":7} ``` Note: unlike `uglify-js@2.x`, the Terser API does not throw errors. To achieve a similar effect one could do the following: ```javascript var result = Terser.minify(code, options); if (result.error) throw result.error; ``` ## Minify options - `ecma` (default `undefined`) - pass `5`, `2015`, `2016`, etc to override `parse`, `compress` and `output`'s `ecma` options. - `warnings` (default `false`) — pass `true` to return compressor warnings in `result.warnings`. Use the value `"verbose"` for more detailed warnings. - `parse` (default `{}`) — pass an object if you wish to specify some additional [parse options](#parse-options). - `compress` (default `{}`) — pass `false` to skip compressing entirely. Pass an object to specify custom [compress options](#compress-options). - `mangle` (default `true`) — pass `false` to skip mangling names, or pass an object to specify [mangle options](#mangle-options) (see below). - `mangle.properties` (default `false`) — a subcategory of the mangle option. Pass an object to specify custom [mangle property options](#mangle-properties-options). - `module` (default `false`) — Use when minifying an ES6 module. "use strict" is implied and names can be mangled on the top scope. If `compress` or `mangle` is enabled then the `toplevel` option will be enabled. - `output` (default `null`) — pass an object if you wish to specify additional [output options](#output-options). The defaults are optimized for best compression. - `sourceMap` (default `false`) - pass an object if you wish to specify [source map options](#source-map-options). - `toplevel` (default `false`) - set to `true` if you wish to enable top level variable and function name mangling and to drop unused variables and functions. - `nameCache` (default `null`) - pass an empty object `{}` or a previously used `nameCache` object if you wish to cache mangled variable and property names across multiple invocations of `minify()`. Note: this is a read/write property. `minify()` will read the name cache state of this object and update it during minification so that it may be reused or externally persisted by the user. - `ie8` (default `false`) - set to `true` to support IE8. - `keep_classnames` (default: `undefined`) - pass `true` to prevent discarding or mangling of class names. Pass a regular expression to only keep class names matching that regex. - `keep_fnames` (default: `false`) - pass `true` to prevent discarding or mangling of function names. Pass a regular expression to only keep class names matching that regex. Useful for code relying on `Function.prototype.name`. If the top level minify option `keep_classnames` is `undefined` it will be overridden with the value of the top level minify option `keep_fnames`. - `safari10` (default: `false`) - pass `true` to work around Safari 10/11 bugs in loop scoping and `await`. See `safari10` options in [`mangle`](#mangle-options) and [`output`](#output-options) for details. ## Minify options structure ```javascript { parse: { // parse options }, compress: { // compress options }, mangle: { // mangle options properties: { // mangle property options } }, output: { // output options }, sourceMap: { // source map options }, ecma: 5, // specify one of: 5, 2015, 2016, etc. keep_classnames: false, keep_fnames: false, ie8: false, module: false, nameCache: null, // or specify a name cache object safari10: false, toplevel: false, warnings: false, } ``` ### Source map options To generate a source map: ```javascript var result = Terser.minify({"file1.js": "var a = function() {};"}, { sourceMap: { filename: "out.js", url: "out.js.map" } }); console.log(result.code); // minified output console.log(result.map); // source map ``` Note that the source map is not saved in a file, it's just returned in `result.map`. The value passed for `sourceMap.url` is only used to set `//# sourceMappingURL=out.js.map` in `result.code`. The value of `filename` is only used to set `file` attribute (see [the spec][sm-spec]) in source map file. You can set option `sourceMap.url` to be `"inline"` and source map will be appended to code. You can also specify sourceRoot property to be included in source map: ```javascript var result = Terser.minify({"file1.js": "var a = function() {};"}, { sourceMap: { root: "http://example.com/src", url: "out.js.map" } }); ``` If you're compressing compiled JavaScript and have a source map for it, you can use `sourceMap.content`: ```javascript var result = Terser.minify({"compiled.js": "compiled code"}, { sourceMap: { content: "content from compiled.js.map", url: "minified.js.map" } }); // same as before, it returns `code` and `map` ``` If you're using the `X-SourceMap` header instead, you can just omit `sourceMap.url`. If you happen to need the source map as a raw object, set `sourceMap.asObject` to `true`. ## Parse options - `bare_returns` (default `false`) -- support top level `return` statements - `ecma` (default: `2017`) -- specify one of `5`, `2015`, `2016` or `2017`. Note: this setting is not presently enforced except for ES8 optional trailing commas in function parameter lists and calls with `ecma` `2017`. - `html5_comments` (default `true`) - `shebang` (default `true`) -- support `#!command` as the first line ## Compress options - `defaults` (default: `true`) -- Pass `false` to disable most default enabled `compress` transforms. Useful when you only want to enable a few `compress` options while disabling the rest. - `arrows` (default: `true`) -- Class and object literal methods are converted will also be converted to arrow expressions if the resultant code is shorter: `m(){return x}` becomes `m:()=>x`. To do this to regular ES5 functions which don't use `this` or `arguments`, see `unsafe_arrows`. - `arguments` (default: `false`) -- replace `arguments[index]` with function parameter name whenever possible. - `booleans` (default: `true`) -- various optimizations for boolean context, for example `!!a ? b : c → a ? b : c` - `booleans_as_integers` (default: `false`) -- Turn booleans into 0 and 1, also makes comparisons with booleans use `==` and `!=` instead of `===` and `!==`. - `collapse_vars` (default: `true`) -- Collapse single-use non-constant variables, side effects permitting. - `comparisons` (default: `true`) -- apply certain optimizations to binary nodes, e.g. `!(a <= b) → a > b` (only when `unsafe_comps`), attempts to negate binary nodes, e.g. `a = !b && !c && !d && !e → a=!(b||c||d||e)` etc. - `computed_props` (default: `true`) -- Transforms constant computed properties into regular ones: `{["computed"]: 1}` is converted to `{computed: 1}`. - `conditionals` (default: `true`) -- apply optimizations for `if`-s and conditional expressions - `dead_code` (default: `true`) -- remove unreachable code - `directives` (default: `true`) -- remove redundant or non-standard directives - `drop_console` (default: `false`) -- Pass `true` to discard calls to `console.*` functions. If you wish to drop a specific function call such as `console.info` and/or retain side effects from function arguments after dropping the function call then use `pure_funcs` instead. - `drop_debugger` (default: `true`) -- remove `debugger;` statements - `ecma` (default: `5`) -- Pass `2015` or greater to enable `compress` options that will transform ES5 code into smaller ES6+ equivalent forms. - `evaluate` (default: `true`) -- attempt to evaluate constant expressions - `expression` (default: `false`) -- Pass `true` to preserve completion values from terminal statements without `return`, e.g. in bookmarklets. - `global_defs` (default: `{}`) -- see [conditional compilation](#conditional-compilation) - `hoist_funs` (default: `false`) -- hoist function declarations - `hoist_props` (default: `true`) -- hoist properties from constant object and array literals into regular variables subject to a set of constraints. For example: `var o={p:1, q:2}; f(o.p, o.q);` is converted to `f(1, 2);`. Note: `hoist_props` works best with `mangle` enabled, the `compress` option `passes` set to `2` or higher, and the `compress` option `toplevel` enabled. - `hoist_vars` (default: `false`) -- hoist `var` declarations (this is `false` by default because it seems to increase the size of the output in general) - `if_return` (default: `true`) -- optimizations for if/return and if/continue - `inline` (default: `true`) -- inline calls to function with simple/`return` statement: - `false` -- same as `0` - `0` -- disabled inlining - `1` -- inline simple functions - `2` -- inline functions with arguments - `3` -- inline functions with arguments and variables - `true` -- same as `3` - `join_vars` (default: `true`) -- join consecutive `var` statements - `keep_classnames` (default: `false`) -- Pass `true` to prevent the compressor from discarding class names. Pass a regular expression to only keep class names matching that regex. See also: the `keep_classnames` [mangle option](#mangle). - `keep_fargs` (default: `true`) -- Prevents the compressor from discarding unused function arguments. You need this for code which relies on `Function.length`. - `keep_fnames` (default: `false`) -- Pass `true` to prevent the compressor from discarding function names. Pass a regular expression to only keep function names matching that regex. Useful for code relying on `Function.prototype.name`. See also: the `keep_fnames` [mangle option](#mangle). - `keep_infinity` (default: `false`) -- Pass `true` to prevent `Infinity` from being compressed into `1/0`, which may cause performance issues on Chrome. - `loops` (default: `true`) -- optimizations for `do`, `while` and `for` loops when we can statically determine the condition. - `module` (default `false`) -- Pass `true` when compressing an ES6 module. Strict mode is implied and the `toplevel` option as well. - `negate_iife` (default: `true`) -- negate "Immediately-Called Function Expressions" where the return value is discarded, to avoid the parens that the code generator would insert. - `passes` (default: `1`) -- The maximum number of times to run compress. In some cases more than one pass leads to further compressed code. Keep in mind more passes will take more time. - `properties` (default: `true`) -- rewrite property access using the dot notation, for example `foo["bar"] → foo.bar` - `pure_funcs` (default: `null`) -- You can pass an array of names and Terser will assume that those functions do not produce side effects. DANGER: will not check if the name is redefined in scope. An example case here, for instance `var q = Math.floor(a/b)`. If variable `q` is not used elsewhere, Terser will drop it, but will still keep the `Math.floor(a/b)`, not knowing what it does. You can pass `pure_funcs: [ 'Math.floor' ]` to let it know that this function won't produce any side effect, in which case the whole statement would get discarded. The current implementation adds some overhead (compression will be slower). - `pure_getters` (default: `"strict"`) -- If you pass `true` for this, Terser will assume that object property access (e.g. `foo.bar` or `foo["bar"]`) doesn't have any side effects. Specify `"strict"` to treat `foo.bar` as side-effect-free only when `foo` is certain to not throw, i.e. not `null` or `undefined`. - `reduce_funcs` (legacy option, safely ignored for backwards compatibility). - `reduce_vars` (default: `true`) -- Improve optimization on variables assigned with and used as constant values. - `sequences` (default: `true`) -- join consecutive simple statements using the comma operator. May be set to a positive integer to specify the maximum number of consecutive comma sequences that will be generated. If this option is set to `true` then the default `sequences` limit is `200`. Set option to `false` or `0` to disable. The smallest `sequences` length is `2`. A `sequences` value of `1` is grandfathered to be equivalent to `true` and as such means `200`. On rare occasions the default sequences limit leads to very slow compress times in which case a value of `20` or less is recommended. - `side_effects` (default: `true`) -- Pass `false` to disable potentially dropping function calls marked as "pure". A function call is marked as "pure" if a comment annotation `/*@__PURE__*/` or `/*#__PURE__*/` immediately precedes the call. For example: `/*@__PURE__*/foo();` - `switches` (default: `true`) -- de-duplicate and remove unreachable `switch` branches - `toplevel` (default: `false`) -- drop unreferenced functions (`"funcs"`) and/or variables (`"vars"`) in the top level scope (`false` by default, `true` to drop both unreferenced functions and variables) - `top_retain` (default: `null`) -- prevent specific toplevel functions and variables from `unused` removal (can be array, comma-separated, RegExp or function. Implies `toplevel`) - `typeofs` (default: `true`) -- Transforms `typeof foo == "undefined"` into `foo === void 0`. Note: recommend to set this value to `false` for IE10 and earlier versions due to known issues. - `unsafe` (default: `false`) -- apply "unsafe" transformations ([details](#the-unsafe-compress-option)). - `unsafe_arrows` (default: `false`) -- Convert ES5 style anonymous function expressions to arrow functions if the function body does not reference `this`. Note: it is not always safe to perform this conversion if code relies on the the function having a `prototype`, which arrow functions lack. This transform requires that the `ecma` compress option is set to `2015` or greater. - `unsafe_comps` (default: `false`) -- Reverse `<` and `<=` to `>` and `>=` to allow improved compression. This might be unsafe when an at least one of two operands is an object with computed values due the use of methods like `get`, or `valueOf`. This could cause change in execution order after operands in the comparison are switching. Compression only works if both `comparisons` and `unsafe_comps` are both set to true. - `unsafe_Function` (default: `false`) -- compress and mangle `Function(args, code)` when both `args` and `code` are string literals. - `unsafe_math` (default: `false`) -- optimize numerical expressions like `2 * x * 3` into `6 * x`, which may give imprecise floating point results. - `unsafe_symbols` (default: `false`) -- removes keys from native Symbol declarations, e.g `Symbol("kDog")` becomes `Symbol()`. - `unsafe_methods` (default: false) -- Converts `{ m: function(){} }` to `{ m(){} }`. `ecma` must be set to `6` or greater to enable this transform. If `unsafe_methods` is a RegExp then key/value pairs with keys matching the RegExp will be converted to concise methods. Note: if enabled there is a risk of getting a "`` is not a constructor" TypeError should any code try to `new` the former function. - `unsafe_proto` (default: `false`) -- optimize expressions like `Array.prototype.slice.call(a)` into `[].slice.call(a)` - `unsafe_regexp` (default: `false`) -- enable substitutions of variables with `RegExp` values the same way as if they are constants. - `unsafe_undefined` (default: `false`) -- substitute `void 0` if there is a variable named `undefined` in scope (variable name will be mangled, typically reduced to a single character) - `unused` (default: `true`) -- drop unreferenced functions and variables (simple direct variable assignments do not count as references unless set to `"keep_assign"`) - `warnings` (default: `false`) -- display warnings when dropping unreachable code or unused declarations etc. ## Mangle options - `eval` (default `false`) -- Pass `true` to mangle names visible in scopes where `eval` or `with` are used. - `keep_classnames` (default `false`) -- Pass `true` to not mangle class names. Pass a regular expression to only keep class names matching that regex. See also: the `keep_classnames` [compress option](#compress-options). - `keep_fnames` (default `false`) -- Pass `true` to not mangle function names. Pass a regular expression to only keep class names matching that regex. Useful for code relying on `Function.prototype.name`. See also: the `keep_fnames` [compress option](#compress-options). - `module` (default `false`) -- Pass `true` an ES6 modules, where the toplevel scope is not the global scope. Implies `toplevel`. - `reserved` (default `[]`) -- Pass an array of identifiers that should be excluded from mangling. Example: `["foo", "bar"]`. - `toplevel` (default `false`) -- Pass `true` to mangle names declared in the top level scope. - `safari10` (default `false`) -- Pass `true` to work around the Safari 10 loop iterator [bug](https://bugs.webkit.org/show_bug.cgi?id=171041) "Cannot declare a let variable twice". See also: the `safari10` [output option](#output-options). Examples: ```javascript // test.js var globalVar; function funcName(firstLongName, anotherLongName) { var myVariable = firstLongName + anotherLongName; } ``` ```javascript var code = fs.readFileSync("test.js", "utf8"); Terser.minify(code).code; // 'function funcName(a,n){}var globalVar;' Terser.minify(code, { mangle: { reserved: ['firstLongName'] } }).code; // 'function funcName(firstLongName,a){}var globalVar;' Terser.minify(code, { mangle: { toplevel: true } }).code; // 'function n(n,a){}var a;' ``` ### Mangle properties options - `builtins` (default: `false`) — Use `true` to allow the mangling of builtin DOM properties. Not recommended to override this setting. - `debug` (default: `false`) — Mangle names with the original name still present. Pass an empty string `""` to enable, or a non-empty string to set the debug suffix. - `keep_quoted` (default: `false`) — Only mangle unquoted property names. - `true` -- Quoted property names are automatically reserved and any unquoted property names will not be mangled. - `"strict"` -- Advanced, all unquoted property names are mangled unless explicitly reserved. - `regex` (default: `null`) — Pass a [RegExp literal or pattern string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp) to only mangle property matching the regular expression. - `reserved` (default: `[]`) — Do not mangle property names listed in the `reserved` array. - `undeclared` (default: `false`) - Mangle those names when they are accessed as properties of known top level variables but their declarations are never found in input code. May be useful when only minifying parts of a project. See [#397](https://github.com/terser/terser/issues/397) for more details. ## Output options The code generator tries to output shortest code possible by default. In case you want beautified output, pass `--beautify` (`-b`). Optionally you can pass additional arguments that control the code output: - `ascii_only` (default `false`) -- escape Unicode characters in strings and regexps (affects directives with non-ascii characters becoming invalid) - `beautify` (default `true`) -- whether to actually beautify the output. Passing `-b` will set this to true, but you might need to pass `-b` even when you want to generate minified code, in order to specify additional arguments, so you can use `-b beautify=false` to override it. - `braces` (default `false`) -- always insert braces in `if`, `for`, `do`, `while` or `with` statements, even if their body is a single statement. - `comments` (default `"some"`) -- by default it keeps JSDoc-style comments that contain "@license" or "@preserve", pass `true` or `"all"` to preserve all comments, `false` to omit comments in the output, a regular expression string (e.g. `/^!/`) or a function. - `ecma` (default `5`) -- set output printing mode. Set `ecma` to `2015` or greater to emit shorthand object properties - i.e.: `{a}` instead of `{a: a}`. The `ecma` option will only change the output in direct control of the beautifier. Non-compatible features in the abstract syntax tree will still be output as is. For example: an `ecma` setting of `5` will **not** convert ES6+ code to ES5. - `indent_level` (default `4`) - `indent_start` (default `0`) -- prefix all lines by that many spaces - `inline_script` (default `true`) -- escape HTML comments and the slash in occurrences of `` in strings - `keep_numbers` (default `false`) -- keep number literals as it was in original code (disables optimizations like converting `1000000` into `1e6`) - `keep_quoted_props` (default `false`) -- when turned on, prevents stripping quotes from property names in object literals. - `max_line_len` (default `false`) -- maximum line length (for minified code) - `preamble` (default `null`) -- when passed it must be a string and it will be prepended to the output literally. The source map will adjust for this text. Can be used to insert a comment containing licensing information, for example. - `quote_keys` (default `false`) -- pass `true` to quote all keys in literal objects - `quote_style` (default `0`) -- preferred quote style for strings (affects quoted property names and directives as well): - `0` -- prefers double quotes, switches to single quotes when there are more double quotes in the string itself. `0` is best for gzip size. - `1` -- always use single quotes - `2` -- always use double quotes - `3` -- always use the original quotes - `preserve_annotations` -- (default `false`) -- Preserve [Terser annotations](#annotations) in the output. - `safari10` (default `false`) -- set this option to `true` to work around the [Safari 10/11 await bug](https://bugs.webkit.org/show_bug.cgi?id=176685). See also: the `safari10` [mangle option](#mangle-options). - `semicolons` (default `true`) -- separate statements with semicolons. If you pass `false` then whenever possible we will use a newline instead of a semicolon, leading to more readable output of minified code (size before gzip could be smaller; size after gzip insignificantly larger). - `shebang` (default `true`) -- preserve shebang `#!` in preamble (bash scripts) - `webkit` (default `false`) -- enable workarounds for WebKit bugs. PhantomJS users should set this option to `true`. - `wrap_iife` (default `false`) -- pass `true` to wrap immediately invoked function expressions. See [#640](https://github.com/mishoo/UglifyJS2/issues/640) for more details. - `wrap_func_args` (default `true`) -- pass `false` if you do not want to wrap function expressions that are passed as arguments, in parenthesis. See [OptimizeJS](https://github.com/nolanlawson/optimize-js) for more details. # Miscellaneous ### Keeping copyright notices or other comments You can pass `--comments` to retain certain comments in the output. By default it will keep JSDoc-style comments that contain "@preserve", "@license" or "@cc_on" (conditional compilation for IE). You can pass `--comments all` to keep all the comments, or a valid JavaScript regexp to keep only comments that match this regexp. For example `--comments /^!/` will keep comments like `/*! Copyright Notice */`. Note, however, that there might be situations where comments are lost. For example: ```javascript function f() { /** @preserve Foo Bar */ function g() { // this function is never called } return something(); } ``` Even though it has "@preserve", the comment will be lost because the inner function `g` (which is the AST node to which the comment is attached to) is discarded by the compressor as not referenced. The safest comments where to place copyright information (or other info that needs to be kept in the output) are comments attached to toplevel nodes. ### The `unsafe` `compress` option It enables some transformations that *might* break code logic in certain contrived cases, but should be fine for most code. It assumes that standard built-in ECMAScript functions and classes have not been altered or replaced. You might want to try it on your own code; it should reduce the minified size. Some examples of the optimizations made when this option is enabled: - `new Array(1, 2, 3)` or `Array(1, 2, 3)` → `[ 1, 2, 3 ]` - `new Object()` → `{}` - `String(exp)` or `exp.toString()` → `"" + exp` - `new Object/RegExp/Function/Error/Array (...)` → we discard the `new` - `"foo bar".substr(4)` → `"bar"` ### Conditional compilation You can use the `--define` (`-d`) switch in order to declare global variables that Terser will assume to be constants (unless defined in scope). For example if you pass `--define DEBUG=false` then, coupled with dead code removal Terser will discard the following from the output: ```javascript if (DEBUG) { console.log("debug stuff"); } ``` You can specify nested constants in the form of `--define env.DEBUG=false`. Terser will warn about the condition being always false and about dropping unreachable code; for now there is no option to turn off only this specific warning, you can pass `warnings=false` to turn off *all* warnings. Another way of doing that is to declare your globals as constants in a separate file and include it into the build. For example you can have a `build/defines.js` file with the following: ```javascript var DEBUG = false; var PRODUCTION = true; // etc. ``` and build your code like this: terser build/defines.js js/foo.js js/bar.js... -c Terser will notice the constants and, since they cannot be altered, it will evaluate references to them to the value itself and drop unreachable code as usual. The build will contain the `const` declarations if you use them. If you are targeting < ES6 environments which does not support `const`, using `var` with `reduce_vars` (enabled by default) should suffice. ### Conditional compilation API You can also use conditional compilation via the programmatic API. With the difference that the property name is `global_defs` and is a compressor property: ```javascript var result = Terser.minify(fs.readFileSync("input.js", "utf8"), { compress: { dead_code: true, global_defs: { DEBUG: false } } }); ``` To replace an identifier with an arbitrary non-constant expression it is necessary to prefix the `global_defs` key with `"@"` to instruct Terser to parse the value as an expression: ```javascript Terser.minify("alert('hello');", { compress: { global_defs: { "@alert": "console.log" } } }).code; // returns: 'console.log("hello");' ``` Otherwise it would be replaced as string literal: ```javascript Terser.minify("alert('hello');", { compress: { global_defs: { "alert": "console.log" } } }).code; // returns: '"console.log"("hello");' ``` ### Using native Terser AST with `minify()` ```javascript // example: parse only, produce native Terser AST var result = Terser.minify(code, { parse: {}, compress: false, mangle: false, output: { ast: true, code: false // optional - faster if false } }); // result.ast contains native Terser AST ``` ```javascript // example: accept native Terser AST input and then compress and mangle // to produce both code and native AST. var result = Terser.minify(ast, { compress: {}, mangle: {}, output: { ast: true, code: true // optional - faster if false } }); // result.ast contains native Terser AST // result.code contains the minified code in string form. ``` ### Annotations Annotations in Terser are a way to tell it to treat a certain function call differently. The following annotations are available: * `/*@__INLINE__*/` - forces a function to be inlined somewhere. * `/*@__NOINLINE__*/` - Makes sure the called function is not inlined into the call site. * `/*@__PURE__*/` - Marks a function call as pure. That means, it can safely be dropped. You can use either a `@` sign at the start, or a `#`. Here are some examples on how to use them: ```javascript /*@__INLINE__*/ function_always_inlined_here() /*#__NOINLINE__*/ function_cant_be_inlined_into_here() const x = /*#__PURE__*/i_am_dropped_if_x_is_not_used() ``` ### Working with Terser AST Traversal and transformation of the native AST can be performed through [`TreeWalker`](https://github.com/fabiosantoscode/terser/blob/master/lib/ast.js) and [`TreeTransformer`](https://github.com/fabiosantoscode/terser/blob/master/lib/transform.js) respectively. Largely compatible native AST examples can be found in the original UglifyJS documentation. See: [tree walker](http://lisperator.net/uglifyjs/walk) and [tree transform](http://lisperator.net/uglifyjs/transform). ### ESTree / SpiderMonkey AST Terser has its own abstract syntax tree format; for [practical reasons](http://lisperator.net/blog/uglifyjs-why-not-switching-to-spidermonkey-ast/) we can't easily change to using the SpiderMonkey AST internally. However, Terser now has a converter which can import a SpiderMonkey AST. For example [Acorn][acorn] is a super-fast parser that produces a SpiderMonkey AST. It has a small CLI utility that parses one file and dumps the AST in JSON on the standard output. To use Terser to mangle and compress that: acorn file.js | terser -p spidermonkey -m -c The `-p spidermonkey` option tells Terser that all input files are not JavaScript, but JS code described in SpiderMonkey AST in JSON. Therefore we don't use our own parser in this case, but just transform that AST into our internal AST. ### Use Acorn for parsing More for fun, I added the `-p acorn` option which will use Acorn to do all the parsing. If you pass this option, Terser will `require("acorn")`. Acorn is really fast (e.g. 250ms instead of 380ms on some 650K code), but converting the SpiderMonkey tree that Acorn produces takes another 150ms so in total it's a bit more than just using Terser's own parser. [acorn]: https://github.com/ternjs/acorn [sm-spec]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k ### Terser Fast Minify Mode It's not well known, but whitespace removal and symbol mangling accounts for 95% of the size reduction in minified code for most JavaScript - not elaborate code transforms. One can simply disable `compress` to speed up Terser builds by 3 to 4 times. | d3.js | size | gzip size | time (s) | | --- | ---: | ---: | ---: | | original | 451,131 | 108,733 | - | | terser@3.7.5 mangle=false, compress=false | 316,600 | 85,245 | 0.82 | | terser@3.7.5 mangle=true, compress=false | 220,216 | 72,730 | 1.45 | | terser@3.7.5 mangle=true, compress=true | 212,046 | 70,954 | 5.87 | | babili@0.1.4 | 210,713 | 72,140 | 12.64 | | babel-minify@0.4.3 | 210,321 | 72,242 | 48.67 | | babel-minify@0.5.0-alpha.01eac1c3 | 210,421 | 72,238 | 14.17 | To enable fast minify mode from the CLI use: ``` terser file.js -m ``` To enable fast minify mode with the API use: ```js Terser.minify(code, { compress: false, mangle: true }); ``` #### Source maps and debugging Various `compress` transforms that simplify, rearrange, inline and remove code are known to have an adverse effect on debugging with source maps. This is expected as code is optimized and mappings are often simply not possible as some code no longer exists. For highest fidelity in source map debugging disable the `compress` option and just use `mangle`. ### Compiler assumptions To allow for better optimizations, the compiler makes various assumptions: - `.toString()` and `.valueOf()` don't have side effects, and for built-in objects they have not been overridden. - `undefined`, `NaN` and `Infinity` have not been externally redefined. - `arguments.callee`, `arguments.caller` and `Function.prototype.caller` are not used. - The code doesn't expect the contents of `Function.prototype.toString()` or `Error.prototype.stack` to be anything in particular. - Getting and setting properties on a plain object does not cause other side effects (using `.watch()` or `Proxy`). - Object properties can be added, removed and modified (not prevented with `Object.defineProperty()`, `Object.defineProperties()`, `Object.freeze()`, `Object.preventExtensions()` or `Object.seal()`). - `document.all` is not `== null` - Assigning properties to a class doesn't have side effects and does not throw. ### Build Tools and Adaptors using Terser https://www.npmjs.com/browse/depended/terser ### Replacing `uglify-es` with `terser` in a project using `yarn` A number of JS bundlers and uglify wrappers are still using buggy versions of `uglify-es` and have not yet upgraded to `terser`. If you are using `yarn` you can add the following alias to your project's `package.json` file: ```js "resolutions": { "uglify-es": "npm:terser" } ``` to use `terser` instead of `uglify-es` in all deeply nested dependencies without changing any code. Note: for this change to take effect you must run the following commands to remove the existing `yarn` lock file and reinstall all packages: ``` $ rm -rf node_modules yarn.lock $ yarn ``` # Reporting issues In the terser CLI we use [source-map-support](https://npmjs.com/source-map-support) to produce good error stacks. In your own app, you're expected to enable source-map-support (read their docs) to have nice stack traces that will make good issues. # README.md Patrons: *note*: You can support this project on patreon: patron. Check out [PATRONS.md](https://github.com/terser/terser/blob/master/PATRONS.md) for our first-tier patrons. These are the second-tier patrons. Great thanks for your support! * CKEditor ![](https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/15452278/f8548dcf48d740619071e8d614459280/1?token-time=2145916800&token-hash=SIQ54PhIPHv3M7CVz9LxS8_8v4sOw4H304HaXsXj8MM%3D) * 38elements ![](https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12501844/88e7fc5dd62d45c6a5626533bbd48cfb/1?token-time=2145916800&token-hash=c3AsQ5T0IQWic0zKxFHu-bGGQJkXQFvafvJ4bPerFR4%3D) ## Contributors ### Code Contributors This project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)]. ### Financial Contributors Become a financial contributor and help us sustain our community. [[Contribute](https://opencollective.com/terser/contribute)] #### Individuals #### Organizations Support this project with your organization. Your logo will show up here with a link to your website. [[Contribute](https://opencollective.com/terser/contribute)] node_modules/terser/node_modules/commander/index.js000066600000066311150425117220016626 0ustar00/** * Module dependencies. */ var EventEmitter = require('events').EventEmitter; var spawn = require('child_process').spawn; var path = require('path'); var dirname = path.dirname; var basename = path.basename; var fs = require('fs'); /** * Inherit `Command` from `EventEmitter.prototype`. */ require('util').inherits(Command, EventEmitter); /** * Expose the root command. */ exports = module.exports = new Command(); /** * Expose `Command`. */ exports.Command = Command; /** * Expose `Option`. */ exports.Option = Option; /** * Initialize a new `Option` with the given `flags` and `description`. * * @param {String} flags * @param {String} description * @api public */ function Option(flags, description) { this.flags = flags; this.required = flags.indexOf('<') >= 0; this.optional = flags.indexOf('[') >= 0; this.bool = flags.indexOf('-no-') === -1; flags = flags.split(/[ ,|]+/); if (flags.length > 1 && !/^[[<]/.test(flags[1])) this.short = flags.shift(); this.long = flags.shift(); this.description = description || ''; } /** * Return option name. * * @return {String} * @api private */ Option.prototype.name = function() { return this.long .replace('--', '') .replace('no-', ''); }; /** * Return option name, in a camelcase format that can be used * as a object attribute key. * * @return {String} * @api private */ Option.prototype.attributeName = function() { return camelcase(this.name()); }; /** * Check if `arg` matches the short or long flag. * * @param {String} arg * @return {Boolean} * @api private */ Option.prototype.is = function(arg) { return this.short === arg || this.long === arg; }; /** * Initialize a new `Command`. * * @param {String} name * @api public */ function Command(name) { this.commands = []; this.options = []; this._execs = {}; this._allowUnknownOption = false; this._args = []; this._name = name || ''; } /** * Add command `name`. * * The `.action()` callback is invoked when the * command `name` is specified via __ARGV__, * and the remaining arguments are applied to the * function for access. * * When the `name` is "*" an un-matched command * will be passed as the first arg, followed by * the rest of __ARGV__ remaining. * * Examples: * * program * .version('0.0.1') * .option('-C, --chdir ', 'change the working directory') * .option('-c, --config ', 'set config path. defaults to ./deploy.conf') * .option('-T, --no-tests', 'ignore test hook') * * program * .command('setup') * .description('run remote setup commands') * .action(function() { * console.log('setup'); * }); * * program * .command('exec ') * .description('run the given remote command') * .action(function(cmd) { * console.log('exec "%s"', cmd); * }); * * program * .command('teardown [otherDirs...]') * .description('run teardown commands') * .action(function(dir, otherDirs) { * console.log('dir "%s"', dir); * if (otherDirs) { * otherDirs.forEach(function (oDir) { * console.log('dir "%s"', oDir); * }); * } * }); * * program * .command('*') * .description('deploy the given env') * .action(function(env) { * console.log('deploying "%s"', env); * }); * * program.parse(process.argv); * * @param {String} name * @param {String} [desc] for git-style sub-commands * @return {Command} the new command * @api public */ Command.prototype.command = function(name, desc, opts) { if (typeof desc === 'object' && desc !== null) { opts = desc; desc = null; } opts = opts || {}; var args = name.split(/ +/); var cmd = new Command(args.shift()); if (desc) { cmd.description(desc); this.executables = true; this._execs[cmd._name] = true; if (opts.isDefault) this.defaultExecutable = cmd._name; } cmd._noHelp = !!opts.noHelp; this.commands.push(cmd); cmd.parseExpectedArgs(args); cmd.parent = this; if (desc) return this; return cmd; }; /** * Define argument syntax for the top-level command. * * @api public */ Command.prototype.arguments = function(desc) { return this.parseExpectedArgs(desc.split(/ +/)); }; /** * Add an implicit `help [cmd]` subcommand * which invokes `--help` for the given command. * * @api private */ Command.prototype.addImplicitHelpCommand = function() { this.command('help [cmd]', 'display help for [cmd]'); }; /** * Parse expected `args`. * * For example `["[type]"]` becomes `[{ required: false, name: 'type' }]`. * * @param {Array} args * @return {Command} for chaining * @api public */ Command.prototype.parseExpectedArgs = function(args) { if (!args.length) return; var self = this; args.forEach(function(arg) { var argDetails = { required: false, name: '', variadic: false }; switch (arg[0]) { case '<': argDetails.required = true; argDetails.name = arg.slice(1, -1); break; case '[': argDetails.name = arg.slice(1, -1); break; } if (argDetails.name.length > 3 && argDetails.name.slice(-3) === '...') { argDetails.variadic = true; argDetails.name = argDetails.name.slice(0, -3); } if (argDetails.name) { self._args.push(argDetails); } }); return this; }; /** * Register callback `fn` for the command. * * Examples: * * program * .command('help') * .description('display verbose help') * .action(function() { * // output help here * }); * * @param {Function} fn * @return {Command} for chaining * @api public */ Command.prototype.action = function(fn) { var self = this; var listener = function(args, unknown) { // Parse any so-far unknown options args = args || []; unknown = unknown || []; var parsed = self.parseOptions(unknown); // Output help if necessary outputHelpIfNecessary(self, parsed.unknown); // If there are still any unknown options, then we simply // die, unless someone asked for help, in which case we give it // to them, and then we die. if (parsed.unknown.length > 0) { self.unknownOption(parsed.unknown[0]); } // Leftover arguments need to be pushed back. Fixes issue #56 if (parsed.args.length) args = parsed.args.concat(args); self._args.forEach(function(arg, i) { if (arg.required && args[i] == null) { self.missingArgument(arg.name); } else if (arg.variadic) { if (i !== self._args.length - 1) { self.variadicArgNotLast(arg.name); } args[i] = args.splice(i); } }); // Always append ourselves to the end of the arguments, // to make sure we match the number of arguments the user // expects if (self._args.length) { args[self._args.length] = self; } else { args.push(self); } fn.apply(self, args); }; var parent = this.parent || this; var name = parent === this ? '*' : this._name; parent.on('command:' + name, listener); if (this._alias) parent.on('command:' + this._alias, listener); return this; }; /** * Define option with `flags`, `description` and optional * coercion `fn`. * * The `flags` string should contain both the short and long flags, * separated by comma, a pipe or space. The following are all valid * all will output this way when `--help` is used. * * "-p, --pepper" * "-p|--pepper" * "-p --pepper" * * Examples: * * // simple boolean defaulting to false * program.option('-p, --pepper', 'add pepper'); * * --pepper * program.pepper * // => Boolean * * // simple boolean defaulting to true * program.option('-C, --no-cheese', 'remove cheese'); * * program.cheese * // => true * * --no-cheese * program.cheese * // => false * * // required argument * program.option('-C, --chdir ', 'change the working directory'); * * --chdir /tmp * program.chdir * // => "/tmp" * * // optional argument * program.option('-c, --cheese [type]', 'add cheese [marble]'); * * @param {String} flags * @param {String} description * @param {Function|*} [fn] or default * @param {*} [defaultValue] * @return {Command} for chaining * @api public */ Command.prototype.option = function(flags, description, fn, defaultValue) { var self = this, option = new Option(flags, description), oname = option.name(), name = option.attributeName(); // default as 3rd arg if (typeof fn !== 'function') { if (fn instanceof RegExp) { var regex = fn; fn = function(val, def) { var m = regex.exec(val); return m ? m[0] : def; }; } else { defaultValue = fn; fn = null; } } // preassign default value only for --no-*, [optional], or if (!option.bool || option.optional || option.required) { // when --no-* we make sure default is true if (!option.bool) defaultValue = true; // preassign only if we have a default if (defaultValue !== undefined) { self[name] = defaultValue; option.defaultValue = defaultValue; } } // register the option this.options.push(option); // when it's passed assign the value // and conditionally invoke the callback this.on('option:' + oname, function(val) { // coercion if (val !== null && fn) { val = fn(val, self[name] === undefined ? defaultValue : self[name]); } // unassigned or bool if (typeof self[name] === 'boolean' || typeof self[name] === 'undefined') { // if no value, bool true, and we have a default, then use it! if (val == null) { self[name] = option.bool ? defaultValue || true : false; } else { self[name] = val; } } else if (val !== null) { // reassign self[name] = val; } }); return this; }; /** * Allow unknown options on the command line. * * @param {Boolean} arg if `true` or omitted, no error will be thrown * for unknown options. * @api public */ Command.prototype.allowUnknownOption = function(arg) { this._allowUnknownOption = arguments.length === 0 || arg; return this; }; /** * Parse `argv`, settings options and invoking commands when defined. * * @param {Array} argv * @return {Command} for chaining * @api public */ Command.prototype.parse = function(argv) { // implicit help if (this.executables) this.addImplicitHelpCommand(); // store raw args this.rawArgs = argv; // guess name this._name = this._name || basename(argv[1], '.js'); // github-style sub-commands with no sub-command if (this.executables && argv.length < 3 && !this.defaultExecutable) { // this user needs help argv.push('--help'); } // process argv var parsed = this.parseOptions(this.normalize(argv.slice(2))); var args = this.args = parsed.args; var result = this.parseArgs(this.args, parsed.unknown); // executable sub-commands var name = result.args[0]; var aliasCommand = null; // check alias of sub commands if (name) { aliasCommand = this.commands.filter(function(command) { return command.alias() === name; })[0]; } if (this._execs[name] === true) { return this.executeSubCommand(argv, args, parsed.unknown); } else if (aliasCommand) { // is alias of a subCommand args[0] = aliasCommand._name; return this.executeSubCommand(argv, args, parsed.unknown); } else if (this.defaultExecutable) { // use the default subcommand args.unshift(this.defaultExecutable); return this.executeSubCommand(argv, args, parsed.unknown); } return result; }; /** * Execute a sub-command executable. * * @param {Array} argv * @param {Array} args * @param {Array} unknown * @api private */ Command.prototype.executeSubCommand = function(argv, args, unknown) { args = args.concat(unknown); if (!args.length) this.help(); if (args[0] === 'help' && args.length === 1) this.help(); // --help if (args[0] === 'help') { args[0] = args[1]; args[1] = '--help'; } // executable var f = argv[1]; // name of the subcommand, link `pm-install` var bin = basename(f, path.extname(f)) + '-' + args[0]; // In case of globally installed, get the base dir where executable // subcommand file should be located at var baseDir; var resolvedLink = fs.realpathSync(f); baseDir = dirname(resolvedLink); // prefer local `./` to bin in the $PATH var localBin = path.join(baseDir, bin); // whether bin file is a js script with explicit `.js` or `.ts` extension var isExplicitJS = false; if (exists(localBin + '.js')) { bin = localBin + '.js'; isExplicitJS = true; } else if (exists(localBin + '.ts')) { bin = localBin + '.ts'; isExplicitJS = true; } else if (exists(localBin)) { bin = localBin; } args = args.slice(1); var proc; if (process.platform !== 'win32') { if (isExplicitJS) { args.unshift(bin); // add executable arguments to spawn args = (process.execArgv || []).concat(args); proc = spawn(process.argv[0], args, { stdio: 'inherit', customFds: [0, 1, 2] }); } else { proc = spawn(bin, args, { stdio: 'inherit', customFds: [0, 1, 2] }); } } else { args.unshift(bin); proc = spawn(process.execPath, args, { stdio: 'inherit' }); } var signals = ['SIGUSR1', 'SIGUSR2', 'SIGTERM', 'SIGINT', 'SIGHUP']; signals.forEach(function(signal) { process.on(signal, function() { if (proc.killed === false && proc.exitCode === null) { proc.kill(signal); } }); }); proc.on('close', process.exit.bind(process)); proc.on('error', function(err) { if (err.code === 'ENOENT') { console.error('error: %s(1) does not exist, try --help', bin); } else if (err.code === 'EACCES') { console.error('error: %s(1) not executable. try chmod or run with root', bin); } process.exit(1); }); // Store the reference to the child process this.runningCommand = proc; }; /** * Normalize `args`, splitting joined short flags. For example * the arg "-abc" is equivalent to "-a -b -c". * This also normalizes equal sign and splits "--abc=def" into "--abc def". * * @param {Array} args * @return {Array} * @api private */ Command.prototype.normalize = function(args) { var ret = [], arg, lastOpt, index; for (var i = 0, len = args.length; i < len; ++i) { arg = args[i]; if (i > 0) { lastOpt = this.optionFor(args[i - 1]); } if (arg === '--') { // Honor option terminator ret = ret.concat(args.slice(i)); break; } else if (lastOpt && lastOpt.required) { ret.push(arg); } else if (arg.length > 1 && arg[0] === '-' && arg[1] !== '-') { arg.slice(1).split('').forEach(function(c) { ret.push('-' + c); }); } else if (/^--/.test(arg) && ~(index = arg.indexOf('='))) { ret.push(arg.slice(0, index), arg.slice(index + 1)); } else { ret.push(arg); } } return ret; }; /** * Parse command `args`. * * When listener(s) are available those * callbacks are invoked, otherwise the "*" * event is emitted and those actions are invoked. * * @param {Array} args * @return {Command} for chaining * @api private */ Command.prototype.parseArgs = function(args, unknown) { var name; if (args.length) { name = args[0]; if (this.listeners('command:' + name).length) { this.emit('command:' + args.shift(), args, unknown); } else { this.emit('command:*', args); } } else { outputHelpIfNecessary(this, unknown); // If there were no args and we have unknown options, // then they are extraneous and we need to error. if (unknown.length > 0) { this.unknownOption(unknown[0]); } if (this.commands.length === 0 && this._args.filter(function(a) { return a.required; }).length === 0) { this.emit('command:*'); } } return this; }; /** * Return an option matching `arg` if any. * * @param {String} arg * @return {Option} * @api private */ Command.prototype.optionFor = function(arg) { for (var i = 0, len = this.options.length; i < len; ++i) { if (this.options[i].is(arg)) { return this.options[i]; } } }; /** * Parse options from `argv` returning `argv` * void of these options. * * @param {Array} argv * @return {Array} * @api public */ Command.prototype.parseOptions = function(argv) { var args = [], len = argv.length, literal, option, arg; var unknownOptions = []; // parse options for (var i = 0; i < len; ++i) { arg = argv[i]; // literal args after -- if (literal) { args.push(arg); continue; } if (arg === '--') { literal = true; continue; } // find matching Option option = this.optionFor(arg); // option is defined if (option) { // requires arg if (option.required) { arg = argv[++i]; if (arg == null) return this.optionMissingArgument(option); this.emit('option:' + option.name(), arg); // optional arg } else if (option.optional) { arg = argv[i + 1]; if (arg == null || (arg[0] === '-' && arg !== '-')) { arg = null; } else { ++i; } this.emit('option:' + option.name(), arg); // bool } else { this.emit('option:' + option.name()); } continue; } // looks like an option if (arg.length > 1 && arg[0] === '-') { unknownOptions.push(arg); // If the next argument looks like it might be // an argument for this option, we pass it on. // If it isn't, then it'll simply be ignored if ((i + 1) < argv.length && argv[i + 1][0] !== '-') { unknownOptions.push(argv[++i]); } continue; } // arg args.push(arg); } return { args: args, unknown: unknownOptions }; }; /** * Return an object containing options as key-value pairs * * @return {Object} * @api public */ Command.prototype.opts = function() { var result = {}, len = this.options.length; for (var i = 0; i < len; i++) { var key = this.options[i].attributeName(); result[key] = key === this._versionOptionName ? this._version : this[key]; } return result; }; /** * Argument `name` is missing. * * @param {String} name * @api private */ Command.prototype.missingArgument = function(name) { console.error("error: missing required argument `%s'", name); process.exit(1); }; /** * `Option` is missing an argument, but received `flag` or nothing. * * @param {String} option * @param {String} flag * @api private */ Command.prototype.optionMissingArgument = function(option, flag) { if (flag) { console.error("error: option `%s' argument missing, got `%s'", option.flags, flag); } else { console.error("error: option `%s' argument missing", option.flags); } process.exit(1); }; /** * Unknown option `flag`. * * @param {String} flag * @api private */ Command.prototype.unknownOption = function(flag) { if (this._allowUnknownOption) return; console.error("error: unknown option `%s'", flag); process.exit(1); }; /** * Variadic argument with `name` is not the last argument as required. * * @param {String} name * @api private */ Command.prototype.variadicArgNotLast = function(name) { console.error("error: variadic arguments must be last `%s'", name); process.exit(1); }; /** * Set the program version to `str`. * * This method auto-registers the "-V, --version" flag * which will print the version number when passed. * * @param {String} str * @param {String} [flags] * @return {Command} for chaining * @api public */ Command.prototype.version = function(str, flags) { if (arguments.length === 0) return this._version; this._version = str; flags = flags || '-V, --version'; var versionOption = new Option(flags, 'output the version number'); this._versionOptionName = versionOption.long.substr(2) || 'version'; this.options.push(versionOption); this.on('option:' + this._versionOptionName, function() { process.stdout.write(str + '\n'); process.exit(0); }); return this; }; /** * Set the description to `str`. * * @param {String} str * @param {Object} argsDescription * @return {String|Command} * @api public */ Command.prototype.description = function(str, argsDescription) { if (arguments.length === 0) return this._description; this._description = str; this._argsDescription = argsDescription; return this; }; /** * Set an alias for the command * * @param {String} alias * @return {String|Command} * @api public */ Command.prototype.alias = function(alias) { var command = this; if (this.commands.length !== 0) { command = this.commands[this.commands.length - 1]; } if (arguments.length === 0) return command._alias; if (alias === command._name) throw new Error('Command alias can\'t be the same as its name'); command._alias = alias; return this; }; /** * Set / get the command usage `str`. * * @param {String} str * @return {String|Command} * @api public */ Command.prototype.usage = function(str) { var args = this._args.map(function(arg) { return humanReadableArgName(arg); }); var usage = '[options]' + (this.commands.length ? ' [command]' : '') + (this._args.length ? ' ' + args.join(' ') : ''); if (arguments.length === 0) return this._usage || usage; this._usage = str; return this; }; /** * Get or set the name of the command * * @param {String} str * @return {String|Command} * @api public */ Command.prototype.name = function(str) { if (arguments.length === 0) return this._name; this._name = str; return this; }; /** * Return prepared commands. * * @return {Array} * @api private */ Command.prototype.prepareCommands = function() { return this.commands.filter(function(cmd) { return !cmd._noHelp; }).map(function(cmd) { var args = cmd._args.map(function(arg) { return humanReadableArgName(arg); }).join(' '); return [ cmd._name + (cmd._alias ? '|' + cmd._alias : '') + (cmd.options.length ? ' [options]' : '') + (args ? ' ' + args : ''), cmd._description ]; }); }; /** * Return the largest command length. * * @return {Number} * @api private */ Command.prototype.largestCommandLength = function() { var commands = this.prepareCommands(); return commands.reduce(function(max, command) { return Math.max(max, command[0].length); }, 0); }; /** * Return the largest option length. * * @return {Number} * @api private */ Command.prototype.largestOptionLength = function() { var options = [].slice.call(this.options); options.push({ flags: '-h, --help' }); return options.reduce(function(max, option) { return Math.max(max, option.flags.length); }, 0); }; /** * Return the largest arg length. * * @return {Number} * @api private */ Command.prototype.largestArgLength = function() { return this._args.reduce(function(max, arg) { return Math.max(max, arg.name.length); }, 0); }; /** * Return the pad width. * * @return {Number} * @api private */ Command.prototype.padWidth = function() { var width = this.largestOptionLength(); if (this._argsDescription && this._args.length) { if (this.largestArgLength() > width) { width = this.largestArgLength(); } } if (this.commands && this.commands.length) { if (this.largestCommandLength() > width) { width = this.largestCommandLength(); } } return width; }; /** * Return help for options. * * @return {String} * @api private */ Command.prototype.optionHelp = function() { var width = this.padWidth(); // Append the help information return this.options.map(function(option) { return pad(option.flags, width) + ' ' + option.description + ((option.bool && option.defaultValue !== undefined) ? ' (default: ' + JSON.stringify(option.defaultValue) + ')' : ''); }).concat([pad('-h, --help', width) + ' ' + 'output usage information']) .join('\n'); }; /** * Return command help documentation. * * @return {String} * @api private */ Command.prototype.commandHelp = function() { if (!this.commands.length) return ''; var commands = this.prepareCommands(); var width = this.padWidth(); return [ 'Commands:', commands.map(function(cmd) { var desc = cmd[1] ? ' ' + cmd[1] : ''; return (desc ? pad(cmd[0], width) : cmd[0]) + desc; }).join('\n').replace(/^/gm, ' '), '' ].join('\n'); }; /** * Return program help documentation. * * @return {String} * @api private */ Command.prototype.helpInformation = function() { var desc = []; if (this._description) { desc = [ this._description, '' ]; var argsDescription = this._argsDescription; if (argsDescription && this._args.length) { var width = this.padWidth(); desc.push('Arguments:'); desc.push(''); this._args.forEach(function(arg) { desc.push(' ' + pad(arg.name, width) + ' ' + argsDescription[arg.name]); }); desc.push(''); } } var cmdName = this._name; if (this._alias) { cmdName = cmdName + '|' + this._alias; } var usage = [ 'Usage: ' + cmdName + ' ' + this.usage(), '' ]; var cmds = []; var commandHelp = this.commandHelp(); if (commandHelp) cmds = [commandHelp]; var options = [ 'Options:', '' + this.optionHelp().replace(/^/gm, ' '), '' ]; return usage .concat(desc) .concat(options) .concat(cmds) .join('\n'); }; /** * Output help information for this command * * @api public */ Command.prototype.outputHelp = function(cb) { if (!cb) { cb = function(passthru) { return passthru; }; } process.stdout.write(cb(this.helpInformation())); this.emit('--help'); }; /** * Output help information and exit. * * @api public */ Command.prototype.help = function(cb) { this.outputHelp(cb); process.exit(); }; /** * Camel-case the given `flag` * * @param {String} flag * @return {String} * @api private */ function camelcase(flag) { return flag.split('-').reduce(function(str, word) { return str + word[0].toUpperCase() + word.slice(1); }); } /** * Pad `str` to `width`. * * @param {String} str * @param {Number} width * @return {String} * @api private */ function pad(str, width) { var len = Math.max(0, width - str.length); return str + Array(len + 1).join(' '); } /** * Output help information if necessary * * @param {Command} command to output help for * @param {Array} array of options to search for -h or --help * @api private */ function outputHelpIfNecessary(cmd, options) { options = options || []; for (var i = 0; i < options.length; i++) { if (options[i] === '--help' || options[i] === '-h') { cmd.outputHelp(); process.exit(0); } } } /** * Takes an argument an returns its human readable equivalent for help usage. * * @param {Object} arg * @return {String} * @api private */ function humanReadableArgName(arg) { var nameOutput = arg.name + (arg.variadic === true ? '...' : ''); return arg.required ? '<' + nameOutput + '>' : '[' + nameOutput + ']'; } // for versions before node v0.8 when there weren't `fs.existsSync` function exists(file) { try { if (fs.statSync(file).isFile()) { return true; } } catch (e) { return false; } } node_modules/terser/node_modules/commander/typings/index.d.ts000066600000020474150425117220020557 0ustar00// Type definitions for commander 2.11 // Project: https://github.com/visionmedia/commander.js // Definitions by: Alan Agius , Marcelo Dezem , vvakame , Jules Randolph // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped declare namespace local { class Option { flags: string; required: boolean; optional: boolean; bool: boolean; short?: string; long: string; description: string; /** * Initialize a new `Option` with the given `flags` and `description`. * * @param {string} flags * @param {string} [description] */ constructor(flags: string, description?: string); } class Command extends NodeJS.EventEmitter { [key: string]: any; args: string[]; /** * Initialize a new `Command`. * * @param {string} [name] */ constructor(name?: string); /** * Set the program version to `str`. * * This method auto-registers the "-V, --version" flag * which will print the version number when passed. * * @param {string} str * @param {string} [flags] * @returns {Command} for chaining */ version(str: string, flags?: string): Command; /** * Add command `name`. * * The `.action()` callback is invoked when the * command `name` is specified via __ARGV__, * and the remaining arguments are applied to the * function for access. * * When the `name` is "*" an un-matched command * will be passed as the first arg, followed by * the rest of __ARGV__ remaining. * * @example * program * .version('0.0.1') * .option('-C, --chdir ', 'change the working directory') * .option('-c, --config ', 'set config path. defaults to ./deploy.conf') * .option('-T, --no-tests', 'ignore test hook') * * program * .command('setup') * .description('run remote setup commands') * .action(function() { * console.log('setup'); * }); * * program * .command('exec ') * .description('run the given remote command') * .action(function(cmd) { * console.log('exec "%s"', cmd); * }); * * program * .command('teardown [otherDirs...]') * .description('run teardown commands') * .action(function(dir, otherDirs) { * console.log('dir "%s"', dir); * if (otherDirs) { * otherDirs.forEach(function (oDir) { * console.log('dir "%s"', oDir); * }); * } * }); * * program * .command('*') * .description('deploy the given env') * .action(function(env) { * console.log('deploying "%s"', env); * }); * * program.parse(process.argv); * * @param {string} name * @param {string} [desc] for git-style sub-commands * @param {CommandOptions} [opts] command options * @returns {Command} the new command */ command(name: string, desc?: string, opts?: commander.CommandOptions): Command; /** * Define argument syntax for the top-level command. * * @param {string} desc * @returns {Command} for chaining */ arguments(desc: string): Command; /** * Parse expected `args`. * * For example `["[type]"]` becomes `[{ required: false, name: 'type' }]`. * * @param {string[]} args * @returns {Command} for chaining */ parseExpectedArgs(args: string[]): Command; /** * Register callback `fn` for the command. * * @example * program * .command('help') * .description('display verbose help') * .action(function() { * // output help here * }); * * @param {(...args: any[]) => void} fn * @returns {Command} for chaining */ action(fn: (...args: any[]) => void): Command; /** * Define option with `flags`, `description` and optional * coercion `fn`. * * The `flags` string should contain both the short and long flags, * separated by comma, a pipe or space. The following are all valid * all will output this way when `--help` is used. * * "-p, --pepper" * "-p|--pepper" * "-p --pepper" * * @example * // simple boolean defaulting to false * program.option('-p, --pepper', 'add pepper'); * * --pepper * program.pepper * // => Boolean * * // simple boolean defaulting to true * program.option('-C, --no-cheese', 'remove cheese'); * * program.cheese * // => true * * --no-cheese * program.cheese * // => false * * // required argument * program.option('-C, --chdir ', 'change the working directory'); * * --chdir /tmp * program.chdir * // => "/tmp" * * // optional argument * program.option('-c, --cheese [type]', 'add cheese [marble]'); * * @param {string} flags * @param {string} [description] * @param {((arg1: any, arg2: any) => void) | RegExp} [fn] function or default * @param {*} [defaultValue] * @returns {Command} for chaining */ option(flags: string, description?: string, fn?: ((arg1: any, arg2: any) => void) | RegExp, defaultValue?: any): Command; option(flags: string, description?: string, defaultValue?: any): Command; /** * Allow unknown options on the command line. * * @param {boolean} [arg] if `true` or omitted, no error will be thrown for unknown options. * @returns {Command} for chaining */ allowUnknownOption(arg?: boolean): Command; /** * Parse `argv`, settings options and invoking commands when defined. * * @param {string[]} argv * @returns {Command} for chaining */ parse(argv: string[]): Command; /** * Parse options from `argv` returning `argv` void of these options. * * @param {string[]} argv * @returns {ParseOptionsResult} */ parseOptions(argv: string[]): commander.ParseOptionsResult; /** * Return an object containing options as key-value pairs * * @returns {{[key: string]: any}} */ opts(): { [key: string]: any }; /** * Set the description to `str`. * * @param {string} str * @param {{[argName: string]: string}} argsDescription * @return {(Command | string)} */ description(str: string, argsDescription?: {[argName: string]: string}): Command; description(): string; /** * Set an alias for the command. * * @param {string} alias * @return {(Command | string)} */ alias(alias: string): Command; alias(): string; /** * Set or get the command usage. * * @param {string} str * @return {(Command | string)} */ usage(str: string): Command; usage(): string; /** * Set the name of the command. * * @param {string} str * @return {Command} */ name(str: string): Command; /** * Get the name of the command. * * @return {string} */ name(): string; /** * Output help information for this command. * * @param {(str: string) => string} [cb] */ outputHelp(cb?: (str: string) => string): void; /** Output help information and exit. * * @param {(str: string) => string} [cb] */ help(cb?: (str: string) => string): never; } } declare namespace commander { type Command = local.Command type Option = local.Option interface CommandOptions { noHelp?: boolean; isDefault?: boolean; } interface ParseOptionsResult { args: string[]; unknown: string[]; } interface CommanderStatic extends Command { Command: typeof local.Command; Option: typeof local.Option; CommandOptions: CommandOptions; ParseOptionsResult: ParseOptionsResult; } } declare const commander: commander.CommanderStatic; export = commander; node_modules/terser/node_modules/commander/Readme.md000066600000030757150425117220016705 0ustar00# Commander.js [![Build Status](https://api.travis-ci.org/tj/commander.js.svg?branch=master)](http://travis-ci.org/tj/commander.js) [![NPM Version](http://img.shields.io/npm/v/commander.svg?style=flat)](https://www.npmjs.org/package/commander) [![NPM Downloads](https://img.shields.io/npm/dm/commander.svg?style=flat)](https://npmcharts.com/compare/commander?minimal=true) [![Install Size](https://packagephobia.now.sh/badge?p=commander)](https://packagephobia.now.sh/result?p=commander) [![Join the chat at https://gitter.im/tj/commander.js](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/tj/commander.js?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) The complete solution for [node.js](http://nodejs.org) command-line interfaces, inspired by Ruby's [commander](https://github.com/commander-rb/commander). [API documentation](http://tj.github.com/commander.js/) ## Installation $ npm install commander ## Option parsing Options with commander are defined with the `.option()` method, also serving as documentation for the options. The example below parses args and options from `process.argv`, leaving remaining args as the `program.args` array which were not consumed by options. ```js #!/usr/bin/env node /** * Module dependencies. */ var program = require('commander'); program .version('0.1.0') .option('-p, --peppers', 'Add peppers') .option('-P, --pineapple', 'Add pineapple') .option('-b, --bbq-sauce', 'Add bbq sauce') .option('-c, --cheese [type]', 'Add the specified type of cheese [marble]', 'marble') .parse(process.argv); console.log('you ordered a pizza with:'); if (program.peppers) console.log(' - peppers'); if (program.pineapple) console.log(' - pineapple'); if (program.bbqSauce) console.log(' - bbq'); console.log(' - %s cheese', program.cheese); ``` Short flags may be passed as a single arg, for example `-abc` is equivalent to `-a -b -c`. Multi-word options such as "--template-engine" are camel-cased, becoming `program.templateEngine` etc. Note that multi-word options starting with `--no` prefix negate the boolean value of the following word. For example, `--no-sauce` sets the value of `program.sauce` to false. ```js #!/usr/bin/env node /** * Module dependencies. */ var program = require('commander'); program .option('--no-sauce', 'Remove sauce') .parse(process.argv); console.log('you ordered a pizza'); if (program.sauce) console.log(' with sauce'); else console.log(' without sauce'); ``` To get string arguments from options you will need to use angle brackets <> for required inputs or square brackets [] for optional inputs. e.g. ```.option('-m --myarg [myVar]', 'my super cool description')``` Then to access the input if it was passed in. e.g. ```var myInput = program.myarg``` **NOTE**: If you pass a argument without using brackets the example above will return true and not the value passed in. ## Version option Calling the `version` implicitly adds the `-V` and `--version` options to the command. When either of these options is present, the command prints the version number and exits. $ ./examples/pizza -V 0.0.1 If you want your program to respond to the `-v` option instead of the `-V` option, simply pass custom flags to the `version` method using the same syntax as the `option` method. ```js program .version('0.0.1', '-v, --version') ``` The version flags can be named anything, but the long option is required. ## Command-specific options You can attach options to a command. ```js #!/usr/bin/env node var program = require('commander'); program .command('rm ') .option('-r, --recursive', 'Remove recursively') .action(function (dir, cmd) { console.log('remove ' + dir + (cmd.recursive ? ' recursively' : '')) }) program.parse(process.argv) ``` A command's options are validated when the command is used. Any unknown options will be reported as an error. However, if an action-based command does not define an action, then the options are not validated. ## Coercion ```js function range(val) { return val.split('..').map(Number); } function list(val) { return val.split(','); } function collect(val, memo) { memo.push(val); return memo; } function increaseVerbosity(v, total) { return total + 1; } program .version('0.1.0') .usage('[options] ') .option('-i, --integer ', 'An integer argument', parseInt) .option('-f, --float ', 'A float argument', parseFloat) .option('-r, --range ..', 'A range', range) .option('-l, --list ', 'A list', list) .option('-o, --optional [value]', 'An optional value') .option('-c, --collect [value]', 'A repeatable value', collect, []) .option('-v, --verbose', 'A value that can be increased', increaseVerbosity, 0) .parse(process.argv); console.log(' int: %j', program.integer); console.log(' float: %j', program.float); console.log(' optional: %j', program.optional); program.range = program.range || []; console.log(' range: %j..%j', program.range[0], program.range[1]); console.log(' list: %j', program.list); console.log(' collect: %j', program.collect); console.log(' verbosity: %j', program.verbose); console.log(' args: %j', program.args); ``` ## Regular Expression ```js program .version('0.1.0') .option('-s --size ', 'Pizza size', /^(large|medium|small)$/i, 'medium') .option('-d --drink [drink]', 'Drink', /^(coke|pepsi|izze)$/i) .parse(process.argv); console.log(' size: %j', program.size); console.log(' drink: %j', program.drink); ``` ## Variadic arguments The last argument of a command can be variadic, and only the last argument. To make an argument variadic you have to append `...` to the argument name. Here is an example: ```js #!/usr/bin/env node /** * Module dependencies. */ var program = require('commander'); program .version('0.1.0') .command('rmdir [otherDirs...]') .action(function (dir, otherDirs) { console.log('rmdir %s', dir); if (otherDirs) { otherDirs.forEach(function (oDir) { console.log('rmdir %s', oDir); }); } }); program.parse(process.argv); ``` An `Array` is used for the value of a variadic argument. This applies to `program.args` as well as the argument passed to your action as demonstrated above. ## Specify the argument syntax ```js #!/usr/bin/env node var program = require('commander'); program .version('0.1.0') .arguments(' [env]') .action(function (cmd, env) { cmdValue = cmd; envValue = env; }); program.parse(process.argv); if (typeof cmdValue === 'undefined') { console.error('no command given!'); process.exit(1); } console.log('command:', cmdValue); console.log('environment:', envValue || "no environment given"); ``` Angled brackets (e.g. ``) indicate required input. Square brackets (e.g. `[env]`) indicate optional input. ## Git-style sub-commands ```js // file: ./examples/pm var program = require('commander'); program .version('0.1.0') .command('install [name]', 'install one or more packages') .command('search [query]', 'search with optional query') .command('list', 'list packages installed', {isDefault: true}) .parse(process.argv); ``` When `.command()` is invoked with a description argument, no `.action(callback)` should be called to handle sub-commands, otherwise there will be an error. This tells commander that you're going to use separate executables for sub-commands, much like `git(1)` and other popular tools. The commander will try to search the executables in the directory of the entry script (like `./examples/pm`) with the name `program-command`, like `pm-install`, `pm-search`. Options can be passed with the call to `.command()`. Specifying `true` for `opts.noHelp` will remove the subcommand from the generated help output. Specifying `true` for `opts.isDefault` will run the subcommand if no other subcommand is specified. If the program is designed to be installed globally, make sure the executables have proper modes, like `755`. ### `--harmony` You can enable `--harmony` option in two ways: * Use `#! /usr/bin/env node --harmony` in the sub-commands scripts. Note some os version don’t support this pattern. * Use the `--harmony` option when call the command, like `node --harmony examples/pm publish`. The `--harmony` option will be preserved when spawning sub-command process. ## Automated --help The help information is auto-generated based on the information commander already knows about your program, so the following `--help` info is for free: ``` $ ./examples/pizza --help Usage: pizza [options] An application for pizzas ordering Options: -h, --help output usage information -V, --version output the version number -p, --peppers Add peppers -P, --pineapple Add pineapple -b, --bbq Add bbq sauce -c, --cheese Add the specified type of cheese [marble] -C, --no-cheese You do not want any cheese ``` ## Custom help You can display arbitrary `-h, --help` information by listening for "--help". Commander will automatically exit once you are done so that the remainder of your program does not execute causing undesired behaviors, for example in the following executable "stuff" will not output when `--help` is used. ```js #!/usr/bin/env node /** * Module dependencies. */ var program = require('commander'); program .version('0.1.0') .option('-f, --foo', 'enable some foo') .option('-b, --bar', 'enable some bar') .option('-B, --baz', 'enable some baz'); // must be before .parse() since // node's emit() is immediate program.on('--help', function(){ console.log('') console.log('Examples:'); console.log(' $ custom-help --help'); console.log(' $ custom-help -h'); }); program.parse(process.argv); console.log('stuff'); ``` Yields the following help output when `node script-name.js -h` or `node script-name.js --help` are run: ``` Usage: custom-help [options] Options: -h, --help output usage information -V, --version output the version number -f, --foo enable some foo -b, --bar enable some bar -B, --baz enable some baz Examples: $ custom-help --help $ custom-help -h ``` ## .outputHelp(cb) Output help information without exiting. Optional callback cb allows post-processing of help text before it is displayed. If you want to display help by default (e.g. if no command was provided), you can use something like: ```js var program = require('commander'); var colors = require('colors'); program .version('0.1.0') .command('getstream [url]', 'get stream URL') .parse(process.argv); if (!process.argv.slice(2).length) { program.outputHelp(make_red); } function make_red(txt) { return colors.red(txt); //display the help text in red on the console } ``` ## .help(cb) Output help information and exit immediately. Optional callback cb allows post-processing of help text before it is displayed. ## Custom event listeners You can execute custom actions by listening to command and option events. ```js program.on('option:verbose', function () { process.env.VERBOSE = this.verbose; }); // error on unknown commands program.on('command:*', function () { console.error('Invalid command: %s\nSee --help for a list of available commands.', program.args.join(' ')); process.exit(1); }); ``` ## Examples ```js var program = require('commander'); program .version('0.1.0') .option('-C, --chdir ', 'change the working directory') .option('-c, --config ', 'set config path. defaults to ./deploy.conf') .option('-T, --no-tests', 'ignore test hook'); program .command('setup [env]') .description('run setup commands for all envs') .option("-s, --setup_mode [mode]", "Which setup mode to use") .action(function(env, options){ var mode = options.setup_mode || "normal"; env = env || 'all'; console.log('setup for %s env(s) with %s mode', env, mode); }); program .command('exec ') .alias('ex') .description('execute the given remote cmd') .option("-e, --exec_mode ", "Which exec mode to use") .action(function(cmd, options){ console.log('exec "%s" using %s mode', cmd, options.exec_mode); }).on('--help', function() { console.log(''); console.log('Examples:'); console.log(''); console.log(' $ deploy exec sequential'); console.log(' $ deploy exec async'); }); program .command('*') .action(function(env){ console.log('deploying "%s"', env); }); program.parse(process.argv); ``` More Demos can be found in the [examples](https://github.com/tj/commander.js/tree/master/examples) directory. ## License [MIT](https://github.com/tj/commander.js/blob/master/LICENSE) node_modules/terser/node_modules/commander/CHANGELOG.md000066600000026114150425117220016767 0ustar002.20.3 / 2019-10-11 ================== * Support Node.js 0.10 (Revert #1059) * Ran "npm unpublish commander@2.20.2". There is no 2.20.2. 2.20.1 / 2019-09-29 ================== * Improve executable subcommand tracking * Update dev dependencies 2.20.0 / 2019-04-02 ================== * fix: resolve symbolic links completely when hunting for subcommands (#935) * Update index.d.ts (#930) * Update Readme.md (#924) * Remove --save option as it isn't required anymore (#918) * Add link to the license file (#900) * Added example of receiving args from options (#858) * Added missing semicolon (#882) * Add extension to .eslintrc (#876) 2.19.0 / 2018-10-02 ================== * Removed newline after Options and Commands headers (#864) * Bugfix - Error output (#862) * Fix to change default value to string (#856) 2.18.0 / 2018-09-07 ================== * Standardize help output (#853) * chmod 644 travis.yml (#851) * add support for execute typescript subcommand via ts-node (#849) 2.17.1 / 2018-08-07 ================== * Fix bug in command emit (#844) 2.17.0 / 2018-08-03 ================== * fixed newline output after help information (#833) * Fix to emit the action even without command (#778) * npm update (#823) 2.16.0 / 2018-06-29 ================== * Remove Makefile and `test/run` (#821) * Make 'npm test' run on Windows (#820) * Add badge to display install size (#807) * chore: cache node_modules (#814) * chore: remove Node.js 4 (EOL), add Node.js 10 (#813) * fixed typo in readme (#812) * Fix types (#804) * Update eslint to resolve vulnerabilities in lodash (#799) * updated readme with custom event listeners. (#791) * fix tests (#794) 2.15.0 / 2018-03-07 ================== * Update downloads badge to point to graph of downloads over time instead of duplicating link to npm * Arguments description 2.14.1 / 2018-02-07 ================== * Fix typing of help function 2.14.0 / 2018-02-05 ================== * only register the option:version event once * Fixes issue #727: Passing empty string for option on command is set to undefined * enable eqeqeq rule * resolves #754 add linter configuration to project * resolves #560 respect custom name for version option * document how to override the version flag * document using options per command 2.13.0 / 2018-01-09 ================== * Do not print default for --no- * remove trailing spaces in command help * Update CI's Node.js to LTS and latest version * typedefs: Command and Option types added to commander namespace 2.12.2 / 2017-11-28 ================== * fix: typings are not shipped 2.12.1 / 2017-11-23 ================== * Move @types/node to dev dependency 2.12.0 / 2017-11-22 ================== * add attributeName() method to Option objects * Documentation updated for options with --no prefix * typings: `outputHelp` takes a string as the first parameter * typings: use overloads * feat(typings): update to match js api * Print default value in option help * Fix translation error * Fail when using same command and alias (#491) * feat(typings): add help callback * fix bug when description is add after command with options (#662) * Format js code * Rename History.md to CHANGELOG.md (#668) * feat(typings): add typings to support TypeScript (#646) * use current node 2.11.0 / 2017-07-03 ================== * Fix help section order and padding (#652) * feature: support for signals to subcommands (#632) * Fixed #37, --help should not display first (#447) * Fix translation errors. (#570) * Add package-lock.json * Remove engines * Upgrade package version * Prefix events to prevent conflicts between commands and options (#494) * Removing dependency on graceful-readlink * Support setting name in #name function and make it chainable * Add .vscode directory to .gitignore (Visual Studio Code metadata) * Updated link to ruby commander in readme files 2.10.0 / 2017-06-19 ================== * Update .travis.yml. drop support for older node.js versions. * Fix require arguments in README.md * On SemVer you do not start from 0.0.1 * Add missing semi colon in readme * Add save param to npm install * node v6 travis test * Update Readme_zh-CN.md * Allow literal '--' to be passed-through as an argument * Test subcommand alias help * link build badge to master branch * Support the alias of Git style sub-command * added keyword commander for better search result on npm * Fix Sub-Subcommands * test node.js stable * Fixes TypeError when a command has an option called `--description` * Update README.md to make it beginner friendly and elaborate on the difference between angled and square brackets. * Add chinese Readme file 2.9.0 / 2015-10-13 ================== * Add option `isDefault` to set default subcommand #415 @Qix- * Add callback to allow filtering or post-processing of help text #434 @djulien * Fix `undefined` text in help information close #414 #416 @zhiyelee 2.8.1 / 2015-04-22 ================== * Back out `support multiline description` Close #396 #397 2.8.0 / 2015-04-07 ================== * Add `process.execArg` support, execution args like `--harmony` will be passed to sub-commands #387 @DigitalIO @zhiyelee * Fix bug in Git-style sub-commands #372 @zhiyelee * Allow commands to be hidden from help #383 @tonylukasavage * When git-style sub-commands are in use, yet none are called, display help #382 @claylo * Add ability to specify arguments syntax for top-level command #258 @rrthomas * Support multiline descriptions #208 @zxqfox 2.7.1 / 2015-03-11 ================== * Revert #347 (fix collisions when option and first arg have same name) which causes a bug in #367. 2.7.0 / 2015-03-09 ================== * Fix git-style bug when installed globally. Close #335 #349 @zhiyelee * Fix collisions when option and first arg have same name. Close #346 #347 @tonylukasavage * Add support for camelCase on `opts()`. Close #353 @nkzawa * Add node.js 0.12 and io.js to travis.yml * Allow RegEx options. #337 @palanik * Fixes exit code when sub-command failing. Close #260 #332 @pirelenito * git-style `bin` files in $PATH make sense. Close #196 #327 @zhiyelee 2.6.0 / 2014-12-30 ================== * added `Command#allowUnknownOption` method. Close #138 #318 @doozr @zhiyelee * Add application description to the help msg. Close #112 @dalssoft 2.5.1 / 2014-12-15 ================== * fixed two bugs incurred by variadic arguments. Close #291 @Quentin01 #302 @zhiyelee 2.5.0 / 2014-10-24 ================== * add support for variadic arguments. Closes #277 @whitlockjc 2.4.0 / 2014-10-17 ================== * fixed a bug on executing the coercion function of subcommands option. Closes #270 * added `Command.prototype.name` to retrieve command name. Closes #264 #266 @tonylukasavage * added `Command.prototype.opts` to retrieve all the options as a simple object of key-value pairs. Closes #262 @tonylukasavage * fixed a bug on subcommand name. Closes #248 @jonathandelgado * fixed function normalize doesn’t honor option terminator. Closes #216 @abbr 2.3.0 / 2014-07-16 ================== * add command alias'. Closes PR #210 * fix: Typos. Closes #99 * fix: Unused fs module. Closes #217 2.2.0 / 2014-03-29 ================== * add passing of previous option value * fix: support subcommands on windows. Closes #142 * Now the defaultValue passed as the second argument of the coercion function. 2.1.0 / 2013-11-21 ================== * add: allow cflag style option params, unit test, fixes #174 2.0.0 / 2013-07-18 ================== * remove input methods (.prompt, .confirm, etc) 1.3.2 / 2013-07-18 ================== * add support for sub-commands to co-exist with the original command 1.3.1 / 2013-07-18 ================== * add quick .runningCommand hack so you can opt-out of other logic when running a sub command 1.3.0 / 2013-07-09 ================== * add EACCES error handling * fix sub-command --help 1.2.0 / 2013-06-13 ================== * allow "-" hyphen as an option argument * support for RegExp coercion 1.1.1 / 2012-11-20 ================== * add more sub-command padding * fix .usage() when args are present. Closes #106 1.1.0 / 2012-11-16 ================== * add git-style executable subcommand support. Closes #94 1.0.5 / 2012-10-09 ================== * fix `--name` clobbering. Closes #92 * fix examples/help. Closes #89 1.0.4 / 2012-09-03 ================== * add `outputHelp()` method. 1.0.3 / 2012-08-30 ================== * remove invalid .version() defaulting 1.0.2 / 2012-08-24 ================== * add `--foo=bar` support [arv] * fix password on node 0.8.8. Make backward compatible with 0.6 [focusaurus] 1.0.1 / 2012-08-03 ================== * fix issue #56 * fix tty.setRawMode(mode) was moved to tty.ReadStream#setRawMode() (i.e. process.stdin.setRawMode()) 1.0.0 / 2012-07-05 ================== * add support for optional option descriptions * add defaulting of `.version()` to package.json's version 0.6.1 / 2012-06-01 ================== * Added: append (yes or no) on confirmation * Added: allow node.js v0.7.x 0.6.0 / 2012-04-10 ================== * Added `.prompt(obj, callback)` support. Closes #49 * Added default support to .choose(). Closes #41 * Fixed the choice example 0.5.1 / 2011-12-20 ================== * Fixed `password()` for recent nodes. Closes #36 0.5.0 / 2011-12-04 ================== * Added sub-command option support [itay] 0.4.3 / 2011-12-04 ================== * Fixed custom help ordering. Closes #32 0.4.2 / 2011-11-24 ================== * Added travis support * Fixed: line-buffered input automatically trimmed. Closes #31 0.4.1 / 2011-11-18 ================== * Removed listening for "close" on --help 0.4.0 / 2011-11-15 ================== * Added support for `--`. Closes #24 0.3.3 / 2011-11-14 ================== * Fixed: wait for close event when writing help info [Jerry Hamlet] 0.3.2 / 2011-11-01 ================== * Fixed long flag definitions with values [felixge] 0.3.1 / 2011-10-31 ================== * Changed `--version` short flag to `-V` from `-v` * Changed `.version()` so it's configurable [felixge] 0.3.0 / 2011-10-31 ================== * Added support for long flags only. Closes #18 0.2.1 / 2011-10-24 ================== * "node": ">= 0.4.x < 0.7.0". Closes #20 0.2.0 / 2011-09-26 ================== * Allow for defaults that are not just boolean. Default peassignment only occurs for --no-*, optional, and required arguments. [Jim Isaacs] 0.1.0 / 2011-08-24 ================== * Added support for custom `--help` output 0.0.5 / 2011-08-18 ================== * Changed: when the user enters nothing prompt for password again * Fixed issue with passwords beginning with numbers [NuckChorris] 0.0.4 / 2011-08-15 ================== * Fixed `Commander#args` 0.0.3 / 2011-08-15 ================== * Added default option value support 0.0.2 / 2011-08-15 ================== * Added mask support to `Command#password(str[, mask], fn)` * Added `Command#password(str, fn)` 0.0.1 / 2010-01-03 ================== * Initial release node_modules/terser/node_modules/commander/LICENSE000066600000002112150425117220016153 0ustar00(The MIT License) Copyright (c) 2011 TJ Holowaychuk Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. node_modules/terser/node_modules/commander/package.json000066600000001540150425117220017440 0ustar00{ "name": "commander", "version": "2.20.3", "description": "the complete solution for node.js command-line programs", "keywords": [ "commander", "command", "option", "parser" ], "author": "TJ Holowaychuk ", "license": "MIT", "repository": { "type": "git", "url": "https://github.com/tj/commander.js.git" }, "scripts": { "lint": "eslint index.js", "test": "node test/run.js && npm run test-typings", "test-typings": "tsc -p tsconfig.json" }, "main": "index", "files": [ "index.js", "typings/index.d.ts" ], "dependencies": {}, "devDependencies": { "@types/node": "^12.7.8", "eslint": "^6.4.0", "should": "^13.2.3", "sinon": "^7.5.0", "standard": "^14.3.1", "ts-node": "^8.4.1", "typescript": "^3.6.3" }, "typings": "typings/index.d.ts" } node_modules/terser/dist/bundle.min.js.map000066600004476556150425117220014673 0ustar00{"version":3,"file":"bundle.min.js","sources":["../lib/utils/index.js","../lib/parse.js","../lib/ast.js","../lib/transform.js","../lib/utils/first_in_statement.js","../lib/output.js","../lib/equivalent-to.js","../lib/scope.js","../tools/node.js","../lib/size.js","../lib/compress/index.js","../tools/domprops.js","../lib/propmangle.js","../lib/minify.js","../lib/sourcemap.js","../lib/mozilla-ast.js"],"sourcesContent":["/***********************************************************************\n\n A JavaScript tokenizer / parser / beautifier / compressor.\n https://github.com/mishoo/UglifyJS2\n\n -------------------------------- (C) ---------------------------------\n\n Author: Mihai Bazon\n \n http://mihai.bazon.net/blog\n\n Distributed under the BSD license:\n\n Copyright 2012 (c) Mihai Bazon \n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions\n are met:\n\n * Redistributions of source code must retain the above\n copyright notice, this list of conditions and the following\n disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials\n provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY\n EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE\n LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,\n OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR\n TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF\n THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n SUCH DAMAGE.\n\n ***********************************************************************/\n\n\"use strict\";\n\nfunction characters(str) {\n return str.split(\"\");\n}\n\nfunction member(name, array) {\n return array.includes(name);\n}\n\nclass DefaultsError extends Error {\n constructor(msg, defs) {\n super();\n\n this.name = \"DefaultsError\";\n this.message = msg;\n this.defs = defs;\n }\n}\n\nfunction defaults(args, defs, croak) {\n if (args === true)\n args = {};\n const ret = args || {};\n if (croak) for (const i in ret) if (HOP(ret, i) && !HOP(defs, i))\n throw new DefaultsError(\"`\" + i + \"` is not a supported option\", defs);\n for (const i in defs) if (HOP(defs, i)) {\n if (!args || !HOP(args, i)) {\n ret[i] = defs[i];\n } else if (i === \"ecma\") {\n let ecma = args[i] | 0;\n if (ecma > 5 && ecma < 2015) ecma += 2009;\n ret[i] = ecma;\n } else {\n ret[i] = (args && HOP(args, i)) ? args[i] : defs[i];\n }\n }\n return ret;\n}\n\nfunction noop() {}\nfunction return_false() { return false; }\nfunction return_true() { return true; }\nfunction return_this() { return this; }\nfunction return_null() { return null; }\n\nvar MAP = (function() {\n function MAP(a, f, backwards) {\n var ret = [], top = [], i;\n function doit() {\n var val = f(a[i], i);\n var is_last = val instanceof Last;\n if (is_last) val = val.v;\n if (val instanceof AtTop) {\n val = val.v;\n if (val instanceof Splice) {\n top.push.apply(top, backwards ? val.v.slice().reverse() : val.v);\n } else {\n top.push(val);\n }\n } else if (val !== skip) {\n if (val instanceof Splice) {\n ret.push.apply(ret, backwards ? val.v.slice().reverse() : val.v);\n } else {\n ret.push(val);\n }\n }\n return is_last;\n }\n if (Array.isArray(a)) {\n if (backwards) {\n for (i = a.length; --i >= 0;) if (doit()) break;\n ret.reverse();\n top.reverse();\n } else {\n for (i = 0; i < a.length; ++i) if (doit()) break;\n }\n } else {\n for (i in a) if (HOP(a, i)) if (doit()) break;\n }\n return top.concat(ret);\n }\n MAP.at_top = function(val) { return new AtTop(val); };\n MAP.splice = function(val) { return new Splice(val); };\n MAP.last = function(val) { return new Last(val); };\n var skip = MAP.skip = {};\n function AtTop(val) { this.v = val; }\n function Splice(val) { this.v = val; }\n function Last(val) { this.v = val; }\n return MAP;\n})();\n\nfunction make_node(ctor, orig, props) {\n if (!props) props = {};\n if (orig) {\n if (!props.start) props.start = orig.start;\n if (!props.end) props.end = orig.end;\n }\n return new ctor(props);\n}\n\nfunction push_uniq(array, el) {\n if (!array.includes(el))\n array.push(el);\n}\n\nfunction string_template(text, props) {\n return text.replace(/{(.+?)}/g, function(str, p) {\n return props && props[p];\n });\n}\n\nfunction remove(array, el) {\n for (var i = array.length; --i >= 0;) {\n if (array[i] === el) array.splice(i, 1);\n }\n}\n\nfunction mergeSort(array, cmp) {\n if (array.length < 2) return array.slice();\n function merge(a, b) {\n var r = [], ai = 0, bi = 0, i = 0;\n while (ai < a.length && bi < b.length) {\n cmp(a[ai], b[bi]) <= 0\n ? r[i++] = a[ai++]\n : r[i++] = b[bi++];\n }\n if (ai < a.length) r.push.apply(r, a.slice(ai));\n if (bi < b.length) r.push.apply(r, b.slice(bi));\n return r;\n }\n function _ms(a) {\n if (a.length <= 1)\n return a;\n var m = Math.floor(a.length / 2), left = a.slice(0, m), right = a.slice(m);\n left = _ms(left);\n right = _ms(right);\n return merge(left, right);\n }\n return _ms(array);\n}\n\nfunction makePredicate(words) {\n if (!Array.isArray(words)) words = words.split(\" \");\n\n return new Set(words);\n}\n\nfunction map_add(map, key, value) {\n if (map.has(key)) {\n map.get(key).push(value);\n } else {\n map.set(key, [ value ]);\n }\n}\n\nfunction map_from_object(obj) {\n var map = new Map();\n for (var key in obj) {\n if (HOP(obj, key) && key.charAt(0) === \"$\") {\n map.set(key.substr(1), obj[key]);\n }\n }\n return map;\n}\n\nfunction map_to_object(map) {\n var obj = Object.create(null);\n map.forEach(function (value, key) {\n obj[\"$\" + key] = value;\n });\n return obj;\n}\n\nfunction HOP(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nfunction keep_name(keep_setting, name) {\n return keep_setting === true\n || (keep_setting instanceof RegExp && keep_setting.test(name));\n}\n\nvar lineTerminatorEscape = {\n \"\\n\": \"n\",\n \"\\r\": \"r\",\n \"\\u2028\": \"u2028\",\n \"\\u2029\": \"u2029\",\n};\nfunction regexp_source_fix(source) {\n // V8 does not escape line terminators in regexp patterns in node 12\n return source.replace(/[\\n\\r\\u2028\\u2029]/g, function (match, offset) {\n var escaped = source[offset - 1] == \"\\\\\"\n && (source[offset - 2] != \"\\\\\"\n || /(?:^|[^\\\\])(?:\\\\{2})*$/.test(source.slice(0, offset - 1)));\n return (escaped ? \"\" : \"\\\\\") + lineTerminatorEscape[match];\n });\n}\n\n// Subset of regexps that is not going to cause regexp based DDOS\n// https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS\nconst re_safe_regexp = /^[\\\\/|\\0\\s\\w^$.[\\]()]*$/;\n\n/** Check if the regexp is safe for Terser to create without risking a RegExp DOS */\nexport const regexp_is_safe = (source) => re_safe_regexp.test(source);\n\nconst all_flags = \"dgimsuy\";\nfunction sort_regexp_flags(flags) {\n const existing_flags = new Set(flags.split(\"\"));\n let out = \"\";\n for (const flag of all_flags) {\n if (existing_flags.has(flag)) {\n out += flag;\n existing_flags.delete(flag);\n }\n }\n if (existing_flags.size) {\n // Flags Terser doesn't know about\n existing_flags.forEach(flag => { out += flag; });\n }\n return out;\n}\n\nfunction has_annotation(node, annotation) {\n return node._annotations & annotation;\n}\n\nfunction set_annotation(node, annotation) {\n node._annotations |= annotation;\n}\n\nexport {\n characters,\n defaults,\n HOP,\n keep_name,\n make_node,\n makePredicate,\n map_add,\n map_from_object,\n map_to_object,\n MAP,\n member,\n mergeSort,\n noop,\n push_uniq,\n regexp_source_fix,\n remove,\n return_false,\n return_null,\n return_this,\n return_true,\n sort_regexp_flags,\n string_template,\n has_annotation,\n set_annotation\n};\n","/***********************************************************************\n\n A JavaScript tokenizer / parser / beautifier / compressor.\n https://github.com/mishoo/UglifyJS2\n\n -------------------------------- (C) ---------------------------------\n\n Author: Mihai Bazon\n \n http://mihai.bazon.net/blog\n\n Distributed under the BSD license:\n\n Copyright 2012 (c) Mihai Bazon \n Parser based on parse-js (http://marijn.haverbeke.nl/parse-js/).\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions\n are met:\n\n * Redistributions of source code must retain the above\n copyright notice, this list of conditions and the following\n disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials\n provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY\n EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE\n LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,\n OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR\n TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF\n THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n SUCH DAMAGE.\n\n ***********************************************************************/\n\n\"use strict\";\n\nimport {\n characters,\n defaults,\n makePredicate,\n set_annotation,\n} from \"./utils/index.js\";\nimport {\n AST_Accessor,\n AST_Array,\n AST_Arrow,\n AST_Assign,\n AST_Await,\n AST_BigInt,\n AST_Binary,\n AST_BlockStatement,\n AST_Break,\n AST_Call,\n AST_Case,\n AST_Catch,\n AST_ClassExpression,\n AST_ClassProperty,\n AST_ConciseMethod,\n AST_Conditional,\n AST_Const,\n AST_Continue,\n AST_Debugger,\n AST_Default,\n AST_DefaultAssign,\n AST_DefClass,\n AST_Definitions,\n AST_Defun,\n AST_Destructuring,\n AST_Directive,\n AST_Do,\n AST_Dot,\n AST_EmptyStatement,\n AST_Expansion,\n AST_Export,\n AST_False,\n AST_Finally,\n AST_For,\n AST_ForIn,\n AST_ForOf,\n AST_Function,\n AST_Hole,\n AST_If,\n AST_Import,\n AST_IterationStatement,\n AST_Label,\n AST_LabeledStatement,\n AST_LabelRef,\n AST_Lambda,\n AST_Let,\n AST_NameMapping,\n AST_New,\n AST_NewTarget,\n AST_Node,\n AST_Null,\n AST_Number,\n AST_Object,\n AST_ObjectGetter,\n AST_ObjectKeyVal,\n AST_ObjectProperty,\n AST_ObjectSetter,\n AST_PrefixedTemplateString,\n AST_PropAccess,\n AST_RegExp,\n AST_Return,\n AST_Sequence,\n AST_SimpleStatement,\n AST_String,\n AST_Sub,\n AST_Super,\n AST_Switch,\n AST_SymbolCatch,\n AST_SymbolClass,\n AST_SymbolClassProperty,\n AST_SymbolConst,\n AST_SymbolDeclaration,\n AST_SymbolDefClass,\n AST_SymbolDefun,\n AST_SymbolExport,\n AST_SymbolExportForeign,\n AST_SymbolFunarg,\n AST_SymbolImport,\n AST_SymbolImportForeign,\n AST_SymbolLambda,\n AST_SymbolLet,\n AST_SymbolMethod,\n AST_SymbolRef,\n AST_SymbolVar,\n AST_TemplateSegment,\n AST_TemplateString,\n AST_This,\n AST_Throw,\n AST_Token,\n AST_Toplevel,\n AST_True,\n AST_Try,\n AST_UnaryPostfix,\n AST_UnaryPrefix,\n AST_Var,\n AST_VarDef,\n AST_While,\n AST_With,\n AST_Yield,\n _INLINE,\n _NOINLINE,\n _PURE\n} from \"./ast.js\";\n\nvar KEYWORDS = \"break case catch class const continue debugger default delete do else export extends finally for function if in instanceof let new return switch throw try typeof var void while with\";\nvar KEYWORDS_ATOM = \"false null true\";\nvar RESERVED_WORDS = \"enum implements import interface package private protected public static super this \" + KEYWORDS_ATOM + \" \" + KEYWORDS;\nvar KEYWORDS_BEFORE_EXPRESSION = \"return new delete throw else case yield await\";\n\nKEYWORDS = makePredicate(KEYWORDS);\nRESERVED_WORDS = makePredicate(RESERVED_WORDS);\nKEYWORDS_BEFORE_EXPRESSION = makePredicate(KEYWORDS_BEFORE_EXPRESSION);\nKEYWORDS_ATOM = makePredicate(KEYWORDS_ATOM);\n\nvar OPERATOR_CHARS = makePredicate(characters(\"+-*&%=<>!?|~^\"));\n\nvar RE_NUM_LITERAL = /[0-9a-f]/i;\nvar RE_HEX_NUMBER = /^0x[0-9a-f]+$/i;\nvar RE_OCT_NUMBER = /^0[0-7]+$/;\nvar RE_ES6_OCT_NUMBER = /^0o[0-7]+$/i;\nvar RE_BIN_NUMBER = /^0b[01]+$/i;\nvar RE_DEC_NUMBER = /^\\d*\\.?\\d*(?:e[+-]?\\d*(?:\\d\\.?|\\.?\\d)\\d*)?$/i;\nvar RE_BIG_INT = /^(0[xob])?[0-9a-f]+n$/i;\n\nvar OPERATORS = makePredicate([\n \"in\",\n \"instanceof\",\n \"typeof\",\n \"new\",\n \"void\",\n \"delete\",\n \"++\",\n \"--\",\n \"+\",\n \"-\",\n \"!\",\n \"~\",\n \"&\",\n \"|\",\n \"^\",\n \"*\",\n \"**\",\n \"/\",\n \"%\",\n \">>\",\n \"<<\",\n \">>>\",\n \"<\",\n \">\",\n \"<=\",\n \">=\",\n \"==\",\n \"===\",\n \"!=\",\n \"!==\",\n \"?\",\n \"=\",\n \"+=\",\n \"-=\",\n \"/=\",\n \"*=\",\n \"**=\",\n \"%=\",\n \">>=\",\n \"<<=\",\n \">>>=\",\n \"|=\",\n \"^=\",\n \"&=\",\n \"&&\",\n \"??\",\n \"||\",\n]);\n\nvar WHITESPACE_CHARS = makePredicate(characters(\" \\u00a0\\n\\r\\t\\f\\u000b\\u200b\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\uFEFF\"));\n\nvar NEWLINE_CHARS = makePredicate(characters(\"\\n\\r\\u2028\\u2029\"));\n\nvar PUNC_AFTER_EXPRESSION = makePredicate(characters(\";]),:\"));\n\nvar PUNC_BEFORE_EXPRESSION = makePredicate(characters(\"[{(,;:\"));\n\nvar PUNC_CHARS = makePredicate(characters(\"[]{}(),;:\"));\n\n/* -----[ Tokenizer ]----- */\n\n// surrogate safe regexps adapted from https://github.com/mathiasbynens/unicode-8.0.0/tree/89b412d8a71ecca9ed593d9e9fa073ab64acfebe/Binary_Property\nvar UNICODE = {\n ID_Start: /[$A-Z_a-z\\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]/,\n ID_Continue: /(?:[$0-9A-Z_a-z\\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])+/,\n};\n\nfunction get_full_char(str, pos) {\n if (is_surrogate_pair_head(str.charCodeAt(pos))) {\n if (is_surrogate_pair_tail(str.charCodeAt(pos + 1))) {\n return str.charAt(pos) + str.charAt(pos + 1);\n }\n } else if (is_surrogate_pair_tail(str.charCodeAt(pos))) {\n if (is_surrogate_pair_head(str.charCodeAt(pos - 1))) {\n return str.charAt(pos - 1) + str.charAt(pos);\n }\n }\n return str.charAt(pos);\n}\n\nfunction get_full_char_code(str, pos) {\n // https://en.wikipedia.org/wiki/Universal_Character_Set_characters#Surrogates\n if (is_surrogate_pair_head(str.charCodeAt(pos))) {\n return 0x10000 + (str.charCodeAt(pos) - 0xd800 << 10) + str.charCodeAt(pos + 1) - 0xdc00;\n }\n return str.charCodeAt(pos);\n}\n\nfunction get_full_char_length(str) {\n var surrogates = 0;\n\n for (var i = 0; i < str.length; i++) {\n if (is_surrogate_pair_head(str.charCodeAt(i)) && is_surrogate_pair_tail(str.charCodeAt(i + 1))) {\n surrogates++;\n i++;\n }\n }\n\n return str.length - surrogates;\n}\n\nfunction from_char_code(code) {\n // Based on https://github.com/mathiasbynens/String.fromCodePoint/blob/master/fromcodepoint.js\n if (code > 0xFFFF) {\n code -= 0x10000;\n return (String.fromCharCode((code >> 10) + 0xD800) +\n String.fromCharCode((code % 0x400) + 0xDC00));\n }\n return String.fromCharCode(code);\n}\n\nfunction is_surrogate_pair_head(code) {\n return code >= 0xd800 && code <= 0xdbff;\n}\n\nfunction is_surrogate_pair_tail(code) {\n return code >= 0xdc00 && code <= 0xdfff;\n}\n\nfunction is_digit(code) {\n return code >= 48 && code <= 57;\n}\n\nfunction is_identifier_start(ch) {\n return UNICODE.ID_Start.test(ch);\n}\n\nfunction is_identifier_char(ch) {\n return UNICODE.ID_Continue.test(ch);\n}\n\nfunction is_basic_identifier_string(str) {\n return /^[a-z_$][a-z0-9_$]*$/i.test(str);\n}\n\nfunction is_identifier_string(str, allow_surrogates) {\n if (/^[a-z_$][a-z0-9_$]*$/i.test(str)) {\n return true;\n }\n if (!allow_surrogates && /[\\ud800-\\udfff]/.test(str)) {\n return false;\n }\n var match = UNICODE.ID_Start.exec(str);\n if (!match || match.index !== 0) {\n return false;\n }\n\n str = str.slice(match[0].length);\n if (!str) {\n return true;\n }\n\n match = UNICODE.ID_Continue.exec(str);\n return !!match && match[0].length === str.length;\n}\n\nfunction parse_js_number(num, allow_e = true) {\n if (!allow_e && num.includes(\"e\")) {\n return NaN;\n }\n if (RE_HEX_NUMBER.test(num)) {\n return parseInt(num.substr(2), 16);\n } else if (RE_OCT_NUMBER.test(num)) {\n return parseInt(num.substr(1), 8);\n } else if (RE_ES6_OCT_NUMBER.test(num)) {\n return parseInt(num.substr(2), 8);\n } else if (RE_BIN_NUMBER.test(num)) {\n return parseInt(num.substr(2), 2);\n } else if (RE_DEC_NUMBER.test(num)) {\n return parseFloat(num);\n } else {\n var val = parseFloat(num);\n if (val == num) return val;\n }\n}\n\nclass JS_Parse_Error extends Error {\n constructor(message, filename, line, col, pos) {\n super();\n\n this.name = \"SyntaxError\";\n this.message = message;\n this.filename = filename;\n this.line = line;\n this.col = col;\n this.pos = pos;\n }\n}\n\nfunction js_error(message, filename, line, col, pos) {\n throw new JS_Parse_Error(message, filename, line, col, pos);\n}\n\nfunction is_token(token, type, val) {\n return token.type == type && (val == null || token.value == val);\n}\n\nvar EX_EOF = {};\n\nfunction tokenizer($TEXT, filename, html5_comments, shebang) {\n var S = {\n text : $TEXT,\n filename : filename,\n pos : 0,\n tokpos : 0,\n line : 1,\n tokline : 0,\n col : 0,\n tokcol : 0,\n newline_before : false,\n regex_allowed : false,\n brace_counter : 0,\n template_braces : [],\n comments_before : [],\n directives : {},\n directive_stack : []\n };\n\n function peek() { return get_full_char(S.text, S.pos); }\n\n function next(signal_eof, in_string) {\n var ch = get_full_char(S.text, S.pos++);\n if (signal_eof && !ch)\n throw EX_EOF;\n if (NEWLINE_CHARS.has(ch)) {\n S.newline_before = S.newline_before || !in_string;\n ++S.line;\n S.col = 0;\n if (ch == \"\\r\" && peek() == \"\\n\") {\n // treat a \\r\\n sequence as a single \\n\n ++S.pos;\n ch = \"\\n\";\n }\n } else {\n if (ch.length > 1) {\n ++S.pos;\n ++S.col;\n }\n ++S.col;\n }\n return ch;\n }\n\n function forward(i) {\n while (i--) next();\n }\n\n function looking_at(str) {\n return S.text.substr(S.pos, str.length) == str;\n }\n\n function find_eol() {\n var text = S.text;\n for (var i = S.pos, n = S.text.length; i < n; ++i) {\n var ch = text[i];\n if (NEWLINE_CHARS.has(ch))\n return i;\n }\n return -1;\n }\n\n function find(what, signal_eof) {\n var pos = S.text.indexOf(what, S.pos);\n if (signal_eof && pos == -1) throw EX_EOF;\n return pos;\n }\n\n function start_token() {\n S.tokline = S.line;\n S.tokcol = S.col;\n S.tokpos = S.pos;\n }\n\n var prev_was_dot = false;\n var previous_token = null;\n function token(type, value, is_comment) {\n S.regex_allowed = ((type == \"operator\" && !UNARY_POSTFIX.has(value)) ||\n (type == \"keyword\" && KEYWORDS_BEFORE_EXPRESSION.has(value)) ||\n (type == \"punc\" && PUNC_BEFORE_EXPRESSION.has(value))) ||\n (type == \"arrow\");\n if (type == \"punc\" && value == \".\") {\n prev_was_dot = true;\n } else if (!is_comment) {\n prev_was_dot = false;\n }\n var ret = {\n type : type,\n value : value,\n line : S.tokline,\n col : S.tokcol,\n pos : S.tokpos,\n endline : S.line,\n endcol : S.col,\n endpos : S.pos,\n nlb : S.newline_before,\n file : filename\n };\n if (/^(?:num|string|regexp)$/i.test(type)) {\n ret.raw = $TEXT.substring(ret.pos, ret.endpos);\n }\n if (!is_comment) {\n ret.comments_before = S.comments_before;\n ret.comments_after = S.comments_before = [];\n }\n S.newline_before = false;\n ret = new AST_Token(ret);\n if (!is_comment) previous_token = ret;\n return ret;\n }\n\n function skip_whitespace() {\n while (WHITESPACE_CHARS.has(peek()))\n next();\n }\n\n function read_while(pred) {\n var ret = \"\", ch, i = 0;\n while ((ch = peek()) && pred(ch, i++))\n ret += next();\n return ret;\n }\n\n function parse_error(err) {\n js_error(err, filename, S.tokline, S.tokcol, S.tokpos);\n }\n\n function read_num(prefix) {\n var has_e = false, after_e = false, has_x = false, has_dot = prefix == \".\", is_big_int = false, numeric_separator = false;\n var num = read_while(function(ch, i) {\n if (is_big_int) return false;\n\n var code = ch.charCodeAt(0);\n switch (code) {\n case 95: // _\n return (numeric_separator = true);\n case 98: case 66: // bB\n return (has_x = true); // Can occur in hex sequence, don't return false yet\n case 111: case 79: // oO\n case 120: case 88: // xX\n return has_x ? false : (has_x = true);\n case 101: case 69: // eE\n return has_x ? true : has_e ? false : (has_e = after_e = true);\n case 45: // -\n return after_e || (i == 0 && !prefix);\n case 43: // +\n return after_e;\n case (after_e = false, 46): // .\n return (!has_dot && !has_x && !has_e) ? (has_dot = true) : false;\n }\n\n if (ch === \"n\") {\n is_big_int = true;\n\n return true;\n }\n\n return RE_NUM_LITERAL.test(ch);\n });\n if (prefix) num = prefix + num;\n if (RE_OCT_NUMBER.test(num) && next_token.has_directive(\"use strict\")) {\n parse_error(\"Legacy octal literals are not allowed in strict mode\");\n }\n if (numeric_separator) {\n if (num.endsWith(\"_\")) {\n parse_error(\"Numeric separators are not allowed at the end of numeric literals\");\n } else if (num.includes(\"__\")) {\n parse_error(\"Only one underscore is allowed as numeric separator\");\n }\n num = num.replace(/_/g, \"\");\n }\n if (num.endsWith(\"n\")) {\n const without_n = num.slice(0, -1);\n const allow_e = RE_HEX_NUMBER.test(without_n);\n const valid = parse_js_number(without_n, allow_e);\n if (!has_dot && RE_BIG_INT.test(num) && !isNaN(valid))\n return token(\"big_int\", without_n);\n parse_error(\"Invalid or unexpected token\");\n }\n var valid = parse_js_number(num);\n if (!isNaN(valid)) {\n return token(\"num\", valid);\n } else {\n parse_error(\"Invalid syntax: \" + num);\n }\n }\n\n function is_octal(ch) {\n return ch >= \"0\" && ch <= \"7\";\n }\n\n function read_escaped_char(in_string, strict_hex, template_string) {\n var ch = next(true, in_string);\n switch (ch.charCodeAt(0)) {\n case 110 : return \"\\n\";\n case 114 : return \"\\r\";\n case 116 : return \"\\t\";\n case 98 : return \"\\b\";\n case 118 : return \"\\u000b\"; // \\v\n case 102 : return \"\\f\";\n case 120 : return String.fromCharCode(hex_bytes(2, strict_hex)); // \\x\n case 117 : // \\u\n if (peek() == \"{\") {\n next(true);\n if (peek() === \"}\")\n parse_error(\"Expecting hex-character between {}\");\n while (peek() == \"0\") next(true); // No significance\n var result, length = find(\"}\", true) - S.pos;\n // Avoid 32 bit integer overflow (1 << 32 === 1)\n // We know first character isn't 0 and thus out of range anyway\n if (length > 6 || (result = hex_bytes(length, strict_hex)) > 0x10FFFF) {\n parse_error(\"Unicode reference out of bounds\");\n }\n next(true);\n return from_char_code(result);\n }\n return String.fromCharCode(hex_bytes(4, strict_hex));\n case 10 : return \"\"; // newline\n case 13 : // \\r\n if (peek() == \"\\n\") { // DOS newline\n next(true, in_string);\n return \"\";\n }\n }\n if (is_octal(ch)) {\n if (template_string && strict_hex) {\n const represents_null_character = ch === \"0\" && !is_octal(peek());\n if (!represents_null_character) {\n parse_error(\"Octal escape sequences are not allowed in template strings\");\n }\n }\n return read_octal_escape_sequence(ch, strict_hex);\n }\n return ch;\n }\n\n function read_octal_escape_sequence(ch, strict_octal) {\n // Read\n var p = peek();\n if (p >= \"0\" && p <= \"7\") {\n ch += next(true);\n if (ch[0] <= \"3\" && (p = peek()) >= \"0\" && p <= \"7\")\n ch += next(true);\n }\n\n // Parse\n if (ch === \"0\") return \"\\0\";\n if (ch.length > 0 && next_token.has_directive(\"use strict\") && strict_octal)\n parse_error(\"Legacy octal escape sequences are not allowed in strict mode\");\n return String.fromCharCode(parseInt(ch, 8));\n }\n\n function hex_bytes(n, strict_hex) {\n var num = 0;\n for (; n > 0; --n) {\n if (!strict_hex && isNaN(parseInt(peek(), 16))) {\n return parseInt(num, 16) || \"\";\n }\n var digit = next(true);\n if (isNaN(parseInt(digit, 16)))\n parse_error(\"Invalid hex-character pattern in string\");\n num += digit;\n }\n return parseInt(num, 16);\n }\n\n var read_string = with_eof_error(\"Unterminated string constant\", function() {\n var quote = next(), ret = \"\";\n for (;;) {\n var ch = next(true, true);\n if (ch == \"\\\\\") ch = read_escaped_char(true, true);\n else if (ch == \"\\r\" || ch == \"\\n\") parse_error(\"Unterminated string constant\");\n else if (ch == quote) break;\n ret += ch;\n }\n var tok = token(\"string\", ret);\n tok.quote = quote;\n return tok;\n });\n\n var read_template_characters = with_eof_error(\"Unterminated template\", function(begin) {\n if (begin) {\n S.template_braces.push(S.brace_counter);\n }\n var content = \"\", raw = \"\", ch, tok;\n next(true, true);\n while ((ch = next(true, true)) != \"`\") {\n if (ch == \"\\r\") {\n if (peek() == \"\\n\") ++S.pos;\n ch = \"\\n\";\n } else if (ch == \"$\" && peek() == \"{\") {\n next(true, true);\n S.brace_counter++;\n tok = token(begin ? \"template_head\" : \"template_substitution\", content);\n tok.raw = raw;\n return tok;\n }\n\n raw += ch;\n if (ch == \"\\\\\") {\n var tmp = S.pos;\n var prev_is_tag = previous_token && (previous_token.type === \"name\" || previous_token.type === \"punc\" && (previous_token.value === \")\" || previous_token.value === \"]\"));\n ch = read_escaped_char(true, !prev_is_tag, true);\n raw += S.text.substr(tmp, S.pos - tmp);\n }\n\n content += ch;\n }\n S.template_braces.pop();\n tok = token(begin ? \"template_head\" : \"template_substitution\", content);\n tok.raw = raw;\n tok.end = true;\n return tok;\n });\n\n function skip_line_comment(type) {\n var regex_allowed = S.regex_allowed;\n var i = find_eol(), ret;\n if (i == -1) {\n ret = S.text.substr(S.pos);\n S.pos = S.text.length;\n } else {\n ret = S.text.substring(S.pos, i);\n S.pos = i;\n }\n S.col = S.tokcol + (S.pos - S.tokpos);\n S.comments_before.push(token(type, ret, true));\n S.regex_allowed = regex_allowed;\n return next_token;\n }\n\n var skip_multiline_comment = with_eof_error(\"Unterminated multiline comment\", function() {\n var regex_allowed = S.regex_allowed;\n var i = find(\"*/\", true);\n var text = S.text.substring(S.pos, i).replace(/\\r\\n|\\r|\\u2028|\\u2029/g, \"\\n\");\n // update stream position\n forward(get_full_char_length(text) /* text length doesn't count \\r\\n as 2 char while S.pos - i does */ + 2);\n S.comments_before.push(token(\"comment2\", text, true));\n S.newline_before = S.newline_before || text.includes(\"\\n\");\n S.regex_allowed = regex_allowed;\n return next_token;\n });\n\n var read_name = with_eof_error(\"Unterminated identifier name\", function() {\n var name, ch, escaped = false;\n var read_escaped_identifier_char = function() {\n escaped = true;\n next();\n if (peek() !== \"u\") {\n parse_error(\"Expecting UnicodeEscapeSequence -- uXXXX or u{XXXX}\");\n }\n return read_escaped_char(false, true);\n };\n\n // Read first character (ID_Start)\n if ((name = peek()) === \"\\\\\") {\n name = read_escaped_identifier_char();\n if (!is_identifier_start(name)) {\n parse_error(\"First identifier char is an invalid identifier char\");\n }\n } else if (is_identifier_start(name)) {\n next();\n } else {\n return \"\";\n }\n\n // Read ID_Continue\n while ((ch = peek()) != null) {\n if ((ch = peek()) === \"\\\\\") {\n ch = read_escaped_identifier_char();\n if (!is_identifier_char(ch)) {\n parse_error(\"Invalid escaped identifier char\");\n }\n } else {\n if (!is_identifier_char(ch)) {\n break;\n }\n next();\n }\n name += ch;\n }\n if (RESERVED_WORDS.has(name) && escaped) {\n parse_error(\"Escaped characters are not allowed in keywords\");\n }\n return name;\n });\n\n var read_regexp = with_eof_error(\"Unterminated regular expression\", function(source) {\n var prev_backslash = false, ch, in_class = false;\n while ((ch = next(true))) if (NEWLINE_CHARS.has(ch)) {\n parse_error(\"Unexpected line terminator\");\n } else if (prev_backslash) {\n source += \"\\\\\" + ch;\n prev_backslash = false;\n } else if (ch == \"[\") {\n in_class = true;\n source += ch;\n } else if (ch == \"]\" && in_class) {\n in_class = false;\n source += ch;\n } else if (ch == \"/\" && !in_class) {\n break;\n } else if (ch == \"\\\\\") {\n prev_backslash = true;\n } else {\n source += ch;\n }\n const flags = read_name();\n return token(\"regexp\", { source, flags });\n });\n\n function read_operator(prefix) {\n function grow(op) {\n if (!peek()) return op;\n var bigger = op + peek();\n if (OPERATORS.has(bigger)) {\n next();\n return grow(bigger);\n } else {\n return op;\n }\n }\n return token(\"operator\", grow(prefix || next()));\n }\n\n function handle_slash() {\n next();\n switch (peek()) {\n case \"/\":\n next();\n return skip_line_comment(\"comment1\");\n case \"*\":\n next();\n return skip_multiline_comment();\n }\n return S.regex_allowed ? read_regexp(\"\") : read_operator(\"/\");\n }\n\n function handle_eq_sign() {\n next();\n if (peek() === \">\") {\n next();\n return token(\"arrow\", \"=>\");\n } else {\n return read_operator(\"=\");\n }\n }\n\n function handle_dot() {\n next();\n if (is_digit(peek().charCodeAt(0))) {\n return read_num(\".\");\n }\n if (peek() === \".\") {\n next(); // Consume second dot\n next(); // Consume third dot\n return token(\"expand\", \"...\");\n }\n\n return token(\"punc\", \".\");\n }\n\n function read_word() {\n var word = read_name();\n if (prev_was_dot) return token(\"name\", word);\n return KEYWORDS_ATOM.has(word) ? token(\"atom\", word)\n : !KEYWORDS.has(word) ? token(\"name\", word)\n : OPERATORS.has(word) ? token(\"operator\", word)\n : token(\"keyword\", word);\n }\n\n function with_eof_error(eof_error, cont) {\n return function(x) {\n try {\n return cont(x);\n } catch(ex) {\n if (ex === EX_EOF) parse_error(eof_error);\n else throw ex;\n }\n };\n }\n\n function next_token(force_regexp) {\n if (force_regexp != null)\n return read_regexp(force_regexp);\n if (shebang && S.pos == 0 && looking_at(\"#!\")) {\n start_token();\n forward(2);\n skip_line_comment(\"comment5\");\n }\n for (;;) {\n skip_whitespace();\n start_token();\n if (html5_comments) {\n if (looking_at(\"\") && S.newline_before) {\n forward(3);\n skip_line_comment(\"comment4\");\n continue;\n }\n }\n var ch = peek();\n if (!ch) return token(\"eof\");\n var code = ch.charCodeAt(0);\n switch (code) {\n case 34: case 39: return read_string();\n case 46: return handle_dot();\n case 47: {\n var tok = handle_slash();\n if (tok === next_token) continue;\n return tok;\n }\n case 61: return handle_eq_sign();\n case 96: return read_template_characters(true);\n case 123:\n S.brace_counter++;\n break;\n case 125:\n S.brace_counter--;\n if (S.template_braces.length > 0\n && S.template_braces[S.template_braces.length - 1] === S.brace_counter)\n return read_template_characters(false);\n break;\n }\n if (is_digit(code)) return read_num();\n if (PUNC_CHARS.has(ch)) return token(\"punc\", next());\n if (OPERATOR_CHARS.has(ch)) return read_operator();\n if (code == 92 || is_identifier_start(ch)) return read_word();\n break;\n }\n parse_error(\"Unexpected character '\" + ch + \"'\");\n }\n\n next_token.next = next;\n next_token.peek = peek;\n\n next_token.context = function(nc) {\n if (nc) S = nc;\n return S;\n };\n\n next_token.add_directive = function(directive) {\n S.directive_stack[S.directive_stack.length - 1].push(directive);\n\n if (S.directives[directive] === undefined) {\n S.directives[directive] = 1;\n } else {\n S.directives[directive]++;\n }\n };\n\n next_token.push_directives_stack = function() {\n S.directive_stack.push([]);\n };\n\n next_token.pop_directives_stack = function() {\n var directives = S.directive_stack[S.directive_stack.length - 1];\n\n for (var i = 0; i < directives.length; i++) {\n S.directives[directives[i]]--;\n }\n\n S.directive_stack.pop();\n };\n\n next_token.has_directive = function(directive) {\n return S.directives[directive] > 0;\n };\n\n return next_token;\n\n}\n\n/* -----[ Parser (constants) ]----- */\n\nvar UNARY_PREFIX = makePredicate([\n \"typeof\",\n \"void\",\n \"delete\",\n \"--\",\n \"++\",\n \"!\",\n \"~\",\n \"-\",\n \"+\"\n]);\n\nvar UNARY_POSTFIX = makePredicate([ \"--\", \"++\" ]);\n\nvar ASSIGNMENT = makePredicate([ \"=\", \"+=\", \"-=\", \"/=\", \"*=\", \"**=\", \"%=\", \">>=\", \"<<=\", \">>>=\", \"|=\", \"^=\", \"&=\" ]);\n\nvar PRECEDENCE = (function(a, ret) {\n for (var i = 0; i < a.length; ++i) {\n var b = a[i];\n for (var j = 0; j < b.length; ++j) {\n ret[b[j]] = i + 1;\n }\n }\n return ret;\n})(\n [\n [\"||\"],\n [\"??\"],\n [\"&&\"],\n [\"|\"],\n [\"^\"],\n [\"&\"],\n [\"==\", \"===\", \"!=\", \"!==\"],\n [\"<\", \">\", \"<=\", \">=\", \"in\", \"instanceof\"],\n [\">>\", \"<<\", \">>>\"],\n [\"+\", \"-\"],\n [\"*\", \"/\", \"%\"],\n [\"**\"]\n ],\n {}\n);\n\nvar ATOMIC_START_TOKEN = makePredicate([ \"atom\", \"num\", \"big_int\", \"string\", \"regexp\", \"name\" ]);\n\n/* -----[ Parser ]----- */\n\nfunction parse($TEXT, options) {\n // maps start tokens to count of comments found outside of their parens\n // Example: /* I count */ ( /* I don't */ foo() )\n // Useful because comments_before property of call with parens outside\n // contains both comments inside and outside these parens. Used to find the\n // right #__PURE__ comments for an expression\n const outer_comments_before_counts = new Map();\n\n options = defaults(options, {\n bare_returns : false,\n ecma : 2017,\n expression : false,\n filename : null,\n html5_comments : true,\n module : false,\n shebang : true,\n strict : false,\n toplevel : null,\n }, true);\n\n var S = {\n input : (typeof $TEXT == \"string\"\n ? tokenizer($TEXT, options.filename,\n options.html5_comments, options.shebang)\n : $TEXT),\n token : null,\n prev : null,\n peeked : null,\n in_function : 0,\n in_async : -1,\n in_generator : -1,\n in_directives : true,\n in_loop : 0,\n labels : []\n };\n\n S.token = next();\n\n function is(type, value) {\n return is_token(S.token, type, value);\n }\n\n function peek() { return S.peeked || (S.peeked = S.input()); }\n\n function next() {\n S.prev = S.token;\n\n if (!S.peeked) peek();\n S.token = S.peeked;\n S.peeked = null;\n S.in_directives = S.in_directives && (\n S.token.type == \"string\" || is(\"punc\", \";\")\n );\n return S.token;\n }\n\n function prev() {\n return S.prev;\n }\n\n function croak(msg, line, col, pos) {\n var ctx = S.input.context();\n js_error(msg,\n ctx.filename,\n line != null ? line : ctx.tokline,\n col != null ? col : ctx.tokcol,\n pos != null ? pos : ctx.tokpos);\n }\n\n function token_error(token, msg) {\n croak(msg, token.line, token.col);\n }\n\n function unexpected(token) {\n if (token == null)\n token = S.token;\n token_error(token, \"Unexpected token: \" + token.type + \" (\" + token.value + \")\");\n }\n\n function expect_token(type, val) {\n if (is(type, val)) {\n return next();\n }\n token_error(S.token, \"Unexpected token \" + S.token.type + \" «\" + S.token.value + \"»\" + \", expected \" + type + \" «\" + val + \"»\");\n }\n\n function expect(punc) { return expect_token(\"punc\", punc); }\n\n function has_newline_before(token) {\n return token.nlb || !token.comments_before.every((comment) => !comment.nlb);\n }\n\n function can_insert_semicolon() {\n return !options.strict\n && (is(\"eof\") || is(\"punc\", \"}\") || has_newline_before(S.token));\n }\n\n function is_in_generator() {\n return S.in_generator === S.in_function;\n }\n\n function is_in_async() {\n return S.in_async === S.in_function;\n }\n\n function semicolon(optional) {\n if (is(\"punc\", \";\")) next();\n else if (!optional && !can_insert_semicolon()) unexpected();\n }\n\n function parenthesised() {\n expect(\"(\");\n var exp = expression(true);\n expect(\")\");\n return exp;\n }\n\n function embed_tokens(parser) {\n return function(...args) {\n const start = S.token;\n const expr = parser(...args);\n expr.start = start;\n expr.end = prev();\n return expr;\n };\n }\n\n function handle_regexp() {\n if (is(\"operator\", \"/\") || is(\"operator\", \"/=\")) {\n S.peeked = null;\n S.token = S.input(S.token.value.substr(1)); // force regexp\n }\n }\n\n var statement = embed_tokens(function(is_export_default, is_for_body, is_if_body) {\n handle_regexp();\n switch (S.token.type) {\n case \"string\":\n if (S.in_directives) {\n var token = peek();\n if (!S.token.raw.includes(\"\\\\\")\n && (is_token(token, \"punc\", \";\")\n || is_token(token, \"punc\", \"}\")\n || has_newline_before(token)\n || is_token(token, \"eof\"))) {\n S.input.add_directive(S.token.value);\n } else {\n S.in_directives = false;\n }\n }\n var dir = S.in_directives, stat = simple_statement();\n return dir && stat.body instanceof AST_String ? new AST_Directive(stat.body) : stat;\n case \"template_head\":\n case \"num\":\n case \"big_int\":\n case \"regexp\":\n case \"operator\":\n case \"atom\":\n return simple_statement();\n\n case \"name\":\n if (S.token.value == \"async\" && is_token(peek(), \"keyword\", \"function\")) {\n next();\n next();\n if (is_for_body) {\n croak(\"functions are not allowed as the body of a loop\");\n }\n return function_(AST_Defun, false, true, is_export_default);\n }\n if (S.token.value == \"import\" && !is_token(peek(), \"punc\", \"(\")) {\n next();\n var node = import_();\n semicolon();\n return node;\n }\n return is_token(peek(), \"punc\", \":\")\n ? labeled_statement()\n : simple_statement();\n\n case \"punc\":\n switch (S.token.value) {\n case \"{\":\n return new AST_BlockStatement({\n start : S.token,\n body : block_(),\n end : prev()\n });\n case \"[\":\n case \"(\":\n return simple_statement();\n case \";\":\n S.in_directives = false;\n next();\n return new AST_EmptyStatement();\n default:\n unexpected();\n }\n\n case \"keyword\":\n switch (S.token.value) {\n case \"break\":\n next();\n return break_cont(AST_Break);\n\n case \"continue\":\n next();\n return break_cont(AST_Continue);\n\n case \"debugger\":\n next();\n semicolon();\n return new AST_Debugger();\n\n case \"do\":\n next();\n var body = in_loop(statement);\n expect_token(\"keyword\", \"while\");\n var condition = parenthesised();\n semicolon(true);\n return new AST_Do({\n body : body,\n condition : condition\n });\n\n case \"while\":\n next();\n return new AST_While({\n condition : parenthesised(),\n body : in_loop(function() { return statement(false, true); })\n });\n\n case \"for\":\n next();\n return for_();\n\n case \"class\":\n next();\n if (is_for_body) {\n croak(\"classes are not allowed as the body of a loop\");\n }\n if (is_if_body) {\n croak(\"classes are not allowed as the body of an if\");\n }\n return class_(AST_DefClass);\n\n case \"function\":\n next();\n if (is_for_body) {\n croak(\"functions are not allowed as the body of a loop\");\n }\n return function_(AST_Defun, false, false, is_export_default);\n\n case \"if\":\n next();\n return if_();\n\n case \"return\":\n if (S.in_function == 0 && !options.bare_returns)\n croak(\"'return' outside of function\");\n next();\n var value = null;\n if (is(\"punc\", \";\")) {\n next();\n } else if (!can_insert_semicolon()) {\n value = expression(true);\n semicolon();\n }\n return new AST_Return({\n value: value\n });\n\n case \"switch\":\n next();\n return new AST_Switch({\n expression : parenthesised(),\n body : in_loop(switch_body_)\n });\n\n case \"throw\":\n next();\n if (has_newline_before(S.token))\n croak(\"Illegal newline after 'throw'\");\n var value = expression(true);\n semicolon();\n return new AST_Throw({\n value: value\n });\n\n case \"try\":\n next();\n return try_();\n\n case \"var\":\n next();\n var node = var_();\n semicolon();\n return node;\n\n case \"let\":\n next();\n var node = let_();\n semicolon();\n return node;\n\n case \"const\":\n next();\n var node = const_();\n semicolon();\n return node;\n\n case \"with\":\n if (S.input.has_directive(\"use strict\")) {\n croak(\"Strict mode may not include a with statement\");\n }\n next();\n return new AST_With({\n expression : parenthesised(),\n body : statement()\n });\n\n case \"export\":\n if (!is_token(peek(), \"punc\", \"(\")) {\n next();\n var node = export_();\n if (is(\"punc\", \";\")) semicolon();\n return node;\n }\n }\n }\n unexpected();\n });\n\n function labeled_statement() {\n var label = as_symbol(AST_Label);\n if (label.name === \"await\" && is_in_async()) {\n token_error(S.prev, \"await cannot be used as label inside async function\");\n }\n if (S.labels.some((l) => l.name === label.name)) {\n // ECMA-262, 12.12: An ECMAScript program is considered\n // syntactically incorrect if it contains a\n // LabelledStatement that is enclosed by a\n // LabelledStatement with the same Identifier as label.\n croak(\"Label \" + label.name + \" defined twice\");\n }\n expect(\":\");\n S.labels.push(label);\n var stat = statement();\n S.labels.pop();\n if (!(stat instanceof AST_IterationStatement)) {\n // check for `continue` that refers to this label.\n // those should be reported as syntax errors.\n // https://github.com/mishoo/UglifyJS2/issues/287\n label.references.forEach(function(ref) {\n if (ref instanceof AST_Continue) {\n ref = ref.label.start;\n croak(\"Continue label `\" + label.name + \"` refers to non-IterationStatement.\",\n ref.line, ref.col, ref.pos);\n }\n });\n }\n return new AST_LabeledStatement({ body: stat, label: label });\n }\n\n function simple_statement(tmp) {\n return new AST_SimpleStatement({ body: (tmp = expression(true), semicolon(), tmp) });\n }\n\n function break_cont(type) {\n var label = null, ldef;\n if (!can_insert_semicolon()) {\n label = as_symbol(AST_LabelRef, true);\n }\n if (label != null) {\n ldef = S.labels.find((l) => l.name === label.name);\n if (!ldef)\n croak(\"Undefined label \" + label.name);\n label.thedef = ldef;\n } else if (S.in_loop == 0)\n croak(type.TYPE + \" not inside a loop or switch\");\n semicolon();\n var stat = new type({ label: label });\n if (ldef) ldef.references.push(stat);\n return stat;\n }\n\n function for_() {\n var for_await_error = \"`for await` invalid in this context\";\n var await_tok = S.token;\n if (await_tok.type == \"name\" && await_tok.value == \"await\") {\n if (!is_in_async()) {\n token_error(await_tok, for_await_error);\n }\n next();\n } else {\n await_tok = false;\n }\n expect(\"(\");\n var init = null;\n if (!is(\"punc\", \";\")) {\n init =\n is(\"keyword\", \"var\") ? (next(), var_(true)) :\n is(\"keyword\", \"let\") ? (next(), let_(true)) :\n is(\"keyword\", \"const\") ? (next(), const_(true)) :\n expression(true, true);\n var is_in = is(\"operator\", \"in\");\n var is_of = is(\"name\", \"of\");\n if (await_tok && !is_of) {\n token_error(await_tok, for_await_error);\n }\n if (is_in || is_of) {\n if (init instanceof AST_Definitions) {\n if (init.definitions.length > 1)\n token_error(init.start, \"Only one variable declaration allowed in for..in loop\");\n } else if (!(is_assignable(init) || (init = to_destructuring(init)) instanceof AST_Destructuring)) {\n token_error(init.start, \"Invalid left-hand side in for..in loop\");\n }\n next();\n if (is_in) {\n return for_in(init);\n } else {\n return for_of(init, !!await_tok);\n }\n }\n } else if (await_tok) {\n token_error(await_tok, for_await_error);\n }\n return regular_for(init);\n }\n\n function regular_for(init) {\n expect(\";\");\n var test = is(\"punc\", \";\") ? null : expression(true);\n expect(\";\");\n var step = is(\"punc\", \")\") ? null : expression(true);\n expect(\")\");\n return new AST_For({\n init : init,\n condition : test,\n step : step,\n body : in_loop(function() { return statement(false, true); })\n });\n }\n\n function for_of(init, is_await) {\n var lhs = init instanceof AST_Definitions ? init.definitions[0].name : null;\n var obj = expression(true);\n expect(\")\");\n return new AST_ForOf({\n await : is_await,\n init : init,\n name : lhs,\n object : obj,\n body : in_loop(function() { return statement(false, true); })\n });\n }\n\n function for_in(init) {\n var obj = expression(true);\n expect(\")\");\n return new AST_ForIn({\n init : init,\n object : obj,\n body : in_loop(function() { return statement(false, true); })\n });\n }\n\n var arrow_function = function(start, argnames, is_async) {\n if (has_newline_before(S.token)) {\n croak(\"Unexpected newline before arrow (=>)\");\n }\n\n expect_token(\"arrow\", \"=>\");\n\n var body = _function_body(is(\"punc\", \"{\"), false, is_async);\n\n var end =\n body instanceof Array && body.length ? body[body.length - 1].end :\n body instanceof Array ? start :\n body.end;\n\n return new AST_Arrow({\n start : start,\n end : end,\n async : is_async,\n argnames : argnames,\n body : body\n });\n };\n\n var function_ = function(ctor, is_generator_property, is_async, is_export_default) {\n var in_statement = ctor === AST_Defun;\n var is_generator = is(\"operator\", \"*\");\n if (is_generator) {\n next();\n }\n\n var name = is(\"name\") ? as_symbol(in_statement ? AST_SymbolDefun : AST_SymbolLambda) : null;\n if (in_statement && !name) {\n if (is_export_default) {\n ctor = AST_Function;\n } else {\n unexpected();\n }\n }\n\n if (name && ctor !== AST_Accessor && !(name instanceof AST_SymbolDeclaration))\n unexpected(prev());\n\n var args = [];\n var body = _function_body(true, is_generator || is_generator_property, is_async, name, args);\n return new ctor({\n start : args.start,\n end : body.end,\n is_generator: is_generator,\n async : is_async,\n name : name,\n argnames: args,\n body : body\n });\n };\n\n function track_used_binding_identifiers(is_parameter, strict) {\n var parameters = new Set();\n var duplicate = false;\n var default_assignment = false;\n var spread = false;\n var strict_mode = !!strict;\n var tracker = {\n add_parameter: function(token) {\n if (parameters.has(token.value)) {\n if (duplicate === false) {\n duplicate = token;\n }\n tracker.check_strict();\n } else {\n parameters.add(token.value);\n if (is_parameter) {\n switch (token.value) {\n case \"arguments\":\n case \"eval\":\n case \"yield\":\n if (strict_mode) {\n token_error(token, \"Unexpected \" + token.value + \" identifier as parameter inside strict mode\");\n }\n break;\n default:\n if (RESERVED_WORDS.has(token.value)) {\n unexpected();\n }\n }\n }\n }\n },\n mark_default_assignment: function(token) {\n if (default_assignment === false) {\n default_assignment = token;\n }\n },\n mark_spread: function(token) {\n if (spread === false) {\n spread = token;\n }\n },\n mark_strict_mode: function() {\n strict_mode = true;\n },\n is_strict: function() {\n return default_assignment !== false || spread !== false || strict_mode;\n },\n check_strict: function() {\n if (tracker.is_strict() && duplicate !== false) {\n token_error(duplicate, \"Parameter \" + duplicate.value + \" was used already\");\n }\n }\n };\n\n return tracker;\n }\n\n function parameters(params) {\n var used_parameters = track_used_binding_identifiers(true, S.input.has_directive(\"use strict\"));\n\n expect(\"(\");\n\n while (!is(\"punc\", \")\")) {\n var param = parameter(used_parameters);\n params.push(param);\n\n if (!is(\"punc\", \")\")) {\n expect(\",\");\n if (is(\"punc\", \")\") && options.ecma < 2017) unexpected();\n }\n\n if (param instanceof AST_Expansion) {\n break;\n }\n }\n\n next();\n }\n\n function parameter(used_parameters, symbol_type) {\n var param;\n var expand = false;\n if (used_parameters === undefined) {\n used_parameters = track_used_binding_identifiers(true, S.input.has_directive(\"use strict\"));\n }\n if (is(\"expand\", \"...\")) {\n expand = S.token;\n used_parameters.mark_spread(S.token);\n next();\n }\n param = binding_element(used_parameters, symbol_type);\n\n if (is(\"operator\", \"=\") && expand === false) {\n used_parameters.mark_default_assignment(S.token);\n next();\n param = new AST_DefaultAssign({\n start: param.start,\n left: param,\n operator: \"=\",\n right: expression(false),\n end: S.token\n });\n }\n\n if (expand !== false) {\n if (!is(\"punc\", \")\")) {\n unexpected();\n }\n param = new AST_Expansion({\n start: expand,\n expression: param,\n end: expand\n });\n }\n used_parameters.check_strict();\n\n return param;\n }\n\n function binding_element(used_parameters, symbol_type) {\n var elements = [];\n var first = true;\n var is_expand = false;\n var expand_token;\n var first_token = S.token;\n if (used_parameters === undefined) {\n used_parameters = track_used_binding_identifiers(false, S.input.has_directive(\"use strict\"));\n }\n symbol_type = symbol_type === undefined ? AST_SymbolFunarg : symbol_type;\n if (is(\"punc\", \"[\")) {\n next();\n while (!is(\"punc\", \"]\")) {\n if (first) {\n first = false;\n } else {\n expect(\",\");\n }\n\n if (is(\"expand\", \"...\")) {\n is_expand = true;\n expand_token = S.token;\n used_parameters.mark_spread(S.token);\n next();\n }\n if (is(\"punc\")) {\n switch (S.token.value) {\n case \",\":\n elements.push(new AST_Hole({\n start: S.token,\n end: S.token\n }));\n continue;\n case \"]\": // Trailing comma after last element\n break;\n case \"[\":\n case \"{\":\n elements.push(binding_element(used_parameters, symbol_type));\n break;\n default:\n unexpected();\n }\n } else if (is(\"name\")) {\n used_parameters.add_parameter(S.token);\n elements.push(as_symbol(symbol_type));\n } else {\n croak(\"Invalid function parameter\");\n }\n if (is(\"operator\", \"=\") && is_expand === false) {\n used_parameters.mark_default_assignment(S.token);\n next();\n elements[elements.length - 1] = new AST_DefaultAssign({\n start: elements[elements.length - 1].start,\n left: elements[elements.length - 1],\n operator: \"=\",\n right: expression(false),\n end: S.token\n });\n }\n if (is_expand) {\n if (!is(\"punc\", \"]\")) {\n croak(\"Rest element must be last element\");\n }\n elements[elements.length - 1] = new AST_Expansion({\n start: expand_token,\n expression: elements[elements.length - 1],\n end: expand_token\n });\n }\n }\n expect(\"]\");\n used_parameters.check_strict();\n return new AST_Destructuring({\n start: first_token,\n names: elements,\n is_array: true,\n end: prev()\n });\n } else if (is(\"punc\", \"{\")) {\n next();\n while (!is(\"punc\", \"}\")) {\n if (first) {\n first = false;\n } else {\n expect(\",\");\n }\n if (is(\"expand\", \"...\")) {\n is_expand = true;\n expand_token = S.token;\n used_parameters.mark_spread(S.token);\n next();\n }\n if (is(\"name\") && (is_token(peek(), \"punc\") || is_token(peek(), \"operator\")) && [\",\", \"}\", \"=\"].includes(peek().value)) {\n used_parameters.add_parameter(S.token);\n var start = prev();\n var value = as_symbol(symbol_type);\n if (is_expand) {\n elements.push(new AST_Expansion({\n start: expand_token,\n expression: value,\n end: value.end,\n }));\n } else {\n elements.push(new AST_ObjectKeyVal({\n start: start,\n key: value.name,\n value: value,\n end: value.end,\n }));\n }\n } else if (is(\"punc\", \"}\")) {\n continue; // Allow trailing hole\n } else {\n var property_token = S.token;\n var property = as_property_name();\n if (property === null) {\n unexpected(prev());\n } else if (prev().type === \"name\" && !is(\"punc\", \":\")) {\n elements.push(new AST_ObjectKeyVal({\n start: prev(),\n key: property,\n value: new symbol_type({\n start: prev(),\n name: property,\n end: prev()\n }),\n end: prev()\n }));\n } else {\n expect(\":\");\n elements.push(new AST_ObjectKeyVal({\n start: property_token,\n quote: property_token.quote,\n key: property,\n value: binding_element(used_parameters, symbol_type),\n end: prev()\n }));\n }\n }\n if (is_expand) {\n if (!is(\"punc\", \"}\")) {\n croak(\"Rest element must be last element\");\n }\n } else if (is(\"operator\", \"=\")) {\n used_parameters.mark_default_assignment(S.token);\n next();\n elements[elements.length - 1].value = new AST_DefaultAssign({\n start: elements[elements.length - 1].value.start,\n left: elements[elements.length - 1].value,\n operator: \"=\",\n right: expression(false),\n end: S.token\n });\n }\n }\n expect(\"}\");\n used_parameters.check_strict();\n return new AST_Destructuring({\n start: first_token,\n names: elements,\n is_array: false,\n end: prev()\n });\n } else if (is(\"name\")) {\n used_parameters.add_parameter(S.token);\n return as_symbol(symbol_type);\n } else {\n croak(\"Invalid function parameter\");\n }\n }\n\n function params_or_seq_(allow_arrows, maybe_sequence) {\n var spread_token;\n var invalid_sequence;\n var trailing_comma;\n var a = [];\n expect(\"(\");\n while (!is(\"punc\", \")\")) {\n if (spread_token) unexpected(spread_token);\n if (is(\"expand\", \"...\")) {\n spread_token = S.token;\n if (maybe_sequence) invalid_sequence = S.token;\n next();\n a.push(new AST_Expansion({\n start: prev(),\n expression: expression(),\n end: S.token,\n }));\n } else {\n a.push(expression());\n }\n if (!is(\"punc\", \")\")) {\n expect(\",\");\n if (is(\"punc\", \")\")) {\n if (options.ecma < 2017) unexpected();\n trailing_comma = prev();\n if (maybe_sequence) invalid_sequence = trailing_comma;\n }\n }\n }\n expect(\")\");\n if (allow_arrows && is(\"arrow\", \"=>\")) {\n if (spread_token && trailing_comma) unexpected(trailing_comma);\n } else if (invalid_sequence) {\n unexpected(invalid_sequence);\n }\n return a;\n }\n\n function _function_body(block, generator, is_async, name, args) {\n var loop = S.in_loop;\n var labels = S.labels;\n var current_generator = S.in_generator;\n var current_async = S.in_async;\n ++S.in_function;\n if (generator)\n S.in_generator = S.in_function;\n if (is_async)\n S.in_async = S.in_function;\n if (args) parameters(args);\n if (block)\n S.in_directives = true;\n S.in_loop = 0;\n S.labels = [];\n if (block) {\n S.input.push_directives_stack();\n var a = block_();\n if (name) _verify_symbol(name);\n if (args) args.forEach(_verify_symbol);\n S.input.pop_directives_stack();\n } else {\n var a = [new AST_Return({\n start: S.token,\n value: expression(false),\n end: S.token\n })];\n }\n --S.in_function;\n S.in_loop = loop;\n S.labels = labels;\n S.in_generator = current_generator;\n S.in_async = current_async;\n return a;\n }\n\n function _await_expression() {\n // Previous token must be \"await\" and not be interpreted as an identifier\n if (!is_in_async()) {\n croak(\"Unexpected await expression outside async function\",\n S.prev.line, S.prev.col, S.prev.pos);\n }\n // the await expression is parsed as a unary expression in Babel\n return new AST_Await({\n start: prev(),\n end: S.token,\n expression : maybe_unary(true),\n });\n }\n\n function _yield_expression() {\n // Previous token must be keyword yield and not be interpret as an identifier\n if (!is_in_generator()) {\n croak(\"Unexpected yield expression outside generator function\",\n S.prev.line, S.prev.col, S.prev.pos);\n }\n var start = S.token;\n var star = false;\n var has_expression = true;\n\n // Attempt to get expression or star (and then the mandatory expression)\n // behind yield on the same line.\n //\n // If nothing follows on the same line of the yieldExpression,\n // it should default to the value `undefined` for yield to return.\n // In that case, the `undefined` stored as `null` in ast.\n //\n // Note 1: It isn't allowed for yield* to close without an expression\n // Note 2: If there is a nlb between yield and star, it is interpret as\n // yield *\n if (can_insert_semicolon() ||\n (is(\"punc\") && PUNC_AFTER_EXPRESSION.has(S.token.value))) {\n has_expression = false;\n\n } else if (is(\"operator\", \"*\")) {\n star = true;\n next();\n }\n\n return new AST_Yield({\n start : start,\n is_star : star,\n expression : has_expression ? expression() : null,\n end : prev()\n });\n }\n\n function if_() {\n var cond = parenthesised(), body = statement(false, false, true), belse = null;\n if (is(\"keyword\", \"else\")) {\n next();\n belse = statement(false, false, true);\n }\n return new AST_If({\n condition : cond,\n body : body,\n alternative : belse\n });\n }\n\n function block_() {\n expect(\"{\");\n var a = [];\n while (!is(\"punc\", \"}\")) {\n if (is(\"eof\")) unexpected();\n a.push(statement());\n }\n next();\n return a;\n }\n\n function switch_body_() {\n expect(\"{\");\n var a = [], cur = null, branch = null, tmp;\n while (!is(\"punc\", \"}\")) {\n if (is(\"eof\")) unexpected();\n if (is(\"keyword\", \"case\")) {\n if (branch) branch.end = prev();\n cur = [];\n branch = new AST_Case({\n start : (tmp = S.token, next(), tmp),\n expression : expression(true),\n body : cur\n });\n a.push(branch);\n expect(\":\");\n } else if (is(\"keyword\", \"default\")) {\n if (branch) branch.end = prev();\n cur = [];\n branch = new AST_Default({\n start : (tmp = S.token, next(), expect(\":\"), tmp),\n body : cur\n });\n a.push(branch);\n } else {\n if (!cur) unexpected();\n cur.push(statement());\n }\n }\n if (branch) branch.end = prev();\n next();\n return a;\n }\n\n function try_() {\n var body = block_(), bcatch = null, bfinally = null;\n if (is(\"keyword\", \"catch\")) {\n var start = S.token;\n next();\n if (is(\"punc\", \"{\")) {\n var name = null;\n } else {\n expect(\"(\");\n var name = parameter(undefined, AST_SymbolCatch);\n expect(\")\");\n }\n bcatch = new AST_Catch({\n start : start,\n argname : name,\n body : block_(),\n end : prev()\n });\n }\n if (is(\"keyword\", \"finally\")) {\n var start = S.token;\n next();\n bfinally = new AST_Finally({\n start : start,\n body : block_(),\n end : prev()\n });\n }\n if (!bcatch && !bfinally)\n croak(\"Missing catch/finally blocks\");\n return new AST_Try({\n body : body,\n bcatch : bcatch,\n bfinally : bfinally\n });\n }\n\n function vardefs(no_in, kind) {\n var a = [];\n var def;\n for (;;) {\n var sym_type =\n kind === \"var\" ? AST_SymbolVar :\n kind === \"const\" ? AST_SymbolConst :\n kind === \"let\" ? AST_SymbolLet : null;\n if (is(\"punc\", \"{\") || is(\"punc\", \"[\")) {\n def = new AST_VarDef({\n start: S.token,\n name: binding_element(undefined ,sym_type),\n value: is(\"operator\", \"=\") ? (expect_token(\"operator\", \"=\"), expression(false, no_in)) : null,\n end: prev()\n });\n } else {\n def = new AST_VarDef({\n start : S.token,\n name : as_symbol(sym_type),\n value : is(\"operator\", \"=\")\n ? (next(), expression(false, no_in))\n : !no_in && kind === \"const\"\n ? croak(\"Missing initializer in const declaration\") : null,\n end : prev()\n });\n if (def.name.name == \"import\") croak(\"Unexpected token: import\");\n }\n a.push(def);\n if (!is(\"punc\", \",\"))\n break;\n next();\n }\n return a;\n }\n\n var var_ = function(no_in) {\n return new AST_Var({\n start : prev(),\n definitions : vardefs(no_in, \"var\"),\n end : prev()\n });\n };\n\n var let_ = function(no_in) {\n return new AST_Let({\n start : prev(),\n definitions : vardefs(no_in, \"let\"),\n end : prev()\n });\n };\n\n var const_ = function(no_in) {\n return new AST_Const({\n start : prev(),\n definitions : vardefs(no_in, \"const\"),\n end : prev()\n });\n };\n\n var new_ = function(allow_calls) {\n var start = S.token;\n expect_token(\"operator\", \"new\");\n if (is(\"punc\", \".\")) {\n next();\n expect_token(\"name\", \"target\");\n return subscripts(new AST_NewTarget({\n start : start,\n end : prev()\n }), allow_calls);\n }\n var newexp = expr_atom(false), args;\n if (is(\"punc\", \"(\")) {\n next();\n args = expr_list(\")\", options.ecma >= 2017);\n } else {\n args = [];\n }\n var call = new AST_New({\n start : start,\n expression : newexp,\n args : args,\n end : prev()\n });\n annotate(call);\n return subscripts(call, allow_calls);\n };\n\n function as_atom_node() {\n var tok = S.token, ret;\n switch (tok.type) {\n case \"name\":\n ret = _make_symbol(AST_SymbolRef);\n break;\n case \"num\":\n ret = new AST_Number({ start: tok, end: tok, value: tok.value });\n break;\n case \"big_int\":\n ret = new AST_BigInt({ start: tok, end: tok, value: tok.value });\n break;\n case \"string\":\n ret = new AST_String({\n start : tok,\n end : tok,\n value : tok.value,\n quote : tok.quote\n });\n break;\n case \"regexp\":\n ret = new AST_RegExp({ start: tok, end: tok, value: tok.value });\n break;\n case \"atom\":\n switch (tok.value) {\n case \"false\":\n ret = new AST_False({ start: tok, end: tok });\n break;\n case \"true\":\n ret = new AST_True({ start: tok, end: tok });\n break;\n case \"null\":\n ret = new AST_Null({ start: tok, end: tok });\n break;\n }\n break;\n }\n next();\n return ret;\n }\n\n function to_fun_args(ex, _, __, default_seen_above) {\n var insert_default = function(ex, default_value) {\n if (default_value) {\n return new AST_DefaultAssign({\n start: ex.start,\n left: ex,\n operator: \"=\",\n right: default_value,\n end: default_value.end\n });\n }\n return ex;\n };\n if (ex instanceof AST_Object) {\n return insert_default(new AST_Destructuring({\n start: ex.start,\n end: ex.end,\n is_array: false,\n names: ex.properties.map(to_fun_args)\n }), default_seen_above);\n } else if (ex instanceof AST_ObjectKeyVal) {\n ex.value = to_fun_args(ex.value, 0, [ex.key]);\n return insert_default(ex, default_seen_above);\n } else if (ex instanceof AST_Hole) {\n return ex;\n } else if (ex instanceof AST_Destructuring) {\n ex.names = ex.names.map(to_fun_args);\n return insert_default(ex, default_seen_above);\n } else if (ex instanceof AST_SymbolRef) {\n return insert_default(new AST_SymbolFunarg({\n name: ex.name,\n start: ex.start,\n end: ex.end\n }), default_seen_above);\n } else if (ex instanceof AST_Expansion) {\n ex.expression = to_fun_args(ex.expression);\n return insert_default(ex, default_seen_above);\n } else if (ex instanceof AST_Array) {\n return insert_default(new AST_Destructuring({\n start: ex.start,\n end: ex.end,\n is_array: true,\n names: ex.elements.map(to_fun_args)\n }), default_seen_above);\n } else if (ex instanceof AST_Assign) {\n return insert_default(to_fun_args(ex.left, undefined, undefined, ex.right), default_seen_above);\n } else if (ex instanceof AST_DefaultAssign) {\n ex.left = to_fun_args(ex.left, 0, [ex.left]);\n return ex;\n } else {\n croak(\"Invalid function parameter\", ex.start.line, ex.start.col);\n }\n }\n\n var expr_atom = function(allow_calls, allow_arrows) {\n if (is(\"operator\", \"new\")) {\n return new_(allow_calls);\n }\n var start = S.token;\n var peeked;\n var async = is(\"name\", \"async\")\n && (peeked = peek()).value != \"[\"\n && peeked.type != \"arrow\"\n && as_atom_node();\n if (is(\"punc\")) {\n switch (S.token.value) {\n case \"(\":\n if (async && !allow_calls) break;\n var exprs = params_or_seq_(allow_arrows, !async);\n if (allow_arrows && is(\"arrow\", \"=>\")) {\n return arrow_function(start, exprs.map(to_fun_args), !!async);\n }\n var ex = async ? new AST_Call({\n expression: async,\n args: exprs\n }) : exprs.length == 1 ? exprs[0] : new AST_Sequence({\n expressions: exprs\n });\n if (ex.start) {\n const outer_comments_before = start.comments_before.length;\n outer_comments_before_counts.set(start, outer_comments_before);\n ex.start.comments_before.unshift(...start.comments_before);\n start.comments_before = ex.start.comments_before;\n if (outer_comments_before == 0 && start.comments_before.length > 0) {\n var comment = start.comments_before[0];\n if (!comment.nlb) {\n comment.nlb = start.nlb;\n start.nlb = false;\n }\n }\n start.comments_after = ex.start.comments_after;\n }\n ex.start = start;\n var end = prev();\n if (ex.end) {\n end.comments_before = ex.end.comments_before;\n ex.end.comments_after.push(...end.comments_after);\n end.comments_after = ex.end.comments_after;\n }\n ex.end = end;\n if (ex instanceof AST_Call) annotate(ex);\n return subscripts(ex, allow_calls);\n case \"[\":\n return subscripts(array_(), allow_calls);\n case \"{\":\n return subscripts(object_or_destructuring_(), allow_calls);\n }\n if (!async) unexpected();\n }\n if (allow_arrows && is(\"name\") && is_token(peek(), \"arrow\")) {\n var param = new AST_SymbolFunarg({\n name: S.token.value,\n start: start,\n end: start,\n });\n next();\n return arrow_function(start, [param], !!async);\n }\n if (is(\"keyword\", \"function\")) {\n next();\n var func = function_(AST_Function, false, !!async);\n func.start = start;\n func.end = prev();\n return subscripts(func, allow_calls);\n }\n if (async) return subscripts(async, allow_calls);\n if (is(\"keyword\", \"class\")) {\n next();\n var cls = class_(AST_ClassExpression);\n cls.start = start;\n cls.end = prev();\n return subscripts(cls, allow_calls);\n }\n if (is(\"template_head\")) {\n return subscripts(template_string(false), allow_calls);\n }\n if (ATOMIC_START_TOKEN.has(S.token.type)) {\n return subscripts(as_atom_node(), allow_calls);\n }\n unexpected();\n };\n\n function template_string() {\n var segments = [], start = S.token;\n\n segments.push(new AST_TemplateSegment({\n start: S.token,\n raw: S.token.raw,\n value: S.token.value,\n end: S.token\n }));\n while (!S.token.end) {\n next();\n handle_regexp();\n segments.push(expression(true));\n\n if (!is_token(\"template_substitution\")) {\n unexpected();\n }\n\n segments.push(new AST_TemplateSegment({\n start: S.token,\n raw: S.token.raw,\n value: S.token.value,\n end: S.token\n }));\n }\n next();\n\n return new AST_TemplateString({\n start: start,\n segments: segments,\n end: S.token\n });\n }\n\n function expr_list(closing, allow_trailing_comma, allow_empty) {\n var first = true, a = [];\n while (!is(\"punc\", closing)) {\n if (first) first = false; else expect(\",\");\n if (allow_trailing_comma && is(\"punc\", closing)) break;\n if (is(\"punc\", \",\") && allow_empty) {\n a.push(new AST_Hole({ start: S.token, end: S.token }));\n } else if (is(\"expand\", \"...\")) {\n next();\n a.push(new AST_Expansion({start: prev(), expression: expression(),end: S.token}));\n } else {\n a.push(expression(false));\n }\n }\n next();\n return a;\n }\n\n var array_ = embed_tokens(function() {\n expect(\"[\");\n return new AST_Array({\n elements: expr_list(\"]\", !options.strict, true)\n });\n });\n\n var create_accessor = embed_tokens((is_generator, is_async) => {\n return function_(AST_Accessor, is_generator, is_async);\n });\n\n var object_or_destructuring_ = embed_tokens(function object_or_destructuring_() {\n var start = S.token, first = true, a = [];\n expect(\"{\");\n while (!is(\"punc\", \"}\")) {\n if (first) first = false; else expect(\",\");\n if (!options.strict && is(\"punc\", \"}\"))\n // allow trailing comma\n break;\n\n start = S.token;\n if (start.type == \"expand\") {\n next();\n a.push(new AST_Expansion({\n start: start,\n expression: expression(false),\n end: prev(),\n }));\n continue;\n }\n\n var name = as_property_name();\n var value;\n\n // Check property and fetch value\n if (!is(\"punc\", \":\")) {\n var concise = concise_method_or_getset(name, start);\n if (concise) {\n a.push(concise);\n continue;\n }\n\n value = new AST_SymbolRef({\n start: prev(),\n name: name,\n end: prev()\n });\n } else if (name === null) {\n unexpected(prev());\n } else {\n next(); // `:` - see first condition\n value = expression(false);\n }\n\n // Check for default value and alter value accordingly if necessary\n if (is(\"operator\", \"=\")) {\n next();\n value = new AST_Assign({\n start: start,\n left: value,\n operator: \"=\",\n right: expression(false),\n end: prev()\n });\n }\n\n // Create property\n a.push(new AST_ObjectKeyVal({\n start: start,\n quote: start.quote,\n key: name instanceof AST_Node ? name : \"\" + name,\n value: value,\n end: prev()\n }));\n }\n next();\n return new AST_Object({ properties: a });\n });\n\n function class_(KindOfClass) {\n var start, method, class_name, extends_, a = [];\n\n S.input.push_directives_stack(); // Push directive stack, but not scope stack\n S.input.add_directive(\"use strict\");\n\n if (S.token.type == \"name\" && S.token.value != \"extends\") {\n class_name = as_symbol(KindOfClass === AST_DefClass ? AST_SymbolDefClass : AST_SymbolClass);\n }\n\n if (KindOfClass === AST_DefClass && !class_name) {\n unexpected();\n }\n\n if (S.token.value == \"extends\") {\n next();\n extends_ = expression(true);\n }\n\n expect(\"{\");\n\n while (is(\"punc\", \";\")) { next(); } // Leading semicolons are okay in class bodies.\n while (!is(\"punc\", \"}\")) {\n start = S.token;\n method = concise_method_or_getset(as_property_name(), start, true);\n if (!method) { unexpected(); }\n a.push(method);\n while (is(\"punc\", \";\")) { next(); }\n }\n\n S.input.pop_directives_stack();\n\n next();\n\n return new KindOfClass({\n start: start,\n name: class_name,\n extends: extends_,\n properties: a,\n end: prev(),\n });\n }\n\n function concise_method_or_getset(name, start, is_class) {\n var get_method_name_ast = function(name, start) {\n if (typeof name === \"string\" || typeof name === \"number\") {\n return new AST_SymbolMethod({\n start,\n name: \"\" + name,\n end: prev()\n });\n } else if (name === null) {\n unexpected();\n }\n return name;\n };\n const get_class_property_key_ast = (name) => {\n if (typeof name === \"string\" || typeof name === \"number\") {\n return new AST_SymbolClassProperty({\n start: property_token,\n end: property_token,\n name: \"\" + name\n });\n } else if (name === null) {\n unexpected();\n }\n return name;\n };\n var is_async = false;\n var is_static = false;\n var is_generator = false;\n var property_token = start;\n if (is_class && name === \"static\" && !is(\"punc\", \"(\")) {\n is_static = true;\n property_token = S.token;\n name = as_property_name();\n }\n if (name === \"async\" && !is(\"punc\", \"(\") && !is(\"punc\", \",\") && !is(\"punc\", \"}\") && !is(\"operator\", \"=\")) {\n is_async = true;\n property_token = S.token;\n name = as_property_name();\n }\n if (name === null) {\n is_generator = true;\n property_token = S.token;\n name = as_property_name();\n if (name === null) {\n unexpected();\n }\n }\n if (is(\"punc\", \"(\")) {\n name = get_method_name_ast(name, start);\n var node = new AST_ConciseMethod({\n start : start,\n static : is_static,\n is_generator: is_generator,\n async : is_async,\n key : name,\n quote : name instanceof AST_SymbolMethod ?\n property_token.quote : undefined,\n value : create_accessor(is_generator, is_async),\n end : prev()\n });\n return node;\n }\n const setter_token = S.token;\n if (name == \"get\") {\n if (!is(\"punc\") || is(\"punc\", \"[\")) {\n name = get_method_name_ast(as_property_name(), start);\n return new AST_ObjectGetter({\n start : start,\n static: is_static,\n key : name,\n quote : name instanceof AST_SymbolMethod ?\n setter_token.quote : undefined,\n value : create_accessor(),\n end : prev()\n });\n }\n } else if (name == \"set\") {\n if (!is(\"punc\") || is(\"punc\", \"[\")) {\n name = get_method_name_ast(as_property_name(), start);\n return new AST_ObjectSetter({\n start : start,\n static: is_static,\n key : name,\n quote : name instanceof AST_SymbolMethod ?\n setter_token.quote : undefined,\n value : create_accessor(),\n end : prev()\n });\n }\n }\n if (is_class) {\n const key = get_class_property_key_ast(name, property_token);\n const quote = key instanceof AST_SymbolClassProperty\n ? property_token.quote\n : undefined;\n if (is(\"operator\", \"=\")) {\n next();\n return new AST_ClassProperty({\n start,\n static: is_static,\n quote,\n key,\n value: expression(false),\n end: prev()\n });\n } else if (is(\"name\") || is(\"punc\", \";\") || is(\"punc\", \"}\")) {\n return new AST_ClassProperty({\n start,\n static: is_static,\n quote,\n key,\n end: prev()\n });\n }\n }\n }\n\n function import_() {\n var start = prev();\n var imported_name;\n var imported_names;\n if (is(\"name\")) {\n imported_name = as_symbol(AST_SymbolImport);\n }\n\n if (is(\"punc\", \",\")) {\n next();\n }\n\n imported_names = map_names(true);\n\n if (imported_names || imported_name) {\n expect_token(\"name\", \"from\");\n }\n var mod_str = S.token;\n if (mod_str.type !== \"string\") {\n unexpected();\n }\n next();\n return new AST_Import({\n start: start,\n imported_name: imported_name,\n imported_names: imported_names,\n module_name: new AST_String({\n start: mod_str,\n value: mod_str.value,\n quote: mod_str.quote,\n end: mod_str,\n }),\n end: S.token,\n });\n }\n\n function map_name(is_import) {\n function make_symbol(type) {\n return new type({\n name: as_property_name(),\n start: prev(),\n end: prev()\n });\n }\n\n var foreign_type = is_import ? AST_SymbolImportForeign : AST_SymbolExportForeign;\n var type = is_import ? AST_SymbolImport : AST_SymbolExport;\n var start = S.token;\n var foreign_name;\n var name;\n\n if (is_import) {\n foreign_name = make_symbol(foreign_type);\n } else {\n name = make_symbol(type);\n }\n if (is(\"name\", \"as\")) {\n next(); // The \"as\" word\n if (is_import) {\n name = make_symbol(type);\n } else {\n foreign_name = make_symbol(foreign_type);\n }\n } else if (is_import) {\n name = new type(foreign_name);\n } else {\n foreign_name = new foreign_type(name);\n }\n\n return new AST_NameMapping({\n start: start,\n foreign_name: foreign_name,\n name: name,\n end: prev(),\n });\n }\n\n function map_nameAsterisk(is_import, name) {\n var foreign_type = is_import ? AST_SymbolImportForeign : AST_SymbolExportForeign;\n var type = is_import ? AST_SymbolImport : AST_SymbolExport;\n var start = S.token;\n var foreign_name;\n var end = prev();\n\n name = name || new type({\n name: \"*\",\n start: start,\n end: end,\n });\n\n foreign_name = new foreign_type({\n name: \"*\",\n start: start,\n end: end,\n });\n\n return new AST_NameMapping({\n start: start,\n foreign_name: foreign_name,\n name: name,\n end: end,\n });\n }\n\n function map_names(is_import) {\n var names;\n if (is(\"punc\", \"{\")) {\n next();\n names = [];\n while (!is(\"punc\", \"}\")) {\n names.push(map_name(is_import));\n if (is(\"punc\", \",\")) {\n next();\n }\n }\n next();\n } else if (is(\"operator\", \"*\")) {\n var name;\n next();\n if (is_import && is(\"name\", \"as\")) {\n next(); // The \"as\" word\n name = as_symbol(is_import ? AST_SymbolImport : AST_SymbolExportForeign);\n }\n names = [map_nameAsterisk(is_import, name)];\n }\n return names;\n }\n\n function export_() {\n var start = S.token;\n var is_default;\n var exported_names;\n\n if (is(\"keyword\", \"default\")) {\n is_default = true;\n next();\n } else if (exported_names = map_names(false)) {\n if (is(\"name\", \"from\")) {\n next();\n\n var mod_str = S.token;\n if (mod_str.type !== \"string\") {\n unexpected();\n }\n next();\n\n return new AST_Export({\n start: start,\n is_default: is_default,\n exported_names: exported_names,\n module_name: new AST_String({\n start: mod_str,\n value: mod_str.value,\n quote: mod_str.quote,\n end: mod_str,\n }),\n end: prev(),\n });\n } else {\n return new AST_Export({\n start: start,\n is_default: is_default,\n exported_names: exported_names,\n end: prev(),\n });\n }\n }\n\n var node;\n var exported_value;\n var exported_definition;\n if (is(\"punc\", \"{\")\n || is_default\n && (is(\"keyword\", \"class\") || is(\"keyword\", \"function\"))\n && is_token(peek(), \"punc\")) {\n exported_value = expression(false);\n semicolon();\n } else if ((node = statement(is_default)) instanceof AST_Definitions && is_default) {\n unexpected(node.start);\n } else if (node instanceof AST_Definitions || node instanceof AST_Lambda || node instanceof AST_DefClass) {\n exported_definition = node;\n } else if (node instanceof AST_SimpleStatement) {\n exported_value = node.body;\n } else {\n unexpected(node.start);\n }\n\n return new AST_Export({\n start: start,\n is_default: is_default,\n exported_value: exported_value,\n exported_definition: exported_definition,\n end: prev(),\n });\n }\n\n function as_property_name() {\n var tmp = S.token;\n switch (tmp.type) {\n case \"punc\":\n if (tmp.value === \"[\") {\n next();\n var ex = expression(false);\n expect(\"]\");\n return ex;\n } else unexpected(tmp);\n case \"operator\":\n if (tmp.value === \"*\") {\n next();\n return null;\n }\n if (![\"delete\", \"in\", \"instanceof\", \"new\", \"typeof\", \"void\"].includes(tmp.value)) {\n unexpected(tmp);\n }\n /* falls through */\n case \"name\":\n case \"string\":\n case \"num\":\n case \"big_int\":\n case \"keyword\":\n case \"atom\":\n next();\n return tmp.value;\n default:\n unexpected(tmp);\n }\n }\n\n function as_name() {\n var tmp = S.token;\n if (tmp.type != \"name\") unexpected();\n next();\n return tmp.value;\n }\n\n function _make_symbol(type) {\n var name = S.token.value;\n return new (name == \"this\" ? AST_This :\n name == \"super\" ? AST_Super :\n type)({\n name : String(name),\n start : S.token,\n end : S.token\n });\n }\n\n function _verify_symbol(sym) {\n var name = sym.name;\n if (is_in_generator() && name == \"yield\") {\n token_error(sym.start, \"Yield cannot be used as identifier inside generators\");\n }\n if (S.input.has_directive(\"use strict\")) {\n if (name == \"yield\") {\n token_error(sym.start, \"Unexpected yield identifier inside strict mode\");\n }\n if (sym instanceof AST_SymbolDeclaration && (name == \"arguments\" || name == \"eval\")) {\n token_error(sym.start, \"Unexpected \" + name + \" in strict mode\");\n }\n }\n }\n\n function as_symbol(type, noerror) {\n if (!is(\"name\")) {\n if (!noerror) croak(\"Name expected\");\n return null;\n }\n var sym = _make_symbol(type);\n _verify_symbol(sym);\n next();\n return sym;\n }\n\n // Annotate AST_Call, AST_Lambda or AST_New with the special comments\n function annotate(node) {\n var start = node.start;\n var comments = start.comments_before;\n const comments_outside_parens = outer_comments_before_counts.get(start);\n var i = comments_outside_parens != null ? comments_outside_parens : comments.length;\n while (--i >= 0) {\n var comment = comments[i];\n if (/[@#]__/.test(comment.value)) {\n if (/[@#]__PURE__/.test(comment.value)) {\n set_annotation(node, _PURE);\n break;\n }\n if (/[@#]__INLINE__/.test(comment.value)) {\n set_annotation(node, _INLINE);\n break;\n }\n if (/[@#]__NOINLINE__/.test(comment.value)) {\n set_annotation(node, _NOINLINE);\n break;\n }\n }\n }\n }\n\n var subscripts = function(expr, allow_calls) {\n var start = expr.start;\n if (is(\"punc\", \".\")) {\n next();\n return subscripts(new AST_Dot({\n start : start,\n expression : expr,\n property : as_name(),\n end : prev()\n }), allow_calls);\n }\n if (is(\"punc\", \"[\")) {\n next();\n var prop = expression(true);\n expect(\"]\");\n return subscripts(new AST_Sub({\n start : start,\n expression : expr,\n property : prop,\n end : prev()\n }), allow_calls);\n }\n if (allow_calls && is(\"punc\", \"(\")) {\n next();\n var call = new AST_Call({\n start : start,\n expression : expr,\n args : call_args(),\n end : prev()\n });\n annotate(call);\n return subscripts(call, true);\n }\n if (is(\"template_head\")) {\n return subscripts(new AST_PrefixedTemplateString({\n start: start,\n prefix: expr,\n template_string: template_string(true),\n end: prev()\n }), allow_calls);\n }\n return expr;\n };\n\n function call_args() {\n var args = [];\n while (!is(\"punc\", \")\")) {\n if (is(\"expand\", \"...\")) {\n next();\n args.push(new AST_Expansion({\n start: prev(),\n expression: expression(false),\n end: prev()\n }));\n } else {\n args.push(expression(false));\n }\n if (!is(\"punc\", \")\")) {\n expect(\",\");\n if (is(\"punc\", \")\") && options.ecma < 2017) unexpected();\n }\n }\n next();\n return args;\n }\n\n var maybe_unary = function(allow_calls, allow_arrows) {\n var start = S.token;\n if (start.type == \"name\" && start.value == \"await\") {\n if (is_in_async()) {\n next();\n return _await_expression();\n } else if (S.input.has_directive(\"use strict\")) {\n token_error(S.token, \"Unexpected await identifier inside strict mode\");\n }\n }\n if (is(\"operator\") && UNARY_PREFIX.has(start.value)) {\n next();\n handle_regexp();\n var ex = make_unary(AST_UnaryPrefix, start, maybe_unary(allow_calls));\n ex.start = start;\n ex.end = prev();\n return ex;\n }\n var val = expr_atom(allow_calls, allow_arrows);\n while (is(\"operator\") && UNARY_POSTFIX.has(S.token.value) && !has_newline_before(S.token)) {\n if (val instanceof AST_Arrow) unexpected();\n val = make_unary(AST_UnaryPostfix, S.token, val);\n val.start = start;\n val.end = S.token;\n next();\n }\n return val;\n };\n\n function make_unary(ctor, token, expr) {\n var op = token.value;\n switch (op) {\n case \"++\":\n case \"--\":\n if (!is_assignable(expr))\n croak(\"Invalid use of \" + op + \" operator\", token.line, token.col, token.pos);\n break;\n case \"delete\":\n if (expr instanceof AST_SymbolRef && S.input.has_directive(\"use strict\"))\n croak(\"Calling delete on expression not allowed in strict mode\", expr.start.line, expr.start.col, expr.start.pos);\n break;\n }\n return new ctor({ operator: op, expression: expr });\n }\n\n var expr_op = function(left, min_prec, no_in) {\n var op = is(\"operator\") ? S.token.value : null;\n if (op == \"in\" && no_in) op = null;\n if (op == \"**\" && left instanceof AST_UnaryPrefix\n /* unary token in front not allowed - parenthesis required */\n && !is_token(left.start, \"punc\", \"(\")\n && left.operator !== \"--\" && left.operator !== \"++\")\n unexpected(left.start);\n var prec = op != null ? PRECEDENCE[op] : null;\n if (prec != null && (prec > min_prec || (op === \"**\" && min_prec === prec))) {\n next();\n var right = expr_op(maybe_unary(true), prec, no_in);\n return expr_op(new AST_Binary({\n start : left.start,\n left : left,\n operator : op,\n right : right,\n end : right.end\n }), min_prec, no_in);\n }\n return left;\n };\n\n function expr_ops(no_in) {\n return expr_op(maybe_unary(true, true), 0, no_in);\n }\n\n var maybe_conditional = function(no_in) {\n var start = S.token;\n var expr = expr_ops(no_in);\n if (is(\"operator\", \"?\")) {\n next();\n var yes = expression(false);\n expect(\":\");\n return new AST_Conditional({\n start : start,\n condition : expr,\n consequent : yes,\n alternative : expression(false, no_in),\n end : prev()\n });\n }\n return expr;\n };\n\n function is_assignable(expr) {\n return expr instanceof AST_PropAccess || expr instanceof AST_SymbolRef;\n }\n\n function to_destructuring(node) {\n if (node instanceof AST_Object) {\n node = new AST_Destructuring({\n start: node.start,\n names: node.properties.map(to_destructuring),\n is_array: false,\n end: node.end\n });\n } else if (node instanceof AST_Array) {\n var names = [];\n\n for (var i = 0; i < node.elements.length; i++) {\n // Only allow expansion as last element\n if (node.elements[i] instanceof AST_Expansion) {\n if (i + 1 !== node.elements.length) {\n token_error(node.elements[i].start, \"Spread must the be last element in destructuring array\");\n }\n node.elements[i].expression = to_destructuring(node.elements[i].expression);\n }\n\n names.push(to_destructuring(node.elements[i]));\n }\n\n node = new AST_Destructuring({\n start: node.start,\n names: names,\n is_array: true,\n end: node.end\n });\n } else if (node instanceof AST_ObjectProperty) {\n node.value = to_destructuring(node.value);\n } else if (node instanceof AST_Assign) {\n node = new AST_DefaultAssign({\n start: node.start,\n left: node.left,\n operator: \"=\",\n right: node.right,\n end: node.end\n });\n }\n return node;\n }\n\n // In ES6, AssignmentExpression can also be an ArrowFunction\n var maybe_assign = function(no_in) {\n handle_regexp();\n var start = S.token;\n\n if (start.type == \"name\" && start.value == \"yield\") {\n if (is_in_generator()) {\n next();\n return _yield_expression();\n } else if (S.input.has_directive(\"use strict\")) {\n token_error(S.token, \"Unexpected yield identifier inside strict mode\");\n }\n }\n\n var left = maybe_conditional(no_in);\n var val = S.token.value;\n\n if (is(\"operator\") && ASSIGNMENT.has(val)) {\n if (is_assignable(left) || (left = to_destructuring(left)) instanceof AST_Destructuring) {\n next();\n return new AST_Assign({\n start : start,\n left : left,\n operator : val,\n right : maybe_assign(no_in),\n end : prev()\n });\n }\n croak(\"Invalid assignment\");\n }\n return left;\n };\n\n var expression = function(commas, no_in) {\n var start = S.token;\n var exprs = [];\n while (true) {\n exprs.push(maybe_assign(no_in));\n if (!commas || !is(\"punc\", \",\")) break;\n next();\n commas = true;\n }\n return exprs.length == 1 ? exprs[0] : new AST_Sequence({\n start : start,\n expressions : exprs,\n end : peek()\n });\n };\n\n function in_loop(cont) {\n ++S.in_loop;\n var ret = cont();\n --S.in_loop;\n return ret;\n }\n\n if (options.expression) {\n return expression(true);\n }\n\n return (function() {\n var start = S.token;\n var body = [];\n S.input.push_directives_stack();\n if (options.module) S.input.add_directive(\"use strict\");\n while (!is(\"eof\"))\n body.push(statement());\n S.input.pop_directives_stack();\n var end = prev();\n var toplevel = options.toplevel;\n if (toplevel) {\n toplevel.body = toplevel.body.concat(body);\n toplevel.end = end;\n } else {\n toplevel = new AST_Toplevel({ start: start, body: body, end: end });\n }\n return toplevel;\n })();\n\n}\n\nexport {\n get_full_char_code,\n get_full_char,\n is_identifier_char,\n is_basic_identifier_string,\n is_identifier_string,\n is_surrogate_pair_head,\n is_surrogate_pair_tail,\n js_error,\n JS_Parse_Error,\n parse,\n PRECEDENCE,\n RESERVED_WORDS,\n tokenizer,\n};\n","/***********************************************************************\n\n A JavaScript tokenizer / parser / beautifier / compressor.\n https://github.com/mishoo/UglifyJS2\n\n -------------------------------- (C) ---------------------------------\n\n Author: Mihai Bazon\n \n http://mihai.bazon.net/blog\n\n Distributed under the BSD license:\n\n Copyright 2012 (c) Mihai Bazon \n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions\n are met:\n\n * Redistributions of source code must retain the above\n copyright notice, this list of conditions and the following\n disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials\n provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY\n EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE\n LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,\n OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR\n TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF\n THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n SUCH DAMAGE.\n\n ***********************************************************************/\n\n\"use strict\";\n\nimport {\n HOP,\n MAP,\n noop,\n string_template,\n} from \"./utils/index.js\";\nimport { parse } from \"./parse.js\";\n\nfunction DEFNODE(type, props, methods, base = AST_Node) {\n if (!props) props = [];\n else props = props.split(/\\s+/);\n var self_props = props;\n if (base && base.PROPS)\n props = props.concat(base.PROPS);\n var code = \"return function AST_\" + type + \"(props){ if (props) { \";\n for (var i = props.length; --i >= 0;) {\n code += \"this.\" + props[i] + \" = props.\" + props[i] + \";\";\n }\n const proto = base && Object.create(base.prototype);\n if (proto && proto.initialize || (methods && methods.initialize))\n code += \"this.initialize();\";\n code += \"}\";\n code += \"this.flags = 0;\";\n code += \"}\";\n var ctor = new Function(code)();\n if (proto) {\n ctor.prototype = proto;\n ctor.BASE = base;\n }\n if (base) base.SUBCLASSES.push(ctor);\n ctor.prototype.CTOR = ctor;\n ctor.prototype.constructor = ctor;\n ctor.PROPS = props || null;\n ctor.SELF_PROPS = self_props;\n ctor.SUBCLASSES = [];\n if (type) {\n ctor.prototype.TYPE = ctor.TYPE = type;\n }\n if (methods) for (i in methods) if (HOP(methods, i)) {\n if (i[0] === \"$\") {\n ctor[i.substr(1)] = methods[i];\n } else {\n ctor.prototype[i] = methods[i];\n }\n }\n ctor.DEFMETHOD = function(name, method) {\n this.prototype[name] = method;\n };\n return ctor;\n}\n\nvar AST_Token = DEFNODE(\"Token\", \"type value line col pos endline endcol endpos nlb comments_before comments_after file raw quote end\", {\n}, null);\n\nvar AST_Node = DEFNODE(\"Node\", \"start end\", {\n _clone: function(deep) {\n if (deep) {\n var self = this.clone();\n return self.transform(new TreeTransformer(function(node) {\n if (node !== self) {\n return node.clone(true);\n }\n }));\n }\n return new this.CTOR(this);\n },\n clone: function(deep) {\n return this._clone(deep);\n },\n $documentation: \"Base class of all AST nodes\",\n $propdoc: {\n start: \"[AST_Token] The first token of this node\",\n end: \"[AST_Token] The last token of this node\"\n },\n _walk: function(visitor) {\n return visitor._visit(this);\n },\n walk: function(visitor) {\n return this._walk(visitor); // not sure the indirection will be any help\n },\n _children_backwards: () => {}\n}, null);\n\nAST_Node.warn_function = null;\nAST_Node.warn = function(txt, props) {\n if (AST_Node.warn_function)\n AST_Node.warn_function(string_template(txt, props));\n};\n\n/* -----[ statements ]----- */\n\nvar AST_Statement = DEFNODE(\"Statement\", null, {\n $documentation: \"Base class of all statements\",\n});\n\nvar AST_Debugger = DEFNODE(\"Debugger\", null, {\n $documentation: \"Represents a debugger statement\",\n}, AST_Statement);\n\nvar AST_Directive = DEFNODE(\"Directive\", \"value quote\", {\n $documentation: \"Represents a directive, like \\\"use strict\\\";\",\n $propdoc: {\n value: \"[string] The value of this directive as a plain string (it's not an AST_String!)\",\n quote: \"[string] the original quote character\"\n },\n}, AST_Statement);\n\nvar AST_SimpleStatement = DEFNODE(\"SimpleStatement\", \"body\", {\n $documentation: \"A statement consisting of an expression, i.e. a = 1 + 2\",\n $propdoc: {\n body: \"[AST_Node] an expression node (should not be instanceof AST_Statement)\"\n },\n _walk: function(visitor) {\n return visitor._visit(this, function() {\n this.body._walk(visitor);\n });\n },\n _children_backwards(push) {\n push(this.body);\n }\n}, AST_Statement);\n\nfunction walk_body(node, visitor) {\n const body = node.body;\n for (var i = 0, len = body.length; i < len; i++) {\n body[i]._walk(visitor);\n }\n}\n\nfunction clone_block_scope(deep) {\n var clone = this._clone(deep);\n if (this.block_scope) {\n // TODO this is sometimes undefined during compression.\n // But it should always have a value!\n clone.block_scope = this.block_scope.clone();\n }\n return clone;\n}\n\nvar AST_Block = DEFNODE(\"Block\", \"body block_scope\", {\n $documentation: \"A body of statements (usually braced)\",\n $propdoc: {\n body: \"[AST_Statement*] an array of statements\",\n block_scope: \"[AST_Scope] the block scope\"\n },\n _walk: function(visitor) {\n return visitor._visit(this, function() {\n walk_body(this, visitor);\n });\n },\n _children_backwards(push) {\n let i = this.body.length;\n while (i--) push(this.body[i]);\n },\n clone: clone_block_scope\n}, AST_Statement);\n\nvar AST_BlockStatement = DEFNODE(\"BlockStatement\", null, {\n $documentation: \"A block statement\",\n}, AST_Block);\n\nvar AST_EmptyStatement = DEFNODE(\"EmptyStatement\", null, {\n $documentation: \"The empty statement (empty block or simply a semicolon)\"\n}, AST_Statement);\n\nvar AST_StatementWithBody = DEFNODE(\"StatementWithBody\", \"body\", {\n $documentation: \"Base class for all statements that contain one nested body: `For`, `ForIn`, `Do`, `While`, `With`\",\n $propdoc: {\n body: \"[AST_Statement] the body; this should always be present, even if it's an AST_EmptyStatement\"\n }\n}, AST_Statement);\n\nvar AST_LabeledStatement = DEFNODE(\"LabeledStatement\", \"label\", {\n $documentation: \"Statement with a label\",\n $propdoc: {\n label: \"[AST_Label] a label definition\"\n },\n _walk: function(visitor) {\n return visitor._visit(this, function() {\n this.label._walk(visitor);\n this.body._walk(visitor);\n });\n },\n _children_backwards(push) {\n push(this.body);\n push(this.label);\n },\n clone: function(deep) {\n var node = this._clone(deep);\n if (deep) {\n var label = node.label;\n var def = this.label;\n node.walk(new TreeWalker(function(node) {\n if (node instanceof AST_LoopControl\n && node.label && node.label.thedef === def) {\n node.label.thedef = label;\n label.references.push(node);\n }\n }));\n }\n return node;\n }\n}, AST_StatementWithBody);\n\nvar AST_IterationStatement = DEFNODE(\"IterationStatement\", \"block_scope\", {\n $documentation: \"Internal class. All loops inherit from it.\",\n $propdoc: {\n block_scope: \"[AST_Scope] the block scope for this iteration statement.\"\n },\n clone: clone_block_scope\n}, AST_StatementWithBody);\n\nvar AST_DWLoop = DEFNODE(\"DWLoop\", \"condition\", {\n $documentation: \"Base class for do/while statements\",\n $propdoc: {\n condition: \"[AST_Node] the loop condition. Should not be instanceof AST_Statement\"\n }\n}, AST_IterationStatement);\n\nvar AST_Do = DEFNODE(\"Do\", null, {\n $documentation: \"A `do` statement\",\n _walk: function(visitor) {\n return visitor._visit(this, function() {\n this.body._walk(visitor);\n this.condition._walk(visitor);\n });\n },\n _children_backwards(push) {\n push(this.condition);\n push(this.body);\n }\n}, AST_DWLoop);\n\nvar AST_While = DEFNODE(\"While\", null, {\n $documentation: \"A `while` statement\",\n _walk: function(visitor) {\n return visitor._visit(this, function() {\n this.condition._walk(visitor);\n this.body._walk(visitor);\n });\n },\n _children_backwards(push) {\n push(this.body);\n push(this.condition);\n },\n}, AST_DWLoop);\n\nvar AST_For = DEFNODE(\"For\", \"init condition step\", {\n $documentation: \"A `for` statement\",\n $propdoc: {\n init: \"[AST_Node?] the `for` initialization code, or null if empty\",\n condition: \"[AST_Node?] the `for` termination clause, or null if empty\",\n step: \"[AST_Node?] the `for` update clause, or null if empty\"\n },\n _walk: function(visitor) {\n return visitor._visit(this, function() {\n if (this.init) this.init._walk(visitor);\n if (this.condition) this.condition._walk(visitor);\n if (this.step) this.step._walk(visitor);\n this.body._walk(visitor);\n });\n },\n _children_backwards(push) {\n push(this.body);\n if (this.step) push(this.step);\n if (this.condition) push(this.condition);\n if (this.init) push(this.init);\n },\n}, AST_IterationStatement);\n\nvar AST_ForIn = DEFNODE(\"ForIn\", \"init object\", {\n $documentation: \"A `for ... in` statement\",\n $propdoc: {\n init: \"[AST_Node] the `for/in` initialization code\",\n object: \"[AST_Node] the object that we're looping through\"\n },\n _walk: function(visitor) {\n return visitor._visit(this, function() {\n this.init._walk(visitor);\n this.object._walk(visitor);\n this.body._walk(visitor);\n });\n },\n _children_backwards(push) {\n push(this.body);\n if (this.object) push(this.object);\n if (this.init) push(this.init);\n },\n}, AST_IterationStatement);\n\nvar AST_ForOf = DEFNODE(\"ForOf\", \"await\", {\n $documentation: \"A `for ... of` statement\",\n}, AST_ForIn);\n\nvar AST_With = DEFNODE(\"With\", \"expression\", {\n $documentation: \"A `with` statement\",\n $propdoc: {\n expression: \"[AST_Node] the `with` expression\"\n },\n _walk: function(visitor) {\n return visitor._visit(this, function() {\n this.expression._walk(visitor);\n this.body._walk(visitor);\n });\n },\n _children_backwards(push) {\n push(this.body);\n push(this.expression);\n },\n}, AST_StatementWithBody);\n\n/* -----[ scope and functions ]----- */\n\nvar AST_Scope = DEFNODE(\"Scope\", \"variables functions uses_with uses_eval parent_scope enclosed cname _var_name_cache\", {\n $documentation: \"Base class for all statements introducing a lexical scope\",\n $propdoc: {\n variables: \"[Map/S] a map of name -> SymbolDef for all variables/functions defined in this scope\",\n functions: \"[Map/S] like `variables`, but only lists function declarations\",\n uses_with: \"[boolean/S] tells whether this scope uses the `with` statement\",\n uses_eval: \"[boolean/S] tells whether this scope contains a direct call to the global `eval`\",\n parent_scope: \"[AST_Scope?/S] link to the parent scope\",\n enclosed: \"[SymbolDef*/S] a list of all symbol definitions that are accessed from this scope or any subscopes\",\n cname: \"[integer/S] current index for mangling variables (used internally by the mangler)\",\n },\n get_defun_scope: function() {\n var self = this;\n while (self.is_block_scope()) {\n self = self.parent_scope;\n }\n return self;\n },\n clone: function(deep) {\n var node = this._clone(deep);\n if (this.variables) node.variables = new Map(this.variables);\n if (this.functions) node.functions = new Map(this.functions);\n if (this.enclosed) node.enclosed = this.enclosed.slice();\n if (this._block_scope) node._block_scope = this._block_scope;\n return node;\n },\n pinned: function() {\n return this.uses_eval || this.uses_with;\n }\n}, AST_Block);\n\nvar AST_Toplevel = DEFNODE(\"Toplevel\", \"globals\", {\n $documentation: \"The toplevel scope\",\n $propdoc: {\n globals: \"[Map/S] a map of name -> SymbolDef for all undeclared names\",\n },\n wrap_commonjs: function(name) {\n var body = this.body;\n var wrapped_tl = \"(function(exports){'$ORIG';})(typeof \" + name + \"=='undefined'?(\" + name + \"={}):\" + name + \");\";\n wrapped_tl = parse(wrapped_tl);\n wrapped_tl = wrapped_tl.transform(new TreeTransformer(function(node) {\n if (node instanceof AST_Directive && node.value == \"$ORIG\") {\n return MAP.splice(body);\n }\n }));\n return wrapped_tl;\n },\n wrap_enclose: function(args_values) {\n if (typeof args_values != \"string\") args_values = \"\";\n var index = args_values.indexOf(\":\");\n if (index < 0) index = args_values.length;\n var body = this.body;\n return parse([\n \"(function(\",\n args_values.slice(0, index),\n '){\"$ORIG\"})(',\n args_values.slice(index + 1),\n \")\"\n ].join(\"\")).transform(new TreeTransformer(function(node) {\n if (node instanceof AST_Directive && node.value == \"$ORIG\") {\n return MAP.splice(body);\n }\n }));\n }\n}, AST_Scope);\n\nvar AST_Expansion = DEFNODE(\"Expansion\", \"expression\", {\n $documentation: \"An expandible argument, such as ...rest, a splat, such as [1,2,...all], or an expansion in a variable declaration, such as var [first, ...rest] = list\",\n $propdoc: {\n expression: \"[AST_Node] the thing to be expanded\"\n },\n _walk: function(visitor) {\n return visitor._visit(this, function() {\n this.expression.walk(visitor);\n });\n },\n _children_backwards(push) {\n push(this.expression);\n },\n});\n\nvar AST_Lambda = DEFNODE(\"Lambda\", \"name argnames uses_arguments is_generator async\", {\n $documentation: \"Base class for functions\",\n $propdoc: {\n name: \"[AST_SymbolDeclaration?] the name of this function\",\n argnames: \"[AST_SymbolFunarg|AST_Destructuring|AST_Expansion|AST_DefaultAssign*] array of function arguments, destructurings, or expanding arguments\",\n uses_arguments: \"[boolean/S] tells whether this function accesses the arguments array\",\n is_generator: \"[boolean] is this a generator method\",\n async: \"[boolean] is this method async\",\n },\n args_as_names: function () {\n var out = [];\n for (var i = 0; i < this.argnames.length; i++) {\n if (this.argnames[i] instanceof AST_Destructuring) {\n out.push(...this.argnames[i].all_symbols());\n } else {\n out.push(this.argnames[i]);\n }\n }\n return out;\n },\n _walk: function(visitor) {\n return visitor._visit(this, function() {\n if (this.name) this.name._walk(visitor);\n var argnames = this.argnames;\n for (var i = 0, len = argnames.length; i < len; i++) {\n argnames[i]._walk(visitor);\n }\n walk_body(this, visitor);\n });\n },\n _children_backwards(push) {\n let i = this.body.length;\n while (i--) push(this.body[i]);\n\n i = this.argnames.length;\n while (i--) push(this.argnames[i]);\n\n if (this.name) push(this.name);\n },\n}, AST_Scope);\n\nvar AST_Accessor = DEFNODE(\"Accessor\", null, {\n $documentation: \"A setter/getter function. The `name` property is always null.\"\n}, AST_Lambda);\n\nvar AST_Function = DEFNODE(\"Function\", null, {\n $documentation: \"A function expression\"\n}, AST_Lambda);\n\nvar AST_Arrow = DEFNODE(\"Arrow\", null, {\n $documentation: \"An ES6 Arrow function ((a) => b)\"\n}, AST_Lambda);\n\nvar AST_Defun = DEFNODE(\"Defun\", null, {\n $documentation: \"A function definition\"\n}, AST_Lambda);\n\n/* -----[ DESTRUCTURING ]----- */\nvar AST_Destructuring = DEFNODE(\"Destructuring\", \"names is_array\", {\n $documentation: \"A destructuring of several names. Used in destructuring assignment and with destructuring function argument names\",\n $propdoc: {\n \"names\": \"[AST_Node*] Array of properties or elements\",\n \"is_array\": \"[Boolean] Whether the destructuring represents an object or array\"\n },\n _walk: function(visitor) {\n return visitor._visit(this, function() {\n this.names.forEach(function(name) {\n name._walk(visitor);\n });\n });\n },\n _children_backwards(push) {\n let i = this.names.length;\n while (i--) push(this.names[i]);\n },\n all_symbols: function() {\n var out = [];\n this.walk(new TreeWalker(function (node) {\n if (node instanceof AST_Symbol) {\n out.push(node);\n }\n }));\n return out;\n }\n});\n\nvar AST_PrefixedTemplateString = DEFNODE(\"PrefixedTemplateString\", \"template_string prefix\", {\n $documentation: \"A templatestring with a prefix, such as String.raw`foobarbaz`\",\n $propdoc: {\n template_string: \"[AST_TemplateString] The template string\",\n prefix: \"[AST_SymbolRef|AST_PropAccess] The prefix, which can be a symbol such as `foo` or a dotted expression such as `String.raw`.\"\n },\n _walk: function(visitor) {\n return visitor._visit(this, function () {\n this.prefix._walk(visitor);\n this.template_string._walk(visitor);\n });\n },\n _children_backwards(push) {\n push(this.template_string);\n push(this.prefix);\n },\n});\n\nvar AST_TemplateString = DEFNODE(\"TemplateString\", \"segments\", {\n $documentation: \"A template string literal\",\n $propdoc: {\n segments: \"[AST_Node*] One or more segments, starting with AST_TemplateSegment. AST_Node may follow AST_TemplateSegment, but each AST_Node must be followed by AST_TemplateSegment.\"\n },\n _walk: function(visitor) {\n return visitor._visit(this, function() {\n this.segments.forEach(function(seg) {\n seg._walk(visitor);\n });\n });\n },\n _children_backwards(push) {\n let i = this.segments.length;\n while (i--) push(this.segments[i]);\n }\n});\n\nvar AST_TemplateSegment = DEFNODE(\"TemplateSegment\", \"value raw\", {\n $documentation: \"A segment of a template string literal\",\n $propdoc: {\n value: \"Content of the segment\",\n raw: \"Raw content of the segment\"\n }\n});\n\n/* -----[ JUMPS ]----- */\n\nvar AST_Jump = DEFNODE(\"Jump\", null, {\n $documentation: \"Base class for “jumps” (for now that's `return`, `throw`, `break` and `continue`)\"\n}, AST_Statement);\n\nvar AST_Exit = DEFNODE(\"Exit\", \"value\", {\n $documentation: \"Base class for “exits” (`return` and `throw`)\",\n $propdoc: {\n value: \"[AST_Node?] the value returned or thrown by this statement; could be null for AST_Return\"\n },\n _walk: function(visitor) {\n return visitor._visit(this, this.value && function() {\n this.value._walk(visitor);\n });\n },\n _children_backwards(push) {\n if (this.value) push(this.value);\n },\n}, AST_Jump);\n\nvar AST_Return = DEFNODE(\"Return\", null, {\n $documentation: \"A `return` statement\"\n}, AST_Exit);\n\nvar AST_Throw = DEFNODE(\"Throw\", null, {\n $documentation: \"A `throw` statement\"\n}, AST_Exit);\n\nvar AST_LoopControl = DEFNODE(\"LoopControl\", \"label\", {\n $documentation: \"Base class for loop control statements (`break` and `continue`)\",\n $propdoc: {\n label: \"[AST_LabelRef?] the label, or null if none\",\n },\n _walk: function(visitor) {\n return visitor._visit(this, this.label && function() {\n this.label._walk(visitor);\n });\n },\n _children_backwards(push) {\n if (this.label) push(this.label);\n },\n}, AST_Jump);\n\nvar AST_Break = DEFNODE(\"Break\", null, {\n $documentation: \"A `break` statement\"\n}, AST_LoopControl);\n\nvar AST_Continue = DEFNODE(\"Continue\", null, {\n $documentation: \"A `continue` statement\"\n}, AST_LoopControl);\n\nvar AST_Await = DEFNODE(\"Await\", \"expression\", {\n $documentation: \"An `await` statement\",\n $propdoc: {\n expression: \"[AST_Node] the mandatory expression being awaited\",\n },\n _walk: function(visitor) {\n return visitor._visit(this, function() {\n this.expression._walk(visitor);\n });\n },\n _children_backwards(push) {\n push(this.expression);\n },\n});\n\nvar AST_Yield = DEFNODE(\"Yield\", \"expression is_star\", {\n $documentation: \"A `yield` statement\",\n $propdoc: {\n expression: \"[AST_Node?] the value returned or thrown by this statement; could be null (representing undefined) but only when is_star is set to false\",\n is_star: \"[Boolean] Whether this is a yield or yield* statement\"\n },\n _walk: function(visitor) {\n return visitor._visit(this, this.expression && function() {\n this.expression._walk(visitor);\n });\n },\n _children_backwards(push) {\n if (this.expression) push(this.expression);\n }\n});\n\n/* -----[ IF ]----- */\n\nvar AST_If = DEFNODE(\"If\", \"condition alternative\", {\n $documentation: \"A `if` statement\",\n $propdoc: {\n condition: \"[AST_Node] the `if` condition\",\n alternative: \"[AST_Statement?] the `else` part, or null if not present\"\n },\n _walk: function(visitor) {\n return visitor._visit(this, function() {\n this.condition._walk(visitor);\n this.body._walk(visitor);\n if (this.alternative) this.alternative._walk(visitor);\n });\n },\n _children_backwards(push) {\n if (this.alternative) {\n push(this.alternative);\n }\n push(this.body);\n push(this.condition);\n }\n}, AST_StatementWithBody);\n\n/* -----[ SWITCH ]----- */\n\nvar AST_Switch = DEFNODE(\"Switch\", \"expression\", {\n $documentation: \"A `switch` statement\",\n $propdoc: {\n expression: \"[AST_Node] the `switch` “discriminant”\"\n },\n _walk: function(visitor) {\n return visitor._visit(this, function() {\n this.expression._walk(visitor);\n walk_body(this, visitor);\n });\n },\n _children_backwards(push) {\n let i = this.body.length;\n while (i--) push(this.body[i]);\n push(this.expression);\n }\n}, AST_Block);\n\nvar AST_SwitchBranch = DEFNODE(\"SwitchBranch\", null, {\n $documentation: \"Base class for `switch` branches\",\n}, AST_Block);\n\nvar AST_Default = DEFNODE(\"Default\", null, {\n $documentation: \"A `default` switch branch\",\n}, AST_SwitchBranch);\n\nvar AST_Case = DEFNODE(\"Case\", \"expression\", {\n $documentation: \"A `case` switch branch\",\n $propdoc: {\n expression: \"[AST_Node] the `case` expression\"\n },\n _walk: function(visitor) {\n return visitor._visit(this, function() {\n this.expression._walk(visitor);\n walk_body(this, visitor);\n });\n },\n _children_backwards(push) {\n let i = this.body.length;\n while (i--) push(this.body[i]);\n push(this.expression);\n },\n}, AST_SwitchBranch);\n\n/* -----[ EXCEPTIONS ]----- */\n\nvar AST_Try = DEFNODE(\"Try\", \"bcatch bfinally\", {\n $documentation: \"A `try` statement\",\n $propdoc: {\n bcatch: \"[AST_Catch?] the catch block, or null if not present\",\n bfinally: \"[AST_Finally?] the finally block, or null if not present\"\n },\n _walk: function(visitor) {\n return visitor._visit(this, function() {\n walk_body(this, visitor);\n if (this.bcatch) this.bcatch._walk(visitor);\n if (this.bfinally) this.bfinally._walk(visitor);\n });\n },\n _children_backwards(push) {\n if (this.bfinally) push(this.bfinally);\n if (this.bcatch) push(this.bcatch);\n let i = this.body.length;\n while (i--) push(this.body[i]);\n },\n}, AST_Block);\n\nvar AST_Catch = DEFNODE(\"Catch\", \"argname\", {\n $documentation: \"A `catch` node; only makes sense as part of a `try` statement\",\n $propdoc: {\n argname: \"[AST_SymbolCatch|AST_Destructuring|AST_Expansion|AST_DefaultAssign] symbol for the exception\"\n },\n _walk: function(visitor) {\n return visitor._visit(this, function() {\n if (this.argname) this.argname._walk(visitor);\n walk_body(this, visitor);\n });\n },\n _children_backwards(push) {\n let i = this.body.length;\n while (i--) push(this.body[i]);\n if (this.argname) push(this.argname);\n },\n}, AST_Block);\n\nvar AST_Finally = DEFNODE(\"Finally\", null, {\n $documentation: \"A `finally` node; only makes sense as part of a `try` statement\"\n}, AST_Block);\n\n/* -----[ VAR/CONST ]----- */\n\nvar AST_Definitions = DEFNODE(\"Definitions\", \"definitions\", {\n $documentation: \"Base class for `var` or `const` nodes (variable declarations/initializations)\",\n $propdoc: {\n definitions: \"[AST_VarDef*] array of variable definitions\"\n },\n _walk: function(visitor) {\n return visitor._visit(this, function() {\n var definitions = this.definitions;\n for (var i = 0, len = definitions.length; i < len; i++) {\n definitions[i]._walk(visitor);\n }\n });\n },\n _children_backwards(push) {\n let i = this.definitions.length;\n while (i--) push(this.definitions[i]);\n },\n}, AST_Statement);\n\nvar AST_Var = DEFNODE(\"Var\", null, {\n $documentation: \"A `var` statement\"\n}, AST_Definitions);\n\nvar AST_Let = DEFNODE(\"Let\", null, {\n $documentation: \"A `let` statement\"\n}, AST_Definitions);\n\nvar AST_Const = DEFNODE(\"Const\", null, {\n $documentation: \"A `const` statement\"\n}, AST_Definitions);\n\nvar AST_VarDef = DEFNODE(\"VarDef\", \"name value\", {\n $documentation: \"A variable declaration; only appears in a AST_Definitions node\",\n $propdoc: {\n name: \"[AST_Destructuring|AST_SymbolConst|AST_SymbolLet|AST_SymbolVar] name of the variable\",\n value: \"[AST_Node?] initializer, or null of there's no initializer\"\n },\n _walk: function(visitor) {\n return visitor._visit(this, function() {\n this.name._walk(visitor);\n if (this.value) this.value._walk(visitor);\n });\n },\n _children_backwards(push) {\n if (this.value) push(this.value);\n push(this.name);\n },\n});\n\nvar AST_NameMapping = DEFNODE(\"NameMapping\", \"foreign_name name\", {\n $documentation: \"The part of the export/import statement that declare names from a module.\",\n $propdoc: {\n foreign_name: \"[AST_SymbolExportForeign|AST_SymbolImportForeign] The name being exported/imported (as specified in the module)\",\n name: \"[AST_SymbolExport|AST_SymbolImport] The name as it is visible to this module.\"\n },\n _walk: function (visitor) {\n return visitor._visit(this, function() {\n this.foreign_name._walk(visitor);\n this.name._walk(visitor);\n });\n },\n _children_backwards(push) {\n push(this.name);\n push(this.foreign_name);\n },\n});\n\nvar AST_Import = DEFNODE(\"Import\", \"imported_name imported_names module_name\", {\n $documentation: \"An `import` statement\",\n $propdoc: {\n imported_name: \"[AST_SymbolImport] The name of the variable holding the module's default export.\",\n imported_names: \"[AST_NameMapping*] The names of non-default imported variables\",\n module_name: \"[AST_String] String literal describing where this module came from\",\n },\n _walk: function(visitor) {\n return visitor._visit(this, function() {\n if (this.imported_name) {\n this.imported_name._walk(visitor);\n }\n if (this.imported_names) {\n this.imported_names.forEach(function(name_import) {\n name_import._walk(visitor);\n });\n }\n this.module_name._walk(visitor);\n });\n },\n _children_backwards(push) {\n push(this.module_name);\n if (this.imported_names) {\n let i = this.imported_names.length;\n while (i--) push(this.imported_names[i]);\n }\n if (this.imported_name) push(this.imported_name);\n },\n});\n\nvar AST_Export = DEFNODE(\"Export\", \"exported_definition exported_value is_default exported_names module_name\", {\n $documentation: \"An `export` statement\",\n $propdoc: {\n exported_definition: \"[AST_Defun|AST_Definitions|AST_DefClass?] An exported definition\",\n exported_value: \"[AST_Node?] An exported value\",\n exported_names: \"[AST_NameMapping*?] List of exported names\",\n module_name: \"[AST_String?] Name of the file to load exports from\",\n is_default: \"[Boolean] Whether this is the default exported value of this module\"\n },\n _walk: function (visitor) {\n return visitor._visit(this, function () {\n if (this.exported_definition) {\n this.exported_definition._walk(visitor);\n }\n if (this.exported_value) {\n this.exported_value._walk(visitor);\n }\n if (this.exported_names) {\n this.exported_names.forEach(function(name_export) {\n name_export._walk(visitor);\n });\n }\n if (this.module_name) {\n this.module_name._walk(visitor);\n }\n });\n },\n _children_backwards(push) {\n if (this.module_name) push(this.module_name);\n if (this.exported_names) {\n let i = this.exported_names.length;\n while (i--) push(this.exported_names[i]);\n }\n if (this.exported_value) push(this.exported_value);\n if (this.exported_definition) push(this.exported_definition);\n }\n}, AST_Statement);\n\n/* -----[ OTHER ]----- */\n\nvar AST_Call = DEFNODE(\"Call\", \"expression args _annotations\", {\n $documentation: \"A function call expression\",\n $propdoc: {\n expression: \"[AST_Node] expression to invoke as function\",\n args: \"[AST_Node*] array of arguments\",\n _annotations: \"[number] bitfield containing information about the call\"\n },\n initialize() {\n if (this._annotations == null) this._annotations = 0;\n },\n _walk(visitor) {\n return visitor._visit(this, function() {\n var args = this.args;\n for (var i = 0, len = args.length; i < len; i++) {\n args[i]._walk(visitor);\n }\n this.expression._walk(visitor); // TODO why do we need to crawl this last?\n });\n },\n _children_backwards(push) {\n let i = this.args.length;\n while (i--) push(this.args[i]);\n push(this.expression);\n },\n});\n\nvar AST_New = DEFNODE(\"New\", null, {\n $documentation: \"An object instantiation. Derives from a function call since it has exactly the same properties\"\n}, AST_Call);\n\nvar AST_Sequence = DEFNODE(\"Sequence\", \"expressions\", {\n $documentation: \"A sequence expression (comma-separated expressions)\",\n $propdoc: {\n expressions: \"[AST_Node*] array of expressions (at least two)\"\n },\n _walk: function(visitor) {\n return visitor._visit(this, function() {\n this.expressions.forEach(function(node) {\n node._walk(visitor);\n });\n });\n },\n _children_backwards(push) {\n let i = this.expressions.length;\n while (i--) push(this.expressions[i]);\n },\n});\n\nvar AST_PropAccess = DEFNODE(\"PropAccess\", \"expression property\", {\n $documentation: \"Base class for property access expressions, i.e. `a.foo` or `a[\\\"foo\\\"]`\",\n $propdoc: {\n expression: \"[AST_Node] the “container” expression\",\n property: \"[AST_Node|string] the property to access. For AST_Dot this is always a plain string, while for AST_Sub it's an arbitrary AST_Node\"\n }\n});\n\nvar AST_Dot = DEFNODE(\"Dot\", \"quote\", {\n $documentation: \"A dotted property access expression\",\n $propdoc: {\n quote: \"[string] the original quote character when transformed from AST_Sub\",\n },\n _walk: function(visitor) {\n return visitor._visit(this, function() {\n this.expression._walk(visitor);\n });\n },\n _children_backwards(push) {\n push(this.expression);\n },\n}, AST_PropAccess);\n\nvar AST_Sub = DEFNODE(\"Sub\", null, {\n $documentation: \"Index-style property access, i.e. `a[\\\"foo\\\"]`\",\n _walk: function(visitor) {\n return visitor._visit(this, function() {\n this.expression._walk(visitor);\n this.property._walk(visitor);\n });\n },\n _children_backwards(push) {\n push(this.property);\n push(this.expression);\n },\n}, AST_PropAccess);\n\nvar AST_Unary = DEFNODE(\"Unary\", \"operator expression\", {\n $documentation: \"Base class for unary expressions\",\n $propdoc: {\n operator: \"[string] the operator\",\n expression: \"[AST_Node] expression that this unary operator applies to\"\n },\n _walk: function(visitor) {\n return visitor._visit(this, function() {\n this.expression._walk(visitor);\n });\n },\n _children_backwards(push) {\n push(this.expression);\n },\n});\n\nvar AST_UnaryPrefix = DEFNODE(\"UnaryPrefix\", null, {\n $documentation: \"Unary prefix expression, i.e. `typeof i` or `++i`\"\n}, AST_Unary);\n\nvar AST_UnaryPostfix = DEFNODE(\"UnaryPostfix\", null, {\n $documentation: \"Unary postfix expression, i.e. `i++`\"\n}, AST_Unary);\n\nvar AST_Binary = DEFNODE(\"Binary\", \"operator left right\", {\n $documentation: \"Binary expression, i.e. `a + b`\",\n $propdoc: {\n left: \"[AST_Node] left-hand side expression\",\n operator: \"[string] the operator\",\n right: \"[AST_Node] right-hand side expression\"\n },\n _walk: function(visitor) {\n return visitor._visit(this, function() {\n this.left._walk(visitor);\n this.right._walk(visitor);\n });\n },\n _children_backwards(push) {\n push(this.right);\n push(this.left);\n },\n});\n\nvar AST_Conditional = DEFNODE(\"Conditional\", \"condition consequent alternative\", {\n $documentation: \"Conditional expression using the ternary operator, i.e. `a ? b : c`\",\n $propdoc: {\n condition: \"[AST_Node]\",\n consequent: \"[AST_Node]\",\n alternative: \"[AST_Node]\"\n },\n _walk: function(visitor) {\n return visitor._visit(this, function() {\n this.condition._walk(visitor);\n this.consequent._walk(visitor);\n this.alternative._walk(visitor);\n });\n },\n _children_backwards(push) {\n push(this.alternative);\n push(this.consequent);\n push(this.condition);\n },\n});\n\nvar AST_Assign = DEFNODE(\"Assign\", null, {\n $documentation: \"An assignment expression — `a = b + 5`\",\n}, AST_Binary);\n\nvar AST_DefaultAssign = DEFNODE(\"DefaultAssign\", null, {\n $documentation: \"A default assignment expression like in `(a = 3) => a`\"\n}, AST_Binary);\n\n/* -----[ LITERALS ]----- */\n\nvar AST_Array = DEFNODE(\"Array\", \"elements\", {\n $documentation: \"An array literal\",\n $propdoc: {\n elements: \"[AST_Node*] array of elements\"\n },\n _walk: function(visitor) {\n return visitor._visit(this, function() {\n var elements = this.elements;\n for (var i = 0, len = elements.length; i < len; i++) {\n elements[i]._walk(visitor);\n }\n });\n },\n _children_backwards(push) {\n let i = this.elements.length;\n while (i--) push(this.elements[i]);\n },\n});\n\nvar AST_Object = DEFNODE(\"Object\", \"properties\", {\n $documentation: \"An object literal\",\n $propdoc: {\n properties: \"[AST_ObjectProperty*] array of properties\"\n },\n _walk: function(visitor) {\n return visitor._visit(this, function() {\n var properties = this.properties;\n for (var i = 0, len = properties.length; i < len; i++) {\n properties[i]._walk(visitor);\n }\n });\n },\n _children_backwards(push) {\n let i = this.properties.length;\n while (i--) push(this.properties[i]);\n },\n});\n\nvar AST_ObjectProperty = DEFNODE(\"ObjectProperty\", \"key value\", {\n $documentation: \"Base class for literal object properties\",\n $propdoc: {\n key: \"[string|AST_Node] property name. For ObjectKeyVal this is a string. For getters, setters and computed property this is an AST_Node.\",\n value: \"[AST_Node] property value. For getters and setters this is an AST_Accessor.\"\n },\n _walk: function(visitor) {\n return visitor._visit(this, function() {\n if (this.key instanceof AST_Node)\n this.key._walk(visitor);\n this.value._walk(visitor);\n });\n },\n _children_backwards(push) {\n push(this.value);\n if (this.key instanceof AST_Node) push(this.key);\n }\n});\n\nvar AST_ObjectKeyVal = DEFNODE(\"ObjectKeyVal\", \"quote\", {\n $documentation: \"A key: value object property\",\n $propdoc: {\n quote: \"[string] the original quote character\"\n },\n computed_key() {\n return this.key instanceof AST_Node;\n }\n}, AST_ObjectProperty);\n\nvar AST_ObjectSetter = DEFNODE(\"ObjectSetter\", \"quote static\", {\n $propdoc: {\n quote: \"[string|undefined] the original quote character, if any\",\n static: \"[boolean] whether this is a static setter (classes only)\"\n },\n $documentation: \"An object setter property\",\n computed_key() {\n return !(this.key instanceof AST_SymbolMethod);\n }\n}, AST_ObjectProperty);\n\nvar AST_ObjectGetter = DEFNODE(\"ObjectGetter\", \"quote static\", {\n $propdoc: {\n quote: \"[string|undefined] the original quote character, if any\",\n static: \"[boolean] whether this is a static getter (classes only)\"\n },\n $documentation: \"An object getter property\",\n computed_key() {\n return !(this.key instanceof AST_SymbolMethod);\n }\n}, AST_ObjectProperty);\n\nvar AST_ConciseMethod = DEFNODE(\"ConciseMethod\", \"quote static is_generator async\", {\n $propdoc: {\n quote: \"[string|undefined] the original quote character, if any\",\n static: \"[boolean] is this method static (classes only)\",\n is_generator: \"[boolean] is this a generator method\",\n async: \"[boolean] is this method async\",\n },\n $documentation: \"An ES6 concise method inside an object or class\",\n computed_key() {\n return !(this.key instanceof AST_SymbolMethod);\n }\n}, AST_ObjectProperty);\n\nvar AST_Class = DEFNODE(\"Class\", \"name extends properties\", {\n $propdoc: {\n name: \"[AST_SymbolClass|AST_SymbolDefClass?] optional class name.\",\n extends: \"[AST_Node]? optional parent class\",\n properties: \"[AST_ObjectProperty*] array of properties\"\n },\n $documentation: \"An ES6 class\",\n _walk: function(visitor) {\n return visitor._visit(this, function() {\n if (this.name) {\n this.name._walk(visitor);\n }\n if (this.extends) {\n this.extends._walk(visitor);\n }\n this.properties.forEach((prop) => prop._walk(visitor));\n });\n },\n _children_backwards(push) {\n let i = this.properties.length;\n while (i--) push(this.properties[i]);\n if (this.extends) push(this.extends);\n if (this.name) push(this.name);\n },\n}, AST_Scope /* TODO a class might have a scope but it's not a scope */);\n\nvar AST_ClassProperty = DEFNODE(\"ClassProperty\", \"static quote\", {\n $documentation: \"A class property\",\n $propdoc: {\n static: \"[boolean] whether this is a static key\",\n quote: \"[string] which quote is being used\"\n },\n _walk: function(visitor) {\n return visitor._visit(this, function() {\n if (this.key instanceof AST_Node)\n this.key._walk(visitor);\n if (this.value instanceof AST_Node)\n this.value._walk(visitor);\n });\n },\n _children_backwards(push) {\n if (this.value instanceof AST_Node) push(this.value);\n if (this.key instanceof AST_Node) push(this.key);\n },\n computed_key() {\n return !(this.key instanceof AST_SymbolClassProperty);\n }\n}, AST_ObjectProperty);\n\nvar AST_DefClass = DEFNODE(\"DefClass\", null, {\n $documentation: \"A class definition\",\n}, AST_Class);\n\nvar AST_ClassExpression = DEFNODE(\"ClassExpression\", null, {\n $documentation: \"A class expression.\"\n}, AST_Class);\n\nvar AST_Symbol = DEFNODE(\"Symbol\", \"scope name thedef\", {\n $propdoc: {\n name: \"[string] name of this symbol\",\n scope: \"[AST_Scope/S] the current scope (not necessarily the definition scope)\",\n thedef: \"[SymbolDef/S] the definition of this symbol\"\n },\n $documentation: \"Base class for all symbols\"\n});\n\nvar AST_NewTarget = DEFNODE(\"NewTarget\", null, {\n $documentation: \"A reference to new.target\"\n});\n\nvar AST_SymbolDeclaration = DEFNODE(\"SymbolDeclaration\", \"init\", {\n $documentation: \"A declaration symbol (symbol in var/const, function name or argument, symbol in catch)\",\n}, AST_Symbol);\n\nvar AST_SymbolVar = DEFNODE(\"SymbolVar\", null, {\n $documentation: \"Symbol defining a variable\",\n}, AST_SymbolDeclaration);\n\nvar AST_SymbolBlockDeclaration = DEFNODE(\"SymbolBlockDeclaration\", null, {\n $documentation: \"Base class for block-scoped declaration symbols\"\n}, AST_SymbolDeclaration);\n\nvar AST_SymbolConst = DEFNODE(\"SymbolConst\", null, {\n $documentation: \"A constant declaration\"\n}, AST_SymbolBlockDeclaration);\n\nvar AST_SymbolLet = DEFNODE(\"SymbolLet\", null, {\n $documentation: \"A block-scoped `let` declaration\"\n}, AST_SymbolBlockDeclaration);\n\nvar AST_SymbolFunarg = DEFNODE(\"SymbolFunarg\", null, {\n $documentation: \"Symbol naming a function argument\",\n}, AST_SymbolVar);\n\nvar AST_SymbolDefun = DEFNODE(\"SymbolDefun\", null, {\n $documentation: \"Symbol defining a function\",\n}, AST_SymbolDeclaration);\n\nvar AST_SymbolMethod = DEFNODE(\"SymbolMethod\", null, {\n $documentation: \"Symbol in an object defining a method\",\n}, AST_Symbol);\n\nvar AST_SymbolClassProperty = DEFNODE(\"SymbolClassProperty\", null, {\n $documentation: \"Symbol for a class property\",\n}, AST_Symbol);\n\nvar AST_SymbolLambda = DEFNODE(\"SymbolLambda\", null, {\n $documentation: \"Symbol naming a function expression\",\n}, AST_SymbolDeclaration);\n\nvar AST_SymbolDefClass = DEFNODE(\"SymbolDefClass\", null, {\n $documentation: \"Symbol naming a class's name in a class declaration. Lexically scoped to its containing scope, and accessible within the class.\"\n}, AST_SymbolBlockDeclaration);\n\nvar AST_SymbolClass = DEFNODE(\"SymbolClass\", null, {\n $documentation: \"Symbol naming a class's name. Lexically scoped to the class.\"\n}, AST_SymbolDeclaration);\n\nvar AST_SymbolCatch = DEFNODE(\"SymbolCatch\", null, {\n $documentation: \"Symbol naming the exception in catch\",\n}, AST_SymbolBlockDeclaration);\n\nvar AST_SymbolImport = DEFNODE(\"SymbolImport\", null, {\n $documentation: \"Symbol referring to an imported name\",\n}, AST_SymbolBlockDeclaration);\n\nvar AST_SymbolImportForeign = DEFNODE(\"SymbolImportForeign\", null, {\n $documentation: \"A symbol imported from a module, but it is defined in the other module, and its real name is irrelevant for this module's purposes\",\n}, AST_Symbol);\n\nvar AST_Label = DEFNODE(\"Label\", \"references\", {\n $documentation: \"Symbol naming a label (declaration)\",\n $propdoc: {\n references: \"[AST_LoopControl*] a list of nodes referring to this label\"\n },\n initialize: function() {\n this.references = [];\n this.thedef = this;\n }\n}, AST_Symbol);\n\nvar AST_SymbolRef = DEFNODE(\"SymbolRef\", null, {\n $documentation: \"Reference to some symbol (not definition/declaration)\",\n}, AST_Symbol);\n\nvar AST_SymbolExport = DEFNODE(\"SymbolExport\", null, {\n $documentation: \"Symbol referring to a name to export\",\n}, AST_SymbolRef);\n\nvar AST_SymbolExportForeign = DEFNODE(\"SymbolExportForeign\", null, {\n $documentation: \"A symbol exported from this module, but it is used in the other module, and its real name is irrelevant for this module's purposes\",\n}, AST_Symbol);\n\nvar AST_LabelRef = DEFNODE(\"LabelRef\", null, {\n $documentation: \"Reference to a label symbol\",\n}, AST_Symbol);\n\nvar AST_This = DEFNODE(\"This\", null, {\n $documentation: \"The `this` symbol\",\n}, AST_Symbol);\n\nvar AST_Super = DEFNODE(\"Super\", null, {\n $documentation: \"The `super` symbol\",\n}, AST_This);\n\nvar AST_Constant = DEFNODE(\"Constant\", null, {\n $documentation: \"Base class for all constants\",\n getValue: function() {\n return this.value;\n }\n});\n\nvar AST_String = DEFNODE(\"String\", \"value quote\", {\n $documentation: \"A string literal\",\n $propdoc: {\n value: \"[string] the contents of this string\",\n quote: \"[string] the original quote character\"\n }\n}, AST_Constant);\n\nvar AST_Number = DEFNODE(\"Number\", \"value literal\", {\n $documentation: \"A number literal\",\n $propdoc: {\n value: \"[number] the numeric value\",\n literal: \"[string] numeric value as string (optional)\"\n }\n}, AST_Constant);\n\nvar AST_BigInt = DEFNODE(\"BigInt\", \"value\", {\n $documentation: \"A big int literal\",\n $propdoc: {\n value: \"[string] big int value\"\n }\n}, AST_Constant);\n\nvar AST_RegExp = DEFNODE(\"RegExp\", \"value\", {\n $documentation: \"A regexp literal\",\n $propdoc: {\n value: \"[RegExp] the actual regexp\",\n }\n}, AST_Constant);\n\nvar AST_Atom = DEFNODE(\"Atom\", null, {\n $documentation: \"Base class for atoms\",\n}, AST_Constant);\n\nvar AST_Null = DEFNODE(\"Null\", null, {\n $documentation: \"The `null` atom\",\n value: null\n}, AST_Atom);\n\nvar AST_NaN = DEFNODE(\"NaN\", null, {\n $documentation: \"The impossible value\",\n value: 0/0\n}, AST_Atom);\n\nvar AST_Undefined = DEFNODE(\"Undefined\", null, {\n $documentation: \"The `undefined` value\",\n value: (function() {}())\n}, AST_Atom);\n\nvar AST_Hole = DEFNODE(\"Hole\", null, {\n $documentation: \"A hole in an array\",\n value: (function() {}())\n}, AST_Atom);\n\nvar AST_Infinity = DEFNODE(\"Infinity\", null, {\n $documentation: \"The `Infinity` value\",\n value: 1/0\n}, AST_Atom);\n\nvar AST_Boolean = DEFNODE(\"Boolean\", null, {\n $documentation: \"Base class for booleans\",\n}, AST_Atom);\n\nvar AST_False = DEFNODE(\"False\", null, {\n $documentation: \"The `false` atom\",\n value: false\n}, AST_Boolean);\n\nvar AST_True = DEFNODE(\"True\", null, {\n $documentation: \"The `true` atom\",\n value: true\n}, AST_Boolean);\n\n/* -----[ Walk function ]---- */\n\n/**\n * Walk nodes in depth-first search fashion.\n * Callback can return `walk_abort` symbol to stop iteration.\n * It can also return `true` to stop iteration just for child nodes.\n * Iteration can be stopped and continued by passing the `to_visit` argument,\n * which is given to the callback in the second argument.\n **/\nfunction walk(node, cb, to_visit = [node]) {\n const push = to_visit.push.bind(to_visit);\n while (to_visit.length) {\n const node = to_visit.pop();\n const ret = cb(node, to_visit);\n\n if (ret) {\n if (ret === walk_abort) return true;\n continue;\n }\n\n node._children_backwards(push);\n }\n return false;\n}\n\nfunction walk_parent(node, cb, initial_stack) {\n const to_visit = [node];\n const push = to_visit.push.bind(to_visit);\n const stack = initial_stack ? initial_stack.slice() : [];\n const parent_pop_indices = [];\n\n let current;\n\n const info = {\n parent: (n = 0) => {\n if (n === -1) {\n return current;\n }\n\n // [ p1 p0 ] [ 1 0 ]\n if (initial_stack && n >= stack.length) {\n n -= stack.length;\n return initial_stack[\n initial_stack.length - (n + 1)\n ];\n }\n\n return stack[stack.length - (1 + n)];\n },\n };\n\n while (to_visit.length) {\n current = to_visit.pop();\n\n while (\n parent_pop_indices.length &&\n to_visit.length == parent_pop_indices[parent_pop_indices.length - 1]\n ) {\n stack.pop();\n parent_pop_indices.pop();\n }\n\n const ret = cb(current, info);\n\n if (ret) {\n if (ret === walk_abort) return true;\n continue;\n }\n\n const visit_length = to_visit.length;\n\n current._children_backwards(push);\n\n // Push only if we're going to traverse the children\n if (to_visit.length > visit_length) {\n stack.push(current);\n parent_pop_indices.push(visit_length - 1);\n }\n }\n\n return false;\n}\n\nconst walk_abort = Symbol(\"abort walk\");\n\n/* -----[ TreeWalker ]----- */\n\nclass TreeWalker {\n constructor(callback) {\n this.visit = callback;\n this.stack = [];\n this.directives = Object.create(null);\n }\n\n _visit(node, descend) {\n this.push(node);\n var ret = this.visit(node, descend ? function() {\n descend.call(node);\n } : noop);\n if (!ret && descend) {\n descend.call(node);\n }\n this.pop();\n return ret;\n }\n\n parent(n) {\n return this.stack[this.stack.length - 2 - (n || 0)];\n }\n\n push(node) {\n if (node instanceof AST_Lambda) {\n this.directives = Object.create(this.directives);\n } else if (node instanceof AST_Directive && !this.directives[node.value]) {\n this.directives[node.value] = node;\n } else if (node instanceof AST_Class) {\n this.directives = Object.create(this.directives);\n if (!this.directives[\"use strict\"]) {\n this.directives[\"use strict\"] = node;\n }\n }\n this.stack.push(node);\n }\n\n pop() {\n var node = this.stack.pop();\n if (node instanceof AST_Lambda || node instanceof AST_Class) {\n this.directives = Object.getPrototypeOf(this.directives);\n }\n }\n\n self() {\n return this.stack[this.stack.length - 1];\n }\n\n find_parent(type) {\n var stack = this.stack;\n for (var i = stack.length; --i >= 0;) {\n var x = stack[i];\n if (x instanceof type) return x;\n }\n }\n\n has_directive(type) {\n var dir = this.directives[type];\n if (dir) return dir;\n var node = this.stack[this.stack.length - 1];\n if (node instanceof AST_Scope && node.body) {\n for (var i = 0; i < node.body.length; ++i) {\n var st = node.body[i];\n if (!(st instanceof AST_Directive)) break;\n if (st.value == type) return st;\n }\n }\n }\n\n loopcontrol_target(node) {\n var stack = this.stack;\n if (node.label) for (var i = stack.length; --i >= 0;) {\n var x = stack[i];\n if (x instanceof AST_LabeledStatement && x.label.name == node.label.name)\n return x.body;\n } else for (var i = stack.length; --i >= 0;) {\n var x = stack[i];\n if (x instanceof AST_IterationStatement\n || node instanceof AST_Break && x instanceof AST_Switch)\n return x;\n }\n }\n}\n\n// Tree transformer helpers.\nclass TreeTransformer extends TreeWalker {\n constructor(before, after) {\n super();\n this.before = before;\n this.after = after;\n }\n}\n\nconst _PURE = 0b00000001;\nconst _INLINE = 0b00000010;\nconst _NOINLINE = 0b00000100;\n\nexport {\n AST_Accessor,\n AST_Array,\n AST_Arrow,\n AST_Assign,\n AST_Atom,\n AST_Await,\n AST_BigInt,\n AST_Binary,\n AST_Block,\n AST_BlockStatement,\n AST_Boolean,\n AST_Break,\n AST_Call,\n AST_Case,\n AST_Catch,\n AST_Class,\n AST_ClassExpression,\n AST_ClassProperty,\n AST_ConciseMethod,\n AST_Conditional,\n AST_Const,\n AST_Constant,\n AST_Continue,\n AST_Debugger,\n AST_Default,\n AST_DefaultAssign,\n AST_DefClass,\n AST_Definitions,\n AST_Defun,\n AST_Destructuring,\n AST_Directive,\n AST_Do,\n AST_Dot,\n AST_DWLoop,\n AST_EmptyStatement,\n AST_Exit,\n AST_Expansion,\n AST_Export,\n AST_False,\n AST_Finally,\n AST_For,\n AST_ForIn,\n AST_ForOf,\n AST_Function,\n AST_Hole,\n AST_If,\n AST_Import,\n AST_Infinity,\n AST_IterationStatement,\n AST_Jump,\n AST_Label,\n AST_LabeledStatement,\n AST_LabelRef,\n AST_Lambda,\n AST_Let,\n AST_LoopControl,\n AST_NameMapping,\n AST_NaN,\n AST_New,\n AST_NewTarget,\n AST_Node,\n AST_Null,\n AST_Number,\n AST_Object,\n AST_ObjectGetter,\n AST_ObjectKeyVal,\n AST_ObjectProperty,\n AST_ObjectSetter,\n AST_PrefixedTemplateString,\n AST_PropAccess,\n AST_RegExp,\n AST_Return,\n AST_Scope,\n AST_Sequence,\n AST_SimpleStatement,\n AST_Statement,\n AST_StatementWithBody,\n AST_String,\n AST_Sub,\n AST_Super,\n AST_Switch,\n AST_SwitchBranch,\n AST_Symbol,\n AST_SymbolBlockDeclaration,\n AST_SymbolCatch,\n AST_SymbolClass,\n AST_SymbolClassProperty,\n AST_SymbolConst,\n AST_SymbolDeclaration,\n AST_SymbolDefClass,\n AST_SymbolDefun,\n AST_SymbolExport,\n AST_SymbolExportForeign,\n AST_SymbolFunarg,\n AST_SymbolImport,\n AST_SymbolImportForeign,\n AST_SymbolLambda,\n AST_SymbolLet,\n AST_SymbolMethod,\n AST_SymbolRef,\n AST_SymbolVar,\n AST_TemplateSegment,\n AST_TemplateString,\n AST_This,\n AST_Throw,\n AST_Token,\n AST_Toplevel,\n AST_True,\n AST_Try,\n AST_Unary,\n AST_UnaryPostfix,\n AST_UnaryPrefix,\n AST_Undefined,\n AST_Var,\n AST_VarDef,\n AST_While,\n AST_With,\n AST_Yield,\n TreeTransformer,\n TreeWalker,\n walk,\n walk_abort,\n walk_body,\n walk_parent,\n _INLINE,\n _NOINLINE,\n _PURE,\n};\n","/***********************************************************************\n\n A JavaScript tokenizer / parser / beautifier / compressor.\n https://github.com/mishoo/UglifyJS2\n\n -------------------------------- (C) ---------------------------------\n\n Author: Mihai Bazon\n \n http://mihai.bazon.net/blog\n\n Distributed under the BSD license:\n\n Copyright 2012 (c) Mihai Bazon \n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions\n are met:\n\n * Redistributions of source code must retain the above\n copyright notice, this list of conditions and the following\n disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials\n provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY\n EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE\n LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,\n OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR\n TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF\n THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n SUCH DAMAGE.\n\n ***********************************************************************/\n\n\"use strict\";\n\nimport {\n AST_Array,\n AST_Await,\n AST_Binary,\n AST_Block,\n AST_Call,\n AST_Case,\n AST_Catch,\n AST_Class,\n AST_Conditional,\n AST_Definitions,\n AST_Destructuring,\n AST_Do,\n AST_Dot,\n AST_Exit,\n AST_Expansion,\n AST_Export,\n AST_For,\n AST_ForIn,\n AST_If,\n AST_Import,\n AST_LabeledStatement,\n AST_Lambda,\n AST_LoopControl,\n AST_NameMapping,\n AST_Node,\n AST_Number,\n AST_Object,\n AST_ObjectProperty,\n AST_PrefixedTemplateString,\n AST_Sequence,\n AST_SimpleStatement,\n AST_Sub,\n AST_Switch,\n AST_TemplateString,\n AST_Try,\n AST_Unary,\n AST_VarDef,\n AST_While,\n AST_With,\n AST_Yield,\n} from \"./ast.js\";\nimport {\n MAP,\n noop,\n} from \"./utils/index.js\";\n\nfunction def_transform(node, descend) {\n node.DEFMETHOD(\"transform\", function(tw, in_list) {\n let transformed = undefined;\n tw.push(this);\n if (tw.before) transformed = tw.before(this, descend, in_list);\n if (transformed === undefined) {\n transformed = this;\n descend(transformed, tw);\n if (tw.after) {\n const after_ret = tw.after(transformed, in_list);\n if (after_ret !== undefined) transformed = after_ret;\n }\n }\n tw.pop();\n return transformed;\n });\n}\n\nfunction do_list(list, tw) {\n return MAP(list, function(node) {\n return node.transform(tw, true);\n });\n}\n\ndef_transform(AST_Node, noop);\n\ndef_transform(AST_LabeledStatement, function(self, tw) {\n self.label = self.label.transform(tw);\n self.body = self.body.transform(tw);\n});\n\ndef_transform(AST_SimpleStatement, function(self, tw) {\n self.body = self.body.transform(tw);\n});\n\ndef_transform(AST_Block, function(self, tw) {\n self.body = do_list(self.body, tw);\n});\n\ndef_transform(AST_Do, function(self, tw) {\n self.body = self.body.transform(tw);\n self.condition = self.condition.transform(tw);\n});\n\ndef_transform(AST_While, function(self, tw) {\n self.condition = self.condition.transform(tw);\n self.body = self.body.transform(tw);\n});\n\ndef_transform(AST_For, function(self, tw) {\n if (self.init) self.init = self.init.transform(tw);\n if (self.condition) self.condition = self.condition.transform(tw);\n if (self.step) self.step = self.step.transform(tw);\n self.body = self.body.transform(tw);\n});\n\ndef_transform(AST_ForIn, function(self, tw) {\n self.init = self.init.transform(tw);\n self.object = self.object.transform(tw);\n self.body = self.body.transform(tw);\n});\n\ndef_transform(AST_With, function(self, tw) {\n self.expression = self.expression.transform(tw);\n self.body = self.body.transform(tw);\n});\n\ndef_transform(AST_Exit, function(self, tw) {\n if (self.value) self.value = self.value.transform(tw);\n});\n\ndef_transform(AST_LoopControl, function(self, tw) {\n if (self.label) self.label = self.label.transform(tw);\n});\n\ndef_transform(AST_If, function(self, tw) {\n self.condition = self.condition.transform(tw);\n self.body = self.body.transform(tw);\n if (self.alternative) self.alternative = self.alternative.transform(tw);\n});\n\ndef_transform(AST_Switch, function(self, tw) {\n self.expression = self.expression.transform(tw);\n self.body = do_list(self.body, tw);\n});\n\ndef_transform(AST_Case, function(self, tw) {\n self.expression = self.expression.transform(tw);\n self.body = do_list(self.body, tw);\n});\n\ndef_transform(AST_Try, function(self, tw) {\n self.body = do_list(self.body, tw);\n if (self.bcatch) self.bcatch = self.bcatch.transform(tw);\n if (self.bfinally) self.bfinally = self.bfinally.transform(tw);\n});\n\ndef_transform(AST_Catch, function(self, tw) {\n if (self.argname) self.argname = self.argname.transform(tw);\n self.body = do_list(self.body, tw);\n});\n\ndef_transform(AST_Definitions, function(self, tw) {\n self.definitions = do_list(self.definitions, tw);\n});\n\ndef_transform(AST_VarDef, function(self, tw) {\n self.name = self.name.transform(tw);\n if (self.value) self.value = self.value.transform(tw);\n});\n\ndef_transform(AST_Destructuring, function(self, tw) {\n self.names = do_list(self.names, tw);\n});\n\ndef_transform(AST_Lambda, function(self, tw) {\n if (self.name) self.name = self.name.transform(tw);\n self.argnames = do_list(self.argnames, tw);\n if (self.body instanceof AST_Node) {\n self.body = self.body.transform(tw);\n } else {\n self.body = do_list(self.body, tw);\n }\n});\n\ndef_transform(AST_Call, function(self, tw) {\n self.expression = self.expression.transform(tw);\n self.args = do_list(self.args, tw);\n});\n\ndef_transform(AST_Sequence, function(self, tw) {\n const result = do_list(self.expressions, tw);\n self.expressions = result.length\n ? result\n : [new AST_Number({ value: 0 })];\n});\n\ndef_transform(AST_Dot, function(self, tw) {\n self.expression = self.expression.transform(tw);\n});\n\ndef_transform(AST_Sub, function(self, tw) {\n self.expression = self.expression.transform(tw);\n self.property = self.property.transform(tw);\n});\n\ndef_transform(AST_Yield, function(self, tw) {\n if (self.expression) self.expression = self.expression.transform(tw);\n});\n\ndef_transform(AST_Await, function(self, tw) {\n self.expression = self.expression.transform(tw);\n});\n\ndef_transform(AST_Unary, function(self, tw) {\n self.expression = self.expression.transform(tw);\n});\n\ndef_transform(AST_Binary, function(self, tw) {\n self.left = self.left.transform(tw);\n self.right = self.right.transform(tw);\n});\n\ndef_transform(AST_Conditional, function(self, tw) {\n self.condition = self.condition.transform(tw);\n self.consequent = self.consequent.transform(tw);\n self.alternative = self.alternative.transform(tw);\n});\n\ndef_transform(AST_Array, function(self, tw) {\n self.elements = do_list(self.elements, tw);\n});\n\ndef_transform(AST_Object, function(self, tw) {\n self.properties = do_list(self.properties, tw);\n});\n\ndef_transform(AST_ObjectProperty, function(self, tw) {\n if (self.key instanceof AST_Node) {\n self.key = self.key.transform(tw);\n }\n if (self.value) self.value = self.value.transform(tw);\n});\n\ndef_transform(AST_Class, function(self, tw) {\n if (self.name) self.name = self.name.transform(tw);\n if (self.extends) self.extends = self.extends.transform(tw);\n self.properties = do_list(self.properties, tw);\n});\n\ndef_transform(AST_Expansion, function(self, tw) {\n self.expression = self.expression.transform(tw);\n});\n\ndef_transform(AST_NameMapping, function(self, tw) {\n self.foreign_name = self.foreign_name.transform(tw);\n self.name = self.name.transform(tw);\n});\n\ndef_transform(AST_Import, function(self, tw) {\n if (self.imported_name) self.imported_name = self.imported_name.transform(tw);\n if (self.imported_names) do_list(self.imported_names, tw);\n self.module_name = self.module_name.transform(tw);\n});\n\ndef_transform(AST_Export, function(self, tw) {\n if (self.exported_definition) self.exported_definition = self.exported_definition.transform(tw);\n if (self.exported_value) self.exported_value = self.exported_value.transform(tw);\n if (self.exported_names) do_list(self.exported_names, tw);\n if (self.module_name) self.module_name = self.module_name.transform(tw);\n});\n\ndef_transform(AST_TemplateString, function(self, tw) {\n self.segments = do_list(self.segments, tw);\n});\n\ndef_transform(AST_PrefixedTemplateString, function(self, tw) {\n self.prefix = self.prefix.transform(tw);\n self.template_string = self.template_string.transform(tw);\n});\n\n","import {\n AST_Binary,\n AST_Conditional,\n AST_Dot,\n AST_Object,\n AST_Sequence,\n AST_Statement,\n AST_Sub,\n AST_UnaryPostfix,\n AST_PrefixedTemplateString\n} from \"../ast.js\";\n\n// return true if the node at the top of the stack (that means the\n// innermost node in the current output) is lexically the first in\n// a statement.\nfunction first_in_statement(stack) {\n let node = stack.parent(-1);\n for (let i = 0, p; p = stack.parent(i); i++) {\n if (p instanceof AST_Statement && p.body === node)\n return true;\n if ((p instanceof AST_Sequence && p.expressions[0] === node) ||\n (p.TYPE === \"Call\" && p.expression === node) ||\n (p instanceof AST_PrefixedTemplateString && p.prefix === node) ||\n (p instanceof AST_Dot && p.expression === node) ||\n (p instanceof AST_Sub && p.expression === node) ||\n (p instanceof AST_Conditional && p.condition === node) ||\n (p instanceof AST_Binary && p.left === node) ||\n (p instanceof AST_UnaryPostfix && p.expression === node)\n ) {\n node = p;\n } else {\n return false;\n }\n }\n}\n\n// Returns whether the leftmost item in the expression is an object\nfunction left_is_object(node) {\n if (node instanceof AST_Object) return true;\n if (node instanceof AST_Sequence) return left_is_object(node.expressions[0]);\n if (node.TYPE === \"Call\") return left_is_object(node.expression);\n if (node instanceof AST_PrefixedTemplateString) return left_is_object(node.prefix);\n if (node instanceof AST_Dot || node instanceof AST_Sub) return left_is_object(node.expression);\n if (node instanceof AST_Conditional) return left_is_object(node.condition);\n if (node instanceof AST_Binary) return left_is_object(node.left);\n if (node instanceof AST_UnaryPostfix) return left_is_object(node.expression);\n return false;\n}\n\nexport { first_in_statement, left_is_object };\n","/***********************************************************************\n\n A JavaScript tokenizer / parser / beautifier / compressor.\n https://github.com/mishoo/UglifyJS2\n\n -------------------------------- (C) ---------------------------------\n\n Author: Mihai Bazon\n \n http://mihai.bazon.net/blog\n\n Distributed under the BSD license:\n\n Copyright 2012 (c) Mihai Bazon \n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions\n are met:\n\n * Redistributions of source code must retain the above\n copyright notice, this list of conditions and the following\n disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials\n provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY\n EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE\n LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,\n OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR\n TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF\n THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n SUCH DAMAGE.\n\n ***********************************************************************/\n\n\"use strict\";\n\nimport {\n defaults,\n makePredicate,\n noop,\n regexp_source_fix,\n sort_regexp_flags,\n return_false,\n return_true,\n} from \"./utils/index.js\";\nimport { first_in_statement, left_is_object } from \"./utils/first_in_statement.js\";\nimport {\n AST_Array,\n AST_Arrow,\n AST_Assign,\n AST_Await,\n AST_BigInt,\n AST_Binary,\n AST_BlockStatement,\n AST_Break,\n AST_Call,\n AST_Case,\n AST_Catch,\n AST_Class,\n AST_ClassExpression,\n AST_ClassProperty,\n AST_ConciseMethod,\n AST_Conditional,\n AST_Const,\n AST_Constant,\n AST_Continue,\n AST_Debugger,\n AST_Default,\n AST_DefaultAssign,\n AST_Definitions,\n AST_Defun,\n AST_Destructuring,\n AST_Directive,\n AST_Do,\n AST_Dot,\n AST_EmptyStatement,\n AST_Exit,\n AST_Expansion,\n AST_Export,\n AST_Finally,\n AST_For,\n AST_ForIn,\n AST_ForOf,\n AST_Function,\n AST_Hole,\n AST_If,\n AST_Import,\n AST_Jump,\n AST_LabeledStatement,\n AST_Lambda,\n AST_Let,\n AST_LoopControl,\n AST_NameMapping,\n AST_New,\n AST_NewTarget,\n AST_Node,\n AST_Number,\n AST_Object,\n AST_ObjectGetter,\n AST_ObjectKeyVal,\n AST_ObjectProperty,\n AST_ObjectSetter,\n AST_PrefixedTemplateString,\n AST_PropAccess,\n AST_RegExp,\n AST_Return,\n AST_Scope,\n AST_Sequence,\n AST_SimpleStatement,\n AST_Statement,\n AST_StatementWithBody,\n AST_String,\n AST_Sub,\n AST_Super,\n AST_Switch,\n AST_SwitchBranch,\n AST_Symbol,\n AST_SymbolClassProperty,\n AST_SymbolMethod,\n AST_SymbolRef,\n AST_TemplateSegment,\n AST_TemplateString,\n AST_This,\n AST_Throw,\n AST_Toplevel,\n AST_Try,\n AST_Unary,\n AST_UnaryPostfix,\n AST_UnaryPrefix,\n AST_Var,\n AST_VarDef,\n AST_While,\n AST_With,\n AST_Yield,\n TreeWalker,\n walk,\n walk_abort\n} from \"./ast.js\";\nimport {\n get_full_char_code,\n get_full_char,\n is_identifier_char,\n is_basic_identifier_string,\n is_identifier_string,\n PRECEDENCE,\n RESERVED_WORDS,\n} from \"./parse.js\";\n\nconst EXPECT_DIRECTIVE = /^$|[;{][\\s\\n]*$/;\nconst CODE_LINE_BREAK = 10;\nconst CODE_SPACE = 32;\n\nconst r_annotation = /[@#]__(PURE|INLINE|NOINLINE)__/g;\n\nfunction is_some_comments(comment) {\n // multiline comment\n return (\n (comment.type === \"comment2\" || comment.type === \"comment1\")\n && /@preserve|@lic|@cc_on|^\\**!/i.test(comment.value)\n );\n}\n\nfunction OutputStream(options) {\n\n var readonly = !options;\n options = defaults(options, {\n ascii_only : false,\n beautify : false,\n braces : false,\n comments : \"some\",\n ecma : 5,\n ie8 : false,\n indent_level : 4,\n indent_start : 0,\n inline_script : true,\n keep_numbers : false,\n keep_quoted_props : false,\n max_line_len : false,\n preamble : null,\n preserve_annotations : false,\n quote_keys : false,\n quote_style : 0,\n safari10 : false,\n semicolons : true,\n shebang : true,\n shorthand : undefined,\n source_map : null,\n webkit : false,\n width : 80,\n wrap_iife : false,\n wrap_func_args : true,\n }, true);\n\n if (options.shorthand === undefined)\n options.shorthand = options.ecma > 5;\n\n // Convert comment option to RegExp if neccessary and set up comments filter\n var comment_filter = return_false; // Default case, throw all comments away\n if (options.comments) {\n let comments = options.comments;\n if (typeof options.comments === \"string\" && /^\\/.*\\/[a-zA-Z]*$/.test(options.comments)) {\n var regex_pos = options.comments.lastIndexOf(\"/\");\n comments = new RegExp(\n options.comments.substr(1, regex_pos - 1),\n options.comments.substr(regex_pos + 1)\n );\n }\n if (comments instanceof RegExp) {\n comment_filter = function(comment) {\n return comment.type != \"comment5\" && comments.test(comment.value);\n };\n } else if (typeof comments === \"function\") {\n comment_filter = function(comment) {\n return comment.type != \"comment5\" && comments(this, comment);\n };\n } else if (comments === \"some\") {\n comment_filter = is_some_comments;\n } else { // NOTE includes \"all\" option\n comment_filter = return_true;\n }\n }\n\n var indentation = 0;\n var current_col = 0;\n var current_line = 1;\n var current_pos = 0;\n var OUTPUT = \"\";\n let printed_comments = new Set();\n\n var to_utf8 = options.ascii_only ? function(str, identifier) {\n if (options.ecma >= 2015) {\n str = str.replace(/[\\ud800-\\udbff][\\udc00-\\udfff]/g, function(ch) {\n var code = get_full_char_code(ch, 0).toString(16);\n return \"\\\\u{\" + code + \"}\";\n });\n }\n return str.replace(/[\\u0000-\\u001f\\u007f-\\uffff]/g, function(ch) {\n var code = ch.charCodeAt(0).toString(16);\n if (code.length <= 2 && !identifier) {\n while (code.length < 2) code = \"0\" + code;\n return \"\\\\x\" + code;\n } else {\n while (code.length < 4) code = \"0\" + code;\n return \"\\\\u\" + code;\n }\n });\n } : function(str) {\n return str.replace(/[\\ud800-\\udbff][\\udc00-\\udfff]|([\\ud800-\\udbff]|[\\udc00-\\udfff])/g, function(match, lone) {\n if (lone) {\n return \"\\\\u\" + lone.charCodeAt(0).toString(16);\n }\n return match;\n });\n };\n\n function make_string(str, quote) {\n var dq = 0, sq = 0;\n str = str.replace(/[\\\\\\b\\f\\n\\r\\v\\t\\x22\\x27\\u2028\\u2029\\0\\ufeff]/g,\n function(s, i) {\n switch (s) {\n case '\"': ++dq; return '\"';\n case \"'\": ++sq; return \"'\";\n case \"\\\\\": return \"\\\\\\\\\";\n case \"\\n\": return \"\\\\n\";\n case \"\\r\": return \"\\\\r\";\n case \"\\t\": return \"\\\\t\";\n case \"\\b\": return \"\\\\b\";\n case \"\\f\": return \"\\\\f\";\n case \"\\x0B\": return options.ie8 ? \"\\\\x0B\" : \"\\\\v\";\n case \"\\u2028\": return \"\\\\u2028\";\n case \"\\u2029\": return \"\\\\u2029\";\n case \"\\ufeff\": return \"\\\\ufeff\";\n case \"\\0\":\n return /[0-9]/.test(get_full_char(str, i+1)) ? \"\\\\x00\" : \"\\\\0\";\n }\n return s;\n });\n function quote_single() {\n return \"'\" + str.replace(/\\x27/g, \"\\\\'\") + \"'\";\n }\n function quote_double() {\n return '\"' + str.replace(/\\x22/g, '\\\\\"') + '\"';\n }\n function quote_template() {\n return \"`\" + str.replace(/`/g, \"\\\\`\") + \"`\";\n }\n str = to_utf8(str);\n if (quote === \"`\") return quote_template();\n switch (options.quote_style) {\n case 1:\n return quote_single();\n case 2:\n return quote_double();\n case 3:\n return quote == \"'\" ? quote_single() : quote_double();\n default:\n return dq > sq ? quote_single() : quote_double();\n }\n }\n\n function encode_string(str, quote) {\n var ret = make_string(str, quote);\n if (options.inline_script) {\n ret = ret.replace(/<\\x2f(script)([>\\/\\t\\n\\f\\r ])/gi, \"<\\\\/$1$2\");\n ret = ret.replace(/\\x3c!--/g, \"\\\\x3c!--\");\n ret = ret.replace(/--\\x3e/g, \"--\\\\x3e\");\n }\n return ret;\n }\n\n function make_name(name) {\n name = name.toString();\n name = to_utf8(name, true);\n return name;\n }\n\n function make_indent(back) {\n return \" \".repeat(options.indent_start + indentation - back * options.indent_level);\n }\n\n /* -----[ beautification/minification ]----- */\n\n var has_parens = false;\n var might_need_space = false;\n var might_need_semicolon = false;\n var might_add_newline = 0;\n var need_newline_indented = false;\n var need_space = false;\n var newline_insert = -1;\n var last = \"\";\n var mapping_token, mapping_name, mappings = options.source_map && [];\n\n var do_add_mapping = mappings ? function() {\n mappings.forEach(function(mapping) {\n try {\n options.source_map.add(\n mapping.token.file,\n mapping.line, mapping.col,\n mapping.token.line, mapping.token.col,\n !mapping.name && mapping.token.type == \"name\" ? mapping.token.value : mapping.name\n );\n } catch(ex) {\n mapping.token.file != null && AST_Node.warn(\"Couldn't figure out mapping for {file}:{line},{col} → {cline},{ccol} [{name}]\", {\n file: mapping.token.file,\n line: mapping.token.line,\n col: mapping.token.col,\n cline: mapping.line,\n ccol: mapping.col,\n name: mapping.name || \"\"\n });\n }\n });\n mappings = [];\n } : noop;\n\n var ensure_line_len = options.max_line_len ? function() {\n if (current_col > options.max_line_len) {\n if (might_add_newline) {\n var left = OUTPUT.slice(0, might_add_newline);\n var right = OUTPUT.slice(might_add_newline);\n if (mappings) {\n var delta = right.length - current_col;\n mappings.forEach(function(mapping) {\n mapping.line++;\n mapping.col += delta;\n });\n }\n OUTPUT = left + \"\\n\" + right;\n current_line++;\n current_pos++;\n current_col = right.length;\n }\n if (current_col > options.max_line_len) {\n AST_Node.warn(\"Output exceeds {max_line_len} characters\", options);\n }\n }\n if (might_add_newline) {\n might_add_newline = 0;\n do_add_mapping();\n }\n } : noop;\n\n var requireSemicolonChars = makePredicate(\"( [ + * / - , . `\");\n\n function print(str) {\n str = String(str);\n var ch = get_full_char(str, 0);\n if (need_newline_indented && ch) {\n need_newline_indented = false;\n if (ch !== \"\\n\") {\n print(\"\\n\");\n indent();\n }\n }\n if (need_space && ch) {\n need_space = false;\n if (!/[\\s;})]/.test(ch)) {\n space();\n }\n }\n newline_insert = -1;\n var prev = last.charAt(last.length - 1);\n if (might_need_semicolon) {\n might_need_semicolon = false;\n\n if (prev === \":\" && ch === \"}\" || (!ch || !\";}\".includes(ch)) && prev !== \";\") {\n if (options.semicolons || requireSemicolonChars.has(ch)) {\n OUTPUT += \";\";\n current_col++;\n current_pos++;\n } else {\n ensure_line_len();\n if (current_col > 0) {\n OUTPUT += \"\\n\";\n current_pos++;\n current_line++;\n current_col = 0;\n }\n\n if (/^\\s+$/.test(str)) {\n // reset the semicolon flag, since we didn't print one\n // now and might still have to later\n might_need_semicolon = true;\n }\n }\n\n if (!options.beautify)\n might_need_space = false;\n }\n }\n\n if (might_need_space) {\n if ((is_identifier_char(prev)\n && (is_identifier_char(ch) || ch == \"\\\\\"))\n || (ch == \"/\" && ch == prev)\n || ((ch == \"+\" || ch == \"-\") && ch == last)\n ) {\n OUTPUT += \" \";\n current_col++;\n current_pos++;\n }\n might_need_space = false;\n }\n\n if (mapping_token) {\n mappings.push({\n token: mapping_token,\n name: mapping_name,\n line: current_line,\n col: current_col\n });\n mapping_token = false;\n if (!might_add_newline) do_add_mapping();\n }\n\n OUTPUT += str;\n has_parens = str[str.length - 1] == \"(\";\n current_pos += str.length;\n var a = str.split(/\\r?\\n/), n = a.length - 1;\n current_line += n;\n current_col += a[0].length;\n if (n > 0) {\n ensure_line_len();\n current_col = a[n].length;\n }\n last = str;\n }\n\n var star = function() {\n print(\"*\");\n };\n\n var space = options.beautify ? function() {\n print(\" \");\n } : function() {\n might_need_space = true;\n };\n\n var indent = options.beautify ? function(half) {\n if (options.beautify) {\n print(make_indent(half ? 0.5 : 0));\n }\n } : noop;\n\n var with_indent = options.beautify ? function(col, cont) {\n if (col === true) col = next_indent();\n var save_indentation = indentation;\n indentation = col;\n var ret = cont();\n indentation = save_indentation;\n return ret;\n } : function(col, cont) { return cont(); };\n\n var newline = options.beautify ? function() {\n if (newline_insert < 0) return print(\"\\n\");\n if (OUTPUT[newline_insert] != \"\\n\") {\n OUTPUT = OUTPUT.slice(0, newline_insert) + \"\\n\" + OUTPUT.slice(newline_insert);\n current_pos++;\n current_line++;\n }\n newline_insert++;\n } : options.max_line_len ? function() {\n ensure_line_len();\n might_add_newline = OUTPUT.length;\n } : noop;\n\n var semicolon = options.beautify ? function() {\n print(\";\");\n } : function() {\n might_need_semicolon = true;\n };\n\n function force_semicolon() {\n might_need_semicolon = false;\n print(\";\");\n }\n\n function next_indent() {\n return indentation + options.indent_level;\n }\n\n function with_block(cont) {\n var ret;\n print(\"{\");\n newline();\n with_indent(next_indent(), function() {\n ret = cont();\n });\n indent();\n print(\"}\");\n return ret;\n }\n\n function with_parens(cont) {\n print(\"(\");\n //XXX: still nice to have that for argument lists\n //var ret = with_indent(current_col, cont);\n var ret = cont();\n print(\")\");\n return ret;\n }\n\n function with_square(cont) {\n print(\"[\");\n //var ret = with_indent(current_col, cont);\n var ret = cont();\n print(\"]\");\n return ret;\n }\n\n function comma() {\n print(\",\");\n space();\n }\n\n function colon() {\n print(\":\");\n space();\n }\n\n var add_mapping = mappings ? function(token, name) {\n mapping_token = token;\n mapping_name = name;\n } : noop;\n\n function get() {\n if (might_add_newline) {\n ensure_line_len();\n }\n return OUTPUT;\n }\n\n function has_nlb() {\n let n = OUTPUT.length - 1;\n while (n >= 0) {\n const code = OUTPUT.charCodeAt(n);\n if (code === CODE_LINE_BREAK) {\n return true;\n }\n\n if (code !== CODE_SPACE) {\n return false;\n }\n n--;\n }\n return true;\n }\n\n function filter_comment(comment) {\n if (!options.preserve_annotations) {\n comment = comment.replace(r_annotation, \" \");\n }\n if (/^\\s*$/.test(comment)) {\n return \"\";\n }\n return comment.replace(/(<\\s*\\/\\s*)(script)/i, \"<\\\\/$2\");\n }\n\n function prepend_comments(node) {\n var self = this;\n var start = node.start;\n if (!start) return;\n var printed_comments = self.printed_comments;\n\n // There cannot be a newline between return and its value.\n const return_with_value = node instanceof AST_Exit && node.value;\n\n if (\n start.comments_before\n && printed_comments.has(start.comments_before)\n ) {\n if (return_with_value) {\n start.comments_before = [];\n } else {\n return;\n }\n }\n\n var comments = start.comments_before;\n if (!comments) {\n comments = start.comments_before = [];\n }\n printed_comments.add(comments);\n\n if (return_with_value) {\n var tw = new TreeWalker(function(node) {\n var parent = tw.parent();\n if (parent instanceof AST_Exit\n || parent instanceof AST_Binary && parent.left === node\n || parent.TYPE == \"Call\" && parent.expression === node\n || parent instanceof AST_Conditional && parent.condition === node\n || parent instanceof AST_Dot && parent.expression === node\n || parent instanceof AST_Sequence && parent.expressions[0] === node\n || parent instanceof AST_Sub && parent.expression === node\n || parent instanceof AST_UnaryPostfix) {\n if (!node.start) return;\n var text = node.start.comments_before;\n if (text && !printed_comments.has(text)) {\n printed_comments.add(text);\n comments = comments.concat(text);\n }\n } else {\n return true;\n }\n });\n tw.push(node);\n node.value.walk(tw);\n }\n\n if (current_pos == 0) {\n if (comments.length > 0 && options.shebang && comments[0].type === \"comment5\"\n && !printed_comments.has(comments[0])) {\n print(\"#!\" + comments.shift().value + \"\\n\");\n indent();\n }\n var preamble = options.preamble;\n if (preamble) {\n print(preamble.replace(/\\r\\n?|[\\n\\u2028\\u2029]|\\s*$/g, \"\\n\"));\n }\n }\n\n comments = comments.filter(comment_filter, node).filter(c => !printed_comments.has(c));\n if (comments.length == 0) return;\n var last_nlb = has_nlb();\n comments.forEach(function(c, i) {\n printed_comments.add(c);\n if (!last_nlb) {\n if (c.nlb) {\n print(\"\\n\");\n indent();\n last_nlb = true;\n } else if (i > 0) {\n space();\n }\n }\n\n if (/comment[134]/.test(c.type)) {\n var value = filter_comment(c.value);\n if (value) {\n print(\"//\" + value + \"\\n\");\n indent();\n }\n last_nlb = true;\n } else if (c.type == \"comment2\") {\n var value = filter_comment(c.value);\n if (value) {\n print(\"/*\" + value + \"*/\");\n }\n last_nlb = false;\n }\n });\n if (!last_nlb) {\n if (start.nlb) {\n print(\"\\n\");\n indent();\n } else {\n space();\n }\n }\n }\n\n function append_comments(node, tail) {\n var self = this;\n var token = node.end;\n if (!token) return;\n var printed_comments = self.printed_comments;\n var comments = token[tail ? \"comments_before\" : \"comments_after\"];\n if (!comments || printed_comments.has(comments)) return;\n if (!(node instanceof AST_Statement || comments.every((c) =>\n !/comment[134]/.test(c.type)\n ))) return;\n printed_comments.add(comments);\n var insert = OUTPUT.length;\n comments.filter(comment_filter, node).forEach(function(c, i) {\n if (printed_comments.has(c)) return;\n printed_comments.add(c);\n need_space = false;\n if (need_newline_indented) {\n print(\"\\n\");\n indent();\n need_newline_indented = false;\n } else if (c.nlb && (i > 0 || !has_nlb())) {\n print(\"\\n\");\n indent();\n } else if (i > 0 || !tail) {\n space();\n }\n if (/comment[134]/.test(c.type)) {\n const value = filter_comment(c.value);\n if (value) {\n print(\"//\" + value);\n }\n need_newline_indented = true;\n } else if (c.type == \"comment2\") {\n const value = filter_comment(c.value);\n if (value) {\n print(\"/*\" + value + \"*/\");\n }\n need_space = true;\n }\n });\n if (OUTPUT.length > insert) newline_insert = insert;\n }\n\n var stack = [];\n return {\n get : get,\n toString : get,\n indent : indent,\n in_directive : false,\n use_asm : null,\n active_scope : null,\n indentation : function() { return indentation; },\n current_width : function() { return current_col - indentation; },\n should_break : function() { return options.width && this.current_width() >= options.width; },\n has_parens : function() { return has_parens; },\n newline : newline,\n print : print,\n star : star,\n space : space,\n comma : comma,\n colon : colon,\n last : function() { return last; },\n semicolon : semicolon,\n force_semicolon : force_semicolon,\n to_utf8 : to_utf8,\n print_name : function(name) { print(make_name(name)); },\n print_string : function(str, quote, escape_directive) {\n var encoded = encode_string(str, quote);\n if (escape_directive === true && !encoded.includes(\"\\\\\")) {\n // Insert semicolons to break directive prologue\n if (!EXPECT_DIRECTIVE.test(OUTPUT)) {\n force_semicolon();\n }\n force_semicolon();\n }\n print(encoded);\n },\n print_template_string_chars: function(str) {\n var encoded = encode_string(str, \"`\").replace(/\\${/g, \"\\\\${\");\n return print(encoded.substr(1, encoded.length - 2));\n },\n encode_string : encode_string,\n next_indent : next_indent,\n with_indent : with_indent,\n with_block : with_block,\n with_parens : with_parens,\n with_square : with_square,\n add_mapping : add_mapping,\n option : function(opt) { return options[opt]; },\n printed_comments: printed_comments,\n prepend_comments: readonly ? noop : prepend_comments,\n append_comments : readonly || comment_filter === return_false ? noop : append_comments,\n line : function() { return current_line; },\n col : function() { return current_col; },\n pos : function() { return current_pos; },\n push_node : function(node) { stack.push(node); },\n pop_node : function() { return stack.pop(); },\n parent : function(n) {\n return stack[stack.length - 2 - (n || 0)];\n }\n };\n\n}\n\n/* -----[ code generators ]----- */\n\n(function() {\n\n /* -----[ utils ]----- */\n\n function DEFPRINT(nodetype, generator) {\n nodetype.DEFMETHOD(\"_codegen\", generator);\n }\n\n AST_Node.DEFMETHOD(\"print\", function(output, force_parens) {\n var self = this, generator = self._codegen;\n if (self instanceof AST_Scope) {\n output.active_scope = self;\n } else if (!output.use_asm && self instanceof AST_Directive && self.value == \"use asm\") {\n output.use_asm = output.active_scope;\n }\n function doit() {\n output.prepend_comments(self);\n self.add_source_map(output);\n generator(self, output);\n output.append_comments(self);\n }\n output.push_node(self);\n if (force_parens || self.needs_parens(output)) {\n output.with_parens(doit);\n } else {\n doit();\n }\n output.pop_node();\n if (self === output.use_asm) {\n output.use_asm = null;\n }\n });\n AST_Node.DEFMETHOD(\"_print\", AST_Node.prototype.print);\n\n AST_Node.DEFMETHOD(\"print_to_string\", function(options) {\n var output = OutputStream(options);\n this.print(output);\n return output.get();\n });\n\n /* -----[ PARENTHESES ]----- */\n\n function PARENS(nodetype, func) {\n if (Array.isArray(nodetype)) {\n nodetype.forEach(function(nodetype) {\n PARENS(nodetype, func);\n });\n } else {\n nodetype.DEFMETHOD(\"needs_parens\", func);\n }\n }\n\n PARENS(AST_Node, return_false);\n\n // a function expression needs parens around it when it's provably\n // the first token to appear in a statement.\n PARENS(AST_Function, function(output) {\n if (!output.has_parens() && first_in_statement(output)) {\n return true;\n }\n\n if (output.option(\"webkit\")) {\n var p = output.parent();\n if (p instanceof AST_PropAccess && p.expression === this) {\n return true;\n }\n }\n\n if (output.option(\"wrap_iife\")) {\n var p = output.parent();\n if (p instanceof AST_Call && p.expression === this) {\n return true;\n }\n }\n\n if (output.option(\"wrap_func_args\")) {\n var p = output.parent();\n if (p instanceof AST_Call && p.args.includes(this)) {\n return true;\n }\n }\n\n return false;\n });\n\n PARENS(AST_Arrow, function(output) {\n var p = output.parent();\n return p instanceof AST_PropAccess && p.expression === this;\n });\n\n // same goes for an object literal, because otherwise it would be\n // interpreted as a block of code.\n PARENS(AST_Object, function(output) {\n return !output.has_parens() && first_in_statement(output);\n });\n\n PARENS(AST_ClassExpression, first_in_statement);\n\n PARENS(AST_Unary, function(output) {\n var p = output.parent();\n return p instanceof AST_PropAccess && p.expression === this\n || p instanceof AST_Call && p.expression === this\n || p instanceof AST_Binary\n && p.operator === \"**\"\n && this instanceof AST_UnaryPrefix\n && p.left === this\n && this.operator !== \"++\"\n && this.operator !== \"--\";\n });\n\n PARENS(AST_Await, function(output) {\n var p = output.parent();\n return p instanceof AST_PropAccess && p.expression === this\n || p instanceof AST_Call && p.expression === this\n || output.option(\"safari10\") && p instanceof AST_UnaryPrefix;\n });\n\n PARENS(AST_Sequence, function(output) {\n var p = output.parent();\n return p instanceof AST_Call // (foo, bar)() or foo(1, (2, 3), 4)\n || p instanceof AST_Unary // !(foo, bar, baz)\n || p instanceof AST_Binary // 1 + (2, 3) + 4 ==> 8\n || p instanceof AST_VarDef // var a = (1, 2), b = a + a; ==> b == 4\n || p instanceof AST_PropAccess // (1, {foo:2}).foo or (1, {foo:2})[\"foo\"] ==> 2\n || p instanceof AST_Array // [ 1, (2, 3), 4 ] ==> [ 1, 3, 4 ]\n || p instanceof AST_ObjectProperty // { foo: (1, 2) }.foo ==> 2\n || p instanceof AST_Conditional /* (false, true) ? (a = 10, b = 20) : (c = 30)\n * ==> 20 (side effect, set a := 10 and b := 20) */\n || p instanceof AST_Arrow // x => (x, x)\n || p instanceof AST_DefaultAssign // x => (x = (0, function(){}))\n || p instanceof AST_Expansion // [...(a, b)]\n || p instanceof AST_ForOf && this === p.object // for (e of (foo, bar)) {}\n || p instanceof AST_Yield // yield (foo, bar)\n || p instanceof AST_Export // export default (foo, bar)\n ;\n });\n\n PARENS(AST_Binary, function(output) {\n var p = output.parent();\n // (foo && bar)()\n if (p instanceof AST_Call && p.expression === this)\n return true;\n // typeof (foo && bar)\n if (p instanceof AST_Unary)\n return true;\n // (foo && bar)[\"prop\"], (foo && bar).prop\n if (p instanceof AST_PropAccess && p.expression === this)\n return true;\n // this deals with precedence: 3 * (2 + 1)\n if (p instanceof AST_Binary) {\n const po = p.operator;\n const so = this.operator;\n\n if (so === \"??\" && (po === \"||\" || po === \"&&\")) {\n return true;\n }\n\n const pp = PRECEDENCE[po];\n const sp = PRECEDENCE[so];\n if (pp > sp\n || (pp == sp\n && (this === p.right || po == \"**\"))) {\n return true;\n }\n }\n });\n\n PARENS(AST_Yield, function(output) {\n var p = output.parent();\n // (yield 1) + (yield 2)\n // a = yield 3\n if (p instanceof AST_Binary && p.operator !== \"=\")\n return true;\n // (yield 1)()\n // new (yield 1)()\n if (p instanceof AST_Call && p.expression === this)\n return true;\n // (yield 1) ? yield 2 : yield 3\n if (p instanceof AST_Conditional && p.condition === this)\n return true;\n // -(yield 4)\n if (p instanceof AST_Unary)\n return true;\n // (yield x).foo\n // (yield x)['foo']\n if (p instanceof AST_PropAccess && p.expression === this)\n return true;\n });\n\n PARENS(AST_PropAccess, function(output) {\n var p = output.parent();\n if (p instanceof AST_New && p.expression === this) {\n // i.e. new (foo.bar().baz)\n //\n // if there's one call into this subtree, then we need\n // parens around it too, otherwise the call will be\n // interpreted as passing the arguments to the upper New\n // expression.\n return walk(this, node => {\n if (node instanceof AST_Scope) return true;\n if (node instanceof AST_Call) {\n return walk_abort; // makes walk() return true.\n }\n });\n }\n });\n\n PARENS(AST_Call, function(output) {\n var p = output.parent(), p1;\n if (p instanceof AST_New && p.expression === this\n || p instanceof AST_Export && p.is_default && this.expression instanceof AST_Function)\n return true;\n\n // workaround for Safari bug.\n // https://bugs.webkit.org/show_bug.cgi?id=123506\n return this.expression instanceof AST_Function\n && p instanceof AST_PropAccess\n && p.expression === this\n && (p1 = output.parent(1)) instanceof AST_Assign\n && p1.left === p;\n });\n\n PARENS(AST_New, function(output) {\n var p = output.parent();\n if (this.args.length === 0\n && (p instanceof AST_PropAccess // (new Date).getTime(), (new Date)[\"getTime\"]()\n || p instanceof AST_Call && p.expression === this)) // (new foo)(bar)\n return true;\n });\n\n PARENS(AST_Number, function(output) {\n var p = output.parent();\n if (p instanceof AST_PropAccess && p.expression === this) {\n var value = this.getValue();\n if (value < 0 || /^0/.test(make_num(value))) {\n return true;\n }\n }\n });\n\n PARENS(AST_BigInt, function(output) {\n var p = output.parent();\n if (p instanceof AST_PropAccess && p.expression === this) {\n var value = this.getValue();\n if (value.startsWith(\"-\")) {\n return true;\n }\n }\n });\n\n PARENS([ AST_Assign, AST_Conditional ], function(output) {\n var p = output.parent();\n // !(a = false) → true\n if (p instanceof AST_Unary)\n return true;\n // 1 + (a = 2) + 3 → 6, side effect setting a = 2\n if (p instanceof AST_Binary && !(p instanceof AST_Assign))\n return true;\n // (a = func)() —or— new (a = Object)()\n if (p instanceof AST_Call && p.expression === this)\n return true;\n // (a = foo) ? bar : baz\n if (p instanceof AST_Conditional && p.condition === this)\n return true;\n // (a = foo)[\"prop\"] —or— (a = foo).prop\n if (p instanceof AST_PropAccess && p.expression === this)\n return true;\n // ({a, b} = {a: 1, b: 2}), a destructuring assignment\n if (this instanceof AST_Assign && this.left instanceof AST_Destructuring && this.left.is_array === false)\n return true;\n });\n\n /* -----[ PRINTERS ]----- */\n\n DEFPRINT(AST_Directive, function(self, output) {\n output.print_string(self.value, self.quote);\n output.semicolon();\n });\n\n DEFPRINT(AST_Expansion, function (self, output) {\n output.print(\"...\");\n self.expression.print(output);\n });\n\n DEFPRINT(AST_Destructuring, function (self, output) {\n output.print(self.is_array ? \"[\" : \"{\");\n var len = self.names.length;\n self.names.forEach(function (name, i) {\n if (i > 0) output.comma();\n name.print(output);\n // If the final element is a hole, we need to make sure it\n // doesn't look like a trailing comma, by inserting an actual\n // trailing comma.\n if (i == len - 1 && name instanceof AST_Hole) output.comma();\n });\n output.print(self.is_array ? \"]\" : \"}\");\n });\n\n DEFPRINT(AST_Debugger, function(self, output) {\n output.print(\"debugger\");\n output.semicolon();\n });\n\n /* -----[ statements ]----- */\n\n function display_body(body, is_toplevel, output, allow_directives) {\n var last = body.length - 1;\n output.in_directive = allow_directives;\n body.forEach(function(stmt, i) {\n if (output.in_directive === true && !(stmt instanceof AST_Directive ||\n stmt instanceof AST_EmptyStatement ||\n (stmt instanceof AST_SimpleStatement && stmt.body instanceof AST_String)\n )) {\n output.in_directive = false;\n }\n if (!(stmt instanceof AST_EmptyStatement)) {\n output.indent();\n stmt.print(output);\n if (!(i == last && is_toplevel)) {\n output.newline();\n if (is_toplevel) output.newline();\n }\n }\n if (output.in_directive === true &&\n stmt instanceof AST_SimpleStatement &&\n stmt.body instanceof AST_String\n ) {\n output.in_directive = false;\n }\n });\n output.in_directive = false;\n }\n\n AST_StatementWithBody.DEFMETHOD(\"_do_print_body\", function(output) {\n force_statement(this.body, output);\n });\n\n DEFPRINT(AST_Statement, function(self, output) {\n self.body.print(output);\n output.semicolon();\n });\n DEFPRINT(AST_Toplevel, function(self, output) {\n display_body(self.body, true, output, true);\n output.print(\"\");\n });\n DEFPRINT(AST_LabeledStatement, function(self, output) {\n self.label.print(output);\n output.colon();\n self.body.print(output);\n });\n DEFPRINT(AST_SimpleStatement, function(self, output) {\n self.body.print(output);\n output.semicolon();\n });\n function print_braced_empty(self, output) {\n output.print(\"{\");\n output.with_indent(output.next_indent(), function() {\n output.append_comments(self, true);\n });\n output.print(\"}\");\n }\n function print_braced(self, output, allow_directives) {\n if (self.body.length > 0) {\n output.with_block(function() {\n display_body(self.body, false, output, allow_directives);\n });\n } else print_braced_empty(self, output);\n }\n DEFPRINT(AST_BlockStatement, function(self, output) {\n print_braced(self, output);\n });\n DEFPRINT(AST_EmptyStatement, function(self, output) {\n output.semicolon();\n });\n DEFPRINT(AST_Do, function(self, output) {\n output.print(\"do\");\n output.space();\n make_block(self.body, output);\n output.space();\n output.print(\"while\");\n output.space();\n output.with_parens(function() {\n self.condition.print(output);\n });\n output.semicolon();\n });\n DEFPRINT(AST_While, function(self, output) {\n output.print(\"while\");\n output.space();\n output.with_parens(function() {\n self.condition.print(output);\n });\n output.space();\n self._do_print_body(output);\n });\n DEFPRINT(AST_For, function(self, output) {\n output.print(\"for\");\n output.space();\n output.with_parens(function() {\n if (self.init) {\n if (self.init instanceof AST_Definitions) {\n self.init.print(output);\n } else {\n parenthesize_for_noin(self.init, output, true);\n }\n output.print(\";\");\n output.space();\n } else {\n output.print(\";\");\n }\n if (self.condition) {\n self.condition.print(output);\n output.print(\";\");\n output.space();\n } else {\n output.print(\";\");\n }\n if (self.step) {\n self.step.print(output);\n }\n });\n output.space();\n self._do_print_body(output);\n });\n DEFPRINT(AST_ForIn, function(self, output) {\n output.print(\"for\");\n if (self.await) {\n output.space();\n output.print(\"await\");\n }\n output.space();\n output.with_parens(function() {\n self.init.print(output);\n output.space();\n output.print(self instanceof AST_ForOf ? \"of\" : \"in\");\n output.space();\n self.object.print(output);\n });\n output.space();\n self._do_print_body(output);\n });\n DEFPRINT(AST_With, function(self, output) {\n output.print(\"with\");\n output.space();\n output.with_parens(function() {\n self.expression.print(output);\n });\n output.space();\n self._do_print_body(output);\n });\n\n /* -----[ functions ]----- */\n AST_Lambda.DEFMETHOD(\"_do_print\", function(output, nokeyword) {\n var self = this;\n if (!nokeyword) {\n if (self.async) {\n output.print(\"async\");\n output.space();\n }\n output.print(\"function\");\n if (self.is_generator) {\n output.star();\n }\n if (self.name) {\n output.space();\n }\n }\n if (self.name instanceof AST_Symbol) {\n self.name.print(output);\n } else if (nokeyword && self.name instanceof AST_Node) {\n output.with_square(function() {\n self.name.print(output); // Computed method name\n });\n }\n output.with_parens(function() {\n self.argnames.forEach(function(arg, i) {\n if (i) output.comma();\n arg.print(output);\n });\n });\n output.space();\n print_braced(self, output, true);\n });\n DEFPRINT(AST_Lambda, function(self, output) {\n self._do_print(output);\n });\n\n DEFPRINT(AST_PrefixedTemplateString, function(self, output) {\n var tag = self.prefix;\n var parenthesize_tag = tag instanceof AST_Lambda\n || tag instanceof AST_Binary\n || tag instanceof AST_Conditional\n || tag instanceof AST_Sequence\n || tag instanceof AST_Unary\n || tag instanceof AST_Dot && tag.expression instanceof AST_Object;\n if (parenthesize_tag) output.print(\"(\");\n self.prefix.print(output);\n if (parenthesize_tag) output.print(\")\");\n self.template_string.print(output);\n });\n DEFPRINT(AST_TemplateString, function(self, output) {\n var is_tagged = output.parent() instanceof AST_PrefixedTemplateString;\n\n output.print(\"`\");\n for (var i = 0; i < self.segments.length; i++) {\n if (!(self.segments[i] instanceof AST_TemplateSegment)) {\n output.print(\"${\");\n self.segments[i].print(output);\n output.print(\"}\");\n } else if (is_tagged) {\n output.print(self.segments[i].raw);\n } else {\n output.print_template_string_chars(self.segments[i].value);\n }\n }\n output.print(\"`\");\n });\n\n AST_Arrow.DEFMETHOD(\"_do_print\", function(output) {\n var self = this;\n var parent = output.parent();\n var needs_parens = (parent instanceof AST_Binary && !(parent instanceof AST_Assign)) ||\n parent instanceof AST_Unary ||\n (parent instanceof AST_Call && self === parent.expression);\n if (needs_parens) { output.print(\"(\"); }\n if (self.async) {\n output.print(\"async\");\n output.space();\n }\n if (self.argnames.length === 1 && self.argnames[0] instanceof AST_Symbol) {\n self.argnames[0].print(output);\n } else {\n output.with_parens(function() {\n self.argnames.forEach(function(arg, i) {\n if (i) output.comma();\n arg.print(output);\n });\n });\n }\n output.space();\n output.print(\"=>\");\n output.space();\n const first_statement = self.body[0];\n if (\n self.body.length === 1\n && first_statement instanceof AST_Return\n ) {\n const returned = first_statement.value;\n if (!returned) {\n output.print(\"{}\");\n } else if (left_is_object(returned)) {\n output.print(\"(\");\n returned.print(output);\n output.print(\")\");\n } else {\n returned.print(output);\n }\n } else {\n print_braced(self, output);\n }\n if (needs_parens) { output.print(\")\"); }\n });\n\n /* -----[ exits ]----- */\n AST_Exit.DEFMETHOD(\"_do_print\", function(output, kind) {\n output.print(kind);\n if (this.value) {\n output.space();\n const comments = this.value.start.comments_before;\n if (comments && comments.length && !output.printed_comments.has(comments)) {\n output.print(\"(\");\n this.value.print(output);\n output.print(\")\");\n } else {\n this.value.print(output);\n }\n }\n output.semicolon();\n });\n DEFPRINT(AST_Return, function(self, output) {\n self._do_print(output, \"return\");\n });\n DEFPRINT(AST_Throw, function(self, output) {\n self._do_print(output, \"throw\");\n });\n\n /* -----[ yield ]----- */\n\n DEFPRINT(AST_Yield, function(self, output) {\n var star = self.is_star ? \"*\" : \"\";\n output.print(\"yield\" + star);\n if (self.expression) {\n output.space();\n self.expression.print(output);\n }\n });\n\n DEFPRINT(AST_Await, function(self, output) {\n output.print(\"await\");\n output.space();\n var e = self.expression;\n var parens = !(\n e instanceof AST_Call\n || e instanceof AST_SymbolRef\n || e instanceof AST_PropAccess\n || e instanceof AST_Unary\n || e instanceof AST_Constant\n );\n if (parens) output.print(\"(\");\n self.expression.print(output);\n if (parens) output.print(\")\");\n });\n\n /* -----[ loop control ]----- */\n AST_LoopControl.DEFMETHOD(\"_do_print\", function(output, kind) {\n output.print(kind);\n if (this.label) {\n output.space();\n this.label.print(output);\n }\n output.semicolon();\n });\n DEFPRINT(AST_Break, function(self, output) {\n self._do_print(output, \"break\");\n });\n DEFPRINT(AST_Continue, function(self, output) {\n self._do_print(output, \"continue\");\n });\n\n /* -----[ if ]----- */\n function make_then(self, output) {\n var b = self.body;\n if (output.option(\"braces\")\n || output.option(\"ie8\") && b instanceof AST_Do)\n return make_block(b, output);\n // The squeezer replaces \"block\"-s that contain only a single\n // statement with the statement itself; technically, the AST\n // is correct, but this can create problems when we output an\n // IF having an ELSE clause where the THEN clause ends in an\n // IF *without* an ELSE block (then the outer ELSE would refer\n // to the inner IF). This function checks for this case and\n // adds the block braces if needed.\n if (!b) return output.force_semicolon();\n while (true) {\n if (b instanceof AST_If) {\n if (!b.alternative) {\n make_block(self.body, output);\n return;\n }\n b = b.alternative;\n } else if (b instanceof AST_StatementWithBody) {\n b = b.body;\n } else break;\n }\n force_statement(self.body, output);\n }\n DEFPRINT(AST_If, function(self, output) {\n output.print(\"if\");\n output.space();\n output.with_parens(function() {\n self.condition.print(output);\n });\n output.space();\n if (self.alternative) {\n make_then(self, output);\n output.space();\n output.print(\"else\");\n output.space();\n if (self.alternative instanceof AST_If)\n self.alternative.print(output);\n else\n force_statement(self.alternative, output);\n } else {\n self._do_print_body(output);\n }\n });\n\n /* -----[ switch ]----- */\n DEFPRINT(AST_Switch, function(self, output) {\n output.print(\"switch\");\n output.space();\n output.with_parens(function() {\n self.expression.print(output);\n });\n output.space();\n var last = self.body.length - 1;\n if (last < 0) print_braced_empty(self, output);\n else output.with_block(function() {\n self.body.forEach(function(branch, i) {\n output.indent(true);\n branch.print(output);\n if (i < last && branch.body.length > 0)\n output.newline();\n });\n });\n });\n AST_SwitchBranch.DEFMETHOD(\"_do_print_body\", function(output) {\n output.newline();\n this.body.forEach(function(stmt) {\n output.indent();\n stmt.print(output);\n output.newline();\n });\n });\n DEFPRINT(AST_Default, function(self, output) {\n output.print(\"default:\");\n self._do_print_body(output);\n });\n DEFPRINT(AST_Case, function(self, output) {\n output.print(\"case\");\n output.space();\n self.expression.print(output);\n output.print(\":\");\n self._do_print_body(output);\n });\n\n /* -----[ exceptions ]----- */\n DEFPRINT(AST_Try, function(self, output) {\n output.print(\"try\");\n output.space();\n print_braced(self, output);\n if (self.bcatch) {\n output.space();\n self.bcatch.print(output);\n }\n if (self.bfinally) {\n output.space();\n self.bfinally.print(output);\n }\n });\n DEFPRINT(AST_Catch, function(self, output) {\n output.print(\"catch\");\n if (self.argname) {\n output.space();\n output.with_parens(function() {\n self.argname.print(output);\n });\n }\n output.space();\n print_braced(self, output);\n });\n DEFPRINT(AST_Finally, function(self, output) {\n output.print(\"finally\");\n output.space();\n print_braced(self, output);\n });\n\n /* -----[ var/const ]----- */\n AST_Definitions.DEFMETHOD(\"_do_print\", function(output, kind) {\n output.print(kind);\n output.space();\n this.definitions.forEach(function(def, i) {\n if (i) output.comma();\n def.print(output);\n });\n var p = output.parent();\n var in_for = p instanceof AST_For || p instanceof AST_ForIn;\n var output_semicolon = !in_for || p && p.init !== this;\n if (output_semicolon)\n output.semicolon();\n });\n DEFPRINT(AST_Let, function(self, output) {\n self._do_print(output, \"let\");\n });\n DEFPRINT(AST_Var, function(self, output) {\n self._do_print(output, \"var\");\n });\n DEFPRINT(AST_Const, function(self, output) {\n self._do_print(output, \"const\");\n });\n DEFPRINT(AST_Import, function(self, output) {\n output.print(\"import\");\n output.space();\n if (self.imported_name) {\n self.imported_name.print(output);\n }\n if (self.imported_name && self.imported_names) {\n output.print(\",\");\n output.space();\n }\n if (self.imported_names) {\n if (self.imported_names.length === 1 && self.imported_names[0].foreign_name.name === \"*\") {\n self.imported_names[0].print(output);\n } else {\n output.print(\"{\");\n self.imported_names.forEach(function (name_import, i) {\n output.space();\n name_import.print(output);\n if (i < self.imported_names.length - 1) {\n output.print(\",\");\n }\n });\n output.space();\n output.print(\"}\");\n }\n }\n if (self.imported_name || self.imported_names) {\n output.space();\n output.print(\"from\");\n output.space();\n }\n self.module_name.print(output);\n output.semicolon();\n });\n\n DEFPRINT(AST_NameMapping, function(self, output) {\n var is_import = output.parent() instanceof AST_Import;\n var definition = self.name.definition();\n var names_are_different =\n (definition && definition.mangled_name || self.name.name) !==\n self.foreign_name.name;\n if (names_are_different) {\n if (is_import) {\n output.print(self.foreign_name.name);\n } else {\n self.name.print(output);\n }\n output.space();\n output.print(\"as\");\n output.space();\n if (is_import) {\n self.name.print(output);\n } else {\n output.print(self.foreign_name.name);\n }\n } else {\n self.name.print(output);\n }\n });\n\n DEFPRINT(AST_Export, function(self, output) {\n output.print(\"export\");\n output.space();\n if (self.is_default) {\n output.print(\"default\");\n output.space();\n }\n if (self.exported_names) {\n if (self.exported_names.length === 1 && self.exported_names[0].name.name === \"*\") {\n self.exported_names[0].print(output);\n } else {\n output.print(\"{\");\n self.exported_names.forEach(function(name_export, i) {\n output.space();\n name_export.print(output);\n if (i < self.exported_names.length - 1) {\n output.print(\",\");\n }\n });\n output.space();\n output.print(\"}\");\n }\n } else if (self.exported_value) {\n self.exported_value.print(output);\n } else if (self.exported_definition) {\n self.exported_definition.print(output);\n if (self.exported_definition instanceof AST_Definitions) return;\n }\n if (self.module_name) {\n output.space();\n output.print(\"from\");\n output.space();\n self.module_name.print(output);\n }\n if (self.exported_value\n && !(self.exported_value instanceof AST_Defun ||\n self.exported_value instanceof AST_Function ||\n self.exported_value instanceof AST_Class)\n || self.module_name\n || self.exported_names\n ) {\n output.semicolon();\n }\n });\n\n function parenthesize_for_noin(node, output, noin) {\n var parens = false;\n // need to take some precautions here:\n // https://github.com/mishoo/UglifyJS2/issues/60\n if (noin) {\n parens = walk(node, node => {\n if (node instanceof AST_Scope) return true;\n if (node instanceof AST_Binary && node.operator == \"in\") {\n return walk_abort; // makes walk() return true\n }\n });\n }\n node.print(output, parens);\n }\n\n DEFPRINT(AST_VarDef, function(self, output) {\n self.name.print(output);\n if (self.value) {\n output.space();\n output.print(\"=\");\n output.space();\n var p = output.parent(1);\n var noin = p instanceof AST_For || p instanceof AST_ForIn;\n parenthesize_for_noin(self.value, output, noin);\n }\n });\n\n /* -----[ other expressions ]----- */\n DEFPRINT(AST_Call, function(self, output) {\n self.expression.print(output);\n if (self instanceof AST_New && self.args.length === 0)\n return;\n if (self.expression instanceof AST_Call || self.expression instanceof AST_Lambda) {\n output.add_mapping(self.start);\n }\n output.with_parens(function() {\n self.args.forEach(function(expr, i) {\n if (i) output.comma();\n expr.print(output);\n });\n });\n });\n DEFPRINT(AST_New, function(self, output) {\n output.print(\"new\");\n output.space();\n AST_Call.prototype._codegen(self, output);\n });\n\n AST_Sequence.DEFMETHOD(\"_do_print\", function(output) {\n this.expressions.forEach(function(node, index) {\n if (index > 0) {\n output.comma();\n if (output.should_break()) {\n output.newline();\n output.indent();\n }\n }\n node.print(output);\n });\n });\n DEFPRINT(AST_Sequence, function(self, output) {\n self._do_print(output);\n // var p = output.parent();\n // if (p instanceof AST_Statement) {\n // output.with_indent(output.next_indent(), function(){\n // self._do_print(output);\n // });\n // } else {\n // self._do_print(output);\n // }\n });\n DEFPRINT(AST_Dot, function(self, output) {\n var expr = self.expression;\n expr.print(output);\n var prop = self.property;\n var print_computed = RESERVED_WORDS.has(prop)\n ? output.option(\"ie8\")\n : !is_identifier_string(prop, output.option(\"ecma\") >= 2015);\n if (print_computed) {\n output.print(\"[\");\n output.add_mapping(self.end);\n output.print_string(prop);\n output.print(\"]\");\n } else {\n if (expr instanceof AST_Number && expr.getValue() >= 0) {\n if (!/[xa-f.)]/i.test(output.last())) {\n output.print(\".\");\n }\n }\n output.print(\".\");\n // the name after dot would be mapped about here.\n output.add_mapping(self.end);\n output.print_name(prop);\n }\n });\n DEFPRINT(AST_Sub, function(self, output) {\n self.expression.print(output);\n output.print(\"[\");\n self.property.print(output);\n output.print(\"]\");\n });\n DEFPRINT(AST_UnaryPrefix, function(self, output) {\n var op = self.operator;\n output.print(op);\n if (/^[a-z]/i.test(op)\n || (/[+-]$/.test(op)\n && self.expression instanceof AST_UnaryPrefix\n && /^[+-]/.test(self.expression.operator))) {\n output.space();\n }\n self.expression.print(output);\n });\n DEFPRINT(AST_UnaryPostfix, function(self, output) {\n self.expression.print(output);\n output.print(self.operator);\n });\n DEFPRINT(AST_Binary, function(self, output) {\n var op = self.operator;\n self.left.print(output);\n if (op[0] == \">\" /* \">>\" \">>>\" \">\" \">=\" */\n && self.left instanceof AST_UnaryPostfix\n && self.left.operator == \"--\") {\n // space is mandatory to avoid outputting -->\n output.print(\" \");\n } else {\n // the space is optional depending on \"beautify\"\n output.space();\n }\n output.print(op);\n if ((op == \"<\" || op == \"<<\")\n && self.right instanceof AST_UnaryPrefix\n && self.right.operator == \"!\"\n && self.right.expression instanceof AST_UnaryPrefix\n && self.right.expression.operator == \"--\") {\n // space is mandatory to avoid outputting x ? y : false\n if (self.left.operator == \"||\") {\n var lr = self.left.right.evaluate(compressor);\n if (!lr) return make_node(AST_Conditional, self, {\n condition: self.left.left,\n consequent: self.right,\n alternative: self.left.right\n }).optimize(compressor);\n }\n break;\n case \"||\":\n var ll = has_flag(self.left, TRUTHY)\n ? true\n : has_flag(self.left, FALSY)\n ? false\n : self.left.evaluate(compressor);\n if (!ll) {\n compressor.warn(\"Condition left of || always false [{file}:{line},{col}]\", self.start);\n return make_sequence(self, [ self.left, self.right ]).optimize(compressor);\n } else if (!(ll instanceof AST_Node)) {\n compressor.warn(\"Condition left of || always true [{file}:{line},{col}]\", self.start);\n return maintain_this_binding(compressor.parent(), compressor.self(), self.left).optimize(compressor);\n }\n var rr = self.right.evaluate(compressor);\n if (!rr) {\n var parent = compressor.parent();\n if (parent.operator == \"||\" && parent.left === compressor.self() || compressor.in_boolean_context()) {\n compressor.warn(\"Dropping side-effect-free || [{file}:{line},{col}]\", self.start);\n return self.left.optimize(compressor);\n }\n } else if (!(rr instanceof AST_Node)) {\n if (compressor.in_boolean_context()) {\n compressor.warn(\"Boolean || always true [{file}:{line},{col}]\", self.start);\n return make_sequence(self, [\n self.left,\n make_node(AST_True, self)\n ]).optimize(compressor);\n } else {\n set_flag(self, TRUTHY);\n }\n }\n if (self.left.operator == \"&&\") {\n var lr = self.left.right.evaluate(compressor);\n if (lr && !(lr instanceof AST_Node)) return make_node(AST_Conditional, self, {\n condition: self.left.left,\n consequent: self.left.right,\n alternative: self.right\n }).optimize(compressor);\n }\n break;\n case \"??\":\n if (is_nullish(self.left)) {\n return self.right;\n }\n\n var ll = self.left.evaluate(compressor);\n if (!(ll instanceof AST_Node)) {\n // if we know the value for sure we can simply compute right away.\n return ll == null ? self.right : self.left;\n }\n\n if (compressor.in_boolean_context()) {\n const rr = self.right.evaluate(compressor);\n if (!(rr instanceof AST_Node) && !rr) {\n return self.left;\n }\n }\n }\n var associative = true;\n switch (self.operator) {\n case \"+\":\n // \"foo\" + (\"bar\" + x) => \"foobar\" + x\n if (self.left instanceof AST_Constant\n && self.right instanceof AST_Binary\n && self.right.operator == \"+\"\n && self.right.is_string(compressor)) {\n var binary = make_node(AST_Binary, self, {\n operator: \"+\",\n left: self.left,\n right: self.right.left,\n });\n var l = binary.optimize(compressor);\n if (binary !== l) {\n self = make_node(AST_Binary, self, {\n operator: \"+\",\n left: l,\n right: self.right.right\n });\n }\n }\n // (x + \"foo\") + \"bar\" => x + \"foobar\"\n if (self.right instanceof AST_Constant\n && self.left instanceof AST_Binary\n && self.left.operator == \"+\"\n && self.left.is_string(compressor)) {\n var binary = make_node(AST_Binary, self, {\n operator: \"+\",\n left: self.left.right,\n right: self.right,\n });\n var r = binary.optimize(compressor);\n if (binary !== r) {\n self = make_node(AST_Binary, self, {\n operator: \"+\",\n left: self.left.left,\n right: r\n });\n }\n }\n // (x + \"foo\") + (\"bar\" + y) => (x + \"foobar\") + y\n if (self.left instanceof AST_Binary\n && self.left.operator == \"+\"\n && self.left.is_string(compressor)\n && self.right instanceof AST_Binary\n && self.right.operator == \"+\"\n && self.right.is_string(compressor)) {\n var binary = make_node(AST_Binary, self, {\n operator: \"+\",\n left: self.left.right,\n right: self.right.left,\n });\n var m = binary.optimize(compressor);\n if (binary !== m) {\n self = make_node(AST_Binary, self, {\n operator: \"+\",\n left: make_node(AST_Binary, self.left, {\n operator: \"+\",\n left: self.left.left,\n right: m\n }),\n right: self.right.right\n });\n }\n }\n // a + -b => a - b\n if (self.right instanceof AST_UnaryPrefix\n && self.right.operator == \"-\"\n && self.left.is_number(compressor)) {\n self = make_node(AST_Binary, self, {\n operator: \"-\",\n left: self.left,\n right: self.right.expression\n });\n break;\n }\n // -a + b => b - a\n if (self.left instanceof AST_UnaryPrefix\n && self.left.operator == \"-\"\n && reversible()\n && self.right.is_number(compressor)) {\n self = make_node(AST_Binary, self, {\n operator: \"-\",\n left: self.right,\n right: self.left.expression\n });\n break;\n }\n // `foo${bar}baz` + 1 => `foo${bar}baz1`\n if (self.left instanceof AST_TemplateString) {\n var l = self.left;\n var r = self.right.evaluate(compressor);\n if (r != self.right) {\n l.segments[l.segments.length - 1].value += r.toString();\n return l;\n }\n }\n // 1 + `foo${bar}baz` => `1foo${bar}baz`\n if (self.right instanceof AST_TemplateString) {\n var r = self.right;\n var l = self.left.evaluate(compressor);\n if (l != self.left) {\n r.segments[0].value = l.toString() + r.segments[0].value ;\n return r;\n }\n }\n // `1${bar}2` + `foo${bar}baz` => `1${bar}2foo${bar}baz`\n if (self.left instanceof AST_TemplateString\n && self.right instanceof AST_TemplateString) {\n var l = self.left;\n var segments = l.segments;\n var r = self.right;\n segments[segments.length - 1].value += r.segments[0].value;\n for (var i = 1; i < r.segments.length; i++) {\n segments.push(r.segments[i]);\n }\n return l;\n }\n case \"*\":\n associative = compressor.option(\"unsafe_math\");\n case \"&\":\n case \"|\":\n case \"^\":\n // a + +b => +b + a\n if (self.left.is_number(compressor)\n && self.right.is_number(compressor)\n && reversible()\n && !(self.left instanceof AST_Binary\n && self.left.operator != self.operator\n && PRECEDENCE[self.left.operator] >= PRECEDENCE[self.operator])) {\n var reversed = make_node(AST_Binary, self, {\n operator: self.operator,\n left: self.right,\n right: self.left\n });\n if (self.right instanceof AST_Constant\n && !(self.left instanceof AST_Constant)) {\n self = best_of(compressor, reversed, self);\n } else {\n self = best_of(compressor, self, reversed);\n }\n }\n if (associative && self.is_number(compressor)) {\n // a + (b + c) => (a + b) + c\n if (self.right instanceof AST_Binary\n && self.right.operator == self.operator) {\n self = make_node(AST_Binary, self, {\n operator: self.operator,\n left: make_node(AST_Binary, self.left, {\n operator: self.operator,\n left: self.left,\n right: self.right.left,\n start: self.left.start,\n end: self.right.left.end\n }),\n right: self.right.right\n });\n }\n // (n + 2) + 3 => 5 + n\n // (2 * n) * 3 => 6 + n\n if (self.right instanceof AST_Constant\n && self.left instanceof AST_Binary\n && self.left.operator == self.operator) {\n if (self.left.left instanceof AST_Constant) {\n self = make_node(AST_Binary, self, {\n operator: self.operator,\n left: make_node(AST_Binary, self.left, {\n operator: self.operator,\n left: self.left.left,\n right: self.right,\n start: self.left.left.start,\n end: self.right.end\n }),\n right: self.left.right\n });\n } else if (self.left.right instanceof AST_Constant) {\n self = make_node(AST_Binary, self, {\n operator: self.operator,\n left: make_node(AST_Binary, self.left, {\n operator: self.operator,\n left: self.left.right,\n right: self.right,\n start: self.left.right.start,\n end: self.right.end\n }),\n right: self.left.left\n });\n }\n }\n // (a | 1) | (2 | d) => (3 | a) | b\n if (self.left instanceof AST_Binary\n && self.left.operator == self.operator\n && self.left.right instanceof AST_Constant\n && self.right instanceof AST_Binary\n && self.right.operator == self.operator\n && self.right.left instanceof AST_Constant) {\n self = make_node(AST_Binary, self, {\n operator: self.operator,\n left: make_node(AST_Binary, self.left, {\n operator: self.operator,\n left: make_node(AST_Binary, self.left.left, {\n operator: self.operator,\n left: self.left.right,\n right: self.right.left,\n start: self.left.right.start,\n end: self.right.left.end\n }),\n right: self.left.left\n }),\n right: self.right.right\n });\n }\n }\n }\n }\n // x && (y && z) ==> x && y && z\n // x || (y || z) ==> x || y || z\n // x + (\"y\" + z) ==> x + \"y\" + z\n // \"x\" + (y + \"z\")==> \"x\" + y + \"z\"\n if (self.right instanceof AST_Binary\n && self.right.operator == self.operator\n && (lazy_op.has(self.operator)\n || (self.operator == \"+\"\n && (self.right.left.is_string(compressor)\n || (self.left.is_string(compressor)\n && self.right.right.is_string(compressor)))))\n ) {\n self.left = make_node(AST_Binary, self.left, {\n operator : self.operator,\n left : self.left,\n right : self.right.left\n });\n self.right = self.right.right;\n return self.transform(compressor);\n }\n var ev = self.evaluate(compressor);\n if (ev !== self) {\n ev = make_node_from_constant(ev, self).optimize(compressor);\n return best_of(compressor, ev, self);\n }\n return self;\n});\n\ndef_optimize(AST_SymbolExport, function(self) {\n return self;\n});\n\nfunction recursive_ref(compressor, def) {\n var node;\n for (var i = 0; node = compressor.parent(i); i++) {\n if (\n node instanceof AST_Lambda\n || node instanceof AST_Class\n ) {\n var name = node.name;\n if (name && name.definition() === def) break;\n }\n }\n return node;\n}\n\nfunction within_array_or_object_literal(compressor) {\n var node, level = 0;\n while (node = compressor.parent(level++)) {\n if (node instanceof AST_Statement) return false;\n if (node instanceof AST_Array\n || node instanceof AST_ObjectKeyVal\n || node instanceof AST_Object) {\n return true;\n }\n }\n return false;\n}\n\ndef_optimize(AST_SymbolRef, function(self, compressor) {\n if (!compressor.option(\"ie8\")\n && is_undeclared_ref(self)\n && (!self.scope.uses_with || !compressor.find_parent(AST_With))) {\n switch (self.name) {\n case \"undefined\":\n return make_node(AST_Undefined, self).optimize(compressor);\n case \"NaN\":\n return make_node(AST_NaN, self).optimize(compressor);\n case \"Infinity\":\n return make_node(AST_Infinity, self).optimize(compressor);\n }\n }\n var parent = compressor.parent();\n if (compressor.option(\"reduce_vars\") && is_lhs(self, parent) !== self) {\n const def = self.definition();\n if (compressor.top_retain && def.global && compressor.top_retain(def)) {\n def.fixed = false;\n def.should_replace = false;\n def.single_use = false;\n return self;\n }\n var fixed = self.fixed_value();\n var single_use = def.single_use\n && !(parent instanceof AST_Call\n && (parent.is_expr_pure(compressor))\n || has_annotation(parent, _NOINLINE));\n if (single_use && (fixed instanceof AST_Lambda || fixed instanceof AST_Class)) {\n if (retain_top_func(fixed, compressor)) {\n single_use = false;\n } else if (def.scope !== self.scope\n && (def.escaped == 1\n || has_flag(fixed, INLINED)\n || within_array_or_object_literal(compressor))) {\n single_use = false;\n } else if (recursive_ref(compressor, def)) {\n single_use = false;\n } else if (def.scope !== self.scope || def.orig[0] instanceof AST_SymbolFunarg) {\n single_use = fixed.is_constant_expression(self.scope);\n if (single_use == \"f\") {\n var scope = self.scope;\n do {\n if (scope instanceof AST_Defun || is_func_expr(scope)) {\n set_flag(scope, INLINED);\n }\n } while (scope = scope.parent_scope);\n }\n }\n }\n if (single_use && fixed instanceof AST_Lambda) {\n const block_scope = find_scope(compressor);\n single_use =\n def.scope === self.scope\n && !scope_encloses_variables_in_this_scope(block_scope, fixed)\n || parent instanceof AST_Call\n && parent.expression === self\n && !scope_encloses_variables_in_this_scope(block_scope, fixed);\n }\n if (single_use && fixed instanceof AST_Class) {\n const extends_inert = !fixed.extends\n || !fixed.extends.may_throw(compressor)\n && !fixed.extends.has_side_effects(compressor);\n single_use = extends_inert\n && !fixed.properties.some(prop =>\n prop.may_throw(compressor) || prop.has_side_effects(compressor)\n );\n }\n const can_pull_in = single_use && fixed;\n if (can_pull_in) {\n if (fixed instanceof AST_DefClass) {\n set_flag(fixed, SQUEEZED);\n fixed = make_node(AST_ClassExpression, fixed, fixed);\n }\n if (fixed instanceof AST_Defun) {\n set_flag(fixed, SQUEEZED);\n fixed = make_node(AST_Function, fixed, fixed);\n }\n if (def.recursive_refs > 0 && fixed.name instanceof AST_SymbolDefun) {\n const defun_def = fixed.name.definition();\n let lambda_def = fixed.variables.get(fixed.name.name);\n let name = lambda_def && lambda_def.orig[0];\n if (!(name instanceof AST_SymbolLambda)) {\n name = make_node(AST_SymbolLambda, fixed.name, fixed.name);\n name.scope = fixed;\n fixed.name = name;\n lambda_def = fixed.def_function(name);\n }\n walk(fixed, node => {\n if (node instanceof AST_SymbolRef && node.definition() === defun_def) {\n node.thedef = lambda_def;\n lambda_def.references.push(node);\n }\n });\n }\n if (fixed instanceof AST_Lambda || fixed instanceof AST_Class) {\n find_scope(compressor).add_child_scope(fixed);\n }\n return fixed.optimize(compressor);\n }\n if (fixed && def.should_replace === undefined) {\n let init;\n if (fixed instanceof AST_This) {\n if (!(def.orig[0] instanceof AST_SymbolFunarg)\n && def.references.every((ref) =>\n def.scope === ref.scope\n )) {\n init = fixed;\n }\n } else {\n var ev = fixed.evaluate(compressor);\n if (ev !== fixed && (compressor.option(\"unsafe_regexp\") || !(ev instanceof RegExp))) {\n init = make_node_from_constant(ev, fixed);\n }\n }\n if (init) {\n var value_length = init.optimize(compressor).size();\n var fn;\n if (has_symbol_ref(fixed)) {\n fn = function() {\n var result = init.optimize(compressor);\n return result === init ? result.clone(true) : result;\n };\n } else {\n value_length = Math.min(value_length, fixed.size());\n fn = function() {\n var result = best_of_expression(init.optimize(compressor), fixed);\n return result === init || result === fixed ? result.clone(true) : result;\n };\n }\n var name_length = def.name.length;\n var overhead = 0;\n if (compressor.option(\"unused\") && !compressor.exposed(def)) {\n overhead = (name_length + 2 + value_length) / (def.references.length - def.assignments);\n }\n def.should_replace = value_length <= name_length + overhead ? fn : false;\n } else {\n def.should_replace = false;\n }\n }\n if (def.should_replace) {\n return def.should_replace();\n }\n }\n return self;\n\n function has_symbol_ref(value) {\n return walk(value, node => {\n if (node instanceof AST_SymbolRef) return walk_abort;\n });\n }\n});\n\nfunction scope_encloses_variables_in_this_scope(scope, pulled_scope) {\n for (const enclosed of pulled_scope.enclosed) {\n if (pulled_scope.variables.has(enclosed.name)) {\n continue;\n }\n const looked_up = scope.find_variable(enclosed.name);\n if (looked_up) {\n if (looked_up === enclosed) continue;\n return true;\n }\n }\n return false;\n}\n\nfunction is_atomic(lhs, self) {\n return lhs instanceof AST_SymbolRef || lhs.TYPE === self.TYPE;\n}\n\ndef_optimize(AST_Undefined, function(self, compressor) {\n if (compressor.option(\"unsafe_undefined\")) {\n var undef = find_variable(compressor, \"undefined\");\n if (undef) {\n var ref = make_node(AST_SymbolRef, self, {\n name : \"undefined\",\n scope : undef.scope,\n thedef : undef\n });\n set_flag(ref, UNDEFINED);\n return ref;\n }\n }\n var lhs = is_lhs(compressor.self(), compressor.parent());\n if (lhs && is_atomic(lhs, self)) return self;\n return make_node(AST_UnaryPrefix, self, {\n operator: \"void\",\n expression: make_node(AST_Number, self, {\n value: 0\n })\n });\n});\n\ndef_optimize(AST_Infinity, function(self, compressor) {\n var lhs = is_lhs(compressor.self(), compressor.parent());\n if (lhs && is_atomic(lhs, self)) return self;\n if (\n compressor.option(\"keep_infinity\")\n && !(lhs && !is_atomic(lhs, self))\n && !find_variable(compressor, \"Infinity\")\n ) {\n return self;\n }\n return make_node(AST_Binary, self, {\n operator: \"/\",\n left: make_node(AST_Number, self, {\n value: 1\n }),\n right: make_node(AST_Number, self, {\n value: 0\n })\n });\n});\n\ndef_optimize(AST_NaN, function(self, compressor) {\n var lhs = is_lhs(compressor.self(), compressor.parent());\n if (lhs && !is_atomic(lhs, self)\n || find_variable(compressor, \"NaN\")) {\n return make_node(AST_Binary, self, {\n operator: \"/\",\n left: make_node(AST_Number, self, {\n value: 0\n }),\n right: make_node(AST_Number, self, {\n value: 0\n })\n });\n }\n return self;\n});\n\nfunction is_reachable(self, defs) {\n const find_ref = node => {\n if (node instanceof AST_SymbolRef && member(node.definition(), defs)) {\n return walk_abort;\n }\n };\n\n return walk_parent(self, (node, info) => {\n if (node instanceof AST_Scope && node !== self) {\n var parent = info.parent();\n if (parent instanceof AST_Call && parent.expression === node) return;\n if (walk(node, find_ref)) {\n return walk_abort;\n }\n return true;\n }\n });\n}\n\nconst ASSIGN_OPS = makePredicate(\"+ - / * % >> << >>> | ^ &\");\nconst ASSIGN_OPS_COMMUTATIVE = makePredicate(\"* | ^ &\");\ndef_optimize(AST_Assign, function(self, compressor) {\n var def;\n if (compressor.option(\"dead_code\")\n && self.left instanceof AST_SymbolRef\n && (def = self.left.definition()).scope === compressor.find_parent(AST_Lambda)) {\n var level = 0, node, parent = self;\n do {\n node = parent;\n parent = compressor.parent(level++);\n if (parent instanceof AST_Exit) {\n if (in_try(level, parent)) break;\n if (is_reachable(def.scope, [ def ])) break;\n if (self.operator == \"=\") return self.right;\n def.fixed = false;\n return make_node(AST_Binary, self, {\n operator: self.operator.slice(0, -1),\n left: self.left,\n right: self.right\n }).optimize(compressor);\n }\n } while (parent instanceof AST_Binary && parent.right === node\n || parent instanceof AST_Sequence && parent.tail_node() === node);\n }\n self = self.lift_sequences(compressor);\n if (self.operator == \"=\" && self.left instanceof AST_SymbolRef && self.right instanceof AST_Binary) {\n // x = expr1 OP expr2\n if (self.right.left instanceof AST_SymbolRef\n && self.right.left.name == self.left.name\n && ASSIGN_OPS.has(self.right.operator)) {\n // x = x - 2 ---> x -= 2\n self.operator = self.right.operator + \"=\";\n self.right = self.right.right;\n } else if (self.right.right instanceof AST_SymbolRef\n && self.right.right.name == self.left.name\n && ASSIGN_OPS_COMMUTATIVE.has(self.right.operator)\n && !self.right.left.has_side_effects(compressor)) {\n // x = 2 & x ---> x &= 2\n self.operator = self.right.operator + \"=\";\n self.right = self.right.left;\n }\n }\n return self;\n\n function in_try(level, node) {\n var right = self.right;\n self.right = make_node(AST_Null, right);\n var may_throw = node.may_throw(compressor);\n self.right = right;\n var scope = self.left.definition().scope;\n var parent;\n while ((parent = compressor.parent(level++)) !== scope) {\n if (parent instanceof AST_Try) {\n if (parent.bfinally) return true;\n if (may_throw && parent.bcatch) return true;\n }\n }\n }\n});\n\ndef_optimize(AST_DefaultAssign, function(self, compressor) {\n if (!compressor.option(\"evaluate\")) {\n return self;\n }\n var evaluateRight = self.right.evaluate(compressor);\n\n // `[x = undefined] = foo` ---> `[x] = foo`\n if (evaluateRight === undefined) {\n self = self.left;\n } else if (evaluateRight !== self.right) {\n evaluateRight = make_node_from_constant(evaluateRight, self.right);\n self.right = best_of_expression(evaluateRight, self.right);\n }\n\n return self;\n});\n\nfunction is_nullish(node) {\n let fixed;\n return (\n node instanceof AST_Null\n || is_undefined(node)\n || (\n node instanceof AST_SymbolRef\n && (fixed = node.definition().fixed) instanceof AST_Node\n && is_nullish(fixed)\n )\n );\n}\n\nfunction is_nullish_check(check, check_subject, compressor) {\n if (check_subject.may_throw(compressor)) return false;\n\n let nullish_side;\n\n // foo == null\n if (\n check instanceof AST_Binary\n && check.operator === \"==\"\n // which side is nullish?\n && (\n (nullish_side = is_nullish(check.left) && check.left)\n || (nullish_side = is_nullish(check.right) && check.right)\n )\n // is the other side the same as the check_subject\n && (\n nullish_side === check.left\n ? check.right\n : check.left\n ).equivalent_to(check_subject)\n ) {\n return true;\n }\n\n // foo === null || foo === undefined\n if (check instanceof AST_Binary && check.operator === \"||\") {\n let null_cmp;\n let undefined_cmp;\n\n const find_comparison = cmp => {\n if (!(\n cmp instanceof AST_Binary\n && (cmp.operator === \"===\" || cmp.operator === \"==\")\n )) {\n return false;\n }\n\n let found = 0;\n let defined_side;\n\n if (cmp.left instanceof AST_Null) {\n found++;\n null_cmp = cmp;\n defined_side = cmp.right;\n }\n if (cmp.right instanceof AST_Null) {\n found++;\n null_cmp = cmp;\n defined_side = cmp.left;\n }\n if (is_undefined(cmp.left)) {\n found++;\n undefined_cmp = cmp;\n defined_side = cmp.right;\n }\n if (is_undefined(cmp.right)) {\n found++;\n undefined_cmp = cmp;\n defined_side = cmp.left;\n }\n\n if (found !== 1) {\n return false;\n }\n\n if (!defined_side.equivalent_to(check_subject)) {\n return false;\n }\n\n return true;\n };\n\n if (!find_comparison(check.left)) return false;\n if (!find_comparison(check.right)) return false;\n\n if (null_cmp && undefined_cmp && null_cmp !== undefined_cmp) {\n return true;\n }\n }\n\n return false;\n}\n\ndef_optimize(AST_Conditional, function(self, compressor) {\n if (!compressor.option(\"conditionals\")) return self;\n // This looks like lift_sequences(), should probably be under \"sequences\"\n if (self.condition instanceof AST_Sequence) {\n var expressions = self.condition.expressions.slice();\n self.condition = expressions.pop();\n expressions.push(self);\n return make_sequence(self, expressions);\n }\n var cond = self.condition.evaluate(compressor);\n if (cond !== self.condition) {\n if (cond) {\n compressor.warn(\"Condition always true [{file}:{line},{col}]\", self.start);\n return maintain_this_binding(compressor.parent(), compressor.self(), self.consequent);\n } else {\n compressor.warn(\"Condition always false [{file}:{line},{col}]\", self.start);\n return maintain_this_binding(compressor.parent(), compressor.self(), self.alternative);\n }\n }\n var negated = cond.negate(compressor, first_in_statement(compressor));\n if (best_of(compressor, cond, negated) === negated) {\n self = make_node(AST_Conditional, self, {\n condition: negated,\n consequent: self.alternative,\n alternative: self.consequent\n });\n }\n var condition = self.condition;\n var consequent = self.consequent;\n var alternative = self.alternative;\n // x?x:y --> x||y\n if (condition instanceof AST_SymbolRef\n && consequent instanceof AST_SymbolRef\n && condition.definition() === consequent.definition()) {\n return make_node(AST_Binary, self, {\n operator: \"||\",\n left: condition,\n right: alternative\n });\n }\n // if (foo) exp = something; else exp = something_else;\n // |\n // v\n // exp = foo ? something : something_else;\n if (consequent instanceof AST_Assign\n && alternative instanceof AST_Assign\n && consequent.operator == alternative.operator\n && consequent.left.equivalent_to(alternative.left)\n && (!self.condition.has_side_effects(compressor)\n || consequent.operator == \"=\"\n && !consequent.left.has_side_effects(compressor))) {\n return make_node(AST_Assign, self, {\n operator: consequent.operator,\n left: consequent.left,\n right: make_node(AST_Conditional, self, {\n condition: self.condition,\n consequent: consequent.right,\n alternative: alternative.right\n })\n });\n }\n // x ? y(a) : y(b) --> y(x ? a : b)\n var arg_index;\n if (consequent instanceof AST_Call\n && alternative.TYPE === consequent.TYPE\n && consequent.args.length > 0\n && consequent.args.length == alternative.args.length\n && consequent.expression.equivalent_to(alternative.expression)\n && !self.condition.has_side_effects(compressor)\n && !consequent.expression.has_side_effects(compressor)\n && typeof (arg_index = single_arg_diff()) == \"number\") {\n var node = consequent.clone();\n node.args[arg_index] = make_node(AST_Conditional, self, {\n condition: self.condition,\n consequent: consequent.args[arg_index],\n alternative: alternative.args[arg_index]\n });\n return node;\n }\n // a ? b : c ? b : d --> (a || c) ? b : d\n if (alternative instanceof AST_Conditional\n && consequent.equivalent_to(alternative.consequent)) {\n return make_node(AST_Conditional, self, {\n condition: make_node(AST_Binary, self, {\n operator: \"||\",\n left: condition,\n right: alternative.condition\n }),\n consequent: consequent,\n alternative: alternative.alternative\n }).optimize(compressor);\n }\n\n // a == null ? b : a -> a ?? b\n if (\n compressor.option(\"ecma\") >= 2020 &&\n is_nullish_check(condition, alternative, compressor)\n ) {\n return make_node(AST_Binary, self, {\n operator: \"??\",\n left: alternative,\n right: consequent\n }).optimize(compressor);\n }\n\n // a ? b : (c, b) --> (a || c), b\n if (alternative instanceof AST_Sequence\n && consequent.equivalent_to(alternative.expressions[alternative.expressions.length - 1])) {\n return make_sequence(self, [\n make_node(AST_Binary, self, {\n operator: \"||\",\n left: condition,\n right: make_sequence(self, alternative.expressions.slice(0, -1))\n }),\n consequent\n ]).optimize(compressor);\n }\n // a ? b : (c && b) --> (a || c) && b\n if (alternative instanceof AST_Binary\n && alternative.operator == \"&&\"\n && consequent.equivalent_to(alternative.right)) {\n return make_node(AST_Binary, self, {\n operator: \"&&\",\n left: make_node(AST_Binary, self, {\n operator: \"||\",\n left: condition,\n right: alternative.left\n }),\n right: consequent\n }).optimize(compressor);\n }\n // x?y?z:a:a --> x&&y?z:a\n if (consequent instanceof AST_Conditional\n && consequent.alternative.equivalent_to(alternative)) {\n return make_node(AST_Conditional, self, {\n condition: make_node(AST_Binary, self, {\n left: self.condition,\n operator: \"&&\",\n right: consequent.condition\n }),\n consequent: consequent.consequent,\n alternative: alternative\n });\n }\n // x ? y : y --> x, y\n if (consequent.equivalent_to(alternative)) {\n return make_sequence(self, [\n self.condition,\n consequent\n ]).optimize(compressor);\n }\n // x ? y || z : z --> x && y || z\n if (consequent instanceof AST_Binary\n && consequent.operator == \"||\"\n && consequent.right.equivalent_to(alternative)) {\n return make_node(AST_Binary, self, {\n operator: \"||\",\n left: make_node(AST_Binary, self, {\n operator: \"&&\",\n left: self.condition,\n right: consequent.left\n }),\n right: alternative\n }).optimize(compressor);\n }\n var in_bool = compressor.in_boolean_context();\n if (is_true(self.consequent)) {\n if (is_false(self.alternative)) {\n // c ? true : false ---> !!c\n return booleanize(self.condition);\n }\n // c ? true : x ---> !!c || x\n return make_node(AST_Binary, self, {\n operator: \"||\",\n left: booleanize(self.condition),\n right: self.alternative\n });\n }\n if (is_false(self.consequent)) {\n if (is_true(self.alternative)) {\n // c ? false : true ---> !c\n return booleanize(self.condition.negate(compressor));\n }\n // c ? false : x ---> !c && x\n return make_node(AST_Binary, self, {\n operator: \"&&\",\n left: booleanize(self.condition.negate(compressor)),\n right: self.alternative\n });\n }\n if (is_true(self.alternative)) {\n // c ? x : true ---> !c || x\n return make_node(AST_Binary, self, {\n operator: \"||\",\n left: booleanize(self.condition.negate(compressor)),\n right: self.consequent\n });\n }\n if (is_false(self.alternative)) {\n // c ? x : false ---> !!c && x\n return make_node(AST_Binary, self, {\n operator: \"&&\",\n left: booleanize(self.condition),\n right: self.consequent\n });\n }\n\n return self;\n\n function booleanize(node) {\n if (node.is_boolean()) return node;\n // !!expression\n return make_node(AST_UnaryPrefix, node, {\n operator: \"!\",\n expression: node.negate(compressor)\n });\n }\n\n // AST_True or !0\n function is_true(node) {\n return node instanceof AST_True\n || in_bool\n && node instanceof AST_Constant\n && node.getValue()\n || (node instanceof AST_UnaryPrefix\n && node.operator == \"!\"\n && node.expression instanceof AST_Constant\n && !node.expression.getValue());\n }\n // AST_False or !1\n function is_false(node) {\n return node instanceof AST_False\n || in_bool\n && node instanceof AST_Constant\n && !node.getValue()\n || (node instanceof AST_UnaryPrefix\n && node.operator == \"!\"\n && node.expression instanceof AST_Constant\n && node.expression.getValue());\n }\n\n function single_arg_diff() {\n var a = consequent.args;\n var b = alternative.args;\n for (var i = 0, len = a.length; i < len; i++) {\n if (a[i] instanceof AST_Expansion) return;\n if (!a[i].equivalent_to(b[i])) {\n if (b[i] instanceof AST_Expansion) return;\n for (var j = i + 1; j < len; j++) {\n if (a[j] instanceof AST_Expansion) return;\n if (!a[j].equivalent_to(b[j])) return;\n }\n return i;\n }\n }\n }\n});\n\ndef_optimize(AST_Boolean, function(self, compressor) {\n if (compressor.in_boolean_context()) return make_node(AST_Number, self, {\n value: +self.value\n });\n var p = compressor.parent();\n if (compressor.option(\"booleans_as_integers\")) {\n if (p instanceof AST_Binary && (p.operator == \"===\" || p.operator == \"!==\")) {\n p.operator = p.operator.replace(/=$/, \"\");\n }\n return make_node(AST_Number, self, {\n value: +self.value\n });\n }\n if (compressor.option(\"booleans\")) {\n if (p instanceof AST_Binary && (p.operator == \"==\"\n || p.operator == \"!=\")) {\n compressor.warn(\"Non-strict equality against boolean: {operator} {value} [{file}:{line},{col}]\", {\n operator : p.operator,\n value : self.value,\n file : p.start.file,\n line : p.start.line,\n col : p.start.col,\n });\n return make_node(AST_Number, self, {\n value: +self.value\n });\n }\n return make_node(AST_UnaryPrefix, self, {\n operator: \"!\",\n expression: make_node(AST_Number, self, {\n value: 1 - self.value\n })\n });\n }\n return self;\n});\n\nfunction safe_to_flatten(value, compressor) {\n if (value instanceof AST_SymbolRef) {\n value = value.fixed_value();\n }\n if (!value) return false;\n if (!(value instanceof AST_Lambda || value instanceof AST_Class)) return true;\n if (!(value instanceof AST_Lambda && value.contains_this())) return true;\n return compressor.parent() instanceof AST_New;\n}\n\ndef_optimize(AST_Sub, function(self, compressor) {\n var expr = self.expression;\n var prop = self.property;\n if (compressor.option(\"properties\")) {\n var key = prop.evaluate(compressor);\n if (key !== prop) {\n if (typeof key == \"string\") {\n if (key == \"undefined\") {\n key = undefined;\n } else {\n var value = parseFloat(key);\n if (value.toString() == key) {\n key = value;\n }\n }\n }\n prop = self.property = best_of_expression(prop, make_node_from_constant(key, prop).transform(compressor));\n var property = \"\" + key;\n if (is_basic_identifier_string(property)\n && property.length <= prop.size() + 1) {\n return make_node(AST_Dot, self, {\n expression: expr,\n property: property,\n quote: prop.quote,\n }).optimize(compressor);\n }\n }\n }\n var fn;\n OPT_ARGUMENTS: if (compressor.option(\"arguments\")\n && expr instanceof AST_SymbolRef\n && expr.name == \"arguments\"\n && expr.definition().orig.length == 1\n && (fn = expr.scope) instanceof AST_Lambda\n && fn.uses_arguments\n && !(fn instanceof AST_Arrow)\n && prop instanceof AST_Number) {\n var index = prop.getValue();\n var params = new Set();\n var argnames = fn.argnames;\n for (var n = 0; n < argnames.length; n++) {\n if (!(argnames[n] instanceof AST_SymbolFunarg)) {\n break OPT_ARGUMENTS; // destructuring parameter - bail\n }\n var param = argnames[n].name;\n if (params.has(param)) {\n break OPT_ARGUMENTS; // duplicate parameter - bail\n }\n params.add(param);\n }\n var argname = fn.argnames[index];\n if (argname && compressor.has_directive(\"use strict\")) {\n var def = argname.definition();\n if (!compressor.option(\"reduce_vars\") || def.assignments || def.orig.length > 1) {\n argname = null;\n }\n } else if (!argname && !compressor.option(\"keep_fargs\") && index < fn.argnames.length + 5) {\n while (index >= fn.argnames.length) {\n argname = make_node(AST_SymbolFunarg, fn, {\n name: fn.make_var_name(\"argument_\" + fn.argnames.length),\n scope: fn\n });\n fn.argnames.push(argname);\n fn.enclosed.push(fn.def_variable(argname));\n }\n }\n if (argname) {\n var sym = make_node(AST_SymbolRef, self, argname);\n sym.reference({});\n clear_flag(argname, UNUSED);\n return sym;\n }\n }\n if (is_lhs(self, compressor.parent())) return self;\n if (key !== prop) {\n var sub = self.flatten_object(property, compressor);\n if (sub) {\n expr = self.expression = sub.expression;\n prop = self.property = sub.property;\n }\n }\n if (compressor.option(\"properties\") && compressor.option(\"side_effects\")\n && prop instanceof AST_Number && expr instanceof AST_Array) {\n var index = prop.getValue();\n var elements = expr.elements;\n var retValue = elements[index];\n FLATTEN: if (safe_to_flatten(retValue, compressor)) {\n var flatten = true;\n var values = [];\n for (var i = elements.length; --i > index;) {\n var value = elements[i].drop_side_effect_free(compressor);\n if (value) {\n values.unshift(value);\n if (flatten && value.has_side_effects(compressor)) flatten = false;\n }\n }\n if (retValue instanceof AST_Expansion) break FLATTEN;\n retValue = retValue instanceof AST_Hole ? make_node(AST_Undefined, retValue) : retValue;\n if (!flatten) values.unshift(retValue);\n while (--i >= 0) {\n var value = elements[i];\n if (value instanceof AST_Expansion) break FLATTEN;\n value = value.drop_side_effect_free(compressor);\n if (value) values.unshift(value);\n else index--;\n }\n if (flatten) {\n values.push(retValue);\n return make_sequence(self, values).optimize(compressor);\n } else return make_node(AST_Sub, self, {\n expression: make_node(AST_Array, expr, {\n elements: values\n }),\n property: make_node(AST_Number, prop, {\n value: index\n })\n });\n }\n }\n var ev = self.evaluate(compressor);\n if (ev !== self) {\n ev = make_node_from_constant(ev, self).optimize(compressor);\n return best_of(compressor, ev, self);\n }\n return self;\n});\n\nAST_Lambda.DEFMETHOD(\"contains_this\", function() {\n return walk(this, node => {\n if (node instanceof AST_This) return walk_abort;\n if (\n node !== this\n && node instanceof AST_Scope\n && !(node instanceof AST_Arrow)\n ) {\n return true;\n }\n });\n});\n\nAST_PropAccess.DEFMETHOD(\"flatten_object\", function(key, compressor) {\n if (!compressor.option(\"properties\")) return;\n var arrows = compressor.option(\"unsafe_arrows\") && compressor.option(\"ecma\") >= 2015;\n var expr = this.expression;\n if (expr instanceof AST_Object) {\n var props = expr.properties;\n for (var i = props.length; --i >= 0;) {\n var prop = props[i];\n if (\"\" + (prop instanceof AST_ConciseMethod ? prop.key.name : prop.key) == key) {\n if (!props.every((prop) => {\n return prop instanceof AST_ObjectKeyVal\n || arrows && prop instanceof AST_ConciseMethod && !prop.is_generator;\n })) break;\n if (!safe_to_flatten(prop.value, compressor)) break;\n return make_node(AST_Sub, this, {\n expression: make_node(AST_Array, expr, {\n elements: props.map(function(prop) {\n var v = prop.value;\n if (v instanceof AST_Accessor) v = make_node(AST_Function, v, v);\n var k = prop.key;\n if (k instanceof AST_Node && !(k instanceof AST_SymbolMethod)) {\n return make_sequence(prop, [ k, v ]);\n }\n return v;\n })\n }),\n property: make_node(AST_Number, this, {\n value: i\n })\n });\n }\n }\n }\n});\n\ndef_optimize(AST_Dot, function(self, compressor) {\n if (self.property == \"arguments\" || self.property == \"caller\") {\n compressor.warn(\"Function.prototype.{prop} not supported [{file}:{line},{col}]\", {\n prop: self.property,\n file: self.start.file,\n line: self.start.line,\n col: self.start.col\n });\n }\n const parent = compressor.parent();\n if (is_lhs(self, parent)) return self;\n if (compressor.option(\"unsafe_proto\")\n && self.expression instanceof AST_Dot\n && self.expression.property == \"prototype\") {\n var exp = self.expression.expression;\n if (is_undeclared_ref(exp)) switch (exp.name) {\n case \"Array\":\n self.expression = make_node(AST_Array, self.expression, {\n elements: []\n });\n break;\n case \"Function\":\n self.expression = make_node(AST_Function, self.expression, {\n argnames: [],\n body: []\n });\n break;\n case \"Number\":\n self.expression = make_node(AST_Number, self.expression, {\n value: 0\n });\n break;\n case \"Object\":\n self.expression = make_node(AST_Object, self.expression, {\n properties: []\n });\n break;\n case \"RegExp\":\n self.expression = make_node(AST_RegExp, self.expression, {\n value: { source: \"t\", flags: \"\" }\n });\n break;\n case \"String\":\n self.expression = make_node(AST_String, self.expression, {\n value: \"\"\n });\n break;\n }\n }\n if (!(parent instanceof AST_Call) || !has_annotation(parent, _NOINLINE)) {\n const sub = self.flatten_object(self.property, compressor);\n if (sub) return sub.optimize(compressor);\n }\n let ev = self.evaluate(compressor);\n if (ev !== self) {\n ev = make_node_from_constant(ev, self).optimize(compressor);\n return best_of(compressor, ev, self);\n }\n return self;\n});\n\nfunction literals_in_boolean_context(self, compressor) {\n if (compressor.in_boolean_context()) {\n return best_of(compressor, self, make_sequence(self, [\n self,\n make_node(AST_True, self)\n ]).optimize(compressor));\n }\n return self;\n}\n\nfunction inline_array_like_spread(self, compressor, elements) {\n for (var i = 0; i < elements.length; i++) {\n var el = elements[i];\n if (el instanceof AST_Expansion) {\n var expr = el.expression;\n if ( expr instanceof AST_Array) {\n elements.splice(i, 1, ...expr.elements);\n // Step back one, as the element at i is now new.\n i--;\n }\n // In array-like spread, spreading a non-iterable value is TypeError.\n // We therefore can’t optimize anything else, unlike with object spread.\n }\n }\n return self;\n}\n\ndef_optimize(AST_Array, function(self, compressor) {\n var optimized = literals_in_boolean_context(self, compressor);\n if (optimized !== self) {\n return optimized;\n }\n return inline_array_like_spread(self, compressor, self.elements);\n});\n\ndef_optimize(AST_Object, function(self, compressor) {\n var optimized = literals_in_boolean_context(self, compressor);\n if (optimized !== self) {\n return optimized;\n }\n var props = self.properties;\n for (var i = 0; i < props.length; i++) {\n var prop = props[i];\n if (prop instanceof AST_Expansion) {\n var expr = prop.expression;\n if (expr instanceof AST_Object) {\n props.splice.apply(props, [i, 1].concat(prop.expression.properties));\n // Step back one, as the property at i is now new.\n i--;\n } else if (expr instanceof AST_Constant\n && !(expr instanceof AST_String)) {\n // Unlike array-like spread, in object spread, spreading a\n // non-iterable value silently does nothing; it is thus safe\n // to remove. AST_String is the only iterable AST_Constant.\n props.splice(i, 1);\n }\n }\n }\n return self;\n});\n\ndef_optimize(AST_RegExp, literals_in_boolean_context);\n\ndef_optimize(AST_Return, function(self, compressor) {\n if (self.value && is_undefined(self.value, compressor)) {\n self.value = null;\n }\n return self;\n});\n\ndef_optimize(AST_Arrow, opt_AST_Lambda);\n\ndef_optimize(AST_Function, function(self, compressor) {\n self = opt_AST_Lambda(self, compressor);\n if (compressor.option(\"unsafe_arrows\")\n && compressor.option(\"ecma\") >= 2015\n && !self.name\n && !self.is_generator\n && !self.uses_arguments\n && !self.pinned()) {\n const has_special_symbol = walk(self, node => {\n if (node instanceof AST_This) return walk_abort;\n });\n if (!has_special_symbol) return make_node(AST_Arrow, self, self).optimize(compressor);\n }\n return self;\n});\n\ndef_optimize(AST_Class, function(self) {\n // HACK to avoid compress failure.\n // AST_Class is not really an AST_Scope/AST_Block as it lacks a body.\n return self;\n});\n\ndef_optimize(AST_Yield, function(self, compressor) {\n if (self.expression && !self.is_star && is_undefined(self.expression, compressor)) {\n self.expression = null;\n }\n return self;\n});\n\ndef_optimize(AST_TemplateString, function(self, compressor) {\n if (!compressor.option(\"evaluate\")\n || compressor.parent() instanceof AST_PrefixedTemplateString)\n return self;\n\n var segments = [];\n for (var i = 0; i < self.segments.length; i++) {\n var segment = self.segments[i];\n if (segment instanceof AST_Node) {\n var result = segment.evaluate(compressor);\n // Evaluate to constant value\n // Constant value shorter than ${segment}\n if (result !== segment && (result + \"\").length <= segment.size() + \"${}\".length) {\n // There should always be a previous and next segment if segment is a node\n segments[segments.length - 1].value = segments[segments.length - 1].value + result + self.segments[++i].value;\n continue;\n }\n // `before ${`innerBefore ${any} innerAfter`} after` => `before innerBefore ${any} innerAfter after`\n // TODO:\n // `before ${'test' + foo} after` => `before innerBefore ${any} innerAfter after`\n // `before ${foo + 'test} after` => `before innerBefore ${any} innerAfter after`\n if (segment instanceof AST_TemplateString) {\n var inners = segment.segments;\n segments[segments.length - 1].value += inners[0].value;\n for (var j = 1; j < inners.length; j++) {\n segment = inners[j];\n segments.push(segment);\n }\n continue;\n }\n }\n segments.push(segment);\n }\n self.segments = segments;\n\n // `foo` => \"foo\"\n if (segments.length == 1) {\n return make_node(AST_String, self, segments[0]);\n }\n if (segments.length === 3 && segments[1] instanceof AST_Node) {\n // `foo${bar}` => \"foo\" + bar\n if (segments[2].value === \"\") {\n return make_node(AST_Binary, self, {\n operator: \"+\",\n left: make_node(AST_String, self, {\n value: segments[0].value,\n }),\n right: segments[1],\n });\n }\n // `{bar}baz` => bar + \"baz\"\n if (segments[0].value === \"\") {\n return make_node(AST_Binary, self, {\n operator: \"+\",\n left: segments[1],\n right: make_node(AST_String, self, {\n value: segments[2].value,\n }),\n });\n }\n }\n return self;\n});\n\ndef_optimize(AST_PrefixedTemplateString, function(self) {\n return self;\n});\n\n// [\"p\"]:1 ---> p:1\n// [42]:1 ---> 42:1\nfunction lift_key(self, compressor) {\n if (!compressor.option(\"computed_props\")) return self;\n // save a comparison in the typical case\n if (!(self.key instanceof AST_Constant)) return self;\n // whitelist acceptable props as not all AST_Constants are true constants\n if (self.key instanceof AST_String || self.key instanceof AST_Number) {\n if (self.key.value === \"__proto__\") return self;\n if (self.key.value == \"constructor\"\n && compressor.parent() instanceof AST_Class) return self;\n if (self instanceof AST_ObjectKeyVal) {\n self.key = self.key.value;\n } else if (self instanceof AST_ClassProperty) {\n self.key = make_node(AST_SymbolClassProperty, self.key, {\n name: self.key.value\n });\n } else {\n self.key = make_node(AST_SymbolMethod, self.key, {\n name: self.key.value\n });\n }\n }\n return self;\n}\n\ndef_optimize(AST_ObjectProperty, lift_key);\n\ndef_optimize(AST_ConciseMethod, function(self, compressor) {\n lift_key(self, compressor);\n // p(){return x;} ---> p:()=>x\n if (compressor.option(\"arrows\")\n && compressor.parent() instanceof AST_Object\n && !self.is_generator\n && !self.value.uses_arguments\n && !self.value.pinned()\n && self.value.body.length == 1\n && self.value.body[0] instanceof AST_Return\n && self.value.body[0].value\n && !self.value.contains_this()) {\n var arrow = make_node(AST_Arrow, self.value, self.value);\n arrow.async = self.async;\n arrow.is_generator = self.is_generator;\n return make_node(AST_ObjectKeyVal, self, {\n key: self.key instanceof AST_SymbolMethod ? self.key.name : self.key,\n value: arrow,\n quote: self.quote,\n });\n }\n return self;\n});\n\ndef_optimize(AST_ObjectKeyVal, function(self, compressor) {\n lift_key(self, compressor);\n // p:function(){} ---> p(){}\n // p:function*(){} ---> *p(){}\n // p:async function(){} ---> async p(){}\n // p:()=>{} ---> p(){}\n // p:async()=>{} ---> async p(){}\n var unsafe_methods = compressor.option(\"unsafe_methods\");\n if (unsafe_methods\n && compressor.option(\"ecma\") >= 2015\n && (!(unsafe_methods instanceof RegExp) || unsafe_methods.test(self.key + \"\"))) {\n var key = self.key;\n var value = self.value;\n var is_arrow_with_block = value instanceof AST_Arrow\n && Array.isArray(value.body)\n && !value.contains_this();\n if ((is_arrow_with_block || value instanceof AST_Function) && !value.name) {\n return make_node(AST_ConciseMethod, self, {\n async: value.async,\n is_generator: value.is_generator,\n key: key instanceof AST_Node ? key : make_node(AST_SymbolMethod, self, {\n name: key,\n }),\n value: make_node(AST_Accessor, value, value),\n quote: self.quote,\n });\n }\n }\n return self;\n});\n\ndef_optimize(AST_Destructuring, function(self, compressor) {\n if (compressor.option(\"pure_getters\") == true\n && compressor.option(\"unused\")\n && !self.is_array\n && Array.isArray(self.names)\n && !is_destructuring_export_decl(compressor)) {\n var keep = [];\n for (var i = 0; i < self.names.length; i++) {\n var elem = self.names[i];\n if (!(elem instanceof AST_ObjectKeyVal\n && typeof elem.key == \"string\"\n && elem.value instanceof AST_SymbolDeclaration\n && !should_retain(compressor, elem.value.definition()))) {\n keep.push(elem);\n }\n }\n if (keep.length != self.names.length) {\n self.names = keep;\n }\n }\n return self;\n\n function is_destructuring_export_decl(compressor) {\n var ancestors = [/^VarDef$/, /^(Const|Let|Var)$/, /^Export$/];\n for (var a = 0, p = 0, len = ancestors.length; a < len; p++) {\n var parent = compressor.parent(p);\n if (!parent) return false;\n if (a === 0 && parent.TYPE == \"Destructuring\") continue;\n if (!ancestors[a].test(parent.TYPE)) {\n return false;\n }\n a++;\n }\n return true;\n }\n\n function should_retain(compressor, def) {\n if (def.references.length) return true;\n if (!def.global) return false;\n if (compressor.toplevel.vars) {\n if (compressor.top_retain) {\n return compressor.top_retain(def);\n }\n return false;\n }\n return true;\n }\n});\n\nexport {\n Compressor,\n};\n","export var domprops = [\n \"$&\",\n \"$'\",\n \"$*\",\n \"$+\",\n \"$1\",\n \"$2\",\n \"$3\",\n \"$4\",\n \"$5\",\n \"$6\",\n \"$7\",\n \"$8\",\n \"$9\",\n \"$_\",\n \"$`\",\n \"$input\",\n \"@@iterator\",\n \"ABORT_ERR\",\n \"ACTIVE\",\n \"ACTIVE_ATTRIBUTES\",\n \"ACTIVE_TEXTURE\",\n \"ACTIVE_UNIFORMS\",\n \"ADDITION\",\n \"ALIASED_LINE_WIDTH_RANGE\",\n \"ALIASED_POINT_SIZE_RANGE\",\n \"ALLOW_KEYBOARD_INPUT\",\n \"ALLPASS\",\n \"ALPHA\",\n \"ALPHA_BITS\",\n \"ALT_MASK\",\n \"ALWAYS\",\n \"ANY_TYPE\",\n \"ANY_UNORDERED_NODE_TYPE\",\n \"ARRAY_BUFFER\",\n \"ARRAY_BUFFER_BINDING\",\n \"ATTACHED_SHADERS\",\n \"ATTRIBUTE_NODE\",\n \"AT_TARGET\",\n \"AddSearchProvider\",\n \"AnalyserNode\",\n \"AnimationEvent\",\n \"AnonXMLHttpRequest\",\n \"ApplicationCache\",\n \"ApplicationCacheErrorEvent\",\n \"Array\",\n \"ArrayBuffer\",\n \"Attr\",\n \"Audio\",\n \"AudioBuffer\",\n \"AudioBufferSourceNode\",\n \"AudioContext\",\n \"AudioDestinationNode\",\n \"AudioListener\",\n \"AudioNode\",\n \"AudioParam\",\n \"AudioProcessingEvent\",\n \"AudioStreamTrack\",\n \"AutocompleteErrorEvent\",\n \"BACK\",\n \"BAD_BOUNDARYPOINTS_ERR\",\n \"BANDPASS\",\n \"BLEND\",\n \"BLEND_COLOR\",\n \"BLEND_DST_ALPHA\",\n \"BLEND_DST_RGB\",\n \"BLEND_EQUATION\",\n \"BLEND_EQUATION_ALPHA\",\n \"BLEND_EQUATION_RGB\",\n \"BLEND_SRC_ALPHA\",\n \"BLEND_SRC_RGB\",\n \"BLUE_BITS\",\n \"BLUR\",\n \"BOOL\",\n \"BOOLEAN_TYPE\",\n \"BOOL_VEC2\",\n \"BOOL_VEC3\",\n \"BOOL_VEC4\",\n \"BOTH\",\n \"BROWSER_DEFAULT_WEBGL\",\n \"BUBBLING_PHASE\",\n \"BUFFER_SIZE\",\n \"BUFFER_USAGE\",\n \"BYTE\",\n \"BYTES_PER_ELEMENT\",\n \"BarProp\",\n \"BaseHref\",\n \"BatteryManager\",\n \"BeforeLoadEvent\",\n \"BeforeUnloadEvent\",\n \"BiquadFilterNode\",\n \"Blob\",\n \"BlobEvent\",\n \"Boolean\",\n \"CAPTURING_PHASE\",\n \"CCW\",\n \"CDATASection\",\n \"CDATA_SECTION_NODE\",\n \"CHANGE\",\n \"CHARSET_RULE\",\n \"CHECKING\",\n \"CLAMP_TO_EDGE\",\n \"CLICK\",\n \"CLOSED\",\n \"CLOSING\",\n \"COLOR_ATTACHMENT0\",\n \"COLOR_BUFFER_BIT\",\n \"COLOR_CLEAR_VALUE\",\n \"COLOR_WRITEMASK\",\n \"COMMENT_NODE\",\n \"COMPILE_STATUS\",\n \"COMPRESSED_RGBA_S3TC_DXT1_EXT\",\n \"COMPRESSED_RGBA_S3TC_DXT3_EXT\",\n \"COMPRESSED_RGBA_S3TC_DXT5_EXT\",\n \"COMPRESSED_RGB_S3TC_DXT1_EXT\",\n \"COMPRESSED_TEXTURE_FORMATS\",\n \"CONNECTING\",\n \"CONSTANT_ALPHA\",\n \"CONSTANT_COLOR\",\n \"CONSTRAINT_ERR\",\n \"CONTEXT_LOST_WEBGL\",\n \"CONTROL_MASK\",\n \"COUNTER_STYLE_RULE\",\n \"CSS\",\n \"CSS2Properties\",\n \"CSSCharsetRule\",\n \"CSSConditionRule\",\n \"CSSCounterStyleRule\",\n \"CSSFontFaceRule\",\n \"CSSFontFeatureValuesRule\",\n \"CSSGroupingRule\",\n \"CSSImportRule\",\n \"CSSKeyframeRule\",\n \"CSSKeyframesRule\",\n \"CSSMediaRule\",\n \"CSSMozDocumentRule\",\n \"CSSNameSpaceRule\",\n \"CSSPageRule\",\n \"CSSPrimitiveValue\",\n \"CSSRule\",\n \"CSSRuleList\",\n \"CSSStyleDeclaration\",\n \"CSSStyleRule\",\n \"CSSStyleSheet\",\n \"CSSSupportsRule\",\n \"CSSUnknownRule\",\n \"CSSValue\",\n \"CSSValueList\",\n \"CSSVariablesDeclaration\",\n \"CSSVariablesRule\",\n \"CSSViewportRule\",\n \"CSS_ATTR\",\n \"CSS_CM\",\n \"CSS_COUNTER\",\n \"CSS_CUSTOM\",\n \"CSS_DEG\",\n \"CSS_DIMENSION\",\n \"CSS_EMS\",\n \"CSS_EXS\",\n \"CSS_FILTER_BLUR\",\n \"CSS_FILTER_BRIGHTNESS\",\n \"CSS_FILTER_CONTRAST\",\n \"CSS_FILTER_CUSTOM\",\n \"CSS_FILTER_DROP_SHADOW\",\n \"CSS_FILTER_GRAYSCALE\",\n \"CSS_FILTER_HUE_ROTATE\",\n \"CSS_FILTER_INVERT\",\n \"CSS_FILTER_OPACITY\",\n \"CSS_FILTER_REFERENCE\",\n \"CSS_FILTER_SATURATE\",\n \"CSS_FILTER_SEPIA\",\n \"CSS_GRAD\",\n \"CSS_HZ\",\n \"CSS_IDENT\",\n \"CSS_IN\",\n \"CSS_INHERIT\",\n \"CSS_KHZ\",\n \"CSS_MATRIX\",\n \"CSS_MATRIX3D\",\n \"CSS_MM\",\n \"CSS_MS\",\n \"CSS_NUMBER\",\n \"CSS_PC\",\n \"CSS_PERCENTAGE\",\n \"CSS_PERSPECTIVE\",\n \"CSS_PRIMITIVE_VALUE\",\n \"CSS_PT\",\n \"CSS_PX\",\n \"CSS_RAD\",\n \"CSS_RECT\",\n \"CSS_RGBCOLOR\",\n \"CSS_ROTATE\",\n \"CSS_ROTATE3D\",\n \"CSS_ROTATEX\",\n \"CSS_ROTATEY\",\n \"CSS_ROTATEZ\",\n \"CSS_S\",\n \"CSS_SCALE\",\n \"CSS_SCALE3D\",\n \"CSS_SCALEX\",\n \"CSS_SCALEY\",\n \"CSS_SCALEZ\",\n \"CSS_SKEW\",\n \"CSS_SKEWX\",\n \"CSS_SKEWY\",\n \"CSS_STRING\",\n \"CSS_TRANSLATE\",\n \"CSS_TRANSLATE3D\",\n \"CSS_TRANSLATEX\",\n \"CSS_TRANSLATEY\",\n \"CSS_TRANSLATEZ\",\n \"CSS_UNKNOWN\",\n \"CSS_URI\",\n \"CSS_VALUE_LIST\",\n \"CSS_VH\",\n \"CSS_VMAX\",\n \"CSS_VMIN\",\n \"CSS_VW\",\n \"CULL_FACE\",\n \"CULL_FACE_MODE\",\n \"CURRENT_PROGRAM\",\n \"CURRENT_VERTEX_ATTRIB\",\n \"CUSTOM\",\n \"CW\",\n \"CanvasGradient\",\n \"CanvasPattern\",\n \"CanvasRenderingContext2D\",\n \"CaretPosition\",\n \"ChannelMergerNode\",\n \"ChannelSplitterNode\",\n \"CharacterData\",\n \"ClientRect\",\n \"ClientRectList\",\n \"Clipboard\",\n \"ClipboardEvent\",\n \"CloseEvent\",\n \"Collator\",\n \"CommandEvent\",\n \"Comment\",\n \"CompositionEvent\",\n \"Console\",\n \"Controllers\",\n \"ConvolverNode\",\n \"Counter\",\n \"Crypto\",\n \"CryptoKey\",\n \"CustomEvent\",\n \"DATABASE_ERR\",\n \"DATA_CLONE_ERR\",\n \"DATA_ERR\",\n \"DBLCLICK\",\n \"DECR\",\n \"DECR_WRAP\",\n \"DELETE_STATUS\",\n \"DEPTH_ATTACHMENT\",\n \"DEPTH_BITS\",\n \"DEPTH_BUFFER_BIT\",\n \"DEPTH_CLEAR_VALUE\",\n \"DEPTH_COMPONENT\",\n \"DEPTH_COMPONENT16\",\n \"DEPTH_FUNC\",\n \"DEPTH_RANGE\",\n \"DEPTH_STENCIL\",\n \"DEPTH_STENCIL_ATTACHMENT\",\n \"DEPTH_TEST\",\n \"DEPTH_WRITEMASK\",\n \"DIRECTION_DOWN\",\n \"DIRECTION_LEFT\",\n \"DIRECTION_RIGHT\",\n \"DIRECTION_UP\",\n \"DISABLED\",\n \"DISPATCH_REQUEST_ERR\",\n \"DITHER\",\n \"DOCUMENT_FRAGMENT_NODE\",\n \"DOCUMENT_NODE\",\n \"DOCUMENT_POSITION_CONTAINED_BY\",\n \"DOCUMENT_POSITION_CONTAINS\",\n \"DOCUMENT_POSITION_DISCONNECTED\",\n \"DOCUMENT_POSITION_FOLLOWING\",\n \"DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC\",\n \"DOCUMENT_POSITION_PRECEDING\",\n \"DOCUMENT_TYPE_NODE\",\n \"DOMCursor\",\n \"DOMError\",\n \"DOMException\",\n \"DOMImplementation\",\n \"DOMImplementationLS\",\n \"DOMMatrix\",\n \"DOMMatrixReadOnly\",\n \"DOMParser\",\n \"DOMPoint\",\n \"DOMPointReadOnly\",\n \"DOMQuad\",\n \"DOMRect\",\n \"DOMRectList\",\n \"DOMRectReadOnly\",\n \"DOMRequest\",\n \"DOMSTRING_SIZE_ERR\",\n \"DOMSettableTokenList\",\n \"DOMStringList\",\n \"DOMStringMap\",\n \"DOMTokenList\",\n \"DOMTransactionEvent\",\n \"DOM_DELTA_LINE\",\n \"DOM_DELTA_PAGE\",\n \"DOM_DELTA_PIXEL\",\n \"DOM_INPUT_METHOD_DROP\",\n \"DOM_INPUT_METHOD_HANDWRITING\",\n \"DOM_INPUT_METHOD_IME\",\n \"DOM_INPUT_METHOD_KEYBOARD\",\n \"DOM_INPUT_METHOD_MULTIMODAL\",\n \"DOM_INPUT_METHOD_OPTION\",\n \"DOM_INPUT_METHOD_PASTE\",\n \"DOM_INPUT_METHOD_SCRIPT\",\n \"DOM_INPUT_METHOD_UNKNOWN\",\n \"DOM_INPUT_METHOD_VOICE\",\n \"DOM_KEY_LOCATION_JOYSTICK\",\n \"DOM_KEY_LOCATION_LEFT\",\n \"DOM_KEY_LOCATION_MOBILE\",\n \"DOM_KEY_LOCATION_NUMPAD\",\n \"DOM_KEY_LOCATION_RIGHT\",\n \"DOM_KEY_LOCATION_STANDARD\",\n \"DOM_VK_0\",\n \"DOM_VK_1\",\n \"DOM_VK_2\",\n \"DOM_VK_3\",\n \"DOM_VK_4\",\n \"DOM_VK_5\",\n \"DOM_VK_6\",\n \"DOM_VK_7\",\n \"DOM_VK_8\",\n \"DOM_VK_9\",\n \"DOM_VK_A\",\n \"DOM_VK_ACCEPT\",\n \"DOM_VK_ADD\",\n \"DOM_VK_ALT\",\n \"DOM_VK_ALTGR\",\n \"DOM_VK_AMPERSAND\",\n \"DOM_VK_ASTERISK\",\n \"DOM_VK_AT\",\n \"DOM_VK_ATTN\",\n \"DOM_VK_B\",\n \"DOM_VK_BACKSPACE\",\n \"DOM_VK_BACK_QUOTE\",\n \"DOM_VK_BACK_SLASH\",\n \"DOM_VK_BACK_SPACE\",\n \"DOM_VK_C\",\n \"DOM_VK_CANCEL\",\n \"DOM_VK_CAPS_LOCK\",\n \"DOM_VK_CIRCUMFLEX\",\n \"DOM_VK_CLEAR\",\n \"DOM_VK_CLOSE_BRACKET\",\n \"DOM_VK_CLOSE_CURLY_BRACKET\",\n \"DOM_VK_CLOSE_PAREN\",\n \"DOM_VK_COLON\",\n \"DOM_VK_COMMA\",\n \"DOM_VK_CONTEXT_MENU\",\n \"DOM_VK_CONTROL\",\n \"DOM_VK_CONVERT\",\n \"DOM_VK_CRSEL\",\n \"DOM_VK_CTRL\",\n \"DOM_VK_D\",\n \"DOM_VK_DECIMAL\",\n \"DOM_VK_DELETE\",\n \"DOM_VK_DIVIDE\",\n \"DOM_VK_DOLLAR\",\n \"DOM_VK_DOUBLE_QUOTE\",\n \"DOM_VK_DOWN\",\n \"DOM_VK_E\",\n \"DOM_VK_EISU\",\n \"DOM_VK_END\",\n \"DOM_VK_ENTER\",\n \"DOM_VK_EQUALS\",\n \"DOM_VK_EREOF\",\n \"DOM_VK_ESCAPE\",\n \"DOM_VK_EXCLAMATION\",\n \"DOM_VK_EXECUTE\",\n \"DOM_VK_EXSEL\",\n \"DOM_VK_F\",\n \"DOM_VK_F1\",\n \"DOM_VK_F10\",\n \"DOM_VK_F11\",\n \"DOM_VK_F12\",\n \"DOM_VK_F13\",\n \"DOM_VK_F14\",\n \"DOM_VK_F15\",\n \"DOM_VK_F16\",\n \"DOM_VK_F17\",\n \"DOM_VK_F18\",\n \"DOM_VK_F19\",\n \"DOM_VK_F2\",\n \"DOM_VK_F20\",\n \"DOM_VK_F21\",\n \"DOM_VK_F22\",\n \"DOM_VK_F23\",\n \"DOM_VK_F24\",\n \"DOM_VK_F25\",\n \"DOM_VK_F26\",\n \"DOM_VK_F27\",\n \"DOM_VK_F28\",\n \"DOM_VK_F29\",\n \"DOM_VK_F3\",\n \"DOM_VK_F30\",\n \"DOM_VK_F31\",\n \"DOM_VK_F32\",\n \"DOM_VK_F33\",\n \"DOM_VK_F34\",\n \"DOM_VK_F35\",\n \"DOM_VK_F36\",\n \"DOM_VK_F4\",\n \"DOM_VK_F5\",\n \"DOM_VK_F6\",\n \"DOM_VK_F7\",\n \"DOM_VK_F8\",\n \"DOM_VK_F9\",\n \"DOM_VK_FINAL\",\n \"DOM_VK_FRONT\",\n \"DOM_VK_G\",\n \"DOM_VK_GREATER_THAN\",\n \"DOM_VK_H\",\n \"DOM_VK_HANGUL\",\n \"DOM_VK_HANJA\",\n \"DOM_VK_HASH\",\n \"DOM_VK_HELP\",\n \"DOM_VK_HK_TOGGLE\",\n \"DOM_VK_HOME\",\n \"DOM_VK_HYPHEN_MINUS\",\n \"DOM_VK_I\",\n \"DOM_VK_INSERT\",\n \"DOM_VK_J\",\n \"DOM_VK_JUNJA\",\n \"DOM_VK_K\",\n \"DOM_VK_KANA\",\n \"DOM_VK_KANJI\",\n \"DOM_VK_L\",\n \"DOM_VK_LEFT\",\n \"DOM_VK_LEFT_TAB\",\n \"DOM_VK_LESS_THAN\",\n \"DOM_VK_M\",\n \"DOM_VK_META\",\n \"DOM_VK_MODECHANGE\",\n \"DOM_VK_MULTIPLY\",\n \"DOM_VK_N\",\n \"DOM_VK_NONCONVERT\",\n \"DOM_VK_NUMPAD0\",\n \"DOM_VK_NUMPAD1\",\n \"DOM_VK_NUMPAD2\",\n \"DOM_VK_NUMPAD3\",\n \"DOM_VK_NUMPAD4\",\n \"DOM_VK_NUMPAD5\",\n \"DOM_VK_NUMPAD6\",\n \"DOM_VK_NUMPAD7\",\n \"DOM_VK_NUMPAD8\",\n \"DOM_VK_NUMPAD9\",\n \"DOM_VK_NUM_LOCK\",\n \"DOM_VK_O\",\n \"DOM_VK_OEM_1\",\n \"DOM_VK_OEM_102\",\n \"DOM_VK_OEM_2\",\n \"DOM_VK_OEM_3\",\n \"DOM_VK_OEM_4\",\n \"DOM_VK_OEM_5\",\n \"DOM_VK_OEM_6\",\n \"DOM_VK_OEM_7\",\n \"DOM_VK_OEM_8\",\n \"DOM_VK_OEM_COMMA\",\n \"DOM_VK_OEM_MINUS\",\n \"DOM_VK_OEM_PERIOD\",\n \"DOM_VK_OEM_PLUS\",\n \"DOM_VK_OPEN_BRACKET\",\n \"DOM_VK_OPEN_CURLY_BRACKET\",\n \"DOM_VK_OPEN_PAREN\",\n \"DOM_VK_P\",\n \"DOM_VK_PA1\",\n \"DOM_VK_PAGEDOWN\",\n \"DOM_VK_PAGEUP\",\n \"DOM_VK_PAGE_DOWN\",\n \"DOM_VK_PAGE_UP\",\n \"DOM_VK_PAUSE\",\n \"DOM_VK_PERCENT\",\n \"DOM_VK_PERIOD\",\n \"DOM_VK_PIPE\",\n \"DOM_VK_PLAY\",\n \"DOM_VK_PLUS\",\n \"DOM_VK_PRINT\",\n \"DOM_VK_PRINTSCREEN\",\n \"DOM_VK_PROCESSKEY\",\n \"DOM_VK_PROPERITES\",\n \"DOM_VK_Q\",\n \"DOM_VK_QUESTION_MARK\",\n \"DOM_VK_QUOTE\",\n \"DOM_VK_R\",\n \"DOM_VK_REDO\",\n \"DOM_VK_RETURN\",\n \"DOM_VK_RIGHT\",\n \"DOM_VK_S\",\n \"DOM_VK_SCROLL_LOCK\",\n \"DOM_VK_SELECT\",\n \"DOM_VK_SEMICOLON\",\n \"DOM_VK_SEPARATOR\",\n \"DOM_VK_SHIFT\",\n \"DOM_VK_SLASH\",\n \"DOM_VK_SLEEP\",\n \"DOM_VK_SPACE\",\n \"DOM_VK_SUBTRACT\",\n \"DOM_VK_T\",\n \"DOM_VK_TAB\",\n \"DOM_VK_TILDE\",\n \"DOM_VK_U\",\n \"DOM_VK_UNDERSCORE\",\n \"DOM_VK_UNDO\",\n \"DOM_VK_UNICODE\",\n \"DOM_VK_UP\",\n \"DOM_VK_V\",\n \"DOM_VK_VOLUME_DOWN\",\n \"DOM_VK_VOLUME_MUTE\",\n \"DOM_VK_VOLUME_UP\",\n \"DOM_VK_W\",\n \"DOM_VK_WIN\",\n \"DOM_VK_WINDOW\",\n \"DOM_VK_WIN_ICO_00\",\n \"DOM_VK_WIN_ICO_CLEAR\",\n \"DOM_VK_WIN_ICO_HELP\",\n \"DOM_VK_WIN_OEM_ATTN\",\n \"DOM_VK_WIN_OEM_AUTO\",\n \"DOM_VK_WIN_OEM_BACKTAB\",\n \"DOM_VK_WIN_OEM_CLEAR\",\n \"DOM_VK_WIN_OEM_COPY\",\n \"DOM_VK_WIN_OEM_CUSEL\",\n \"DOM_VK_WIN_OEM_ENLW\",\n \"DOM_VK_WIN_OEM_FINISH\",\n \"DOM_VK_WIN_OEM_FJ_JISHO\",\n \"DOM_VK_WIN_OEM_FJ_LOYA\",\n \"DOM_VK_WIN_OEM_FJ_MASSHOU\",\n \"DOM_VK_WIN_OEM_FJ_ROYA\",\n \"DOM_VK_WIN_OEM_FJ_TOUROKU\",\n \"DOM_VK_WIN_OEM_JUMP\",\n \"DOM_VK_WIN_OEM_PA1\",\n \"DOM_VK_WIN_OEM_PA2\",\n \"DOM_VK_WIN_OEM_PA3\",\n \"DOM_VK_WIN_OEM_RESET\",\n \"DOM_VK_WIN_OEM_WSCTRL\",\n \"DOM_VK_X\",\n \"DOM_VK_XF86XK_ADD_FAVORITE\",\n \"DOM_VK_XF86XK_APPLICATION_LEFT\",\n \"DOM_VK_XF86XK_APPLICATION_RIGHT\",\n \"DOM_VK_XF86XK_AUDIO_CYCLE_TRACK\",\n \"DOM_VK_XF86XK_AUDIO_FORWARD\",\n \"DOM_VK_XF86XK_AUDIO_LOWER_VOLUME\",\n \"DOM_VK_XF86XK_AUDIO_MEDIA\",\n \"DOM_VK_XF86XK_AUDIO_MUTE\",\n \"DOM_VK_XF86XK_AUDIO_NEXT\",\n \"DOM_VK_XF86XK_AUDIO_PAUSE\",\n \"DOM_VK_XF86XK_AUDIO_PLAY\",\n \"DOM_VK_XF86XK_AUDIO_PREV\",\n \"DOM_VK_XF86XK_AUDIO_RAISE_VOLUME\",\n \"DOM_VK_XF86XK_AUDIO_RANDOM_PLAY\",\n \"DOM_VK_XF86XK_AUDIO_RECORD\",\n \"DOM_VK_XF86XK_AUDIO_REPEAT\",\n \"DOM_VK_XF86XK_AUDIO_REWIND\",\n \"DOM_VK_XF86XK_AUDIO_STOP\",\n \"DOM_VK_XF86XK_AWAY\",\n \"DOM_VK_XF86XK_BACK\",\n \"DOM_VK_XF86XK_BACK_FORWARD\",\n \"DOM_VK_XF86XK_BATTERY\",\n \"DOM_VK_XF86XK_BLUE\",\n \"DOM_VK_XF86XK_BLUETOOTH\",\n \"DOM_VK_XF86XK_BOOK\",\n \"DOM_VK_XF86XK_BRIGHTNESS_ADJUST\",\n \"DOM_VK_XF86XK_CALCULATOR\",\n \"DOM_VK_XF86XK_CALENDAR\",\n \"DOM_VK_XF86XK_CD\",\n \"DOM_VK_XF86XK_CLOSE\",\n \"DOM_VK_XF86XK_COMMUNITY\",\n \"DOM_VK_XF86XK_CONTRAST_ADJUST\",\n \"DOM_VK_XF86XK_COPY\",\n \"DOM_VK_XF86XK_CUT\",\n \"DOM_VK_XF86XK_CYCLE_ANGLE\",\n \"DOM_VK_XF86XK_DISPLAY\",\n \"DOM_VK_XF86XK_DOCUMENTS\",\n \"DOM_VK_XF86XK_DOS\",\n \"DOM_VK_XF86XK_EJECT\",\n \"DOM_VK_XF86XK_EXCEL\",\n \"DOM_VK_XF86XK_EXPLORER\",\n \"DOM_VK_XF86XK_FAVORITES\",\n \"DOM_VK_XF86XK_FINANCE\",\n \"DOM_VK_XF86XK_FORWARD\",\n \"DOM_VK_XF86XK_FRAME_BACK\",\n \"DOM_VK_XF86XK_FRAME_FORWARD\",\n \"DOM_VK_XF86XK_GAME\",\n \"DOM_VK_XF86XK_GO\",\n \"DOM_VK_XF86XK_GREEN\",\n \"DOM_VK_XF86XK_HIBERNATE\",\n \"DOM_VK_XF86XK_HISTORY\",\n \"DOM_VK_XF86XK_HOME_PAGE\",\n \"DOM_VK_XF86XK_HOT_LINKS\",\n \"DOM_VK_XF86XK_I_TOUCH\",\n \"DOM_VK_XF86XK_KBD_BRIGHTNESS_DOWN\",\n \"DOM_VK_XF86XK_KBD_BRIGHTNESS_UP\",\n \"DOM_VK_XF86XK_KBD_LIGHT_ON_OFF\",\n \"DOM_VK_XF86XK_LAUNCH0\",\n \"DOM_VK_XF86XK_LAUNCH1\",\n \"DOM_VK_XF86XK_LAUNCH2\",\n \"DOM_VK_XF86XK_LAUNCH3\",\n \"DOM_VK_XF86XK_LAUNCH4\",\n \"DOM_VK_XF86XK_LAUNCH5\",\n \"DOM_VK_XF86XK_LAUNCH6\",\n \"DOM_VK_XF86XK_LAUNCH7\",\n \"DOM_VK_XF86XK_LAUNCH8\",\n \"DOM_VK_XF86XK_LAUNCH9\",\n \"DOM_VK_XF86XK_LAUNCH_A\",\n \"DOM_VK_XF86XK_LAUNCH_B\",\n \"DOM_VK_XF86XK_LAUNCH_C\",\n \"DOM_VK_XF86XK_LAUNCH_D\",\n \"DOM_VK_XF86XK_LAUNCH_E\",\n \"DOM_VK_XF86XK_LAUNCH_F\",\n \"DOM_VK_XF86XK_LIGHT_BULB\",\n \"DOM_VK_XF86XK_LOG_OFF\",\n \"DOM_VK_XF86XK_MAIL\",\n \"DOM_VK_XF86XK_MAIL_FORWARD\",\n \"DOM_VK_XF86XK_MARKET\",\n \"DOM_VK_XF86XK_MEETING\",\n \"DOM_VK_XF86XK_MEMO\",\n \"DOM_VK_XF86XK_MENU_KB\",\n \"DOM_VK_XF86XK_MENU_PB\",\n \"DOM_VK_XF86XK_MESSENGER\",\n \"DOM_VK_XF86XK_MON_BRIGHTNESS_DOWN\",\n \"DOM_VK_XF86XK_MON_BRIGHTNESS_UP\",\n \"DOM_VK_XF86XK_MUSIC\",\n \"DOM_VK_XF86XK_MY_COMPUTER\",\n \"DOM_VK_XF86XK_MY_SITES\",\n \"DOM_VK_XF86XK_NEW\",\n \"DOM_VK_XF86XK_NEWS\",\n \"DOM_VK_XF86XK_OFFICE_HOME\",\n \"DOM_VK_XF86XK_OPEN\",\n \"DOM_VK_XF86XK_OPEN_URL\",\n \"DOM_VK_XF86XK_OPTION\",\n \"DOM_VK_XF86XK_PASTE\",\n \"DOM_VK_XF86XK_PHONE\",\n \"DOM_VK_XF86XK_PICTURES\",\n \"DOM_VK_XF86XK_POWER_DOWN\",\n \"DOM_VK_XF86XK_POWER_OFF\",\n \"DOM_VK_XF86XK_RED\",\n \"DOM_VK_XF86XK_REFRESH\",\n \"DOM_VK_XF86XK_RELOAD\",\n \"DOM_VK_XF86XK_REPLY\",\n \"DOM_VK_XF86XK_ROCKER_DOWN\",\n \"DOM_VK_XF86XK_ROCKER_ENTER\",\n \"DOM_VK_XF86XK_ROCKER_UP\",\n \"DOM_VK_XF86XK_ROTATE_WINDOWS\",\n \"DOM_VK_XF86XK_ROTATION_KB\",\n \"DOM_VK_XF86XK_ROTATION_PB\",\n \"DOM_VK_XF86XK_SAVE\",\n \"DOM_VK_XF86XK_SCREEN_SAVER\",\n \"DOM_VK_XF86XK_SCROLL_CLICK\",\n \"DOM_VK_XF86XK_SCROLL_DOWN\",\n \"DOM_VK_XF86XK_SCROLL_UP\",\n \"DOM_VK_XF86XK_SEARCH\",\n \"DOM_VK_XF86XK_SEND\",\n \"DOM_VK_XF86XK_SHOP\",\n \"DOM_VK_XF86XK_SPELL\",\n \"DOM_VK_XF86XK_SPLIT_SCREEN\",\n \"DOM_VK_XF86XK_STANDBY\",\n \"DOM_VK_XF86XK_START\",\n \"DOM_VK_XF86XK_STOP\",\n \"DOM_VK_XF86XK_SUBTITLE\",\n \"DOM_VK_XF86XK_SUPPORT\",\n \"DOM_VK_XF86XK_SUSPEND\",\n \"DOM_VK_XF86XK_TASK_PANE\",\n \"DOM_VK_XF86XK_TERMINAL\",\n \"DOM_VK_XF86XK_TIME\",\n \"DOM_VK_XF86XK_TOOLS\",\n \"DOM_VK_XF86XK_TOP_MENU\",\n \"DOM_VK_XF86XK_TO_DO_LIST\",\n \"DOM_VK_XF86XK_TRAVEL\",\n \"DOM_VK_XF86XK_USER1KB\",\n \"DOM_VK_XF86XK_USER2KB\",\n \"DOM_VK_XF86XK_USER_PB\",\n \"DOM_VK_XF86XK_UWB\",\n \"DOM_VK_XF86XK_VENDOR_HOME\",\n \"DOM_VK_XF86XK_VIDEO\",\n \"DOM_VK_XF86XK_VIEW\",\n \"DOM_VK_XF86XK_WAKE_UP\",\n \"DOM_VK_XF86XK_WEB_CAM\",\n \"DOM_VK_XF86XK_WHEEL_BUTTON\",\n \"DOM_VK_XF86XK_WLAN\",\n \"DOM_VK_XF86XK_WORD\",\n \"DOM_VK_XF86XK_WWW\",\n \"DOM_VK_XF86XK_XFER\",\n \"DOM_VK_XF86XK_YELLOW\",\n \"DOM_VK_XF86XK_ZOOM_IN\",\n \"DOM_VK_XF86XK_ZOOM_OUT\",\n \"DOM_VK_Y\",\n \"DOM_VK_Z\",\n \"DOM_VK_ZOOM\",\n \"DONE\",\n \"DONT_CARE\",\n \"DOWNLOADING\",\n \"DRAGDROP\",\n \"DST_ALPHA\",\n \"DST_COLOR\",\n \"DYNAMIC_DRAW\",\n \"DataChannel\",\n \"DataTransfer\",\n \"DataTransferItem\",\n \"DataTransferItemList\",\n \"DataView\",\n \"Date\",\n \"DateTimeFormat\",\n \"DelayNode\",\n \"DesktopNotification\",\n \"DesktopNotificationCenter\",\n \"DeviceLightEvent\",\n \"DeviceMotionEvent\",\n \"DeviceOrientationEvent\",\n \"DeviceProximityEvent\",\n \"DeviceStorage\",\n \"DeviceStorageChangeEvent\",\n \"Document\",\n \"DocumentFragment\",\n \"DocumentType\",\n \"DragEvent\",\n \"DynamicsCompressorNode\",\n \"E\",\n \"ELEMENT_ARRAY_BUFFER\",\n \"ELEMENT_ARRAY_BUFFER_BINDING\",\n \"ELEMENT_NODE\",\n \"EMPTY\",\n \"ENCODING_ERR\",\n \"ENDED\",\n \"END_TO_END\",\n \"END_TO_START\",\n \"ENTITY_NODE\",\n \"ENTITY_REFERENCE_NODE\",\n \"EPSILON\",\n \"EQUAL\",\n \"EQUALPOWER\",\n \"ERROR\",\n \"EXPONENTIAL_DISTANCE\",\n \"Element\",\n \"ElementQuery\",\n \"Entity\",\n \"EntityReference\",\n \"Error\",\n \"ErrorEvent\",\n \"EvalError\",\n \"Event\",\n \"EventException\",\n \"EventSource\",\n \"EventTarget\",\n \"External\",\n \"FASTEST\",\n \"FIDOSDK\",\n \"FILTER_ACCEPT\",\n \"FILTER_INTERRUPT\",\n \"FILTER_REJECT\",\n \"FILTER_SKIP\",\n \"FINISHED_STATE\",\n \"FIRST_ORDERED_NODE_TYPE\",\n \"FLOAT\",\n \"FLOAT_MAT2\",\n \"FLOAT_MAT3\",\n \"FLOAT_MAT4\",\n \"FLOAT_VEC2\",\n \"FLOAT_VEC3\",\n \"FLOAT_VEC4\",\n \"FOCUS\",\n \"FONT_FACE_RULE\",\n \"FONT_FEATURE_VALUES_RULE\",\n \"FRAGMENT_SHADER\",\n \"FRAGMENT_SHADER_DERIVATIVE_HINT_OES\",\n \"FRAMEBUFFER\",\n \"FRAMEBUFFER_ATTACHMENT_OBJECT_NAME\",\n \"FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE\",\n \"FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE\",\n \"FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL\",\n \"FRAMEBUFFER_BINDING\",\n \"FRAMEBUFFER_COMPLETE\",\n \"FRAMEBUFFER_INCOMPLETE_ATTACHMENT\",\n \"FRAMEBUFFER_INCOMPLETE_DIMENSIONS\",\n \"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT\",\n \"FRAMEBUFFER_UNSUPPORTED\",\n \"FRONT\",\n \"FRONT_AND_BACK\",\n \"FRONT_FACE\",\n \"FUNC_ADD\",\n \"FUNC_REVERSE_SUBTRACT\",\n \"FUNC_SUBTRACT\",\n \"Feed\",\n \"FeedEntry\",\n \"File\",\n \"FileError\",\n \"FileList\",\n \"FileReader\",\n \"FindInPage\",\n \"Float32Array\",\n \"Float64Array\",\n \"FocusEvent\",\n \"FontFace\",\n \"FormData\",\n \"Function\",\n \"GENERATE_MIPMAP_HINT\",\n \"GEQUAL\",\n \"GREATER\",\n \"GREEN_BITS\",\n \"GainNode\",\n \"Gamepad\",\n \"GamepadButton\",\n \"GamepadEvent\",\n \"GestureEvent\",\n \"HAVE_CURRENT_DATA\",\n \"HAVE_ENOUGH_DATA\",\n \"HAVE_FUTURE_DATA\",\n \"HAVE_METADATA\",\n \"HAVE_NOTHING\",\n \"HEADERS_RECEIVED\",\n \"HIDDEN\",\n \"HIERARCHY_REQUEST_ERR\",\n \"HIGHPASS\",\n \"HIGHSHELF\",\n \"HIGH_FLOAT\",\n \"HIGH_INT\",\n \"HORIZONTAL\",\n \"HORIZONTAL_AXIS\",\n \"HRTF\",\n \"HTMLAllCollection\",\n \"HTMLAnchorElement\",\n \"HTMLAppletElement\",\n \"HTMLAreaElement\",\n \"HTMLAudioElement\",\n \"HTMLBRElement\",\n \"HTMLBaseElement\",\n \"HTMLBaseFontElement\",\n \"HTMLBlockquoteElement\",\n \"HTMLBodyElement\",\n \"HTMLButtonElement\",\n \"HTMLCanvasElement\",\n \"HTMLCollection\",\n \"HTMLCommandElement\",\n \"HTMLContentElement\",\n \"HTMLDListElement\",\n \"HTMLDataElement\",\n \"HTMLDataListElement\",\n \"HTMLDetailsElement\",\n \"HTMLDialogElement\",\n \"HTMLDirectoryElement\",\n \"HTMLDivElement\",\n \"HTMLDocument\",\n \"HTMLElement\",\n \"HTMLEmbedElement\",\n \"HTMLFieldSetElement\",\n \"HTMLFontElement\",\n \"HTMLFormControlsCollection\",\n \"HTMLFormElement\",\n \"HTMLFrameElement\",\n \"HTMLFrameSetElement\",\n \"HTMLHRElement\",\n \"HTMLHeadElement\",\n \"HTMLHeadingElement\",\n \"HTMLHtmlElement\",\n \"HTMLIFrameElement\",\n \"HTMLImageElement\",\n \"HTMLInputElement\",\n \"HTMLIsIndexElement\",\n \"HTMLKeygenElement\",\n \"HTMLLIElement\",\n \"HTMLLabelElement\",\n \"HTMLLegendElement\",\n \"HTMLLinkElement\",\n \"HTMLMapElement\",\n \"HTMLMarqueeElement\",\n \"HTMLMediaElement\",\n \"HTMLMenuElement\",\n \"HTMLMenuItemElement\",\n \"HTMLMetaElement\",\n \"HTMLMeterElement\",\n \"HTMLModElement\",\n \"HTMLOListElement\",\n \"HTMLObjectElement\",\n \"HTMLOptGroupElement\",\n \"HTMLOptionElement\",\n \"HTMLOptionsCollection\",\n \"HTMLOutputElement\",\n \"HTMLParagraphElement\",\n \"HTMLParamElement\",\n \"HTMLPictureElement\",\n \"HTMLPreElement\",\n \"HTMLProgressElement\",\n \"HTMLPropertiesCollection\",\n \"HTMLQuoteElement\",\n \"HTMLScriptElement\",\n \"HTMLSelectElement\",\n \"HTMLShadowElement\",\n \"HTMLSourceElement\",\n \"HTMLSpanElement\",\n \"HTMLStyleElement\",\n \"HTMLTableCaptionElement\",\n \"HTMLTableCellElement\",\n \"HTMLTableColElement\",\n \"HTMLTableElement\",\n \"HTMLTableRowElement\",\n \"HTMLTableSectionElement\",\n \"HTMLTemplateElement\",\n \"HTMLTextAreaElement\",\n \"HTMLTimeElement\",\n \"HTMLTitleElement\",\n \"HTMLTrackElement\",\n \"HTMLUListElement\",\n \"HTMLUnknownElement\",\n \"HTMLVideoElement\",\n \"HashChangeEvent\",\n \"Headers\",\n \"History\",\n \"ICE_CHECKING\",\n \"ICE_CLOSED\",\n \"ICE_COMPLETED\",\n \"ICE_CONNECTED\",\n \"ICE_FAILED\",\n \"ICE_GATHERING\",\n \"ICE_WAITING\",\n \"IDBCursor\",\n \"IDBCursorWithValue\",\n \"IDBDatabase\",\n \"IDBDatabaseException\",\n \"IDBFactory\",\n \"IDBFileHandle\",\n \"IDBFileRequest\",\n \"IDBIndex\",\n \"IDBKeyRange\",\n \"IDBMutableFile\",\n \"IDBObjectStore\",\n \"IDBOpenDBRequest\",\n \"IDBRequest\",\n \"IDBTransaction\",\n \"IDBVersionChangeEvent\",\n \"IDLE\",\n \"IMPLEMENTATION_COLOR_READ_FORMAT\",\n \"IMPLEMENTATION_COLOR_READ_TYPE\",\n \"IMPORT_RULE\",\n \"INCR\",\n \"INCR_WRAP\",\n \"INDEX_SIZE_ERR\",\n \"INT\",\n \"INT_VEC2\",\n \"INT_VEC3\",\n \"INT_VEC4\",\n \"INUSE_ATTRIBUTE_ERR\",\n \"INVALID_ACCESS_ERR\",\n \"INVALID_CHARACTER_ERR\",\n \"INVALID_ENUM\",\n \"INVALID_EXPRESSION_ERR\",\n \"INVALID_FRAMEBUFFER_OPERATION\",\n \"INVALID_MODIFICATION_ERR\",\n \"INVALID_NODE_TYPE_ERR\",\n \"INVALID_OPERATION\",\n \"INVALID_STATE_ERR\",\n \"INVALID_VALUE\",\n \"INVERSE_DISTANCE\",\n \"INVERT\",\n \"IceCandidate\",\n \"Image\",\n \"ImageBitmap\",\n \"ImageData\",\n \"Infinity\",\n \"InputEvent\",\n \"InputMethodContext\",\n \"InstallTrigger\",\n \"Int16Array\",\n \"Int32Array\",\n \"Int8Array\",\n \"Intent\",\n \"InternalError\",\n \"Intl\",\n \"IsSearchProviderInstalled\",\n \"Iterator\",\n \"JSON\",\n \"KEEP\",\n \"KEYDOWN\",\n \"KEYFRAMES_RULE\",\n \"KEYFRAME_RULE\",\n \"KEYPRESS\",\n \"KEYUP\",\n \"KeyEvent\",\n \"KeyboardEvent\",\n \"LENGTHADJUST_SPACING\",\n \"LENGTHADJUST_SPACINGANDGLYPHS\",\n \"LENGTHADJUST_UNKNOWN\",\n \"LEQUAL\",\n \"LESS\",\n \"LINEAR\",\n \"LINEAR_DISTANCE\",\n \"LINEAR_MIPMAP_LINEAR\",\n \"LINEAR_MIPMAP_NEAREST\",\n \"LINES\",\n \"LINE_LOOP\",\n \"LINE_STRIP\",\n \"LINE_WIDTH\",\n \"LINK_STATUS\",\n \"LIVE\",\n \"LN10\",\n \"LN2\",\n \"LOADED\",\n \"LOADING\",\n \"LOG10E\",\n \"LOG2E\",\n \"LOWPASS\",\n \"LOWSHELF\",\n \"LOW_FLOAT\",\n \"LOW_INT\",\n \"LSException\",\n \"LSParserFilter\",\n \"LUMINANCE\",\n \"LUMINANCE_ALPHA\",\n \"LocalMediaStream\",\n \"Location\",\n \"MAX_COMBINED_TEXTURE_IMAGE_UNITS\",\n \"MAX_CUBE_MAP_TEXTURE_SIZE\",\n \"MAX_FRAGMENT_UNIFORM_VECTORS\",\n \"MAX_RENDERBUFFER_SIZE\",\n \"MAX_SAFE_INTEGER\",\n \"MAX_TEXTURE_IMAGE_UNITS\",\n \"MAX_TEXTURE_MAX_ANISOTROPY_EXT\",\n \"MAX_TEXTURE_SIZE\",\n \"MAX_VALUE\",\n \"MAX_VARYING_VECTORS\",\n \"MAX_VERTEX_ATTRIBS\",\n \"MAX_VERTEX_TEXTURE_IMAGE_UNITS\",\n \"MAX_VERTEX_UNIFORM_VECTORS\",\n \"MAX_VIEWPORT_DIMS\",\n \"MEDIA_ERR_ABORTED\",\n \"MEDIA_ERR_DECODE\",\n \"MEDIA_ERR_ENCRYPTED\",\n \"MEDIA_ERR_NETWORK\",\n \"MEDIA_ERR_SRC_NOT_SUPPORTED\",\n \"MEDIA_KEYERR_CLIENT\",\n \"MEDIA_KEYERR_DOMAIN\",\n \"MEDIA_KEYERR_HARDWARECHANGE\",\n \"MEDIA_KEYERR_OUTPUT\",\n \"MEDIA_KEYERR_SERVICE\",\n \"MEDIA_KEYERR_UNKNOWN\",\n \"MEDIA_RULE\",\n \"MEDIUM_FLOAT\",\n \"MEDIUM_INT\",\n \"META_MASK\",\n \"MIN_SAFE_INTEGER\",\n \"MIN_VALUE\",\n \"MIRRORED_REPEAT\",\n \"MODE_ASYNCHRONOUS\",\n \"MODE_SYNCHRONOUS\",\n \"MODIFICATION\",\n \"MOUSEDOWN\",\n \"MOUSEDRAG\",\n \"MOUSEMOVE\",\n \"MOUSEOUT\",\n \"MOUSEOVER\",\n \"MOUSEUP\",\n \"MOZ_KEYFRAMES_RULE\",\n \"MOZ_KEYFRAME_RULE\",\n \"MOZ_SOURCE_CURSOR\",\n \"MOZ_SOURCE_ERASER\",\n \"MOZ_SOURCE_KEYBOARD\",\n \"MOZ_SOURCE_MOUSE\",\n \"MOZ_SOURCE_PEN\",\n \"MOZ_SOURCE_TOUCH\",\n \"MOZ_SOURCE_UNKNOWN\",\n \"MSGESTURE_FLAG_BEGIN\",\n \"MSGESTURE_FLAG_CANCEL\",\n \"MSGESTURE_FLAG_END\",\n \"MSGESTURE_FLAG_INERTIA\",\n \"MSGESTURE_FLAG_NONE\",\n \"MSPOINTER_TYPE_MOUSE\",\n \"MSPOINTER_TYPE_PEN\",\n \"MSPOINTER_TYPE_TOUCH\",\n \"MS_ASYNC_CALLBACK_STATUS_ASSIGN_DELEGATE\",\n \"MS_ASYNC_CALLBACK_STATUS_CANCEL\",\n \"MS_ASYNC_CALLBACK_STATUS_CHOOSEANY\",\n \"MS_ASYNC_CALLBACK_STATUS_ERROR\",\n \"MS_ASYNC_CALLBACK_STATUS_JOIN\",\n \"MS_ASYNC_OP_STATUS_CANCELED\",\n \"MS_ASYNC_OP_STATUS_ERROR\",\n \"MS_ASYNC_OP_STATUS_SUCCESS\",\n \"MS_MANIPULATION_STATE_ACTIVE\",\n \"MS_MANIPULATION_STATE_CANCELLED\",\n \"MS_MANIPULATION_STATE_COMMITTED\",\n \"MS_MANIPULATION_STATE_DRAGGING\",\n \"MS_MANIPULATION_STATE_INERTIA\",\n \"MS_MANIPULATION_STATE_PRESELECT\",\n \"MS_MANIPULATION_STATE_SELECTING\",\n \"MS_MANIPULATION_STATE_STOPPED\",\n \"MS_MEDIA_ERR_ENCRYPTED\",\n \"MS_MEDIA_KEYERR_CLIENT\",\n \"MS_MEDIA_KEYERR_DOMAIN\",\n \"MS_MEDIA_KEYERR_HARDWARECHANGE\",\n \"MS_MEDIA_KEYERR_OUTPUT\",\n \"MS_MEDIA_KEYERR_SERVICE\",\n \"MS_MEDIA_KEYERR_UNKNOWN\",\n \"Map\",\n \"Math\",\n \"MediaController\",\n \"MediaDevices\",\n \"MediaElementAudioSourceNode\",\n \"MediaEncryptedEvent\",\n \"MediaError\",\n \"MediaKeyError\",\n \"MediaKeyEvent\",\n \"MediaKeyMessageEvent\",\n \"MediaKeyNeededEvent\",\n \"MediaKeySession\",\n \"MediaKeyStatusMap\",\n \"MediaKeySystemAccess\",\n \"MediaKeys\",\n \"MediaList\",\n \"MediaQueryList\",\n \"MediaQueryListEvent\",\n \"MediaRecorder\",\n \"MediaSource\",\n \"MediaStream\",\n \"MediaStreamAudioDestinationNode\",\n \"MediaStreamAudioSourceNode\",\n \"MediaStreamEvent\",\n \"MediaStreamTrack\",\n \"MediaStreamTrackEvent\",\n \"MessageChannel\",\n \"MessageEvent\",\n \"MessagePort\",\n \"Methods\",\n \"MimeType\",\n \"MimeTypeArray\",\n \"MouseEvent\",\n \"MouseScrollEvent\",\n \"MozAnimation\",\n \"MozAnimationDelay\",\n \"MozAnimationDirection\",\n \"MozAnimationDuration\",\n \"MozAnimationFillMode\",\n \"MozAnimationIterationCount\",\n \"MozAnimationName\",\n \"MozAnimationPlayState\",\n \"MozAnimationTimingFunction\",\n \"MozAppearance\",\n \"MozBackfaceVisibility\",\n \"MozBinding\",\n \"MozBorderBottomColors\",\n \"MozBorderEnd\",\n \"MozBorderEndColor\",\n \"MozBorderEndStyle\",\n \"MozBorderEndWidth\",\n \"MozBorderImage\",\n \"MozBorderLeftColors\",\n \"MozBorderRightColors\",\n \"MozBorderStart\",\n \"MozBorderStartColor\",\n \"MozBorderStartStyle\",\n \"MozBorderStartWidth\",\n \"MozBorderTopColors\",\n \"MozBoxAlign\",\n \"MozBoxDirection\",\n \"MozBoxFlex\",\n \"MozBoxOrdinalGroup\",\n \"MozBoxOrient\",\n \"MozBoxPack\",\n \"MozBoxSizing\",\n \"MozCSSKeyframeRule\",\n \"MozCSSKeyframesRule\",\n \"MozColumnCount\",\n \"MozColumnFill\",\n \"MozColumnGap\",\n \"MozColumnRule\",\n \"MozColumnRuleColor\",\n \"MozColumnRuleStyle\",\n \"MozColumnRuleWidth\",\n \"MozColumnWidth\",\n \"MozColumns\",\n \"MozContactChangeEvent\",\n \"MozFloatEdge\",\n \"MozFontFeatureSettings\",\n \"MozFontLanguageOverride\",\n \"MozForceBrokenImageIcon\",\n \"MozHyphens\",\n \"MozImageRegion\",\n \"MozMarginEnd\",\n \"MozMarginStart\",\n \"MozMmsEvent\",\n \"MozMmsMessage\",\n \"MozMobileMessageThread\",\n \"MozOSXFontSmoothing\",\n \"MozOrient\",\n \"MozOutlineRadius\",\n \"MozOutlineRadiusBottomleft\",\n \"MozOutlineRadiusBottomright\",\n \"MozOutlineRadiusTopleft\",\n \"MozOutlineRadiusTopright\",\n \"MozPaddingEnd\",\n \"MozPaddingStart\",\n \"MozPerspective\",\n \"MozPerspectiveOrigin\",\n \"MozPowerManager\",\n \"MozSettingsEvent\",\n \"MozSmsEvent\",\n \"MozSmsMessage\",\n \"MozStackSizing\",\n \"MozTabSize\",\n \"MozTextAlignLast\",\n \"MozTextDecorationColor\",\n \"MozTextDecorationLine\",\n \"MozTextDecorationStyle\",\n \"MozTextSizeAdjust\",\n \"MozTransform\",\n \"MozTransformOrigin\",\n \"MozTransformStyle\",\n \"MozTransition\",\n \"MozTransitionDelay\",\n \"MozTransitionDuration\",\n \"MozTransitionProperty\",\n \"MozTransitionTimingFunction\",\n \"MozUserFocus\",\n \"MozUserInput\",\n \"MozUserModify\",\n \"MozUserSelect\",\n \"MozWindowDragging\",\n \"MozWindowShadow\",\n \"MutationEvent\",\n \"MutationObserver\",\n \"MutationRecord\",\n \"NAMESPACE_ERR\",\n \"NAMESPACE_RULE\",\n \"NEAREST\",\n \"NEAREST_MIPMAP_LINEAR\",\n \"NEAREST_MIPMAP_NEAREST\",\n \"NEGATIVE_INFINITY\",\n \"NETWORK_EMPTY\",\n \"NETWORK_ERR\",\n \"NETWORK_IDLE\",\n \"NETWORK_LOADED\",\n \"NETWORK_LOADING\",\n \"NETWORK_NO_SOURCE\",\n \"NEVER\",\n \"NEW\",\n \"NEXT\",\n \"NEXT_NO_DUPLICATE\",\n \"NICEST\",\n \"NODE_AFTER\",\n \"NODE_BEFORE\",\n \"NODE_BEFORE_AND_AFTER\",\n \"NODE_INSIDE\",\n \"NONE\",\n \"NON_TRANSIENT_ERR\",\n \"NOTATION_NODE\",\n \"NOTCH\",\n \"NOTEQUAL\",\n \"NOT_ALLOWED_ERR\",\n \"NOT_FOUND_ERR\",\n \"NOT_READABLE_ERR\",\n \"NOT_SUPPORTED_ERR\",\n \"NO_DATA_ALLOWED_ERR\",\n \"NO_ERR\",\n \"NO_ERROR\",\n \"NO_MODIFICATION_ALLOWED_ERR\",\n \"NUMBER_TYPE\",\n \"NUM_COMPRESSED_TEXTURE_FORMATS\",\n \"NaN\",\n \"NamedNodeMap\",\n \"Navigator\",\n \"NearbyLinks\",\n \"NetworkInformation\",\n \"Node\",\n \"NodeFilter\",\n \"NodeIterator\",\n \"NodeList\",\n \"Notation\",\n \"Notification\",\n \"NotifyPaintEvent\",\n \"Number\",\n \"NumberFormat\",\n \"OBSOLETE\",\n \"ONE\",\n \"ONE_MINUS_CONSTANT_ALPHA\",\n \"ONE_MINUS_CONSTANT_COLOR\",\n \"ONE_MINUS_DST_ALPHA\",\n \"ONE_MINUS_DST_COLOR\",\n \"ONE_MINUS_SRC_ALPHA\",\n \"ONE_MINUS_SRC_COLOR\",\n \"OPEN\",\n \"OPENED\",\n \"OPENING\",\n \"ORDERED_NODE_ITERATOR_TYPE\",\n \"ORDERED_NODE_SNAPSHOT_TYPE\",\n \"OUT_OF_MEMORY\",\n \"Object\",\n \"OfflineAudioCompletionEvent\",\n \"OfflineAudioContext\",\n \"OfflineResourceList\",\n \"Option\",\n \"OscillatorNode\",\n \"OverflowEvent\",\n \"PACK_ALIGNMENT\",\n \"PAGE_RULE\",\n \"PARSE_ERR\",\n \"PATHSEG_ARC_ABS\",\n \"PATHSEG_ARC_REL\",\n \"PATHSEG_CLOSEPATH\",\n \"PATHSEG_CURVETO_CUBIC_ABS\",\n \"PATHSEG_CURVETO_CUBIC_REL\",\n \"PATHSEG_CURVETO_CUBIC_SMOOTH_ABS\",\n \"PATHSEG_CURVETO_CUBIC_SMOOTH_REL\",\n \"PATHSEG_CURVETO_QUADRATIC_ABS\",\n \"PATHSEG_CURVETO_QUADRATIC_REL\",\n \"PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS\",\n \"PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL\",\n \"PATHSEG_LINETO_ABS\",\n \"PATHSEG_LINETO_HORIZONTAL_ABS\",\n \"PATHSEG_LINETO_HORIZONTAL_REL\",\n \"PATHSEG_LINETO_REL\",\n \"PATHSEG_LINETO_VERTICAL_ABS\",\n \"PATHSEG_LINETO_VERTICAL_REL\",\n \"PATHSEG_MOVETO_ABS\",\n \"PATHSEG_MOVETO_REL\",\n \"PATHSEG_UNKNOWN\",\n \"PATH_EXISTS_ERR\",\n \"PEAKING\",\n \"PERMISSION_DENIED\",\n \"PERSISTENT\",\n \"PI\",\n \"PLAYING_STATE\",\n \"POINTS\",\n \"POLYGON_OFFSET_FACTOR\",\n \"POLYGON_OFFSET_FILL\",\n \"POLYGON_OFFSET_UNITS\",\n \"POSITION_UNAVAILABLE\",\n \"POSITIVE_INFINITY\",\n \"PREV\",\n \"PREV_NO_DUPLICATE\",\n \"PROCESSING_INSTRUCTION_NODE\",\n \"PageChangeEvent\",\n \"PageTransitionEvent\",\n \"PaintRequest\",\n \"PaintRequestList\",\n \"PannerNode\",\n \"Path2D\",\n \"Performance\",\n \"PerformanceEntry\",\n \"PerformanceMark\",\n \"PerformanceMeasure\",\n \"PerformanceNavigation\",\n \"PerformanceResourceTiming\",\n \"PerformanceTiming\",\n \"PeriodicWave\",\n \"Plugin\",\n \"PluginArray\",\n \"PopStateEvent\",\n \"PopupBlockedEvent\",\n \"ProcessingInstruction\",\n \"ProgressEvent\",\n \"Promise\",\n \"PropertyNodeList\",\n \"Proxy\",\n \"PushManager\",\n \"PushSubscription\",\n \"Q\",\n \"QUOTA_ERR\",\n \"QUOTA_EXCEEDED_ERR\",\n \"QueryInterface\",\n \"READ_ONLY\",\n \"READ_ONLY_ERR\",\n \"READ_WRITE\",\n \"RED_BITS\",\n \"REMOVAL\",\n \"RENDERBUFFER\",\n \"RENDERBUFFER_ALPHA_SIZE\",\n \"RENDERBUFFER_BINDING\",\n \"RENDERBUFFER_BLUE_SIZE\",\n \"RENDERBUFFER_DEPTH_SIZE\",\n \"RENDERBUFFER_GREEN_SIZE\",\n \"RENDERBUFFER_HEIGHT\",\n \"RENDERBUFFER_INTERNAL_FORMAT\",\n \"RENDERBUFFER_RED_SIZE\",\n \"RENDERBUFFER_STENCIL_SIZE\",\n \"RENDERBUFFER_WIDTH\",\n \"RENDERER\",\n \"RENDERING_INTENT_ABSOLUTE_COLORIMETRIC\",\n \"RENDERING_INTENT_AUTO\",\n \"RENDERING_INTENT_PERCEPTUAL\",\n \"RENDERING_INTENT_RELATIVE_COLORIMETRIC\",\n \"RENDERING_INTENT_SATURATION\",\n \"RENDERING_INTENT_UNKNOWN\",\n \"REPEAT\",\n \"REPLACE\",\n \"RGB\",\n \"RGB565\",\n \"RGB5_A1\",\n \"RGBA\",\n \"RGBA4\",\n \"RGBColor\",\n \"ROTATION_CLOCKWISE\",\n \"ROTATION_COUNTERCLOCKWISE\",\n \"RTCDataChannelEvent\",\n \"RTCIceCandidate\",\n \"RTCPeerConnectionIceEvent\",\n \"RTCRtpReceiver\",\n \"RTCRtpSender\",\n \"RTCSessionDescription\",\n \"RTCStatsReport\",\n \"RadioNodeList\",\n \"Range\",\n \"RangeError\",\n \"RangeException\",\n \"RecordErrorEvent\",\n \"Rect\",\n \"ReferenceError\",\n \"RegExp\",\n \"Request\",\n \"Response\",\n \"SAMPLER_2D\",\n \"SAMPLER_CUBE\",\n \"SAMPLES\",\n \"SAMPLE_ALPHA_TO_COVERAGE\",\n \"SAMPLE_BUFFERS\",\n \"SAMPLE_COVERAGE\",\n \"SAMPLE_COVERAGE_INVERT\",\n \"SAMPLE_COVERAGE_VALUE\",\n \"SAWTOOTH\",\n \"SCHEDULED_STATE\",\n \"SCISSOR_BOX\",\n \"SCISSOR_TEST\",\n \"SCROLL_PAGE_DOWN\",\n \"SCROLL_PAGE_UP\",\n \"SDP_ANSWER\",\n \"SDP_OFFER\",\n \"SDP_PRANSWER\",\n \"SECURITY_ERR\",\n \"SELECT\",\n \"SERIALIZE_ERR\",\n \"SEVERITY_ERROR\",\n \"SEVERITY_FATAL_ERROR\",\n \"SEVERITY_WARNING\",\n \"SHADER_COMPILER\",\n \"SHADER_TYPE\",\n \"SHADING_LANGUAGE_VERSION\",\n \"SHIFT_MASK\",\n \"SHORT\",\n \"SHOWING\",\n \"SHOW_ALL\",\n \"SHOW_ATTRIBUTE\",\n \"SHOW_CDATA_SECTION\",\n \"SHOW_COMMENT\",\n \"SHOW_DOCUMENT\",\n \"SHOW_DOCUMENT_FRAGMENT\",\n \"SHOW_DOCUMENT_TYPE\",\n \"SHOW_ELEMENT\",\n \"SHOW_ENTITY\",\n \"SHOW_ENTITY_REFERENCE\",\n \"SHOW_NOTATION\",\n \"SHOW_PROCESSING_INSTRUCTION\",\n \"SHOW_TEXT\",\n \"SINE\",\n \"SOUNDFIELD\",\n \"SQLException\",\n \"SQRT1_2\",\n \"SQRT2\",\n \"SQUARE\",\n \"SRC_ALPHA\",\n \"SRC_ALPHA_SATURATE\",\n \"SRC_COLOR\",\n \"START_TO_END\",\n \"START_TO_START\",\n \"STATIC_DRAW\",\n \"STENCIL_ATTACHMENT\",\n \"STENCIL_BACK_FAIL\",\n \"STENCIL_BACK_FUNC\",\n \"STENCIL_BACK_PASS_DEPTH_FAIL\",\n \"STENCIL_BACK_PASS_DEPTH_PASS\",\n \"STENCIL_BACK_REF\",\n \"STENCIL_BACK_VALUE_MASK\",\n \"STENCIL_BACK_WRITEMASK\",\n \"STENCIL_BITS\",\n \"STENCIL_BUFFER_BIT\",\n \"STENCIL_CLEAR_VALUE\",\n \"STENCIL_FAIL\",\n \"STENCIL_FUNC\",\n \"STENCIL_INDEX\",\n \"STENCIL_INDEX8\",\n \"STENCIL_PASS_DEPTH_FAIL\",\n \"STENCIL_PASS_DEPTH_PASS\",\n \"STENCIL_REF\",\n \"STENCIL_TEST\",\n \"STENCIL_VALUE_MASK\",\n \"STENCIL_WRITEMASK\",\n \"STREAM_DRAW\",\n \"STRING_TYPE\",\n \"STYLE_RULE\",\n \"SUBPIXEL_BITS\",\n \"SUPPORTS_RULE\",\n \"SVGAElement\",\n \"SVGAltGlyphDefElement\",\n \"SVGAltGlyphElement\",\n \"SVGAltGlyphItemElement\",\n \"SVGAngle\",\n \"SVGAnimateColorElement\",\n \"SVGAnimateElement\",\n \"SVGAnimateMotionElement\",\n \"SVGAnimateTransformElement\",\n \"SVGAnimatedAngle\",\n \"SVGAnimatedBoolean\",\n \"SVGAnimatedEnumeration\",\n \"SVGAnimatedInteger\",\n \"SVGAnimatedLength\",\n \"SVGAnimatedLengthList\",\n \"SVGAnimatedNumber\",\n \"SVGAnimatedNumberList\",\n \"SVGAnimatedPreserveAspectRatio\",\n \"SVGAnimatedRect\",\n \"SVGAnimatedString\",\n \"SVGAnimatedTransformList\",\n \"SVGAnimationElement\",\n \"SVGCircleElement\",\n \"SVGClipPathElement\",\n \"SVGColor\",\n \"SVGComponentTransferFunctionElement\",\n \"SVGCursorElement\",\n \"SVGDefsElement\",\n \"SVGDescElement\",\n \"SVGDiscardElement\",\n \"SVGDocument\",\n \"SVGElement\",\n \"SVGElementInstance\",\n \"SVGElementInstanceList\",\n \"SVGEllipseElement\",\n \"SVGException\",\n \"SVGFEBlendElement\",\n \"SVGFEColorMatrixElement\",\n \"SVGFEComponentTransferElement\",\n \"SVGFECompositeElement\",\n \"SVGFEConvolveMatrixElement\",\n \"SVGFEDiffuseLightingElement\",\n \"SVGFEDisplacementMapElement\",\n \"SVGFEDistantLightElement\",\n \"SVGFEDropShadowElement\",\n \"SVGFEFloodElement\",\n \"SVGFEFuncAElement\",\n \"SVGFEFuncBElement\",\n \"SVGFEFuncGElement\",\n \"SVGFEFuncRElement\",\n \"SVGFEGaussianBlurElement\",\n \"SVGFEImageElement\",\n \"SVGFEMergeElement\",\n \"SVGFEMergeNodeElement\",\n \"SVGFEMorphologyElement\",\n \"SVGFEOffsetElement\",\n \"SVGFEPointLightElement\",\n \"SVGFESpecularLightingElement\",\n \"SVGFESpotLightElement\",\n \"SVGFETileElement\",\n \"SVGFETurbulenceElement\",\n \"SVGFilterElement\",\n \"SVGFontElement\",\n \"SVGFontFaceElement\",\n \"SVGFontFaceFormatElement\",\n \"SVGFontFaceNameElement\",\n \"SVGFontFaceSrcElement\",\n \"SVGFontFaceUriElement\",\n \"SVGForeignObjectElement\",\n \"SVGGElement\",\n \"SVGGeometryElement\",\n \"SVGGlyphElement\",\n \"SVGGlyphRefElement\",\n \"SVGGradientElement\",\n \"SVGGraphicsElement\",\n \"SVGHKernElement\",\n \"SVGImageElement\",\n \"SVGLength\",\n \"SVGLengthList\",\n \"SVGLineElement\",\n \"SVGLinearGradientElement\",\n \"SVGMPathElement\",\n \"SVGMarkerElement\",\n \"SVGMaskElement\",\n \"SVGMatrix\",\n \"SVGMetadataElement\",\n \"SVGMissingGlyphElement\",\n \"SVGNumber\",\n \"SVGNumberList\",\n \"SVGPaint\",\n \"SVGPathElement\",\n \"SVGPathSeg\",\n \"SVGPathSegArcAbs\",\n \"SVGPathSegArcRel\",\n \"SVGPathSegClosePath\",\n \"SVGPathSegCurvetoCubicAbs\",\n \"SVGPathSegCurvetoCubicRel\",\n \"SVGPathSegCurvetoCubicSmoothAbs\",\n \"SVGPathSegCurvetoCubicSmoothRel\",\n \"SVGPathSegCurvetoQuadraticAbs\",\n \"SVGPathSegCurvetoQuadraticRel\",\n \"SVGPathSegCurvetoQuadraticSmoothAbs\",\n \"SVGPathSegCurvetoQuadraticSmoothRel\",\n \"SVGPathSegLinetoAbs\",\n \"SVGPathSegLinetoHorizontalAbs\",\n \"SVGPathSegLinetoHorizontalRel\",\n \"SVGPathSegLinetoRel\",\n \"SVGPathSegLinetoVerticalAbs\",\n \"SVGPathSegLinetoVerticalRel\",\n \"SVGPathSegList\",\n \"SVGPathSegMovetoAbs\",\n \"SVGPathSegMovetoRel\",\n \"SVGPatternElement\",\n \"SVGPoint\",\n \"SVGPointList\",\n \"SVGPolygonElement\",\n \"SVGPolylineElement\",\n \"SVGPreserveAspectRatio\",\n \"SVGRadialGradientElement\",\n \"SVGRect\",\n \"SVGRectElement\",\n \"SVGRenderingIntent\",\n \"SVGSVGElement\",\n \"SVGScriptElement\",\n \"SVGSetElement\",\n \"SVGStopElement\",\n \"SVGStringList\",\n \"SVGStyleElement\",\n \"SVGSwitchElement\",\n \"SVGSymbolElement\",\n \"SVGTRefElement\",\n \"SVGTSpanElement\",\n \"SVGTextContentElement\",\n \"SVGTextElement\",\n \"SVGTextPathElement\",\n \"SVGTextPositioningElement\",\n \"SVGTitleElement\",\n \"SVGTransform\",\n \"SVGTransformList\",\n \"SVGUnitTypes\",\n \"SVGUseElement\",\n \"SVGVKernElement\",\n \"SVGViewElement\",\n \"SVGViewSpec\",\n \"SVGZoomAndPan\",\n \"SVGZoomEvent\",\n \"SVG_ANGLETYPE_DEG\",\n \"SVG_ANGLETYPE_GRAD\",\n \"SVG_ANGLETYPE_RAD\",\n \"SVG_ANGLETYPE_UNKNOWN\",\n \"SVG_ANGLETYPE_UNSPECIFIED\",\n \"SVG_CHANNEL_A\",\n \"SVG_CHANNEL_B\",\n \"SVG_CHANNEL_G\",\n \"SVG_CHANNEL_R\",\n \"SVG_CHANNEL_UNKNOWN\",\n \"SVG_COLORTYPE_CURRENTCOLOR\",\n \"SVG_COLORTYPE_RGBCOLOR\",\n \"SVG_COLORTYPE_RGBCOLOR_ICCCOLOR\",\n \"SVG_COLORTYPE_UNKNOWN\",\n \"SVG_EDGEMODE_DUPLICATE\",\n \"SVG_EDGEMODE_NONE\",\n \"SVG_EDGEMODE_UNKNOWN\",\n \"SVG_EDGEMODE_WRAP\",\n \"SVG_FEBLEND_MODE_COLOR\",\n \"SVG_FEBLEND_MODE_COLOR_BURN\",\n \"SVG_FEBLEND_MODE_COLOR_DODGE\",\n \"SVG_FEBLEND_MODE_DARKEN\",\n \"SVG_FEBLEND_MODE_DIFFERENCE\",\n \"SVG_FEBLEND_MODE_EXCLUSION\",\n \"SVG_FEBLEND_MODE_HARD_LIGHT\",\n \"SVG_FEBLEND_MODE_HUE\",\n \"SVG_FEBLEND_MODE_LIGHTEN\",\n \"SVG_FEBLEND_MODE_LUMINOSITY\",\n \"SVG_FEBLEND_MODE_MULTIPLY\",\n \"SVG_FEBLEND_MODE_NORMAL\",\n \"SVG_FEBLEND_MODE_OVERLAY\",\n \"SVG_FEBLEND_MODE_SATURATION\",\n \"SVG_FEBLEND_MODE_SCREEN\",\n \"SVG_FEBLEND_MODE_SOFT_LIGHT\",\n \"SVG_FEBLEND_MODE_UNKNOWN\",\n \"SVG_FECOLORMATRIX_TYPE_HUEROTATE\",\n \"SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA\",\n \"SVG_FECOLORMATRIX_TYPE_MATRIX\",\n \"SVG_FECOLORMATRIX_TYPE_SATURATE\",\n \"SVG_FECOLORMATRIX_TYPE_UNKNOWN\",\n \"SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE\",\n \"SVG_FECOMPONENTTRANSFER_TYPE_GAMMA\",\n \"SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY\",\n \"SVG_FECOMPONENTTRANSFER_TYPE_LINEAR\",\n \"SVG_FECOMPONENTTRANSFER_TYPE_TABLE\",\n \"SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN\",\n \"SVG_FECOMPOSITE_OPERATOR_ARITHMETIC\",\n \"SVG_FECOMPOSITE_OPERATOR_ATOP\",\n \"SVG_FECOMPOSITE_OPERATOR_IN\",\n \"SVG_FECOMPOSITE_OPERATOR_OUT\",\n \"SVG_FECOMPOSITE_OPERATOR_OVER\",\n \"SVG_FECOMPOSITE_OPERATOR_UNKNOWN\",\n \"SVG_FECOMPOSITE_OPERATOR_XOR\",\n \"SVG_INVALID_VALUE_ERR\",\n \"SVG_LENGTHTYPE_CM\",\n \"SVG_LENGTHTYPE_EMS\",\n \"SVG_LENGTHTYPE_EXS\",\n \"SVG_LENGTHTYPE_IN\",\n \"SVG_LENGTHTYPE_MM\",\n \"SVG_LENGTHTYPE_NUMBER\",\n \"SVG_LENGTHTYPE_PC\",\n \"SVG_LENGTHTYPE_PERCENTAGE\",\n \"SVG_LENGTHTYPE_PT\",\n \"SVG_LENGTHTYPE_PX\",\n \"SVG_LENGTHTYPE_UNKNOWN\",\n \"SVG_MARKERUNITS_STROKEWIDTH\",\n \"SVG_MARKERUNITS_UNKNOWN\",\n \"SVG_MARKERUNITS_USERSPACEONUSE\",\n \"SVG_MARKER_ORIENT_ANGLE\",\n \"SVG_MARKER_ORIENT_AUTO\",\n \"SVG_MARKER_ORIENT_UNKNOWN\",\n \"SVG_MASKTYPE_ALPHA\",\n \"SVG_MASKTYPE_LUMINANCE\",\n \"SVG_MATRIX_NOT_INVERTABLE\",\n \"SVG_MEETORSLICE_MEET\",\n \"SVG_MEETORSLICE_SLICE\",\n \"SVG_MEETORSLICE_UNKNOWN\",\n \"SVG_MORPHOLOGY_OPERATOR_DILATE\",\n \"SVG_MORPHOLOGY_OPERATOR_ERODE\",\n \"SVG_MORPHOLOGY_OPERATOR_UNKNOWN\",\n \"SVG_PAINTTYPE_CURRENTCOLOR\",\n \"SVG_PAINTTYPE_NONE\",\n \"SVG_PAINTTYPE_RGBCOLOR\",\n \"SVG_PAINTTYPE_RGBCOLOR_ICCCOLOR\",\n \"SVG_PAINTTYPE_UNKNOWN\",\n \"SVG_PAINTTYPE_URI\",\n \"SVG_PAINTTYPE_URI_CURRENTCOLOR\",\n \"SVG_PAINTTYPE_URI_NONE\",\n \"SVG_PAINTTYPE_URI_RGBCOLOR\",\n \"SVG_PAINTTYPE_URI_RGBCOLOR_ICCCOLOR\",\n \"SVG_PRESERVEASPECTRATIO_NONE\",\n \"SVG_PRESERVEASPECTRATIO_UNKNOWN\",\n \"SVG_PRESERVEASPECTRATIO_XMAXYMAX\",\n \"SVG_PRESERVEASPECTRATIO_XMAXYMID\",\n \"SVG_PRESERVEASPECTRATIO_XMAXYMIN\",\n \"SVG_PRESERVEASPECTRATIO_XMIDYMAX\",\n \"SVG_PRESERVEASPECTRATIO_XMIDYMID\",\n \"SVG_PRESERVEASPECTRATIO_XMIDYMIN\",\n \"SVG_PRESERVEASPECTRATIO_XMINYMAX\",\n \"SVG_PRESERVEASPECTRATIO_XMINYMID\",\n \"SVG_PRESERVEASPECTRATIO_XMINYMIN\",\n \"SVG_SPREADMETHOD_PAD\",\n \"SVG_SPREADMETHOD_REFLECT\",\n \"SVG_SPREADMETHOD_REPEAT\",\n \"SVG_SPREADMETHOD_UNKNOWN\",\n \"SVG_STITCHTYPE_NOSTITCH\",\n \"SVG_STITCHTYPE_STITCH\",\n \"SVG_STITCHTYPE_UNKNOWN\",\n \"SVG_TRANSFORM_MATRIX\",\n \"SVG_TRANSFORM_ROTATE\",\n \"SVG_TRANSFORM_SCALE\",\n \"SVG_TRANSFORM_SKEWX\",\n \"SVG_TRANSFORM_SKEWY\",\n \"SVG_TRANSFORM_TRANSLATE\",\n \"SVG_TRANSFORM_UNKNOWN\",\n \"SVG_TURBULENCE_TYPE_FRACTALNOISE\",\n \"SVG_TURBULENCE_TYPE_TURBULENCE\",\n \"SVG_TURBULENCE_TYPE_UNKNOWN\",\n \"SVG_UNIT_TYPE_OBJECTBOUNDINGBOX\",\n \"SVG_UNIT_TYPE_UNKNOWN\",\n \"SVG_UNIT_TYPE_USERSPACEONUSE\",\n \"SVG_WRONG_TYPE_ERR\",\n \"SVG_ZOOMANDPAN_DISABLE\",\n \"SVG_ZOOMANDPAN_MAGNIFY\",\n \"SVG_ZOOMANDPAN_UNKNOWN\",\n \"SYNTAX_ERR\",\n \"SavedPages\",\n \"Screen\",\n \"ScreenOrientation\",\n \"Script\",\n \"ScriptProcessorNode\",\n \"ScrollAreaEvent\",\n \"SecurityPolicyViolationEvent\",\n \"Selection\",\n \"ServiceWorker\",\n \"ServiceWorkerContainer\",\n \"ServiceWorkerRegistration\",\n \"SessionDescription\",\n \"Set\",\n \"ShadowRoot\",\n \"SharedWorker\",\n \"SimpleGestureEvent\",\n \"SpeechSynthesisEvent\",\n \"SpeechSynthesisUtterance\",\n \"StopIteration\",\n \"Storage\",\n \"StorageEvent\",\n \"String\",\n \"StyleSheet\",\n \"StyleSheetList\",\n \"SubtleCrypto\",\n \"Symbol\",\n \"SyntaxError\",\n \"TEMPORARY\",\n \"TEXTPATH_METHODTYPE_ALIGN\",\n \"TEXTPATH_METHODTYPE_STRETCH\",\n \"TEXTPATH_METHODTYPE_UNKNOWN\",\n \"TEXTPATH_SPACINGTYPE_AUTO\",\n \"TEXTPATH_SPACINGTYPE_EXACT\",\n \"TEXTPATH_SPACINGTYPE_UNKNOWN\",\n \"TEXTURE\",\n \"TEXTURE0\",\n \"TEXTURE1\",\n \"TEXTURE10\",\n \"TEXTURE11\",\n \"TEXTURE12\",\n \"TEXTURE13\",\n \"TEXTURE14\",\n \"TEXTURE15\",\n \"TEXTURE16\",\n \"TEXTURE17\",\n \"TEXTURE18\",\n \"TEXTURE19\",\n \"TEXTURE2\",\n \"TEXTURE20\",\n \"TEXTURE21\",\n \"TEXTURE22\",\n \"TEXTURE23\",\n \"TEXTURE24\",\n \"TEXTURE25\",\n \"TEXTURE26\",\n \"TEXTURE27\",\n \"TEXTURE28\",\n \"TEXTURE29\",\n \"TEXTURE3\",\n \"TEXTURE30\",\n \"TEXTURE31\",\n \"TEXTURE4\",\n \"TEXTURE5\",\n \"TEXTURE6\",\n \"TEXTURE7\",\n \"TEXTURE8\",\n \"TEXTURE9\",\n \"TEXTURE_2D\",\n \"TEXTURE_BINDING_2D\",\n \"TEXTURE_BINDING_CUBE_MAP\",\n \"TEXTURE_CUBE_MAP\",\n \"TEXTURE_CUBE_MAP_NEGATIVE_X\",\n \"TEXTURE_CUBE_MAP_NEGATIVE_Y\",\n \"TEXTURE_CUBE_MAP_NEGATIVE_Z\",\n \"TEXTURE_CUBE_MAP_POSITIVE_X\",\n \"TEXTURE_CUBE_MAP_POSITIVE_Y\",\n \"TEXTURE_CUBE_MAP_POSITIVE_Z\",\n \"TEXTURE_MAG_FILTER\",\n \"TEXTURE_MAX_ANISOTROPY_EXT\",\n \"TEXTURE_MIN_FILTER\",\n \"TEXTURE_WRAP_S\",\n \"TEXTURE_WRAP_T\",\n \"TEXT_NODE\",\n \"TIMEOUT\",\n \"TIMEOUT_ERR\",\n \"TOO_LARGE_ERR\",\n \"TRANSACTION_INACTIVE_ERR\",\n \"TRIANGLE\",\n \"TRIANGLES\",\n \"TRIANGLE_FAN\",\n \"TRIANGLE_STRIP\",\n \"TYPE_BACK_FORWARD\",\n \"TYPE_ERR\",\n \"TYPE_MISMATCH_ERR\",\n \"TYPE_NAVIGATE\",\n \"TYPE_RELOAD\",\n \"TYPE_RESERVED\",\n \"Text\",\n \"TextDecoder\",\n \"TextEncoder\",\n \"TextEvent\",\n \"TextMetrics\",\n \"TextTrack\",\n \"TextTrackCue\",\n \"TextTrackCueList\",\n \"TextTrackList\",\n \"TimeEvent\",\n \"TimeRanges\",\n \"Touch\",\n \"TouchEvent\",\n \"TouchList\",\n \"TrackEvent\",\n \"TransitionEvent\",\n \"TreeWalker\",\n \"TypeError\",\n \"UIEvent\",\n \"UNCACHED\",\n \"UNKNOWN_ERR\",\n \"UNKNOWN_RULE\",\n \"UNMASKED_RENDERER_WEBGL\",\n \"UNMASKED_VENDOR_WEBGL\",\n \"UNORDERED_NODE_ITERATOR_TYPE\",\n \"UNORDERED_NODE_SNAPSHOT_TYPE\",\n \"UNPACK_ALIGNMENT\",\n \"UNPACK_COLORSPACE_CONVERSION_WEBGL\",\n \"UNPACK_FLIP_Y_WEBGL\",\n \"UNPACK_PREMULTIPLY_ALPHA_WEBGL\",\n \"UNSCHEDULED_STATE\",\n \"UNSENT\",\n \"UNSIGNED_BYTE\",\n \"UNSIGNED_INT\",\n \"UNSIGNED_SHORT\",\n \"UNSIGNED_SHORT_4_4_4_4\",\n \"UNSIGNED_SHORT_5_5_5_1\",\n \"UNSIGNED_SHORT_5_6_5\",\n \"UNSPECIFIED_EVENT_TYPE_ERR\",\n \"UPDATEREADY\",\n \"URIError\",\n \"URL\",\n \"URLSearchParams\",\n \"URLUnencoded\",\n \"URL_MISMATCH_ERR\",\n \"UTC\",\n \"Uint16Array\",\n \"Uint32Array\",\n \"Uint8Array\",\n \"Uint8ClampedArray\",\n \"UserMessageHandler\",\n \"UserMessageHandlersNamespace\",\n \"UserProximityEvent\",\n \"VALIDATE_STATUS\",\n \"VALIDATION_ERR\",\n \"VARIABLES_RULE\",\n \"VENDOR\",\n \"VERSION\",\n \"VERSION_CHANGE\",\n \"VERSION_ERR\",\n \"VERTEX_ATTRIB_ARRAY_BUFFER_BINDING\",\n \"VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE\",\n \"VERTEX_ATTRIB_ARRAY_ENABLED\",\n \"VERTEX_ATTRIB_ARRAY_NORMALIZED\",\n \"VERTEX_ATTRIB_ARRAY_POINTER\",\n \"VERTEX_ATTRIB_ARRAY_SIZE\",\n \"VERTEX_ATTRIB_ARRAY_STRIDE\",\n \"VERTEX_ATTRIB_ARRAY_TYPE\",\n \"VERTEX_SHADER\",\n \"VERTICAL\",\n \"VERTICAL_AXIS\",\n \"VER_ERR\",\n \"VIEWPORT\",\n \"VIEWPORT_RULE\",\n \"VTTCue\",\n \"VTTRegion\",\n \"ValidityState\",\n \"VideoStreamTrack\",\n \"WEBKIT_FILTER_RULE\",\n \"WEBKIT_KEYFRAMES_RULE\",\n \"WEBKIT_KEYFRAME_RULE\",\n \"WEBKIT_REGION_RULE\",\n \"WRONG_DOCUMENT_ERR\",\n \"WaveShaperNode\",\n \"WeakMap\",\n \"WeakSet\",\n \"WebGLActiveInfo\",\n \"WebGLBuffer\",\n \"WebGLContextEvent\",\n \"WebGLFramebuffer\",\n \"WebGLProgram\",\n \"WebGLRenderbuffer\",\n \"WebGLRenderingContext\",\n \"WebGLShader\",\n \"WebGLShaderPrecisionFormat\",\n \"WebGLTexture\",\n \"WebGLUniformLocation\",\n \"WebGLVertexArray\",\n \"WebKitAnimationEvent\",\n \"WebKitBlobBuilder\",\n \"WebKitCSSFilterRule\",\n \"WebKitCSSFilterValue\",\n \"WebKitCSSKeyframeRule\",\n \"WebKitCSSKeyframesRule\",\n \"WebKitCSSMatrix\",\n \"WebKitCSSRegionRule\",\n \"WebKitCSSTransformValue\",\n \"WebKitDataCue\",\n \"WebKitGamepad\",\n \"WebKitMediaKeyError\",\n \"WebKitMediaKeyMessageEvent\",\n \"WebKitMediaKeySession\",\n \"WebKitMediaKeys\",\n \"WebKitMediaSource\",\n \"WebKitMutationObserver\",\n \"WebKitNamespace\",\n \"WebKitPlaybackTargetAvailabilityEvent\",\n \"WebKitPoint\",\n \"WebKitShadowRoot\",\n \"WebKitSourceBuffer\",\n \"WebKitSourceBufferList\",\n \"WebKitTransitionEvent\",\n \"WebSocket\",\n \"WheelEvent\",\n \"Window\",\n \"Worker\",\n \"XMLDocument\",\n \"XMLHttpRequest\",\n \"XMLHttpRequestEventTarget\",\n \"XMLHttpRequestException\",\n \"XMLHttpRequestProgressEvent\",\n \"XMLHttpRequestUpload\",\n \"XMLSerializer\",\n \"XMLStylesheetProcessingInstruction\",\n \"XPathEvaluator\",\n \"XPathException\",\n \"XPathExpression\",\n \"XPathNSResolver\",\n \"XPathResult\",\n \"XSLTProcessor\",\n \"ZERO\",\n \"_XD0M_\",\n \"_YD0M_\",\n \"__defineGetter__\",\n \"__defineSetter__\",\n \"__lookupGetter__\",\n \"__lookupSetter__\",\n \"__opera\",\n \"__proto__\",\n \"_browserjsran\",\n \"a\",\n \"aLink\",\n \"abbr\",\n \"abort\",\n \"abs\",\n \"absolute\",\n \"acceleration\",\n \"accelerationIncludingGravity\",\n \"accelerator\",\n \"accept\",\n \"acceptCharset\",\n \"acceptNode\",\n \"accessKey\",\n \"accessKeyLabel\",\n \"accuracy\",\n \"acos\",\n \"acosh\",\n \"action\",\n \"actionURL\",\n \"active\",\n \"activeCues\",\n \"activeElement\",\n \"activeSourceBuffers\",\n \"activeSourceCount\",\n \"activeTexture\",\n \"add\",\n \"addBehavior\",\n \"addCandidate\",\n \"addColorStop\",\n \"addCue\",\n \"addElement\",\n \"addEventListener\",\n \"addFilter\",\n \"addFromString\",\n \"addFromUri\",\n \"addIceCandidate\",\n \"addImport\",\n \"addListener\",\n \"addNamed\",\n \"addPageRule\",\n \"addPath\",\n \"addPointer\",\n \"addRange\",\n \"addRegion\",\n \"addRule\",\n \"addSearchEngine\",\n \"addSourceBuffer\",\n \"addStream\",\n \"addTextTrack\",\n \"addTrack\",\n \"addWakeLockListener\",\n \"addedNodes\",\n \"additionalName\",\n \"additiveSymbols\",\n \"addons\",\n \"adoptNode\",\n \"adr\",\n \"advance\",\n \"alert\",\n \"algorithm\",\n \"align\",\n \"align-content\",\n \"align-items\",\n \"align-self\",\n \"alignContent\",\n \"alignItems\",\n \"alignSelf\",\n \"alignmentBaseline\",\n \"alinkColor\",\n \"all\",\n \"allSettled\",\n \"allowFullscreen\",\n \"allowedDirections\",\n \"alpha\",\n \"alt\",\n \"altGraphKey\",\n \"altHtml\",\n \"altKey\",\n \"altLeft\",\n \"altitude\",\n \"altitudeAccuracy\",\n \"amplitude\",\n \"ancestorOrigins\",\n \"anchor\",\n \"anchorNode\",\n \"anchorOffset\",\n \"anchors\",\n \"angle\",\n \"animVal\",\n \"animate\",\n \"animatedInstanceRoot\",\n \"animatedNormalizedPathSegList\",\n \"animatedPathSegList\",\n \"animatedPoints\",\n \"animation\",\n \"animation-delay\",\n \"animation-direction\",\n \"animation-duration\",\n \"animation-fill-mode\",\n \"animation-iteration-count\",\n \"animation-name\",\n \"animation-play-state\",\n \"animation-timing-function\",\n \"animationDelay\",\n \"animationDirection\",\n \"animationDuration\",\n \"animationFillMode\",\n \"animationIterationCount\",\n \"animationName\",\n \"animationPlayState\",\n \"animationStartTime\",\n \"animationTimingFunction\",\n \"animationsPaused\",\n \"anniversary\",\n \"any\",\n \"app\",\n \"appCodeName\",\n \"appMinorVersion\",\n \"appName\",\n \"appNotifications\",\n \"appVersion\",\n \"append\",\n \"appendBuffer\",\n \"appendChild\",\n \"appendData\",\n \"appendItem\",\n \"appendMedium\",\n \"appendNamed\",\n \"appendRule\",\n \"appendStream\",\n \"appendWindowEnd\",\n \"appendWindowStart\",\n \"applets\",\n \"applicationCache\",\n \"apply\",\n \"applyElement\",\n \"arc\",\n \"arcTo\",\n \"archive\",\n \"areas\",\n \"arguments\",\n \"arrayBuffer\",\n \"asin\",\n \"asinh\",\n \"assert\",\n \"assign\",\n \"async\",\n \"atEnd\",\n \"atan\",\n \"atan2\",\n \"atanh\",\n \"atob\",\n \"attachEvent\",\n \"attachShader\",\n \"attachShadow\",\n \"attachments\",\n \"attack\",\n \"attrChange\",\n \"attrName\",\n \"attributeFilter\",\n \"attributeName\",\n \"attributeNamespace\",\n \"attributeOldValue\",\n \"attributes\",\n \"audioTracks\",\n \"autoIncrement\",\n \"autobuffer\",\n \"autocapitalize\",\n \"autocomplete\",\n \"autocorrect\",\n \"autofocus\",\n \"autoplay\",\n \"availHeight\",\n \"availLeft\",\n \"availTop\",\n \"availWidth\",\n \"availability\",\n \"available\",\n \"aversion\",\n \"axes\",\n \"axis\",\n \"azimuth\",\n \"b\",\n \"back\",\n \"backface-visibility\",\n \"backfaceVisibility\",\n \"background\",\n \"background-attachment\",\n \"background-blend-mode\",\n \"background-clip\",\n \"background-color\",\n \"background-image\",\n \"background-origin\",\n \"background-position\",\n \"background-repeat\",\n \"background-size\",\n \"backgroundAttachment\",\n \"backgroundBlendMode\",\n \"backgroundClip\",\n \"backgroundColor\",\n \"backgroundImage\",\n \"backgroundOrigin\",\n \"backgroundPosition\",\n \"backgroundPositionX\",\n \"backgroundPositionY\",\n \"backgroundRepeat\",\n \"backgroundSize\",\n \"badInput\",\n \"balance\",\n \"baseFrequencyX\",\n \"baseFrequencyY\",\n \"baseNode\",\n \"baseOffset\",\n \"baseURI\",\n \"baseVal\",\n \"baselineShift\",\n \"battery\",\n \"bday\",\n \"beginElement\",\n \"beginElementAt\",\n \"beginPath\",\n \"behavior\",\n \"behaviorCookie\",\n \"behaviorPart\",\n \"behaviorUrns\",\n \"beta\",\n \"bezierCurveTo\",\n \"bgColor\",\n \"bgProperties\",\n \"bias\",\n \"big\",\n \"binaryType\",\n \"bind\",\n \"bindAttribLocation\",\n \"bindBuffer\",\n \"bindFramebuffer\",\n \"bindRenderbuffer\",\n \"bindTexture\",\n \"blendColor\",\n \"blendEquation\",\n \"blendEquationSeparate\",\n \"blendFunc\",\n \"blendFuncSeparate\",\n \"blink\",\n \"blob\",\n \"blockDirection\",\n \"blue\",\n \"blur\",\n \"body\",\n \"bodyUsed\",\n \"bold\",\n \"bookmarks\",\n \"booleanValue\",\n \"border\",\n \"border-bottom\",\n \"border-bottom-color\",\n \"border-bottom-left-radius\",\n \"border-bottom-right-radius\",\n \"border-bottom-style\",\n \"border-bottom-width\",\n \"border-collapse\",\n \"border-color\",\n \"border-image\",\n \"border-image-outset\",\n \"border-image-repeat\",\n \"border-image-slice\",\n \"border-image-source\",\n \"border-image-width\",\n \"border-left\",\n \"border-left-color\",\n \"border-left-style\",\n \"border-left-width\",\n \"border-radius\",\n \"border-right\",\n \"border-right-color\",\n \"border-right-style\",\n \"border-right-width\",\n \"border-spacing\",\n \"border-style\",\n \"border-top\",\n \"border-top-color\",\n \"border-top-left-radius\",\n \"border-top-right-radius\",\n \"border-top-style\",\n \"border-top-width\",\n \"border-width\",\n \"borderBottom\",\n \"borderBottomColor\",\n \"borderBottomLeftRadius\",\n \"borderBottomRightRadius\",\n \"borderBottomStyle\",\n \"borderBottomWidth\",\n \"borderCollapse\",\n \"borderColor\",\n \"borderColorDark\",\n \"borderColorLight\",\n \"borderImage\",\n \"borderImageOutset\",\n \"borderImageRepeat\",\n \"borderImageSlice\",\n \"borderImageSource\",\n \"borderImageWidth\",\n \"borderLeft\",\n \"borderLeftColor\",\n \"borderLeftStyle\",\n \"borderLeftWidth\",\n \"borderRadius\",\n \"borderRight\",\n \"borderRightColor\",\n \"borderRightStyle\",\n \"borderRightWidth\",\n \"borderSpacing\",\n \"borderStyle\",\n \"borderTop\",\n \"borderTopColor\",\n \"borderTopLeftRadius\",\n \"borderTopRightRadius\",\n \"borderTopStyle\",\n \"borderTopWidth\",\n \"borderWidth\",\n \"bottom\",\n \"bottomMargin\",\n \"bound\",\n \"boundElements\",\n \"boundingClientRect\",\n \"boundingHeight\",\n \"boundingLeft\",\n \"boundingTop\",\n \"boundingWidth\",\n \"bounds\",\n \"box-decoration-break\",\n \"box-shadow\",\n \"box-sizing\",\n \"boxDecorationBreak\",\n \"boxShadow\",\n \"boxSizing\",\n \"breakAfter\",\n \"breakBefore\",\n \"breakInside\",\n \"browserLanguage\",\n \"btoa\",\n \"bubbles\",\n \"buffer\",\n \"bufferData\",\n \"bufferDepth\",\n \"bufferSize\",\n \"bufferSubData\",\n \"buffered\",\n \"bufferedAmount\",\n \"buildID\",\n \"buildNumber\",\n \"button\",\n \"buttonID\",\n \"buttons\",\n \"byteLength\",\n \"byteOffset\",\n \"c\",\n \"call\",\n \"caller\",\n \"canBeFormatted\",\n \"canBeMounted\",\n \"canBeShared\",\n \"canHaveChildren\",\n \"canHaveHTML\",\n \"canPlayType\",\n \"cancel\",\n \"cancelAnimationFrame\",\n \"cancelBubble\",\n \"cancelScheduledValues\",\n \"cancelable\",\n \"candidate\",\n \"canvas\",\n \"caption\",\n \"caption-side\",\n \"captionSide\",\n \"capture\",\n \"captureEvents\",\n \"captureStackTrace\",\n \"caretPositionFromPoint\",\n \"caretRangeFromPoint\",\n \"cast\",\n \"catch\",\n \"category\",\n \"cbrt\",\n \"cd\",\n \"ceil\",\n \"cellIndex\",\n \"cellPadding\",\n \"cellSpacing\",\n \"cells\",\n \"ch\",\n \"chOff\",\n \"chain\",\n \"challenge\",\n \"changedTouches\",\n \"channel\",\n \"channelCount\",\n \"channelCountMode\",\n \"channelInterpretation\",\n \"char\",\n \"charAt\",\n \"charCode\",\n \"charCodeAt\",\n \"charIndex\",\n \"characterData\",\n \"characterDataOldValue\",\n \"characterSet\",\n \"charging\",\n \"chargingTime\",\n \"charset\",\n \"checkEnclosure\",\n \"checkFramebufferStatus\",\n \"checkIntersection\",\n \"checkValidity\",\n \"checked\",\n \"childElementCount\",\n \"childList\",\n \"childNodes\",\n \"children\",\n \"chrome\",\n \"ciphertext\",\n \"cite\",\n \"classList\",\n \"className\",\n \"classid\",\n \"clear\",\n \"clearAttributes\",\n \"clearColor\",\n \"clearData\",\n \"clearDepth\",\n \"clearImmediate\",\n \"clearInterval\",\n \"clearMarks\",\n \"clearMeasures\",\n \"clearParameters\",\n \"clearRect\",\n \"clearResourceTimings\",\n \"clearShadow\",\n \"clearStencil\",\n \"clearTimeout\",\n \"clearWatch\",\n \"click\",\n \"clickCount\",\n \"clientHeight\",\n \"clientInformation\",\n \"clientLeft\",\n \"clientRect\",\n \"clientRects\",\n \"clientTop\",\n \"clientWidth\",\n \"clientX\",\n \"clientY\",\n \"clip\",\n \"clip-path\",\n \"clip-rule\",\n \"clipBottom\",\n \"clipLeft\",\n \"clipPath\",\n \"clipPathUnits\",\n \"clipRight\",\n \"clipRule\",\n \"clipTop\",\n \"clipboardData\",\n \"clone\",\n \"cloneContents\",\n \"cloneNode\",\n \"cloneRange\",\n \"close\",\n \"closePath\",\n \"closed\",\n \"closest\",\n \"clz\",\n \"clz32\",\n \"cmp\",\n \"code\",\n \"codeBase\",\n \"codePointAt\",\n \"codeType\",\n \"colSpan\",\n \"collapse\",\n \"collapseToEnd\",\n \"collapseToStart\",\n \"collapsed\",\n \"collect\",\n \"colno\",\n \"color\",\n \"color-interpolation\",\n \"color-interpolation-filters\",\n \"colorDepth\",\n \"colorInterpolation\",\n \"colorInterpolationFilters\",\n \"colorMask\",\n \"colorType\",\n \"cols\",\n \"columnCount\",\n \"columnFill\",\n \"columnGap\",\n \"columnNumber\",\n \"columnRule\",\n \"columnRuleColor\",\n \"columnRuleStyle\",\n \"columnRuleWidth\",\n \"columnSpan\",\n \"columnWidth\",\n \"columns\",\n \"command\",\n \"commitPreferences\",\n \"commonAncestorContainer\",\n \"compact\",\n \"compareBoundaryPoints\",\n \"compareDocumentPosition\",\n \"compareEndPoints\",\n \"compareNode\",\n \"comparePoint\",\n \"compatMode\",\n \"compatible\",\n \"compile\",\n \"compileShader\",\n \"complete\",\n \"componentFromPoint\",\n \"compositionEndOffset\",\n \"compositionStartOffset\",\n \"compressedTexImage2D\",\n \"compressedTexSubImage2D\",\n \"concat\",\n \"conditionText\",\n \"coneInnerAngle\",\n \"coneOuterAngle\",\n \"coneOuterGain\",\n \"confirm\",\n \"confirmComposition\",\n \"confirmSiteSpecificTrackingException\",\n \"confirmWebWideTrackingException\",\n \"connect\",\n \"connectEnd\",\n \"connectStart\",\n \"connected\",\n \"connection\",\n \"connectionSpeed\",\n \"console\",\n \"consolidate\",\n \"constrictionActive\",\n \"constructor\",\n \"contactID\",\n \"contains\",\n \"containsNode\",\n \"content\",\n \"contentDocument\",\n \"contentEditable\",\n \"contentOverflow\",\n \"contentScriptType\",\n \"contentStyleType\",\n \"contentType\",\n \"contentWindow\",\n \"context\",\n \"contextMenu\",\n \"contextmenu\",\n \"continue\",\n \"continuous\",\n \"control\",\n \"controller\",\n \"controls\",\n \"convertToSpecifiedUnits\",\n \"cookie\",\n \"cookieEnabled\",\n \"coords\",\n \"copyFromChannel\",\n \"copyTexImage2D\",\n \"copyTexSubImage2D\",\n \"copyToChannel\",\n \"copyWithin\",\n \"correspondingElement\",\n \"correspondingUseElement\",\n \"cos\",\n \"cosh\",\n \"count\",\n \"counter-increment\",\n \"counter-reset\",\n \"counterIncrement\",\n \"counterReset\",\n \"cpuClass\",\n \"cpuSleepAllowed\",\n \"create\",\n \"createAnalyser\",\n \"createAnswer\",\n \"createAttribute\",\n \"createAttributeNS\",\n \"createBiquadFilter\",\n \"createBuffer\",\n \"createBufferSource\",\n \"createCDATASection\",\n \"createCSSStyleSheet\",\n \"createCaption\",\n \"createChannelMerger\",\n \"createChannelSplitter\",\n \"createComment\",\n \"createContextualFragment\",\n \"createControlRange\",\n \"createConvolver\",\n \"createDTMFSender\",\n \"createDataChannel\",\n \"createDelay\",\n \"createDelayNode\",\n \"createDocument\",\n \"createDocumentFragment\",\n \"createDocumentType\",\n \"createDynamicsCompressor\",\n \"createElement\",\n \"createElementNS\",\n \"createEntityReference\",\n \"createEvent\",\n \"createEventObject\",\n \"createExpression\",\n \"createFramebuffer\",\n \"createFunction\",\n \"createGain\",\n \"createGainNode\",\n \"createHTMLDocument\",\n \"createImageBitmap\",\n \"createImageData\",\n \"createIndex\",\n \"createJavaScriptNode\",\n \"createLinearGradient\",\n \"createMediaElementSource\",\n \"createMediaKeys\",\n \"createMediaStreamDestination\",\n \"createMediaStreamSource\",\n \"createMutableFile\",\n \"createNSResolver\",\n \"createNodeIterator\",\n \"createNotification\",\n \"createObjectStore\",\n \"createObjectURL\",\n \"createOffer\",\n \"createOscillator\",\n \"createPanner\",\n \"createPattern\",\n \"createPeriodicWave\",\n \"createPopup\",\n \"createProcessingInstruction\",\n \"createProgram\",\n \"createRadialGradient\",\n \"createRange\",\n \"createRangeCollection\",\n \"createRenderbuffer\",\n \"createSVGAngle\",\n \"createSVGLength\",\n \"createSVGMatrix\",\n \"createSVGNumber\",\n \"createSVGPathSegArcAbs\",\n \"createSVGPathSegArcRel\",\n \"createSVGPathSegClosePath\",\n \"createSVGPathSegCurvetoCubicAbs\",\n \"createSVGPathSegCurvetoCubicRel\",\n \"createSVGPathSegCurvetoCubicSmoothAbs\",\n \"createSVGPathSegCurvetoCubicSmoothRel\",\n \"createSVGPathSegCurvetoQuadraticAbs\",\n \"createSVGPathSegCurvetoQuadraticRel\",\n \"createSVGPathSegCurvetoQuadraticSmoothAbs\",\n \"createSVGPathSegCurvetoQuadraticSmoothRel\",\n \"createSVGPathSegLinetoAbs\",\n \"createSVGPathSegLinetoHorizontalAbs\",\n \"createSVGPathSegLinetoHorizontalRel\",\n \"createSVGPathSegLinetoRel\",\n \"createSVGPathSegLinetoVerticalAbs\",\n \"createSVGPathSegLinetoVerticalRel\",\n \"createSVGPathSegMovetoAbs\",\n \"createSVGPathSegMovetoRel\",\n \"createSVGPoint\",\n \"createSVGRect\",\n \"createSVGTransform\",\n \"createSVGTransformFromMatrix\",\n \"createScriptProcessor\",\n \"createSession\",\n \"createShader\",\n \"createShadowRoot\",\n \"createStereoPanner\",\n \"createStyleSheet\",\n \"createTBody\",\n \"createTFoot\",\n \"createTHead\",\n \"createTextNode\",\n \"createTextRange\",\n \"createTexture\",\n \"createTouch\",\n \"createTouchList\",\n \"createTreeWalker\",\n \"createWaveShaper\",\n \"creationTime\",\n \"crossOrigin\",\n \"crypto\",\n \"csi\",\n \"cssFloat\",\n \"cssRules\",\n \"cssText\",\n \"cssValueType\",\n \"ctrlKey\",\n \"ctrlLeft\",\n \"cues\",\n \"cullFace\",\n \"currentNode\",\n \"currentPage\",\n \"currentScale\",\n \"currentScript\",\n \"currentSrc\",\n \"currentState\",\n \"currentStyle\",\n \"currentTarget\",\n \"currentTime\",\n \"currentTranslate\",\n \"currentView\",\n \"cursor\",\n \"curve\",\n \"customError\",\n \"cx\",\n \"cy\",\n \"d\",\n \"data\",\n \"dataFld\",\n \"dataFormatAs\",\n \"dataPageSize\",\n \"dataSrc\",\n \"dataTransfer\",\n \"database\",\n \"dataset\",\n \"dateTime\",\n \"db\",\n \"debug\",\n \"debuggerEnabled\",\n \"declare\",\n \"decode\",\n \"decodeAudioData\",\n \"decodeURI\",\n \"decodeURIComponent\",\n \"decodingInfo\",\n \"decrypt\",\n \"default\",\n \"defaultCharset\",\n \"defaultChecked\",\n \"defaultMuted\",\n \"defaultPlaybackRate\",\n \"defaultPrevented\",\n \"defaultSelected\",\n \"defaultStatus\",\n \"defaultURL\",\n \"defaultValue\",\n \"defaultView\",\n \"defaultstatus\",\n \"defer\",\n \"defineMagicFunction\",\n \"defineMagicVariable\",\n \"defineProperties\",\n \"defineProperty\",\n \"delayTime\",\n \"delete\",\n \"deleteBuffer\",\n \"deleteCaption\",\n \"deleteCell\",\n \"deleteContents\",\n \"deleteData\",\n \"deleteDatabase\",\n \"deleteFramebuffer\",\n \"deleteFromDocument\",\n \"deleteIndex\",\n \"deleteMedium\",\n \"deleteObjectStore\",\n \"deleteProgram\",\n \"deleteRenderbuffer\",\n \"deleteRow\",\n \"deleteRule\",\n \"deleteShader\",\n \"deleteTFoot\",\n \"deleteTHead\",\n \"deleteTexture\",\n \"deliverChangeRecords\",\n \"delivery\",\n \"deliveryInfo\",\n \"deliveryStatus\",\n \"deliveryTimestamp\",\n \"delta\",\n \"deltaMode\",\n \"deltaX\",\n \"deltaY\",\n \"deltaZ\",\n \"depthFunc\",\n \"depthMask\",\n \"depthRange\",\n \"deriveBits\",\n \"deriveKey\",\n \"description\",\n \"deselectAll\",\n \"designMode\",\n \"destination\",\n \"destinationURL\",\n \"detach\",\n \"detachEvent\",\n \"detachShader\",\n \"detail\",\n \"detune\",\n \"devicePixelRatio\",\n \"deviceXDPI\",\n \"deviceYDPI\",\n \"diffuseConstant\",\n \"digest\",\n \"dimensions\",\n \"dir\",\n \"dirName\",\n \"direction\",\n \"dirxml\",\n \"disable\",\n \"disableVertexAttribArray\",\n \"disabled\",\n \"dischargingTime\",\n \"disconnect\",\n \"dispatchEvent\",\n \"display\",\n \"distanceModel\",\n \"divisor\",\n \"djsapi\",\n \"djsproxy\",\n \"doImport\",\n \"doNotTrack\",\n \"doScroll\",\n \"doctype\",\n \"document\",\n \"documentElement\",\n \"documentMode\",\n \"documentURI\",\n \"dolphin\",\n \"dolphinGameCenter\",\n \"dolphininfo\",\n \"dolphinmeta\",\n \"domComplete\",\n \"domContentLoadedEventEnd\",\n \"domContentLoadedEventStart\",\n \"domInteractive\",\n \"domLoading\",\n \"domain\",\n \"domainLookupEnd\",\n \"domainLookupStart\",\n \"dominant-baseline\",\n \"dominantBaseline\",\n \"done\",\n \"dopplerFactor\",\n \"download\",\n \"dragDrop\",\n \"draggable\",\n \"drawArrays\",\n \"drawArraysInstancedANGLE\",\n \"drawCustomFocusRing\",\n \"drawElements\",\n \"drawElementsInstancedANGLE\",\n \"drawFocusIfNeeded\",\n \"drawImage\",\n \"drawImageFromRect\",\n \"drawSystemFocusRing\",\n \"drawingBufferHeight\",\n \"drawingBufferWidth\",\n \"dropEffect\",\n \"droppedVideoFrames\",\n \"dropzone\",\n \"dump\",\n \"duplicate\",\n \"duration\",\n \"dvname\",\n \"dvnum\",\n \"dx\",\n \"dy\",\n \"dynsrc\",\n \"e\",\n \"edgeMode\",\n \"effectAllowed\",\n \"elapsedTime\",\n \"elementFromPoint\",\n \"elements\",\n \"elevation\",\n \"ellipse\",\n \"email\",\n \"embeds\",\n \"empty\",\n \"empty-cells\",\n \"emptyCells\",\n \"enable\",\n \"enableBackground\",\n \"enableStyleSheetsForSet\",\n \"enableVertexAttribArray\",\n \"enabled\",\n \"enabledPlugin\",\n \"encode\",\n \"encodeURI\",\n \"encodeURIComponent\",\n \"encoding\",\n \"encrypt\",\n \"enctype\",\n \"end\",\n \"endContainer\",\n \"endElement\",\n \"endElementAt\",\n \"endOfStream\",\n \"endOffset\",\n \"endTime\",\n \"ended\",\n \"endsWith\",\n \"entities\",\n \"entries\",\n \"entryType\",\n \"enumerate\",\n \"enumerateEditable\",\n \"error\",\n \"errorCode\",\n \"escape\",\n \"eval\",\n \"evaluate\",\n \"event\",\n \"eventPhase\",\n \"every\",\n \"exception\",\n \"exec\",\n \"execCommand\",\n \"execCommandShowHelp\",\n \"execScript\",\n \"exitFullscreen\",\n \"exitPointerLock\",\n \"exp\",\n \"expand\",\n \"expandEntityReferences\",\n \"expando\",\n \"expansion\",\n \"expiryDate\",\n \"explicitOriginalTarget\",\n \"expm1\",\n \"exponent\",\n \"exponentialRampToValueAtTime\",\n \"exportKey\",\n \"extend\",\n \"extensions\",\n \"extentNode\",\n \"extentOffset\",\n \"external\",\n \"externalResourcesRequired\",\n \"extractContents\",\n \"extractable\",\n \"f\",\n \"face\",\n \"factoryReset\",\n \"fallback\",\n \"familyName\",\n \"farthestViewportElement\",\n \"fastSeek\",\n \"fatal\",\n \"fetch\",\n \"fetchStart\",\n \"fftSize\",\n \"fgColor\",\n \"fileCreatedDate\",\n \"fileHandle\",\n \"fileModifiedDate\",\n \"fileName\",\n \"fileSize\",\n \"fileUpdatedDate\",\n \"filename\",\n \"files\",\n \"fill\",\n \"fill-opacity\",\n \"fill-rule\",\n \"fillOpacity\",\n \"fillRect\",\n \"fillRule\",\n \"fillStyle\",\n \"fillText\",\n \"filter\",\n \"filterResX\",\n \"filterResY\",\n \"filterUnits\",\n \"filters\",\n \"finally\",\n \"find\",\n \"findIndex\",\n \"findRule\",\n \"findText\",\n \"finish\",\n \"fireEvent\",\n \"firstChild\",\n \"firstElementChild\",\n \"firstPage\",\n \"fixed\",\n \"flex\",\n \"flex-basis\",\n \"flex-direction\",\n \"flex-flow\",\n \"flex-grow\",\n \"flex-shrink\",\n \"flex-wrap\",\n \"flexBasis\",\n \"flexDirection\",\n \"flexFlow\",\n \"flexGrow\",\n \"flexShrink\",\n \"flexWrap\",\n \"flipX\",\n \"flipY\",\n \"float\",\n \"flood-color\",\n \"flood-opacity\",\n \"floodColor\",\n \"floodOpacity\",\n \"floor\",\n \"flush\",\n \"focus\",\n \"focusNode\",\n \"focusOffset\",\n \"font\",\n \"font-family\",\n \"font-feature-settings\",\n \"font-kerning\",\n \"font-language-override\",\n \"font-size\",\n \"font-size-adjust\",\n \"font-stretch\",\n \"font-style\",\n \"font-synthesis\",\n \"font-variant\",\n \"font-variant-alternates\",\n \"font-variant-caps\",\n \"font-variant-east-asian\",\n \"font-variant-ligatures\",\n \"font-variant-numeric\",\n \"font-variant-position\",\n \"font-weight\",\n \"fontFamily\",\n \"fontFeatureSettings\",\n \"fontKerning\",\n \"fontLanguageOverride\",\n \"fontSize\",\n \"fontSizeAdjust\",\n \"fontSmoothingEnabled\",\n \"fontStretch\",\n \"fontStyle\",\n \"fontSynthesis\",\n \"fontVariant\",\n \"fontVariantAlternates\",\n \"fontVariantCaps\",\n \"fontVariantEastAsian\",\n \"fontVariantLigatures\",\n \"fontVariantNumeric\",\n \"fontVariantPosition\",\n \"fontWeight\",\n \"fontcolor\",\n \"fonts\",\n \"fontsize\",\n \"for\",\n \"forEach\",\n \"forceRedraw\",\n \"form\",\n \"formAction\",\n \"formEnctype\",\n \"formMethod\",\n \"formNoValidate\",\n \"formTarget\",\n \"format\",\n \"formatToParts\",\n \"forms\",\n \"forward\",\n \"fr\",\n \"frame\",\n \"frameBorder\",\n \"frameElement\",\n \"frameSpacing\",\n \"framebufferRenderbuffer\",\n \"framebufferTexture2D\",\n \"frames\",\n \"freeSpace\",\n \"freeze\",\n \"frequency\",\n \"frequencyBinCount\",\n \"from\",\n \"fromCharCode\",\n \"fromCodePoint\",\n \"fromElement\",\n \"frontFace\",\n \"fround\",\n \"fullScreen\",\n \"fullscreenElement\",\n \"fullscreenEnabled\",\n \"fx\",\n \"fy\",\n \"gain\",\n \"gamepad\",\n \"gamma\",\n \"genderIdentity\",\n \"generateKey\",\n \"generateMipmap\",\n \"generateRequest\",\n \"geolocation\",\n \"gestureObject\",\n \"get\",\n \"getActiveAttrib\",\n \"getActiveUniform\",\n \"getAdjacentText\",\n \"getAll\",\n \"getAllResponseHeaders\",\n \"getAsFile\",\n \"getAsString\",\n \"getAttachedShaders\",\n \"getAttribLocation\",\n \"getAttribute\",\n \"getAttributeNS\",\n \"getAttributeNode\",\n \"getAttributeNodeNS\",\n \"getAudioTracks\",\n \"getBBox\",\n \"getBattery\",\n \"getBlob\",\n \"getBookmark\",\n \"getBoundingClientRect\",\n \"getBufferParameter\",\n \"getByteFrequencyData\",\n \"getByteTimeDomainData\",\n \"getCSSCanvasContext\",\n \"getCTM\",\n \"getCandidateWindowClientRect\",\n \"getChannelData\",\n \"getCharNumAtPosition\",\n \"getClientRect\",\n \"getClientRects\",\n \"getCompositionAlternatives\",\n \"getComputedStyle\",\n \"getComputedTextLength\",\n \"getConfiguration\",\n \"getContext\",\n \"getContextAttributes\",\n \"getCounterValue\",\n \"getCueAsHTML\",\n \"getCueById\",\n \"getCurrentPosition\",\n \"getCurrentTime\",\n \"getData\",\n \"getDatabaseNames\",\n \"getDate\",\n \"getDay\",\n \"getDefaultComputedStyle\",\n \"getDestinationInsertionPoints\",\n \"getDistributedNodes\",\n \"getEditable\",\n \"getElementById\",\n \"getElementsByClassName\",\n \"getElementsByName\",\n \"getElementsByTagName\",\n \"getElementsByTagNameNS\",\n \"getEnclosureList\",\n \"getEndPositionOfChar\",\n \"getEntries\",\n \"getEntriesByName\",\n \"getEntriesByType\",\n \"getError\",\n \"getExtension\",\n \"getExtentOfChar\",\n \"getFeature\",\n \"getFile\",\n \"getFloat32\",\n \"getFloat64\",\n \"getFloatFrequencyData\",\n \"getFloatTimeDomainData\",\n \"getFloatValue\",\n \"getFramebufferAttachmentParameter\",\n \"getFrequencyResponse\",\n \"getFullYear\",\n \"getGamepads\",\n \"getHours\",\n \"getImageData\",\n \"getInt16\",\n \"getInt32\",\n \"getInt8\",\n \"getIntersectionList\",\n \"getItem\",\n \"getItems\",\n \"getKey\",\n \"getLineDash\",\n \"getLocalStreams\",\n \"getMarks\",\n \"getMatchedCSSRules\",\n \"getMeasures\",\n \"getMetadata\",\n \"getMilliseconds\",\n \"getMinutes\",\n \"getModifierState\",\n \"getMonth\",\n \"getNamedItem\",\n \"getNamedItemNS\",\n \"getNotifier\",\n \"getNumberOfChars\",\n \"getOverrideHistoryNavigationMode\",\n \"getOverrideStyle\",\n \"getOwnPropertyDescriptor\",\n \"getOwnPropertyNames\",\n \"getOwnPropertySymbols\",\n \"getParameter\",\n \"getPathSegAtLength\",\n \"getPointAtLength\",\n \"getPreference\",\n \"getPreferenceDefault\",\n \"getPresentationAttribute\",\n \"getPreventDefault\",\n \"getProgramInfoLog\",\n \"getProgramParameter\",\n \"getPropertyCSSValue\",\n \"getPropertyPriority\",\n \"getPropertyShorthand\",\n \"getPropertyValue\",\n \"getPrototypeOf\",\n \"getRGBColorValue\",\n \"getRandomValues\",\n \"getRangeAt\",\n \"getReceivers\",\n \"getRectValue\",\n \"getRegistration\",\n \"getRemoteStreams\",\n \"getRenderbufferParameter\",\n \"getResponseHeader\",\n \"getRoot\",\n \"getRotationOfChar\",\n \"getSVGDocument\",\n \"getScreenCTM\",\n \"getSeconds\",\n \"getSelection\",\n \"getSenders\",\n \"getShaderInfoLog\",\n \"getShaderParameter\",\n \"getShaderPrecisionFormat\",\n \"getShaderSource\",\n \"getSimpleDuration\",\n \"getSiteIcons\",\n \"getSources\",\n \"getSpeculativeParserUrls\",\n \"getStartPositionOfChar\",\n \"getStartTime\",\n \"getStats\",\n \"getStorageUpdates\",\n \"getStreamById\",\n \"getStringValue\",\n \"getSubStringLength\",\n \"getSubscription\",\n \"getSupportedExtensions\",\n \"getTexParameter\",\n \"getTime\",\n \"getTimezoneOffset\",\n \"getTotalLength\",\n \"getTrackById\",\n \"getTracks\",\n \"getTransformToElement\",\n \"getUTCDate\",\n \"getUTCDay\",\n \"getUTCFullYear\",\n \"getUTCHours\",\n \"getUTCMilliseconds\",\n \"getUTCMinutes\",\n \"getUTCMonth\",\n \"getUTCSeconds\",\n \"getUint16\",\n \"getUint32\",\n \"getUint8\",\n \"getUniform\",\n \"getUniformLocation\",\n \"getUserMedia\",\n \"getValues\",\n \"getVarDate\",\n \"getVariableValue\",\n \"getVertexAttrib\",\n \"getVertexAttribOffset\",\n \"getVideoPlaybackQuality\",\n \"getVideoTracks\",\n \"getWakeLockState\",\n \"getYear\",\n \"givenName\",\n \"global\",\n \"globalAlpha\",\n \"globalCompositeOperation\",\n \"glyphOrientationHorizontal\",\n \"glyphOrientationVertical\",\n \"glyphRef\",\n \"go\",\n \"gradientTransform\",\n \"gradientUnits\",\n \"grammars\",\n \"green\",\n \"group\",\n \"groupCollapsed\",\n \"groupEnd\",\n \"hardwareConcurrency\",\n \"has\",\n \"hasAttribute\",\n \"hasAttributeNS\",\n \"hasAttributes\",\n \"hasChildNodes\",\n \"hasComposition\",\n \"hasExtension\",\n \"hasFeature\",\n \"hasFocus\",\n \"hasLayout\",\n \"hasOwnProperty\",\n \"hash\",\n \"head\",\n \"headers\",\n \"heading\",\n \"height\",\n \"hidden\",\n \"hide\",\n \"hideFocus\",\n \"high\",\n \"hint\",\n \"history\",\n \"honorificPrefix\",\n \"honorificSuffix\",\n \"horizontalOverflow\",\n \"host\",\n \"hostname\",\n \"href\",\n \"hreflang\",\n \"hspace\",\n \"html5TagCheckInerface\",\n \"htmlFor\",\n \"htmlText\",\n \"httpEquiv\",\n \"hwTimestamp\",\n \"hypot\",\n \"iccId\",\n \"iceConnectionState\",\n \"iceGatheringState\",\n \"icon\",\n \"id\",\n \"identifier\",\n \"identity\",\n \"ignoreBOM\",\n \"ignoreCase\",\n \"image-orientation\",\n \"image-rendering\",\n \"imageOrientation\",\n \"imageRendering\",\n \"images\",\n \"ime-mode\",\n \"imeMode\",\n \"implementation\",\n \"importKey\",\n \"importNode\",\n \"importStylesheet\",\n \"imports\",\n \"impp\",\n \"imul\",\n \"in1\",\n \"in2\",\n \"inBandMetadataTrackDispatchType\",\n \"inRange\",\n \"includes\",\n \"incremental\",\n \"indeterminate\",\n \"index\",\n \"indexNames\",\n \"indexOf\",\n \"indexedDB\",\n \"inertiaDestinationX\",\n \"inertiaDestinationY\",\n \"info\",\n \"init\",\n \"initAnimationEvent\",\n \"initBeforeLoadEvent\",\n \"initClipboardEvent\",\n \"initCloseEvent\",\n \"initCommandEvent\",\n \"initCompositionEvent\",\n \"initCustomEvent\",\n \"initData\",\n \"initDeviceMotionEvent\",\n \"initDeviceOrientationEvent\",\n \"initDragEvent\",\n \"initErrorEvent\",\n \"initEvent\",\n \"initFocusEvent\",\n \"initGestureEvent\",\n \"initHashChangeEvent\",\n \"initKeyEvent\",\n \"initKeyboardEvent\",\n \"initMSManipulationEvent\",\n \"initMessageEvent\",\n \"initMouseEvent\",\n \"initMouseScrollEvent\",\n \"initMouseWheelEvent\",\n \"initMutationEvent\",\n \"initNSMouseEvent\",\n \"initOverflowEvent\",\n \"initPageEvent\",\n \"initPageTransitionEvent\",\n \"initPointerEvent\",\n \"initPopStateEvent\",\n \"initProgressEvent\",\n \"initScrollAreaEvent\",\n \"initSimpleGestureEvent\",\n \"initStorageEvent\",\n \"initTextEvent\",\n \"initTimeEvent\",\n \"initTouchEvent\",\n \"initTransitionEvent\",\n \"initUIEvent\",\n \"initWebKitAnimationEvent\",\n \"initWebKitTransitionEvent\",\n \"initWebKitWheelEvent\",\n \"initWheelEvent\",\n \"initialTime\",\n \"initialize\",\n \"initiatorType\",\n \"inner\",\n \"innerHTML\",\n \"innerHeight\",\n \"innerText\",\n \"innerWidth\",\n \"input\",\n \"inputBuffer\",\n \"inputEncoding\",\n \"inputMethod\",\n \"insertAdjacentElement\",\n \"insertAdjacentHTML\",\n \"insertAdjacentText\",\n \"insertBefore\",\n \"insertCell\",\n \"insertData\",\n \"insertItemBefore\",\n \"insertNode\",\n \"insertRow\",\n \"insertRule\",\n \"instanceRoot\",\n \"intercept\",\n \"interimResults\",\n \"internalSubset\",\n \"intersectsNode\",\n \"interval\",\n \"invalidIteratorState\",\n \"inverse\",\n \"invertSelf\",\n \"is\",\n \"is2D\",\n \"isAlternate\",\n \"isArray\",\n \"isBingCurrentSearchDefault\",\n \"isBuffer\",\n \"isCandidateWindowVisible\",\n \"isChar\",\n \"isCollapsed\",\n \"isComposing\",\n \"isContentEditable\",\n \"isContentHandlerRegistered\",\n \"isContextLost\",\n \"isDefaultNamespace\",\n \"isDisabled\",\n \"isEnabled\",\n \"isEqual\",\n \"isEqualNode\",\n \"isExtensible\",\n \"isFinite\",\n \"isFramebuffer\",\n \"isFrozen\",\n \"isGenerator\",\n \"isId\",\n \"isInjected\",\n \"isInteger\",\n \"isMap\",\n \"isMultiLine\",\n \"isNaN\",\n \"isOpen\",\n \"isPointInFill\",\n \"isPointInPath\",\n \"isPointInRange\",\n \"isPointInStroke\",\n \"isPrefAlternate\",\n \"isPrimary\",\n \"isProgram\",\n \"isPropertyImplicit\",\n \"isProtocolHandlerRegistered\",\n \"isPrototypeOf\",\n \"isRenderbuffer\",\n \"isSafeInteger\",\n \"isSameNode\",\n \"isSealed\",\n \"isShader\",\n \"isSupported\",\n \"isTextEdit\",\n \"isTexture\",\n \"isTrusted\",\n \"isTypeSupported\",\n \"isView\",\n \"isolation\",\n \"italics\",\n \"item\",\n \"itemId\",\n \"itemProp\",\n \"itemRef\",\n \"itemScope\",\n \"itemType\",\n \"itemValue\",\n \"iterateNext\",\n \"iterator\",\n \"javaEnabled\",\n \"jobTitle\",\n \"join\",\n \"json\",\n \"justify-content\",\n \"justifyContent\",\n \"k1\",\n \"k2\",\n \"k3\",\n \"k4\",\n \"kernelMatrix\",\n \"kernelUnitLengthX\",\n \"kernelUnitLengthY\",\n \"kerning\",\n \"key\",\n \"keyCode\",\n \"keyFor\",\n \"keyIdentifier\",\n \"keyLightEnabled\",\n \"keyLocation\",\n \"keyPath\",\n \"keySystem\",\n \"keyText\",\n \"keyUsage\",\n \"keys\",\n \"keytype\",\n \"kind\",\n \"knee\",\n \"label\",\n \"labels\",\n \"lang\",\n \"language\",\n \"languages\",\n \"largeArcFlag\",\n \"lastChild\",\n \"lastElementChild\",\n \"lastEventId\",\n \"lastIndex\",\n \"lastIndexOf\",\n \"lastMatch\",\n \"lastMessageSubject\",\n \"lastMessageType\",\n \"lastModified\",\n \"lastModifiedDate\",\n \"lastPage\",\n \"lastParen\",\n \"lastState\",\n \"lastStyleSheetSet\",\n \"latitude\",\n \"layerX\",\n \"layerY\",\n \"layoutFlow\",\n \"layoutGrid\",\n \"layoutGridChar\",\n \"layoutGridLine\",\n \"layoutGridMode\",\n \"layoutGridType\",\n \"lbound\",\n \"left\",\n \"leftContext\",\n \"leftMargin\",\n \"length\",\n \"lengthAdjust\",\n \"lengthComputable\",\n \"letter-spacing\",\n \"letterSpacing\",\n \"level\",\n \"lighting-color\",\n \"lightingColor\",\n \"limitingConeAngle\",\n \"line\",\n \"line-height\",\n \"lineAlign\",\n \"lineBreak\",\n \"lineCap\",\n \"lineDashOffset\",\n \"lineHeight\",\n \"lineJoin\",\n \"lineNumber\",\n \"lineTo\",\n \"lineWidth\",\n \"linearRampToValueAtTime\",\n \"lineno\",\n \"link\",\n \"linkColor\",\n \"linkProgram\",\n \"links\",\n \"list\",\n \"list-style\",\n \"list-style-image\",\n \"list-style-position\",\n \"list-style-type\",\n \"listStyle\",\n \"listStyleImage\",\n \"listStylePosition\",\n \"listStyleType\",\n \"listener\",\n \"load\",\n \"loadEventEnd\",\n \"loadEventStart\",\n \"loadTimes\",\n \"loaded\",\n \"localDescription\",\n \"localName\",\n \"localStorage\",\n \"locale\",\n \"localeCompare\",\n \"location\",\n \"locationbar\",\n \"lock\",\n \"lockedFile\",\n \"log\",\n \"log10\",\n \"log1p\",\n \"log2\",\n \"logicalXDPI\",\n \"logicalYDPI\",\n \"longDesc\",\n \"longitude\",\n \"lookupNamespaceURI\",\n \"lookupPrefix\",\n \"loop\",\n \"loopEnd\",\n \"loopStart\",\n \"looping\",\n \"low\",\n \"lower\",\n \"lowerBound\",\n \"lowerOpen\",\n \"lowsrc\",\n \"m11\",\n \"m12\",\n \"m13\",\n \"m14\",\n \"m21\",\n \"m22\",\n \"m23\",\n \"m24\",\n \"m31\",\n \"m32\",\n \"m33\",\n \"m34\",\n \"m41\",\n \"m42\",\n \"m43\",\n \"m44\",\n \"manifest\",\n \"map\",\n \"mapping\",\n \"margin\",\n \"margin-bottom\",\n \"margin-left\",\n \"margin-right\",\n \"margin-top\",\n \"marginBottom\",\n \"marginHeight\",\n \"marginLeft\",\n \"marginRight\",\n \"marginTop\",\n \"marginWidth\",\n \"mark\",\n \"marker\",\n \"marker-end\",\n \"marker-mid\",\n \"marker-offset\",\n \"marker-start\",\n \"markerEnd\",\n \"markerHeight\",\n \"markerMid\",\n \"markerOffset\",\n \"markerStart\",\n \"markerUnits\",\n \"markerWidth\",\n \"marks\",\n \"mask\",\n \"mask-type\",\n \"maskContentUnits\",\n \"maskType\",\n \"maskUnits\",\n \"match\",\n \"matchMedia\",\n \"matchMedium\",\n \"matches\",\n \"matrix\",\n \"matrixTransform\",\n \"max\",\n \"max-height\",\n \"max-width\",\n \"maxAlternatives\",\n \"maxChannelCount\",\n \"maxConnectionsPerServer\",\n \"maxDecibels\",\n \"maxDistance\",\n \"maxHeight\",\n \"maxLength\",\n \"maxTouchPoints\",\n \"maxValue\",\n \"maxWidth\",\n \"measure\",\n \"measureText\",\n \"media\",\n \"mediaCapabilities\",\n \"mediaDevices\",\n \"mediaElement\",\n \"mediaGroup\",\n \"mediaKeys\",\n \"mediaText\",\n \"meetOrSlice\",\n \"memory\",\n \"menubar\",\n \"mergeAttributes\",\n \"message\",\n \"messageClass\",\n \"messageHandlers\",\n \"metaKey\",\n \"method\",\n \"mimeType\",\n \"mimeTypes\",\n \"min\",\n \"min-height\",\n \"min-width\",\n \"minDecibels\",\n \"minHeight\",\n \"minValue\",\n \"minWidth\",\n \"miterLimit\",\n \"mix-blend-mode\",\n \"mixBlendMode\",\n \"mode\",\n \"modify\",\n \"mount\",\n \"move\",\n \"moveBy\",\n \"moveEnd\",\n \"moveFirst\",\n \"moveFocusDown\",\n \"moveFocusLeft\",\n \"moveFocusRight\",\n \"moveFocusUp\",\n \"moveNext\",\n \"moveRow\",\n \"moveStart\",\n \"moveTo\",\n \"moveToBookmark\",\n \"moveToElementText\",\n \"moveToPoint\",\n \"mozAdd\",\n \"mozAnimationStartTime\",\n \"mozAnon\",\n \"mozApps\",\n \"mozAudioCaptured\",\n \"mozAudioChannelType\",\n \"mozAutoplayEnabled\",\n \"mozCancelAnimationFrame\",\n \"mozCancelFullScreen\",\n \"mozCancelRequestAnimationFrame\",\n \"mozCaptureStream\",\n \"mozCaptureStreamUntilEnded\",\n \"mozClearDataAt\",\n \"mozContact\",\n \"mozContacts\",\n \"mozCreateFileHandle\",\n \"mozCurrentTransform\",\n \"mozCurrentTransformInverse\",\n \"mozCursor\",\n \"mozDash\",\n \"mozDashOffset\",\n \"mozDecodedFrames\",\n \"mozExitPointerLock\",\n \"mozFillRule\",\n \"mozFragmentEnd\",\n \"mozFrameDelay\",\n \"mozFullScreen\",\n \"mozFullScreenElement\",\n \"mozFullScreenEnabled\",\n \"mozGetAll\",\n \"mozGetAllKeys\",\n \"mozGetAsFile\",\n \"mozGetDataAt\",\n \"mozGetMetadata\",\n \"mozGetUserMedia\",\n \"mozHasAudio\",\n \"mozHasItem\",\n \"mozHidden\",\n \"mozImageSmoothingEnabled\",\n \"mozIndexedDB\",\n \"mozInnerScreenX\",\n \"mozInnerScreenY\",\n \"mozInputSource\",\n \"mozIsTextField\",\n \"mozItem\",\n \"mozItemCount\",\n \"mozItems\",\n \"mozLength\",\n \"mozLockOrientation\",\n \"mozMatchesSelector\",\n \"mozMovementX\",\n \"mozMovementY\",\n \"mozOpaque\",\n \"mozOrientation\",\n \"mozPaintCount\",\n \"mozPaintedFrames\",\n \"mozParsedFrames\",\n \"mozPay\",\n \"mozPointerLockElement\",\n \"mozPresentedFrames\",\n \"mozPreservesPitch\",\n \"mozPressure\",\n \"mozPrintCallback\",\n \"mozRTCIceCandidate\",\n \"mozRTCPeerConnection\",\n \"mozRTCSessionDescription\",\n \"mozRemove\",\n \"mozRequestAnimationFrame\",\n \"mozRequestFullScreen\",\n \"mozRequestPointerLock\",\n \"mozSetDataAt\",\n \"mozSetImageElement\",\n \"mozSourceNode\",\n \"mozSrcObject\",\n \"mozSystem\",\n \"mozTCPSocket\",\n \"mozTextStyle\",\n \"mozTypesAt\",\n \"mozUnlockOrientation\",\n \"mozUserCancelled\",\n \"mozVisibilityState\",\n \"msAnimation\",\n \"msAnimationDelay\",\n \"msAnimationDirection\",\n \"msAnimationDuration\",\n \"msAnimationFillMode\",\n \"msAnimationIterationCount\",\n \"msAnimationName\",\n \"msAnimationPlayState\",\n \"msAnimationStartTime\",\n \"msAnimationTimingFunction\",\n \"msBackfaceVisibility\",\n \"msBlockProgression\",\n \"msCSSOMElementFloatMetrics\",\n \"msCaching\",\n \"msCachingEnabled\",\n \"msCancelRequestAnimationFrame\",\n \"msCapsLockWarningOff\",\n \"msClearImmediate\",\n \"msClose\",\n \"msContentZoomChaining\",\n \"msContentZoomFactor\",\n \"msContentZoomLimit\",\n \"msContentZoomLimitMax\",\n \"msContentZoomLimitMin\",\n \"msContentZoomSnap\",\n \"msContentZoomSnapPoints\",\n \"msContentZoomSnapType\",\n \"msContentZooming\",\n \"msConvertURL\",\n \"msCrypto\",\n \"msDoNotTrack\",\n \"msElementsFromPoint\",\n \"msElementsFromRect\",\n \"msExitFullscreen\",\n \"msExtendedCode\",\n \"msFillRule\",\n \"msFirstPaint\",\n \"msFlex\",\n \"msFlexAlign\",\n \"msFlexDirection\",\n \"msFlexFlow\",\n \"msFlexItemAlign\",\n \"msFlexLinePack\",\n \"msFlexNegative\",\n \"msFlexOrder\",\n \"msFlexPack\",\n \"msFlexPositive\",\n \"msFlexPreferredSize\",\n \"msFlexWrap\",\n \"msFlowFrom\",\n \"msFlowInto\",\n \"msFontFeatureSettings\",\n \"msFullscreenElement\",\n \"msFullscreenEnabled\",\n \"msGetInputContext\",\n \"msGetRegionContent\",\n \"msGetUntransformedBounds\",\n \"msGraphicsTrustStatus\",\n \"msGridColumn\",\n \"msGridColumnAlign\",\n \"msGridColumnSpan\",\n \"msGridColumns\",\n \"msGridRow\",\n \"msGridRowAlign\",\n \"msGridRowSpan\",\n \"msGridRows\",\n \"msHidden\",\n \"msHighContrastAdjust\",\n \"msHyphenateLimitChars\",\n \"msHyphenateLimitLines\",\n \"msHyphenateLimitZone\",\n \"msHyphens\",\n \"msImageSmoothingEnabled\",\n \"msImeAlign\",\n \"msIndexedDB\",\n \"msInterpolationMode\",\n \"msIsStaticHTML\",\n \"msKeySystem\",\n \"msKeys\",\n \"msLaunchUri\",\n \"msLockOrientation\",\n \"msManipulationViewsEnabled\",\n \"msMatchMedia\",\n \"msMatchesSelector\",\n \"msMaxTouchPoints\",\n \"msOrientation\",\n \"msOverflowStyle\",\n \"msPerspective\",\n \"msPerspectiveOrigin\",\n \"msPlayToDisabled\",\n \"msPlayToPreferredSourceUri\",\n \"msPlayToPrimary\",\n \"msPointerEnabled\",\n \"msRegionOverflow\",\n \"msReleasePointerCapture\",\n \"msRequestAnimationFrame\",\n \"msRequestFullscreen\",\n \"msSaveBlob\",\n \"msSaveOrOpenBlob\",\n \"msScrollChaining\",\n \"msScrollLimit\",\n \"msScrollLimitXMax\",\n \"msScrollLimitXMin\",\n \"msScrollLimitYMax\",\n \"msScrollLimitYMin\",\n \"msScrollRails\",\n \"msScrollSnapPointsX\",\n \"msScrollSnapPointsY\",\n \"msScrollSnapType\",\n \"msScrollSnapX\",\n \"msScrollSnapY\",\n \"msScrollTranslation\",\n \"msSetImmediate\",\n \"msSetMediaKeys\",\n \"msSetPointerCapture\",\n \"msTextCombineHorizontal\",\n \"msTextSizeAdjust\",\n \"msToBlob\",\n \"msTouchAction\",\n \"msTouchSelect\",\n \"msTraceAsyncCallbackCompleted\",\n \"msTraceAsyncCallbackStarting\",\n \"msTraceAsyncOperationCompleted\",\n \"msTraceAsyncOperationStarting\",\n \"msTransform\",\n \"msTransformOrigin\",\n \"msTransformStyle\",\n \"msTransition\",\n \"msTransitionDelay\",\n \"msTransitionDuration\",\n \"msTransitionProperty\",\n \"msTransitionTimingFunction\",\n \"msUnlockOrientation\",\n \"msUpdateAsyncCallbackRelation\",\n \"msUserSelect\",\n \"msVisibilityState\",\n \"msWrapFlow\",\n \"msWrapMargin\",\n \"msWrapThrough\",\n \"msWriteProfilerMark\",\n \"msZoom\",\n \"msZoomTo\",\n \"mt\",\n \"multiEntry\",\n \"multiSelectionObj\",\n \"multiline\",\n \"multiple\",\n \"multiply\",\n \"multiplySelf\",\n \"mutableFile\",\n \"muted\",\n \"n\",\n \"name\",\n \"nameProp\",\n \"namedItem\",\n \"namedRecordset\",\n \"names\",\n \"namespaceURI\",\n \"namespaces\",\n \"naturalHeight\",\n \"naturalWidth\",\n \"navigate\",\n \"navigation\",\n \"navigationMode\",\n \"navigationStart\",\n \"navigator\",\n \"near\",\n \"nearestViewportElement\",\n \"negative\",\n \"netscape\",\n \"networkState\",\n \"newScale\",\n \"newTranslate\",\n \"newURL\",\n \"newValue\",\n \"newValueSpecifiedUnits\",\n \"newVersion\",\n \"newhome\",\n \"next\",\n \"nextElementSibling\",\n \"nextNode\",\n \"nextPage\",\n \"nextSibling\",\n \"nickname\",\n \"noHref\",\n \"noResize\",\n \"noShade\",\n \"noValidate\",\n \"noWrap\",\n \"nodeName\",\n \"nodeType\",\n \"nodeValue\",\n \"normalize\",\n \"normalizedPathSegList\",\n \"notationName\",\n \"notations\",\n \"note\",\n \"noteGrainOn\",\n \"noteOff\",\n \"noteOn\",\n \"now\",\n \"numOctaves\",\n \"number\",\n \"numberOfChannels\",\n \"numberOfInputs\",\n \"numberOfItems\",\n \"numberOfOutputs\",\n \"numberValue\",\n \"oMatchesSelector\",\n \"object\",\n \"object-fit\",\n \"object-position\",\n \"objectFit\",\n \"objectPosition\",\n \"objectStore\",\n \"objectStoreNames\",\n \"observe\",\n \"of\",\n \"offscreenBuffering\",\n \"offset\",\n \"offsetHeight\",\n \"offsetLeft\",\n \"offsetNode\",\n \"offsetParent\",\n \"offsetTop\",\n \"offsetWidth\",\n \"offsetX\",\n \"offsetY\",\n \"ok\",\n \"oldURL\",\n \"oldValue\",\n \"oldVersion\",\n \"olderShadowRoot\",\n \"onLine\",\n \"onabort\",\n \"onactivate\",\n \"onactive\",\n \"onaddstream\",\n \"onaddtrack\",\n \"onafterprint\",\n \"onafterscriptexecute\",\n \"onafterupdate\",\n \"onaudioend\",\n \"onaudioprocess\",\n \"onaudiostart\",\n \"onautocomplete\",\n \"onautocompleteerror\",\n \"onbeforeactivate\",\n \"onbeforecopy\",\n \"onbeforecut\",\n \"onbeforedeactivate\",\n \"onbeforeeditfocus\",\n \"onbeforepaste\",\n \"onbeforeprint\",\n \"onbeforescriptexecute\",\n \"onbeforeunload\",\n \"onbeforeupdate\",\n \"onblocked\",\n \"onblur\",\n \"onbounce\",\n \"onboundary\",\n \"oncached\",\n \"oncancel\",\n \"oncandidatewindowhide\",\n \"oncandidatewindowshow\",\n \"oncandidatewindowupdate\",\n \"oncanplay\",\n \"oncanplaythrough\",\n \"once\",\n \"oncellchange\",\n \"onchange\",\n \"onchargingchange\",\n \"onchargingtimechange\",\n \"onchecking\",\n \"onclick\",\n \"onclose\",\n \"oncompassneedscalibration\",\n \"oncomplete\",\n \"oncontextmenu\",\n \"oncontrolselect\",\n \"oncopy\",\n \"oncuechange\",\n \"oncut\",\n \"ondataavailable\",\n \"ondatachannel\",\n \"ondatasetchanged\",\n \"ondatasetcomplete\",\n \"ondblclick\",\n \"ondeactivate\",\n \"ondevicelight\",\n \"ondevicemotion\",\n \"ondeviceorientation\",\n \"ondeviceproximity\",\n \"ondischargingtimechange\",\n \"ondisplay\",\n \"ondownloading\",\n \"ondrag\",\n \"ondragend\",\n \"ondragenter\",\n \"ondragleave\",\n \"ondragover\",\n \"ondragstart\",\n \"ondrop\",\n \"ondurationchange\",\n \"onemptied\",\n \"onencrypted\",\n \"onend\",\n \"onended\",\n \"onenter\",\n \"onerror\",\n \"onerrorupdate\",\n \"onexit\",\n \"onfilterchange\",\n \"onfinish\",\n \"onfocus\",\n \"onfocusin\",\n \"onfocusout\",\n \"onfullscreenchange\",\n \"onfullscreenerror\",\n \"ongesturechange\",\n \"ongestureend\",\n \"ongesturestart\",\n \"ongotpointercapture\",\n \"onhashchange\",\n \"onhelp\",\n \"onicecandidate\",\n \"oniceconnectionstatechange\",\n \"oninactive\",\n \"oninput\",\n \"oninvalid\",\n \"onkeydown\",\n \"onkeypress\",\n \"onkeyup\",\n \"onlanguagechange\",\n \"onlayoutcomplete\",\n \"onlevelchange\",\n \"onload\",\n \"onloadeddata\",\n \"onloadedmetadata\",\n \"onloadend\",\n \"onloadstart\",\n \"onlosecapture\",\n \"onlostpointercapture\",\n \"only\",\n \"onmark\",\n \"onmessage\",\n \"onmousedown\",\n \"onmouseenter\",\n \"onmouseleave\",\n \"onmousemove\",\n \"onmouseout\",\n \"onmouseover\",\n \"onmouseup\",\n \"onmousewheel\",\n \"onmove\",\n \"onmoveend\",\n \"onmovestart\",\n \"onmozfullscreenchange\",\n \"onmozfullscreenerror\",\n \"onmozorientationchange\",\n \"onmozpointerlockchange\",\n \"onmozpointerlockerror\",\n \"onmscontentzoom\",\n \"onmsfullscreenchange\",\n \"onmsfullscreenerror\",\n \"onmsgesturechange\",\n \"onmsgesturedoubletap\",\n \"onmsgestureend\",\n \"onmsgesturehold\",\n \"onmsgesturestart\",\n \"onmsgesturetap\",\n \"onmsgotpointercapture\",\n \"onmsinertiastart\",\n \"onmslostpointercapture\",\n \"onmsmanipulationstatechanged\",\n \"onmsneedkey\",\n \"onmsorientationchange\",\n \"onmspointercancel\",\n \"onmspointerdown\",\n \"onmspointerenter\",\n \"onmspointerhover\",\n \"onmspointerleave\",\n \"onmspointermove\",\n \"onmspointerout\",\n \"onmspointerover\",\n \"onmspointerup\",\n \"onmssitemodejumplistitemremoved\",\n \"onmsthumbnailclick\",\n \"onnegotiationneeded\",\n \"onnomatch\",\n \"onnoupdate\",\n \"onobsolete\",\n \"onoffline\",\n \"ononline\",\n \"onopen\",\n \"onorientationchange\",\n \"onpagechange\",\n \"onpagehide\",\n \"onpageshow\",\n \"onpaste\",\n \"onpause\",\n \"onplay\",\n \"onplaying\",\n \"onpluginstreamstart\",\n \"onpointercancel\",\n \"onpointerdown\",\n \"onpointerenter\",\n \"onpointerleave\",\n \"onpointerlockchange\",\n \"onpointerlockerror\",\n \"onpointermove\",\n \"onpointerout\",\n \"onpointerover\",\n \"onpointerup\",\n \"onpopstate\",\n \"onprogress\",\n \"onpropertychange\",\n \"onratechange\",\n \"onreadystatechange\",\n \"onremovestream\",\n \"onremovetrack\",\n \"onreset\",\n \"onresize\",\n \"onresizeend\",\n \"onresizestart\",\n \"onresourcetimingbufferfull\",\n \"onresult\",\n \"onresume\",\n \"onrowenter\",\n \"onrowexit\",\n \"onrowsdelete\",\n \"onrowsinserted\",\n \"onscroll\",\n \"onsearch\",\n \"onseeked\",\n \"onseeking\",\n \"onselect\",\n \"onselectionchange\",\n \"onselectstart\",\n \"onshow\",\n \"onsignalingstatechange\",\n \"onsoundend\",\n \"onsoundstart\",\n \"onspeechend\",\n \"onspeechstart\",\n \"onstalled\",\n \"onstart\",\n \"onstatechange\",\n \"onstop\",\n \"onstorage\",\n \"onstoragecommit\",\n \"onsubmit\",\n \"onsuccess\",\n \"onsuspend\",\n \"ontextinput\",\n \"ontimeout\",\n \"ontimeupdate\",\n \"ontoggle\",\n \"ontouchcancel\",\n \"ontouchend\",\n \"ontouchmove\",\n \"ontouchstart\",\n \"ontransitionend\",\n \"onunload\",\n \"onupdateready\",\n \"onupgradeneeded\",\n \"onuserproximity\",\n \"onversionchange\",\n \"onvoiceschanged\",\n \"onvolumechange\",\n \"onwaiting\",\n \"onwarning\",\n \"onwebkitanimationend\",\n \"onwebkitanimationiteration\",\n \"onwebkitanimationstart\",\n \"onwebkitcurrentplaybacktargetiswirelesschanged\",\n \"onwebkitfullscreenchange\",\n \"onwebkitfullscreenerror\",\n \"onwebkitkeyadded\",\n \"onwebkitkeyerror\",\n \"onwebkitkeymessage\",\n \"onwebkitneedkey\",\n \"onwebkitorientationchange\",\n \"onwebkitplaybacktargetavailabilitychanged\",\n \"onwebkitpointerlockchange\",\n \"onwebkitpointerlockerror\",\n \"onwebkitresourcetimingbufferfull\",\n \"onwebkittransitionend\",\n \"onwheel\",\n \"onzoom\",\n \"opacity\",\n \"open\",\n \"openCursor\",\n \"openDatabase\",\n \"openKeyCursor\",\n \"opener\",\n \"opera\",\n \"operationType\",\n \"operator\",\n \"opr\",\n \"optimum\",\n \"options\",\n \"order\",\n \"orderX\",\n \"orderY\",\n \"ordered\",\n \"org\",\n \"orient\",\n \"orientAngle\",\n \"orientType\",\n \"orientation\",\n \"origin\",\n \"originalTarget\",\n \"orphans\",\n \"oscpu\",\n \"outerHTML\",\n \"outerHeight\",\n \"outerText\",\n \"outerWidth\",\n \"outline\",\n \"outline-color\",\n \"outline-offset\",\n \"outline-style\",\n \"outline-width\",\n \"outlineColor\",\n \"outlineOffset\",\n \"outlineStyle\",\n \"outlineWidth\",\n \"outputBuffer\",\n \"overflow\",\n \"overflow-x\",\n \"overflow-y\",\n \"overflowX\",\n \"overflowY\",\n \"overrideMimeType\",\n \"oversample\",\n \"ownerDocument\",\n \"ownerElement\",\n \"ownerNode\",\n \"ownerRule\",\n \"ownerSVGElement\",\n \"owningElement\",\n \"p1\",\n \"p2\",\n \"p3\",\n \"p4\",\n \"pad\",\n \"padding\",\n \"padding-bottom\",\n \"padding-left\",\n \"padding-right\",\n \"padding-top\",\n \"paddingBottom\",\n \"paddingLeft\",\n \"paddingRight\",\n \"paddingTop\",\n \"page\",\n \"page-break-after\",\n \"page-break-before\",\n \"page-break-inside\",\n \"pageBreakAfter\",\n \"pageBreakBefore\",\n \"pageBreakInside\",\n \"pageCount\",\n \"pageX\",\n \"pageXOffset\",\n \"pageY\",\n \"pageYOffset\",\n \"pages\",\n \"paint-order\",\n \"paintOrder\",\n \"paintRequests\",\n \"paintType\",\n \"palette\",\n \"panningModel\",\n \"parent\",\n \"parentElement\",\n \"parentNode\",\n \"parentRule\",\n \"parentStyleSheet\",\n \"parentTextEdit\",\n \"parentWindow\",\n \"parse\",\n \"parseFloat\",\n \"parseFromString\",\n \"parseInt\",\n \"participants\",\n \"passive\",\n \"password\",\n \"pasteHTML\",\n \"path\",\n \"pathLength\",\n \"pathSegList\",\n \"pathSegType\",\n \"pathSegTypeAsLetter\",\n \"pathname\",\n \"pattern\",\n \"patternContentUnits\",\n \"patternMismatch\",\n \"patternTransform\",\n \"patternUnits\",\n \"pause\",\n \"pauseAnimations\",\n \"pauseOnExit\",\n \"paused\",\n \"pending\",\n \"performance\",\n \"permission\",\n \"persisted\",\n \"personalbar\",\n \"perspective\",\n \"perspective-origin\",\n \"perspectiveOrigin\",\n \"phoneticFamilyName\",\n \"phoneticGivenName\",\n \"photo\",\n \"ping\",\n \"pitch\",\n \"pixelBottom\",\n \"pixelDepth\",\n \"pixelHeight\",\n \"pixelLeft\",\n \"pixelRight\",\n \"pixelStorei\",\n \"pixelTop\",\n \"pixelUnitToMillimeterX\",\n \"pixelUnitToMillimeterY\",\n \"pixelWidth\",\n \"placeholder\",\n \"platform\",\n \"play\",\n \"playbackRate\",\n \"playbackState\",\n \"playbackTime\",\n \"played\",\n \"plugins\",\n \"pluginspage\",\n \"pname\",\n \"pointer-events\",\n \"pointerBeforeReferenceNode\",\n \"pointerEnabled\",\n \"pointerEvents\",\n \"pointerId\",\n \"pointerLockElement\",\n \"pointerType\",\n \"points\",\n \"pointsAtX\",\n \"pointsAtY\",\n \"pointsAtZ\",\n \"polygonOffset\",\n \"pop\",\n \"popupWindowFeatures\",\n \"popupWindowName\",\n \"popupWindowURI\",\n \"port\",\n \"port1\",\n \"port2\",\n \"ports\",\n \"posBottom\",\n \"posHeight\",\n \"posLeft\",\n \"posRight\",\n \"posTop\",\n \"posWidth\",\n \"position\",\n \"positionAlign\",\n \"postError\",\n \"postMessage\",\n \"poster\",\n \"pow\",\n \"powerOff\",\n \"preMultiplySelf\",\n \"precision\",\n \"preferredStyleSheetSet\",\n \"preferredStylesheetSet\",\n \"prefix\",\n \"preload\",\n \"prepend\",\n \"preserveAlpha\",\n \"preserveAspectRatio\",\n \"preserveAspectRatioString\",\n \"pressed\",\n \"pressure\",\n \"prevValue\",\n \"preventDefault\",\n \"preventExtensions\",\n \"previousElementSibling\",\n \"previousNode\",\n \"previousPage\",\n \"previousScale\",\n \"previousSibling\",\n \"previousTranslate\",\n \"primaryKey\",\n \"primitiveType\",\n \"primitiveUnits\",\n \"principals\",\n \"print\",\n \"privateKey\",\n \"probablySupportsContext\",\n \"process\",\n \"processIceMessage\",\n \"product\",\n \"productSub\",\n \"profile\",\n \"profileEnd\",\n \"profiles\",\n \"prompt\",\n \"properties\",\n \"propertyIsEnumerable\",\n \"propertyName\",\n \"protocol\",\n \"protocolLong\",\n \"prototype\",\n \"pseudoClass\",\n \"pseudoElement\",\n \"publicId\",\n \"publicKey\",\n \"published\",\n \"push\",\n \"pushNotification\",\n \"pushState\",\n \"put\",\n \"putImageData\",\n \"quadraticCurveTo\",\n \"qualifier\",\n \"queryCommandEnabled\",\n \"queryCommandIndeterm\",\n \"queryCommandState\",\n \"queryCommandSupported\",\n \"queryCommandText\",\n \"queryCommandValue\",\n \"querySelector\",\n \"querySelectorAll\",\n \"quote\",\n \"quotes\",\n \"r\",\n \"r1\",\n \"r2\",\n \"race\",\n \"radiogroup\",\n \"radiusX\",\n \"radiusY\",\n \"random\",\n \"range\",\n \"rangeCount\",\n \"rangeMax\",\n \"rangeMin\",\n \"rangeOffset\",\n \"rangeOverflow\",\n \"rangeParent\",\n \"rangeUnderflow\",\n \"rate\",\n \"ratio\",\n \"raw\",\n \"read\",\n \"readAsArrayBuffer\",\n \"readAsBinaryString\",\n \"readAsBlob\",\n \"readAsDataURL\",\n \"readAsText\",\n \"readOnly\",\n \"readPixels\",\n \"readReportRequested\",\n \"readyState\",\n \"reason\",\n \"reboot\",\n \"receiver\",\n \"receivers\",\n \"recordNumber\",\n \"recordset\",\n \"rect\",\n \"red\",\n \"redirectCount\",\n \"redirectEnd\",\n \"redirectStart\",\n \"reduce\",\n \"reduceRight\",\n \"reduction\",\n \"refDistance\",\n \"refX\",\n \"refY\",\n \"referenceNode\",\n \"referrer\",\n \"refresh\",\n \"region\",\n \"regionAnchorX\",\n \"regionAnchorY\",\n \"regionId\",\n \"regions\",\n \"register\",\n \"registerContentHandler\",\n \"registerElement\",\n \"registerProtocolHandler\",\n \"reject\",\n \"rel\",\n \"relList\",\n \"relatedNode\",\n \"relatedTarget\",\n \"release\",\n \"releaseCapture\",\n \"releaseEvents\",\n \"releasePointerCapture\",\n \"releaseShaderCompiler\",\n \"reliable\",\n \"reload\",\n \"remainingSpace\",\n \"remoteDescription\",\n \"remove\",\n \"removeAllRanges\",\n \"removeAttribute\",\n \"removeAttributeNS\",\n \"removeAttributeNode\",\n \"removeBehavior\",\n \"removeChild\",\n \"removeCue\",\n \"removeEventListener\",\n \"removeFilter\",\n \"removeImport\",\n \"removeItem\",\n \"removeListener\",\n \"removeNamedItem\",\n \"removeNamedItemNS\",\n \"removeNode\",\n \"removeParameter\",\n \"removeProperty\",\n \"removeRange\",\n \"removeRegion\",\n \"removeRule\",\n \"removeSiteSpecificTrackingException\",\n \"removeSourceBuffer\",\n \"removeStream\",\n \"removeTrack\",\n \"removeVariable\",\n \"removeWakeLockListener\",\n \"removeWebWideTrackingException\",\n \"removedNodes\",\n \"renderbufferStorage\",\n \"renderedBuffer\",\n \"renderingMode\",\n \"repeat\",\n \"replace\",\n \"replaceAdjacentText\",\n \"replaceChild\",\n \"replaceData\",\n \"replaceId\",\n \"replaceItem\",\n \"replaceNode\",\n \"replaceState\",\n \"replaceTrack\",\n \"replaceWholeText\",\n \"reportValidity\",\n \"requestAnimationFrame\",\n \"requestAutocomplete\",\n \"requestData\",\n \"requestFullscreen\",\n \"requestMediaKeySystemAccess\",\n \"requestPermission\",\n \"requestPointerLock\",\n \"requestStart\",\n \"requestingWindow\",\n \"required\",\n \"requiredExtensions\",\n \"requiredFeatures\",\n \"reset\",\n \"resetTransform\",\n \"resize\",\n \"resizeBy\",\n \"resizeTo\",\n \"resolve\",\n \"response\",\n \"responseBody\",\n \"responseEnd\",\n \"responseStart\",\n \"responseText\",\n \"responseType\",\n \"responseURL\",\n \"responseXML\",\n \"restore\",\n \"result\",\n \"resultType\",\n \"resume\",\n \"returnValue\",\n \"rev\",\n \"reverse\",\n \"reversed\",\n \"revocable\",\n \"revokeObjectURL\",\n \"rgbColor\",\n \"right\",\n \"rightContext\",\n \"rightMargin\",\n \"rolloffFactor\",\n \"root\",\n \"rootElement\",\n \"rotate\",\n \"rotateAxisAngle\",\n \"rotateAxisAngleSelf\",\n \"rotateFromVector\",\n \"rotateFromVectorSelf\",\n \"rotateSelf\",\n \"rotation\",\n \"rotationRate\",\n \"round\",\n \"rowIndex\",\n \"rowSpan\",\n \"rows\",\n \"rubyAlign\",\n \"rubyOverhang\",\n \"rubyPosition\",\n \"rules\",\n \"runtime\",\n \"runtimeStyle\",\n \"rx\",\n \"ry\",\n \"safari\",\n \"sampleCoverage\",\n \"sampleRate\",\n \"sandbox\",\n \"save\",\n \"scale\",\n \"scale3d\",\n \"scale3dSelf\",\n \"scaleNonUniform\",\n \"scaleNonUniformSelf\",\n \"scaleSelf\",\n \"scheme\",\n \"scissor\",\n \"scope\",\n \"scopeName\",\n \"scoped\",\n \"screen\",\n \"screenBrightness\",\n \"screenEnabled\",\n \"screenLeft\",\n \"screenPixelToMillimeterX\",\n \"screenPixelToMillimeterY\",\n \"screenTop\",\n \"screenX\",\n \"screenY\",\n \"scripts\",\n \"scroll\",\n \"scroll-behavior\",\n \"scrollAmount\",\n \"scrollBehavior\",\n \"scrollBy\",\n \"scrollByLines\",\n \"scrollByPages\",\n \"scrollDelay\",\n \"scrollHeight\",\n \"scrollIntoView\",\n \"scrollIntoViewIfNeeded\",\n \"scrollLeft\",\n \"scrollLeftMax\",\n \"scrollMaxX\",\n \"scrollMaxY\",\n \"scrollTo\",\n \"scrollTop\",\n \"scrollTopMax\",\n \"scrollWidth\",\n \"scrollX\",\n \"scrollY\",\n \"scrollbar3dLightColor\",\n \"scrollbarArrowColor\",\n \"scrollbarBaseColor\",\n \"scrollbarDarkShadowColor\",\n \"scrollbarFaceColor\",\n \"scrollbarHighlightColor\",\n \"scrollbarShadowColor\",\n \"scrollbarTrackColor\",\n \"scrollbars\",\n \"scrolling\",\n \"sdp\",\n \"sdpMLineIndex\",\n \"sdpMid\",\n \"seal\",\n \"search\",\n \"searchBox\",\n \"searchBoxJavaBridge_\",\n \"searchParams\",\n \"sectionRowIndex\",\n \"secureConnectionStart\",\n \"security\",\n \"seed\",\n \"seekable\",\n \"seeking\",\n \"select\",\n \"selectAllChildren\",\n \"selectNode\",\n \"selectNodeContents\",\n \"selectNodes\",\n \"selectSingleNode\",\n \"selectSubString\",\n \"selected\",\n \"selectedIndex\",\n \"selectedOptions\",\n \"selectedStyleSheetSet\",\n \"selectedStylesheetSet\",\n \"selection\",\n \"selectionDirection\",\n \"selectionEnd\",\n \"selectionStart\",\n \"selector\",\n \"selectorText\",\n \"self\",\n \"send\",\n \"sendAsBinary\",\n \"sendBeacon\",\n \"sender\",\n \"sentTimestamp\",\n \"separator\",\n \"serializeToString\",\n \"serviceWorker\",\n \"sessionId\",\n \"sessionStorage\",\n \"set\",\n \"setActive\",\n \"setAlpha\",\n \"setAttribute\",\n \"setAttributeNS\",\n \"setAttributeNode\",\n \"setAttributeNodeNS\",\n \"setBaseAndExtent\",\n \"setBingCurrentSearchDefault\",\n \"setCapture\",\n \"setColor\",\n \"setCompositeOperation\",\n \"setCurrentTime\",\n \"setCustomValidity\",\n \"setData\",\n \"setDate\",\n \"setDragImage\",\n \"setEnd\",\n \"setEndAfter\",\n \"setEndBefore\",\n \"setEndPoint\",\n \"setFillColor\",\n \"setFilterRes\",\n \"setFloat32\",\n \"setFloat64\",\n \"setFloatValue\",\n \"setFullYear\",\n \"setHours\",\n \"setImmediate\",\n \"setInt16\",\n \"setInt32\",\n \"setInt8\",\n \"setInterval\",\n \"setItem\",\n \"setLineCap\",\n \"setLineDash\",\n \"setLineJoin\",\n \"setLineWidth\",\n \"setLocalDescription\",\n \"setMatrix\",\n \"setMatrixValue\",\n \"setMediaKeys\",\n \"setMilliseconds\",\n \"setMinutes\",\n \"setMiterLimit\",\n \"setMonth\",\n \"setNamedItem\",\n \"setNamedItemNS\",\n \"setNonUserCodeExceptions\",\n \"setOrientToAngle\",\n \"setOrientToAuto\",\n \"setOrientation\",\n \"setOverrideHistoryNavigationMode\",\n \"setPaint\",\n \"setParameter\",\n \"setPeriodicWave\",\n \"setPointerCapture\",\n \"setPosition\",\n \"setPreference\",\n \"setProperty\",\n \"setPrototypeOf\",\n \"setRGBColor\",\n \"setRGBColorICCColor\",\n \"setRadius\",\n \"setRangeText\",\n \"setRemoteDescription\",\n \"setRequestHeader\",\n \"setResizable\",\n \"setResourceTimingBufferSize\",\n \"setRotate\",\n \"setScale\",\n \"setSeconds\",\n \"setSelectionRange\",\n \"setServerCertificate\",\n \"setShadow\",\n \"setSkewX\",\n \"setSkewY\",\n \"setStart\",\n \"setStartAfter\",\n \"setStartBefore\",\n \"setStdDeviation\",\n \"setStringValue\",\n \"setStrokeColor\",\n \"setSuggestResult\",\n \"setTargetAtTime\",\n \"setTargetValueAtTime\",\n \"setTime\",\n \"setTimeout\",\n \"setTransform\",\n \"setTranslate\",\n \"setUTCDate\",\n \"setUTCFullYear\",\n \"setUTCHours\",\n \"setUTCMilliseconds\",\n \"setUTCMinutes\",\n \"setUTCMonth\",\n \"setUTCSeconds\",\n \"setUint16\",\n \"setUint32\",\n \"setUint8\",\n \"setUri\",\n \"setValueAtTime\",\n \"setValueCurveAtTime\",\n \"setVariable\",\n \"setVelocity\",\n \"setVersion\",\n \"setYear\",\n \"settingName\",\n \"settingValue\",\n \"sex\",\n \"shaderSource\",\n \"shadowBlur\",\n \"shadowColor\",\n \"shadowOffsetX\",\n \"shadowOffsetY\",\n \"shadowRoot\",\n \"shape\",\n \"shape-rendering\",\n \"shapeRendering\",\n \"sheet\",\n \"shift\",\n \"shiftKey\",\n \"shiftLeft\",\n \"show\",\n \"showHelp\",\n \"showModal\",\n \"showModalDialog\",\n \"showModelessDialog\",\n \"showNotification\",\n \"sidebar\",\n \"sign\",\n \"signalingState\",\n \"sin\",\n \"singleNodeValue\",\n \"sinh\",\n \"size\",\n \"sizeToContent\",\n \"sizes\",\n \"skewX\",\n \"skewXSelf\",\n \"skewY\",\n \"skewYSelf\",\n \"slice\",\n \"slope\",\n \"small\",\n \"smil\",\n \"smooth\",\n \"smoothingTimeConstant\",\n \"snapToLines\",\n \"snapshotItem\",\n \"snapshotLength\",\n \"some\",\n \"sort\",\n \"source\",\n \"sourceBuffer\",\n \"sourceBuffers\",\n \"sourceIndex\",\n \"spacing\",\n \"span\",\n \"speakAs\",\n \"speaking\",\n \"specified\",\n \"specularConstant\",\n \"specularExponent\",\n \"speechSynthesis\",\n \"speed\",\n \"speedOfSound\",\n \"spellcheck\",\n \"splice\",\n \"split\",\n \"splitText\",\n \"spreadMethod\",\n \"sqrt\",\n \"src\",\n \"srcElement\",\n \"srcFilter\",\n \"srcUrn\",\n \"srcdoc\",\n \"srclang\",\n \"srcset\",\n \"stack\",\n \"stackTraceLimit\",\n \"stacktrace\",\n \"standalone\",\n \"standby\",\n \"start\",\n \"startContainer\",\n \"startIce\",\n \"startOffset\",\n \"startRendering\",\n \"startTime\",\n \"startsWith\",\n \"state\",\n \"status\",\n \"statusMessage\",\n \"statusText\",\n \"statusbar\",\n \"stdDeviationX\",\n \"stdDeviationY\",\n \"stencilFunc\",\n \"stencilFuncSeparate\",\n \"stencilMask\",\n \"stencilMaskSeparate\",\n \"stencilOp\",\n \"stencilOpSeparate\",\n \"step\",\n \"stepDown\",\n \"stepMismatch\",\n \"stepUp\",\n \"sticky\",\n \"stitchTiles\",\n \"stop\",\n \"stop-color\",\n \"stop-opacity\",\n \"stopColor\",\n \"stopImmediatePropagation\",\n \"stopOpacity\",\n \"stopPropagation\",\n \"storageArea\",\n \"storageName\",\n \"storageStatus\",\n \"storeSiteSpecificTrackingException\",\n \"storeWebWideTrackingException\",\n \"stpVersion\",\n \"stream\",\n \"strike\",\n \"stringValue\",\n \"stringify\",\n \"stroke\",\n \"stroke-dasharray\",\n \"stroke-dashoffset\",\n \"stroke-linecap\",\n \"stroke-linejoin\",\n \"stroke-miterlimit\",\n \"stroke-opacity\",\n \"stroke-width\",\n \"strokeDasharray\",\n \"strokeDashoffset\",\n \"strokeLinecap\",\n \"strokeLinejoin\",\n \"strokeMiterlimit\",\n \"strokeOpacity\",\n \"strokeRect\",\n \"strokeStyle\",\n \"strokeText\",\n \"strokeWidth\",\n \"style\",\n \"styleFloat\",\n \"styleMedia\",\n \"styleSheet\",\n \"styleSheetSets\",\n \"styleSheets\",\n \"sub\",\n \"subarray\",\n \"subject\",\n \"submit\",\n \"subscribe\",\n \"substr\",\n \"substring\",\n \"substringData\",\n \"subtle\",\n \"subtree\",\n \"suffix\",\n \"suffixes\",\n \"summary\",\n \"sup\",\n \"supports\",\n \"surfaceScale\",\n \"surroundContents\",\n \"suspend\",\n \"suspendRedraw\",\n \"swapCache\",\n \"swapNode\",\n \"sweepFlag\",\n \"symbols\",\n \"system\",\n \"systemCode\",\n \"systemId\",\n \"systemLanguage\",\n \"systemXDPI\",\n \"systemYDPI\",\n \"tBodies\",\n \"tFoot\",\n \"tHead\",\n \"tabIndex\",\n \"table\",\n \"table-layout\",\n \"tableLayout\",\n \"tableValues\",\n \"tag\",\n \"tagName\",\n \"tagUrn\",\n \"tags\",\n \"taintEnabled\",\n \"takeRecords\",\n \"tan\",\n \"tanh\",\n \"target\",\n \"targetElement\",\n \"targetTouches\",\n \"targetX\",\n \"targetY\",\n \"tel\",\n \"terminate\",\n \"test\",\n \"texImage2D\",\n \"texParameterf\",\n \"texParameteri\",\n \"texSubImage2D\",\n \"text\",\n \"text-align\",\n \"text-anchor\",\n \"text-decoration\",\n \"text-decoration-color\",\n \"text-decoration-line\",\n \"text-decoration-style\",\n \"text-indent\",\n \"text-overflow\",\n \"text-rendering\",\n \"text-shadow\",\n \"text-transform\",\n \"textAlign\",\n \"textAlignLast\",\n \"textAnchor\",\n \"textAutospace\",\n \"textBaseline\",\n \"textContent\",\n \"textDecoration\",\n \"textDecorationBlink\",\n \"textDecorationColor\",\n \"textDecorationLine\",\n \"textDecorationLineThrough\",\n \"textDecorationNone\",\n \"textDecorationOverline\",\n \"textDecorationStyle\",\n \"textDecorationUnderline\",\n \"textIndent\",\n \"textJustify\",\n \"textJustifyTrim\",\n \"textKashida\",\n \"textKashidaSpace\",\n \"textLength\",\n \"textOverflow\",\n \"textRendering\",\n \"textShadow\",\n \"textTracks\",\n \"textTransform\",\n \"textUnderlinePosition\",\n \"then\",\n \"threadId\",\n \"threshold\",\n \"tiltX\",\n \"tiltY\",\n \"time\",\n \"timeEnd\",\n \"timeStamp\",\n \"timeout\",\n \"timestamp\",\n \"timestampOffset\",\n \"timing\",\n \"title\",\n \"toArray\",\n \"toBlob\",\n \"toDataURL\",\n \"toDateString\",\n \"toElement\",\n \"toExponential\",\n \"toFixed\",\n \"toFloat32Array\",\n \"toFloat64Array\",\n \"toGMTString\",\n \"toISOString\",\n \"toJSON\",\n \"toLocaleDateString\",\n \"toLocaleFormat\",\n \"toLocaleLowerCase\",\n \"toLocaleString\",\n \"toLocaleTimeString\",\n \"toLocaleUpperCase\",\n \"toLowerCase\",\n \"toMethod\",\n \"toPrecision\",\n \"toSdp\",\n \"toSource\",\n \"toStaticHTML\",\n \"toString\",\n \"toStringTag\",\n \"toTimeString\",\n \"toUTCString\",\n \"toUpperCase\",\n \"toggle\",\n \"toggleLongPressEnabled\",\n \"tooLong\",\n \"toolbar\",\n \"top\",\n \"topMargin\",\n \"total\",\n \"totalFrameDelay\",\n \"totalVideoFrames\",\n \"touchAction\",\n \"touches\",\n \"trace\",\n \"track\",\n \"transaction\",\n \"transactions\",\n \"transform\",\n \"transform-origin\",\n \"transform-style\",\n \"transformOrigin\",\n \"transformPoint\",\n \"transformString\",\n \"transformStyle\",\n \"transformToDocument\",\n \"transformToFragment\",\n \"transition\",\n \"transition-delay\",\n \"transition-duration\",\n \"transition-property\",\n \"transition-timing-function\",\n \"transitionDelay\",\n \"transitionDuration\",\n \"transitionProperty\",\n \"transitionTimingFunction\",\n \"translate\",\n \"translateSelf\",\n \"translationX\",\n \"translationY\",\n \"trim\",\n \"trimLeft\",\n \"trimRight\",\n \"trueSpeed\",\n \"trunc\",\n \"truncate\",\n \"type\",\n \"typeDetail\",\n \"typeMismatch\",\n \"typeMustMatch\",\n \"types\",\n \"ubound\",\n \"undefined\",\n \"unescape\",\n \"uneval\",\n \"unicode-bidi\",\n \"unicodeBidi\",\n \"uniform1f\",\n \"uniform1fv\",\n \"uniform1i\",\n \"uniform1iv\",\n \"uniform2f\",\n \"uniform2fv\",\n \"uniform2i\",\n \"uniform2iv\",\n \"uniform3f\",\n \"uniform3fv\",\n \"uniform3i\",\n \"uniform3iv\",\n \"uniform4f\",\n \"uniform4fv\",\n \"uniform4i\",\n \"uniform4iv\",\n \"uniformMatrix2fv\",\n \"uniformMatrix3fv\",\n \"uniformMatrix4fv\",\n \"unique\",\n \"uniqueID\",\n \"uniqueNumber\",\n \"unitType\",\n \"units\",\n \"unloadEventEnd\",\n \"unloadEventStart\",\n \"unlock\",\n \"unmount\",\n \"unobserve\",\n \"unpause\",\n \"unpauseAnimations\",\n \"unreadCount\",\n \"unregister\",\n \"unregisterContentHandler\",\n \"unregisterProtocolHandler\",\n \"unscopables\",\n \"unselectable\",\n \"unshift\",\n \"unsubscribe\",\n \"unsuspendRedraw\",\n \"unsuspendRedrawAll\",\n \"unwatch\",\n \"unwrapKey\",\n \"update\",\n \"updateCommands\",\n \"updateIce\",\n \"updateInterval\",\n \"updateSettings\",\n \"updated\",\n \"updating\",\n \"upload\",\n \"upper\",\n \"upperBound\",\n \"upperOpen\",\n \"uri\",\n \"url\",\n \"urn\",\n \"urns\",\n \"usages\",\n \"useCurrentView\",\n \"useMap\",\n \"useProgram\",\n \"usedSpace\",\n \"userAgent\",\n \"userLanguage\",\n \"username\",\n \"v8BreakIterator\",\n \"vAlign\",\n \"vLink\",\n \"valid\",\n \"validateProgram\",\n \"validationMessage\",\n \"validity\",\n \"value\",\n \"valueAsDate\",\n \"valueAsNumber\",\n \"valueAsString\",\n \"valueInSpecifiedUnits\",\n \"valueMissing\",\n \"valueOf\",\n \"valueText\",\n \"valueType\",\n \"values\",\n \"vector-effect\",\n \"vectorEffect\",\n \"velocityAngular\",\n \"velocityExpansion\",\n \"velocityX\",\n \"velocityY\",\n \"vendor\",\n \"vendorSub\",\n \"verify\",\n \"version\",\n \"vertexAttrib1f\",\n \"vertexAttrib1fv\",\n \"vertexAttrib2f\",\n \"vertexAttrib2fv\",\n \"vertexAttrib3f\",\n \"vertexAttrib3fv\",\n \"vertexAttrib4f\",\n \"vertexAttrib4fv\",\n \"vertexAttribDivisorANGLE\",\n \"vertexAttribPointer\",\n \"vertical\",\n \"vertical-align\",\n \"verticalAlign\",\n \"verticalOverflow\",\n \"vibrate\",\n \"videoHeight\",\n \"videoTracks\",\n \"videoWidth\",\n \"view\",\n \"viewBox\",\n \"viewBoxString\",\n \"viewTarget\",\n \"viewTargetString\",\n \"viewport\",\n \"viewportAnchorX\",\n \"viewportAnchorY\",\n \"viewportElement\",\n \"visibility\",\n \"visibilityState\",\n \"visible\",\n \"vlinkColor\",\n \"voice\",\n \"volume\",\n \"vrml\",\n \"vspace\",\n \"w\",\n \"wand\",\n \"warn\",\n \"wasClean\",\n \"watch\",\n \"watchPosition\",\n \"webdriver\",\n \"webkitAddKey\",\n \"webkitAnimation\",\n \"webkitAnimationDelay\",\n \"webkitAnimationDirection\",\n \"webkitAnimationDuration\",\n \"webkitAnimationFillMode\",\n \"webkitAnimationIterationCount\",\n \"webkitAnimationName\",\n \"webkitAnimationPlayState\",\n \"webkitAnimationTimingFunction\",\n \"webkitAppearance\",\n \"webkitAudioContext\",\n \"webkitAudioDecodedByteCount\",\n \"webkitAudioPannerNode\",\n \"webkitBackfaceVisibility\",\n \"webkitBackground\",\n \"webkitBackgroundAttachment\",\n \"webkitBackgroundClip\",\n \"webkitBackgroundColor\",\n \"webkitBackgroundImage\",\n \"webkitBackgroundOrigin\",\n \"webkitBackgroundPosition\",\n \"webkitBackgroundPositionX\",\n \"webkitBackgroundPositionY\",\n \"webkitBackgroundRepeat\",\n \"webkitBackgroundSize\",\n \"webkitBackingStorePixelRatio\",\n \"webkitBorderImage\",\n \"webkitBorderImageOutset\",\n \"webkitBorderImageRepeat\",\n \"webkitBorderImageSlice\",\n \"webkitBorderImageSource\",\n \"webkitBorderImageWidth\",\n \"webkitBoxAlign\",\n \"webkitBoxDirection\",\n \"webkitBoxFlex\",\n \"webkitBoxOrdinalGroup\",\n \"webkitBoxOrient\",\n \"webkitBoxPack\",\n \"webkitBoxSizing\",\n \"webkitCancelAnimationFrame\",\n \"webkitCancelFullScreen\",\n \"webkitCancelKeyRequest\",\n \"webkitCancelRequestAnimationFrame\",\n \"webkitClearResourceTimings\",\n \"webkitClosedCaptionsVisible\",\n \"webkitConvertPointFromNodeToPage\",\n \"webkitConvertPointFromPageToNode\",\n \"webkitCreateShadowRoot\",\n \"webkitCurrentFullScreenElement\",\n \"webkitCurrentPlaybackTargetIsWireless\",\n \"webkitDirectionInvertedFromDevice\",\n \"webkitDisplayingFullscreen\",\n \"webkitEnterFullScreen\",\n \"webkitEnterFullscreen\",\n \"webkitExitFullScreen\",\n \"webkitExitFullscreen\",\n \"webkitExitPointerLock\",\n \"webkitFullScreenKeyboardInputAllowed\",\n \"webkitFullscreenElement\",\n \"webkitFullscreenEnabled\",\n \"webkitGenerateKeyRequest\",\n \"webkitGetAsEntry\",\n \"webkitGetDatabaseNames\",\n \"webkitGetEntries\",\n \"webkitGetEntriesByName\",\n \"webkitGetEntriesByType\",\n \"webkitGetFlowByName\",\n \"webkitGetGamepads\",\n \"webkitGetImageDataHD\",\n \"webkitGetNamedFlows\",\n \"webkitGetRegionFlowRanges\",\n \"webkitGetUserMedia\",\n \"webkitHasClosedCaptions\",\n \"webkitHidden\",\n \"webkitIDBCursor\",\n \"webkitIDBDatabase\",\n \"webkitIDBDatabaseError\",\n \"webkitIDBDatabaseException\",\n \"webkitIDBFactory\",\n \"webkitIDBIndex\",\n \"webkitIDBKeyRange\",\n \"webkitIDBObjectStore\",\n \"webkitIDBRequest\",\n \"webkitIDBTransaction\",\n \"webkitImageSmoothingEnabled\",\n \"webkitIndexedDB\",\n \"webkitInitMessageEvent\",\n \"webkitIsFullScreen\",\n \"webkitKeys\",\n \"webkitLineDashOffset\",\n \"webkitLockOrientation\",\n \"webkitMatchesSelector\",\n \"webkitMediaStream\",\n \"webkitNotifications\",\n \"webkitOfflineAudioContext\",\n \"webkitOrientation\",\n \"webkitPeerConnection00\",\n \"webkitPersistentStorage\",\n \"webkitPointerLockElement\",\n \"webkitPostMessage\",\n \"webkitPreservesPitch\",\n \"webkitPutImageDataHD\",\n \"webkitRTCPeerConnection\",\n \"webkitRegionOverset\",\n \"webkitRequestAnimationFrame\",\n \"webkitRequestFileSystem\",\n \"webkitRequestFullScreen\",\n \"webkitRequestFullscreen\",\n \"webkitRequestPointerLock\",\n \"webkitResolveLocalFileSystemURL\",\n \"webkitSetMediaKeys\",\n \"webkitSetResourceTimingBufferSize\",\n \"webkitShadowRoot\",\n \"webkitShowPlaybackTargetPicker\",\n \"webkitSlice\",\n \"webkitSpeechGrammar\",\n \"webkitSpeechGrammarList\",\n \"webkitSpeechRecognition\",\n \"webkitSpeechRecognitionError\",\n \"webkitSpeechRecognitionEvent\",\n \"webkitStorageInfo\",\n \"webkitSupportsFullscreen\",\n \"webkitTemporaryStorage\",\n \"webkitTextSizeAdjust\",\n \"webkitTransform\",\n \"webkitTransformOrigin\",\n \"webkitTransition\",\n \"webkitTransitionDelay\",\n \"webkitTransitionDuration\",\n \"webkitTransitionProperty\",\n \"webkitTransitionTimingFunction\",\n \"webkitURL\",\n \"webkitUnlockOrientation\",\n \"webkitUserSelect\",\n \"webkitVideoDecodedByteCount\",\n \"webkitVisibilityState\",\n \"webkitWirelessVideoPlaybackDisabled\",\n \"webkitdropzone\",\n \"webstore\",\n \"weight\",\n \"whatToShow\",\n \"wheelDelta\",\n \"wheelDeltaX\",\n \"wheelDeltaY\",\n \"which\",\n \"white-space\",\n \"whiteSpace\",\n \"wholeText\",\n \"widows\",\n \"width\",\n \"will-change\",\n \"willChange\",\n \"willValidate\",\n \"window\",\n \"withCredentials\",\n \"word-break\",\n \"word-spacing\",\n \"word-wrap\",\n \"wordBreak\",\n \"wordSpacing\",\n \"wordWrap\",\n \"wrap\",\n \"wrapKey\",\n \"write\",\n \"writeln\",\n \"writingMode\",\n \"x\",\n \"x1\",\n \"x2\",\n \"xChannelSelector\",\n \"xmlEncoding\",\n \"xmlStandalone\",\n \"xmlVersion\",\n \"xmlbase\",\n \"xmllang\",\n \"xmlspace\",\n \"y\",\n \"y1\",\n \"y2\",\n \"yChannelSelector\",\n \"yandex\",\n \"z\",\n \"z-index\",\n \"zIndex\",\n \"zoom\",\n \"zoomAndPan\",\n \"zoomRectScreen\"\n];\n","/***********************************************************************\n\n A JavaScript tokenizer / parser / beautifier / compressor.\n https://github.com/mishoo/UglifyJS2\n\n -------------------------------- (C) ---------------------------------\n\n Author: Mihai Bazon\n \n http://mihai.bazon.net/blog\n\n Distributed under the BSD license:\n\n Copyright 2012 (c) Mihai Bazon \n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions\n are met:\n\n * Redistributions of source code must retain the above\n copyright notice, this list of conditions and the following\n disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials\n provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY\n EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE\n LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,\n OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR\n TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF\n THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n SUCH DAMAGE.\n\n ***********************************************************************/\n\n\"use strict\";\n/* global global, self */\n\nimport {\n defaults,\n push_uniq,\n} from \"./utils/index.js\";\nimport { base54 } from \"./scope\";\nimport {\n AST_Call,\n AST_Conditional,\n AST_Dot,\n AST_ObjectKeyVal,\n AST_ObjectProperty,\n AST_Sequence,\n AST_String,\n AST_Sub,\n TreeTransformer,\n TreeWalker,\n} from \"./ast.js\";\nimport { domprops } from \"../tools/domprops.js\";\n\nfunction find_builtins(reserved) {\n domprops.forEach(add);\n\n // Compatibility fix for some standard defined globals not defined on every js environment\n var new_globals = [\"Symbol\", \"Map\", \"Promise\", \"Proxy\", \"Reflect\", \"Set\", \"WeakMap\", \"WeakSet\"];\n var objects = {};\n var global_ref = typeof global === \"object\" ? global : self;\n\n new_globals.forEach(function (new_global) {\n objects[new_global] = global_ref[new_global] || new Function();\n });\n\n [\n \"null\",\n \"true\",\n \"false\",\n \"NaN\",\n \"Infinity\",\n \"-Infinity\",\n \"undefined\",\n ].forEach(add);\n [ Object, Array, Function, Number,\n String, Boolean, Error, Math,\n Date, RegExp, objects.Symbol, ArrayBuffer,\n DataView, decodeURI, decodeURIComponent,\n encodeURI, encodeURIComponent, eval, EvalError,\n Float32Array, Float64Array, Int8Array, Int16Array,\n Int32Array, isFinite, isNaN, JSON, objects.Map, parseFloat,\n parseInt, objects.Promise, objects.Proxy, RangeError, ReferenceError,\n objects.Reflect, objects.Set, SyntaxError, TypeError, Uint8Array,\n Uint8ClampedArray, Uint16Array, Uint32Array, URIError,\n objects.WeakMap, objects.WeakSet\n ].forEach(function(ctor) {\n Object.getOwnPropertyNames(ctor).map(add);\n if (ctor.prototype) {\n Object.getOwnPropertyNames(ctor.prototype).map(add);\n }\n });\n function add(name) {\n reserved.add(name);\n }\n}\n\nfunction reserve_quoted_keys(ast, reserved) {\n function add(name) {\n push_uniq(reserved, name);\n }\n\n ast.walk(new TreeWalker(function(node) {\n if (node instanceof AST_ObjectKeyVal && node.quote) {\n add(node.key);\n } else if (node instanceof AST_ObjectProperty && node.quote) {\n add(node.key.name);\n } else if (node instanceof AST_Sub) {\n addStrings(node.property, add);\n }\n }));\n}\n\nfunction addStrings(node, add) {\n node.walk(new TreeWalker(function(node) {\n if (node instanceof AST_Sequence) {\n addStrings(node.tail_node(), add);\n } else if (node instanceof AST_String) {\n add(node.value);\n } else if (node instanceof AST_Conditional) {\n addStrings(node.consequent, add);\n addStrings(node.alternative, add);\n }\n return true;\n }));\n}\n\nfunction mangle_properties(ast, options) {\n options = defaults(options, {\n builtins: false,\n cache: null,\n debug: false,\n keep_quoted: false,\n only_cache: false,\n regex: null,\n reserved: null,\n undeclared: false,\n }, true);\n\n var reserved_option = options.reserved;\n if (!Array.isArray(reserved_option)) reserved_option = [reserved_option];\n var reserved = new Set(reserved_option);\n if (!options.builtins) find_builtins(reserved);\n\n var cname = -1;\n var cache;\n if (options.cache) {\n cache = options.cache.props;\n cache.forEach(function(mangled_name) {\n reserved.add(mangled_name);\n });\n } else {\n cache = new Map();\n }\n\n var regex = options.regex && new RegExp(options.regex);\n\n // note debug is either false (disabled), or a string of the debug suffix to use (enabled).\n // note debug may be enabled as an empty string, which is falsey. Also treat passing 'true'\n // the same as passing an empty string.\n var debug = options.debug !== false;\n var debug_name_suffix;\n if (debug) {\n debug_name_suffix = (options.debug === true ? \"\" : options.debug);\n }\n\n var names_to_mangle = new Set();\n var unmangleable = new Set();\n\n var keep_quoted_strict = options.keep_quoted === \"strict\";\n\n // step 1: find candidates to mangle\n ast.walk(new TreeWalker(function(node) {\n if (node instanceof AST_ObjectKeyVal) {\n if (typeof node.key == \"string\" &&\n (!keep_quoted_strict || !node.quote)) {\n add(node.key);\n }\n } else if (node instanceof AST_ObjectProperty) {\n // setter or getter, since KeyVal is handled above\n if (!keep_quoted_strict || !node.key.end.quote) {\n add(node.key.name);\n }\n } else if (node instanceof AST_Dot) {\n var declared = !!options.undeclared;\n if (!declared) {\n var root = node;\n while (root.expression) {\n root = root.expression;\n }\n declared = !(root.thedef && root.thedef.undeclared);\n }\n if (declared &&\n (!keep_quoted_strict || !node.quote)) {\n add(node.property);\n }\n } else if (node instanceof AST_Sub) {\n if (!keep_quoted_strict) {\n addStrings(node.property, add);\n }\n } else if (node instanceof AST_Call\n && node.expression.print_to_string() == \"Object.defineProperty\") {\n addStrings(node.args[1], add);\n }\n }));\n\n // step 2: transform the tree, renaming properties\n return ast.transform(new TreeTransformer(function(node) {\n if (node instanceof AST_ObjectKeyVal) {\n if (typeof node.key == \"string\" &&\n (!keep_quoted_strict || !node.quote)) {\n node.key = mangle(node.key);\n }\n } else if (node instanceof AST_ObjectProperty) {\n // setter, getter, method or class field\n if (!keep_quoted_strict || !node.key.end.quote) {\n node.key.name = mangle(node.key.name);\n }\n } else if (node instanceof AST_Dot) {\n if (!keep_quoted_strict || !node.quote) {\n node.property = mangle(node.property);\n }\n } else if (!options.keep_quoted && node instanceof AST_Sub) {\n node.property = mangleStrings(node.property);\n } else if (node instanceof AST_Call\n && node.expression.print_to_string() == \"Object.defineProperty\") {\n node.args[1] = mangleStrings(node.args[1]);\n }\n }));\n\n // only function declarations after this line\n\n function can_mangle(name) {\n if (unmangleable.has(name)) return false;\n if (reserved.has(name)) return false;\n if (options.only_cache) {\n return cache.has(name);\n }\n if (/^-?[0-9]+(\\.[0-9]+)?(e[+-][0-9]+)?$/.test(name)) return false;\n return true;\n }\n\n function should_mangle(name) {\n if (regex && !regex.test(name)) return false;\n if (reserved.has(name)) return false;\n return cache.has(name)\n || names_to_mangle.has(name);\n }\n\n function add(name) {\n if (can_mangle(name))\n names_to_mangle.add(name);\n\n if (!should_mangle(name)) {\n unmangleable.add(name);\n }\n }\n\n function mangle(name) {\n if (!should_mangle(name)) {\n return name;\n }\n\n var mangled = cache.get(name);\n if (!mangled) {\n if (debug) {\n // debug mode: use a prefix and suffix to preserve readability, e.g. o.foo -> o._$foo$NNN_.\n var debug_mangled = \"_$\" + name + \"$\" + debug_name_suffix + \"_\";\n\n if (can_mangle(debug_mangled)) {\n mangled = debug_mangled;\n }\n }\n\n // either debug mode is off, or it is on and we could not use the mangled name\n if (!mangled) {\n do {\n mangled = base54(++cname);\n } while (!can_mangle(mangled));\n }\n\n cache.set(name, mangled);\n }\n return mangled;\n }\n\n function mangleStrings(node) {\n return node.transform(new TreeTransformer(function(node) {\n if (node instanceof AST_Sequence) {\n var last = node.expressions.length - 1;\n node.expressions[last] = mangleStrings(node.expressions[last]);\n } else if (node instanceof AST_String) {\n node.value = mangle(node.value);\n } else if (node instanceof AST_Conditional) {\n node.consequent = mangleStrings(node.consequent);\n node.alternative = mangleStrings(node.alternative);\n }\n return node;\n }));\n }\n}\n\nexport {\n reserve_quoted_keys,\n mangle_properties,\n};\n","\"use strict\";\n/* eslint-env browser, es6, node */\n\nimport {\n defaults,\n map_from_object,\n map_to_object,\n HOP,\n} from \"./utils/index.js\";\nimport {\n AST_Node,\n AST_Toplevel,\n} from \"./ast.js\";\nimport { parse } from \"./parse.js\";\nimport { OutputStream } from \"./output.js\";\nimport { Compressor } from \"./compress/index.js\";\nimport { base54 } from \"./scope.js\";\nimport { SourceMap } from \"./sourcemap.js\";\nimport {\n mangle_properties,\n reserve_quoted_keys,\n} from \"./propmangle.js\";\n\nvar to_ascii = typeof atob == \"undefined\" ? function(b64) {\n return Buffer.from(b64, \"base64\").toString();\n} : atob;\nvar to_base64 = typeof btoa == \"undefined\" ? function(str) {\n return Buffer.from(str).toString(\"base64\");\n} : btoa;\n\nfunction read_source_map(code) {\n var match = /(?:^|[^.])\\/\\/# sourceMappingURL=data:application\\/json(;[\\w=-]*)?;base64,([+/0-9A-Za-z]*=*)\\s*$/.exec(code);\n if (!match) {\n AST_Node.warn(\"inline source map not found\");\n return null;\n }\n return to_ascii(match[2]);\n}\n\nfunction set_shorthand(name, options, keys) {\n if (options[name]) {\n keys.forEach(function(key) {\n if (options[key]) {\n if (typeof options[key] != \"object\") options[key] = {};\n if (!(name in options[key])) options[key][name] = options[name];\n }\n });\n }\n}\n\nfunction init_cache(cache) {\n if (!cache) return;\n if (!(\"props\" in cache)) {\n cache.props = new Map();\n } else if (!(cache.props instanceof Map)) {\n cache.props = map_from_object(cache.props);\n }\n}\n\nfunction cache_to_json(cache) {\n return {\n props: map_to_object(cache.props)\n };\n}\n\nfunction minify(files, options) {\n var warn_function = AST_Node.warn_function;\n try {\n options = defaults(options, {\n compress: {},\n ecma: undefined,\n enclose: false,\n ie8: false,\n keep_classnames: undefined,\n keep_fnames: false,\n mangle: {},\n module: false,\n nameCache: null,\n output: {},\n parse: {},\n rename: undefined,\n safari10: false,\n sourceMap: false,\n timings: false,\n toplevel: false,\n warnings: false,\n wrap: false,\n }, true);\n var timings = options.timings && {\n start: Date.now()\n };\n if (options.keep_classnames === undefined) {\n options.keep_classnames = options.keep_fnames;\n }\n if (options.rename === undefined) {\n options.rename = options.compress && options.mangle;\n }\n set_shorthand(\"ecma\", options, [ \"parse\", \"compress\", \"output\" ]);\n set_shorthand(\"ie8\", options, [ \"compress\", \"mangle\", \"output\" ]);\n set_shorthand(\"keep_classnames\", options, [ \"compress\", \"mangle\" ]);\n set_shorthand(\"keep_fnames\", options, [ \"compress\", \"mangle\" ]);\n set_shorthand(\"module\", options, [ \"parse\", \"compress\", \"mangle\" ]);\n set_shorthand(\"safari10\", options, [ \"mangle\", \"output\" ]);\n set_shorthand(\"toplevel\", options, [ \"compress\", \"mangle\" ]);\n set_shorthand(\"warnings\", options, [ \"compress\" ]);\n var quoted_props;\n if (options.mangle) {\n options.mangle = defaults(options.mangle, {\n cache: options.nameCache && (options.nameCache.vars || {}),\n eval: false,\n ie8: false,\n keep_classnames: false,\n keep_fnames: false,\n module: false,\n properties: false,\n reserved: [],\n safari10: false,\n toplevel: false,\n }, true);\n if (options.mangle.properties) {\n if (typeof options.mangle.properties != \"object\") {\n options.mangle.properties = {};\n }\n if (options.mangle.properties.keep_quoted) {\n quoted_props = options.mangle.properties.reserved;\n if (!Array.isArray(quoted_props)) quoted_props = [];\n options.mangle.properties.reserved = quoted_props;\n }\n if (options.nameCache && !(\"cache\" in options.mangle.properties)) {\n options.mangle.properties.cache = options.nameCache.props || {};\n }\n }\n init_cache(options.mangle.cache);\n init_cache(options.mangle.properties.cache);\n }\n if (options.sourceMap) {\n options.sourceMap = defaults(options.sourceMap, {\n asObject: false,\n content: null,\n filename: null,\n includeSources: false,\n root: null,\n url: null,\n }, true);\n }\n var warnings = [];\n if (options.warnings && !AST_Node.warn_function) {\n AST_Node.warn_function = function(warning) {\n warnings.push(warning);\n };\n }\n if (timings) timings.parse = Date.now();\n var toplevel;\n if (files instanceof AST_Toplevel) {\n toplevel = files;\n } else {\n if (typeof files == \"string\") {\n files = [ files ];\n }\n options.parse = options.parse || {};\n options.parse.toplevel = null;\n for (var name in files) if (HOP(files, name)) {\n options.parse.filename = name;\n options.parse.toplevel = parse(files[name], options.parse);\n if (options.sourceMap && options.sourceMap.content == \"inline\") {\n if (Object.keys(files).length > 1)\n throw new Error(\"inline source map only works with singular input\");\n options.sourceMap.content = read_source_map(files[name]);\n }\n }\n toplevel = options.parse.toplevel;\n }\n if (quoted_props && options.mangle.properties.keep_quoted !== \"strict\") {\n reserve_quoted_keys(toplevel, quoted_props);\n }\n if (options.wrap) {\n toplevel = toplevel.wrap_commonjs(options.wrap);\n }\n if (options.enclose) {\n toplevel = toplevel.wrap_enclose(options.enclose);\n }\n if (timings) timings.rename = Date.now();\n // disable rename on harmony due to expand_names bug in for-of loops\n // https://github.com/mishoo/UglifyJS2/issues/2794\n if (0 && options.rename) {\n toplevel.figure_out_scope(options.mangle);\n toplevel.expand_names(options.mangle);\n }\n if (timings) timings.compress = Date.now();\n if (options.compress) toplevel = new Compressor(options.compress).compress(toplevel);\n if (timings) timings.scope = Date.now();\n if (options.mangle) toplevel.figure_out_scope(options.mangle);\n if (timings) timings.mangle = Date.now();\n if (options.mangle) {\n base54.reset();\n toplevel.compute_char_frequency(options.mangle);\n toplevel.mangle_names(options.mangle);\n }\n if (timings) timings.properties = Date.now();\n if (options.mangle && options.mangle.properties) {\n toplevel = mangle_properties(toplevel, options.mangle.properties);\n }\n if (timings) timings.output = Date.now();\n var result = {};\n if (options.output.ast) {\n result.ast = toplevel;\n }\n if (!HOP(options.output, \"code\") || options.output.code) {\n if (options.sourceMap) {\n if (typeof options.sourceMap.content == \"string\") {\n options.sourceMap.content = JSON.parse(options.sourceMap.content);\n }\n options.output.source_map = SourceMap({\n file: options.sourceMap.filename,\n orig: options.sourceMap.content,\n root: options.sourceMap.root\n });\n if (options.sourceMap.includeSources) {\n if (files instanceof AST_Toplevel) {\n throw new Error(\"original source content unavailable\");\n } else for (var name in files) if (HOP(files, name)) {\n options.output.source_map.get().setSourceContent(name, files[name]);\n }\n }\n }\n delete options.output.ast;\n delete options.output.code;\n var stream = OutputStream(options.output);\n toplevel.print(stream);\n result.code = stream.get();\n if (options.sourceMap) {\n if(options.sourceMap.asObject) {\n result.map = options.output.source_map.get().toJSON();\n } else {\n result.map = options.output.source_map.toString();\n }\n if (options.sourceMap.url == \"inline\") {\n var sourceMap = typeof result.map === \"object\" ? JSON.stringify(result.map) : result.map;\n result.code += \"\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,\" + to_base64(sourceMap);\n } else if (options.sourceMap.url) {\n result.code += \"\\n//# sourceMappingURL=\" + options.sourceMap.url;\n }\n }\n }\n if (options.nameCache && options.mangle) {\n if (options.mangle.cache) options.nameCache.vars = cache_to_json(options.mangle.cache);\n if (options.mangle.properties && options.mangle.properties.cache) {\n options.nameCache.props = cache_to_json(options.mangle.properties.cache);\n }\n }\n if (timings) {\n timings.end = Date.now();\n result.timings = {\n parse: 1e-3 * (timings.rename - timings.parse),\n rename: 1e-3 * (timings.compress - timings.rename),\n compress: 1e-3 * (timings.scope - timings.compress),\n scope: 1e-3 * (timings.mangle - timings.scope),\n mangle: 1e-3 * (timings.properties - timings.mangle),\n properties: 1e-3 * (timings.output - timings.properties),\n output: 1e-3 * (timings.end - timings.output),\n total: 1e-3 * (timings.end - timings.start)\n };\n }\n if (warnings.length) {\n result.warnings = warnings;\n }\n return result;\n } catch (ex) {\n return { error: ex };\n } finally {\n AST_Node.warn_function = warn_function;\n }\n}\n\nexport {\n minify,\n to_ascii,\n};\n","/***********************************************************************\n\n A JavaScript tokenizer / parser / beautifier / compressor.\n https://github.com/mishoo/UglifyJS2\n\n -------------------------------- (C) ---------------------------------\n\n Author: Mihai Bazon\n \n http://mihai.bazon.net/blog\n\n Distributed under the BSD license:\n\n Copyright 2012 (c) Mihai Bazon \n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions\n are met:\n\n * Redistributions of source code must retain the above\n copyright notice, this list of conditions and the following\n disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials\n provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY\n EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE\n LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,\n OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR\n TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF\n THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n SUCH DAMAGE.\n\n ***********************************************************************/\n\n\"use strict\";\n\nimport MOZ_SourceMap from \"source-map\";\nimport {\n defaults,\n} from \"./utils/index.js\";\n\n// a small wrapper around fitzgen's source-map library\nfunction SourceMap(options) {\n options = defaults(options, {\n file : null,\n root : null,\n orig : null,\n\n orig_line_diff : 0,\n dest_line_diff : 0,\n });\n var generator = new MOZ_SourceMap.SourceMapGenerator({\n file : options.file,\n sourceRoot : options.root\n });\n var orig_map = options.orig && new MOZ_SourceMap.SourceMapConsumer(options.orig);\n\n if (orig_map) {\n orig_map.sources.forEach(function(source) {\n var sourceContent = orig_map.sourceContentFor(source, true);\n if (sourceContent) {\n generator.setSourceContent(source, sourceContent);\n }\n });\n }\n\n function add(source, gen_line, gen_col, orig_line, orig_col, name) {\n if (orig_map) {\n var info = orig_map.originalPositionFor({\n line: orig_line,\n column: orig_col\n });\n if (info.source === null) {\n return;\n }\n source = info.source;\n orig_line = info.line;\n orig_col = info.column;\n name = info.name || name;\n }\n generator.addMapping({\n generated : { line: gen_line + options.dest_line_diff, column: gen_col },\n original : { line: orig_line + options.orig_line_diff, column: orig_col },\n source : source,\n name : name\n });\n }\n return {\n add : add,\n get : function() { return generator; },\n toString : function() { return JSON.stringify(generator.toJSON()); }\n };\n}\n\nexport {\n SourceMap,\n};\n","/***********************************************************************\n\n A JavaScript tokenizer / parser / beautifier / compressor.\n https://github.com/mishoo/UglifyJS2\n\n -------------------------------- (C) ---------------------------------\n\n Author: Mihai Bazon\n \n http://mihai.bazon.net/blog\n\n Distributed under the BSD license:\n\n Copyright 2012 (c) Mihai Bazon \n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions\n are met:\n\n * Redistributions of source code must retain the above\n copyright notice, this list of conditions and the following\n disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials\n provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY\n EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE\n LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,\n OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR\n TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF\n THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n SUCH DAMAGE.\n\n ***********************************************************************/\n\nimport * as ast from \"./ast.js\";\nimport { make_node } from \"./utils/index.js\";\nimport {\n AST_Accessor,\n AST_Array,\n AST_Arrow,\n AST_Assign,\n AST_Atom,\n AST_Await,\n AST_BigInt,\n AST_Binary,\n AST_Block,\n AST_BlockStatement,\n AST_Boolean,\n AST_Break,\n AST_Call,\n AST_Case,\n AST_Catch,\n AST_Class,\n AST_ClassExpression,\n AST_ClassProperty,\n AST_ConciseMethod,\n AST_Conditional,\n AST_Const,\n AST_Constant,\n AST_Continue,\n AST_Debugger,\n AST_Default,\n AST_DefaultAssign,\n AST_DefClass,\n AST_Definitions,\n AST_Defun,\n AST_Destructuring,\n AST_Directive,\n AST_Do,\n AST_Dot,\n AST_EmptyStatement,\n AST_Expansion,\n AST_Export,\n AST_False,\n AST_Finally,\n AST_For,\n AST_ForIn,\n AST_ForOf,\n AST_Function,\n AST_Hole,\n AST_If,\n AST_Import,\n AST_Label,\n AST_LabeledStatement,\n AST_LabelRef,\n AST_Lambda,\n AST_Let,\n AST_NameMapping,\n AST_New,\n AST_NewTarget,\n AST_Node,\n AST_Null,\n AST_Number,\n AST_Object,\n AST_ObjectGetter,\n AST_ObjectKeyVal,\n AST_ObjectProperty,\n AST_ObjectSetter,\n AST_PrefixedTemplateString,\n AST_PropAccess,\n AST_RegExp,\n AST_Return,\n AST_Sequence,\n AST_SimpleStatement,\n AST_Statement,\n AST_String,\n AST_Sub,\n AST_Super,\n AST_Switch,\n AST_SwitchBranch,\n AST_Symbol,\n AST_SymbolCatch,\n AST_SymbolClass,\n AST_SymbolClassProperty,\n AST_SymbolConst,\n AST_SymbolDefClass,\n AST_SymbolDefun,\n AST_SymbolExport,\n AST_SymbolExportForeign,\n AST_SymbolFunarg,\n AST_SymbolImport,\n AST_SymbolImportForeign,\n AST_SymbolLambda,\n AST_SymbolLet,\n AST_SymbolMethod,\n AST_SymbolRef,\n AST_SymbolVar,\n AST_TemplateSegment,\n AST_TemplateString,\n AST_This,\n AST_Throw,\n AST_Token,\n AST_Toplevel,\n AST_True,\n AST_Try,\n AST_Unary,\n AST_UnaryPostfix,\n AST_UnaryPrefix,\n AST_Var,\n AST_VarDef,\n AST_While,\n AST_With,\n AST_Yield,\n} from \"./ast.js\";\n\n(function() {\n\n var normalize_directives = function(body) {\n var in_directive = true;\n\n for (var i = 0; i < body.length; i++) {\n if (in_directive && body[i] instanceof AST_Statement && body[i].body instanceof AST_String) {\n body[i] = new AST_Directive({\n start: body[i].start,\n end: body[i].end,\n value: body[i].body.value\n });\n } else if (in_directive && !(body[i] instanceof AST_Statement && body[i].body instanceof AST_String)) {\n in_directive = false;\n }\n }\n\n return body;\n };\n\n var MOZ_TO_ME = {\n Program: function(M) {\n return new AST_Toplevel({\n start: my_start_token(M),\n end: my_end_token(M),\n body: normalize_directives(M.body.map(from_moz))\n });\n },\n ArrayPattern: function(M) {\n return new AST_Destructuring({\n start: my_start_token(M),\n end: my_end_token(M),\n names: M.elements.map(function(elm) {\n if (elm === null) {\n return new AST_Hole();\n }\n return from_moz(elm);\n }),\n is_array: true\n });\n },\n ObjectPattern: function(M) {\n return new AST_Destructuring({\n start: my_start_token(M),\n end: my_end_token(M),\n names: M.properties.map(from_moz),\n is_array: false\n });\n },\n AssignmentPattern: function(M) {\n return new AST_DefaultAssign({\n start: my_start_token(M),\n end: my_end_token(M),\n left: from_moz(M.left),\n operator: \"=\",\n right: from_moz(M.right)\n });\n },\n SpreadElement: function(M) {\n return new AST_Expansion({\n start: my_start_token(M),\n end: my_end_token(M),\n expression: from_moz(M.argument)\n });\n },\n RestElement: function(M) {\n return new AST_Expansion({\n start: my_start_token(M),\n end: my_end_token(M),\n expression: from_moz(M.argument)\n });\n },\n TemplateElement: function(M) {\n return new AST_TemplateSegment({\n start: my_start_token(M),\n end: my_end_token(M),\n value: M.value.cooked,\n raw: M.value.raw\n });\n },\n TemplateLiteral: function(M) {\n var segments = [];\n for (var i = 0; i < M.quasis.length; i++) {\n segments.push(from_moz(M.quasis[i]));\n if (M.expressions[i]) {\n segments.push(from_moz(M.expressions[i]));\n }\n }\n return new AST_TemplateString({\n start: my_start_token(M),\n end: my_end_token(M),\n segments: segments\n });\n },\n TaggedTemplateExpression: function(M) {\n return new AST_PrefixedTemplateString({\n start: my_start_token(M),\n end: my_end_token(M),\n template_string: from_moz(M.quasi),\n prefix: from_moz(M.tag)\n });\n },\n FunctionDeclaration: function(M) {\n return new AST_Defun({\n start: my_start_token(M),\n end: my_end_token(M),\n name: from_moz(M.id),\n argnames: M.params.map(from_moz),\n is_generator: M.generator,\n async: M.async,\n body: normalize_directives(from_moz(M.body).body)\n });\n },\n FunctionExpression: function(M) {\n return new AST_Function({\n start: my_start_token(M),\n end: my_end_token(M),\n name: from_moz(M.id),\n argnames: M.params.map(from_moz),\n is_generator: M.generator,\n async: M.async,\n body: normalize_directives(from_moz(M.body).body)\n });\n },\n ArrowFunctionExpression: function(M) {\n const body = M.body.type === \"BlockStatement\"\n ? from_moz(M.body).body\n : [make_node(AST_Return, {}, { value: from_moz(M.body) })];\n return new AST_Arrow({\n start: my_start_token(M),\n end: my_end_token(M),\n argnames: M.params.map(from_moz),\n body,\n async: M.async,\n });\n },\n ExpressionStatement: function(M) {\n return new AST_SimpleStatement({\n start: my_start_token(M),\n end: my_end_token(M),\n body: from_moz(M.expression)\n });\n },\n TryStatement: function(M) {\n var handlers = M.handlers || [M.handler];\n if (handlers.length > 1 || M.guardedHandlers && M.guardedHandlers.length) {\n throw new Error(\"Multiple catch clauses are not supported.\");\n }\n return new AST_Try({\n start : my_start_token(M),\n end : my_end_token(M),\n body : from_moz(M.block).body,\n bcatch : from_moz(handlers[0]),\n bfinally : M.finalizer ? new AST_Finally(from_moz(M.finalizer)) : null\n });\n },\n Property: function(M) {\n var key = M.key;\n var args = {\n start : my_start_token(key || M.value),\n end : my_end_token(M.value),\n key : key.type == \"Identifier\" ? key.name : key.value,\n value : from_moz(M.value)\n };\n if (M.computed) {\n args.key = from_moz(M.key);\n }\n if (M.method) {\n args.is_generator = M.value.generator;\n args.async = M.value.async;\n if (!M.computed) {\n args.key = new AST_SymbolMethod({ name: args.key });\n } else {\n args.key = from_moz(M.key);\n }\n return new AST_ConciseMethod(args);\n }\n if (M.kind == \"init\") {\n if (key.type != \"Identifier\" && key.type != \"Literal\") {\n args.key = from_moz(key);\n }\n return new AST_ObjectKeyVal(args);\n }\n if (typeof args.key === \"string\" || typeof args.key === \"number\") {\n args.key = new AST_SymbolMethod({\n name: args.key\n });\n }\n args.value = new AST_Accessor(args.value);\n if (M.kind == \"get\") return new AST_ObjectGetter(args);\n if (M.kind == \"set\") return new AST_ObjectSetter(args);\n if (M.kind == \"method\") {\n args.async = M.value.async;\n args.is_generator = M.value.generator;\n args.quote = M.computed ? \"\\\"\" : null;\n return new AST_ConciseMethod(args);\n }\n },\n MethodDefinition: function(M) {\n var args = {\n start : my_start_token(M),\n end : my_end_token(M),\n key : M.computed ? from_moz(M.key) : new AST_SymbolMethod({ name: M.key.name || M.key.value }),\n value : from_moz(M.value),\n static : M.static,\n };\n if (M.kind == \"get\") {\n return new AST_ObjectGetter(args);\n }\n if (M.kind == \"set\") {\n return new AST_ObjectSetter(args);\n }\n args.is_generator = M.value.generator;\n args.async = M.value.async;\n return new AST_ConciseMethod(args);\n },\n FieldDefinition: function(M) {\n let key;\n if (M.computed) {\n key = from_moz(M.key);\n } else {\n if (M.key.type !== \"Identifier\") throw new Error(\"Non-Identifier key in FieldDefinition\");\n key = from_moz(M.key);\n }\n return new AST_ClassProperty({\n start : my_start_token(M),\n end : my_end_token(M),\n key,\n value : from_moz(M.value),\n static : M.static,\n });\n },\n ArrayExpression: function(M) {\n return new AST_Array({\n start : my_start_token(M),\n end : my_end_token(M),\n elements : M.elements.map(function(elem) {\n return elem === null ? new AST_Hole() : from_moz(elem);\n })\n });\n },\n ObjectExpression: function(M) {\n return new AST_Object({\n start : my_start_token(M),\n end : my_end_token(M),\n properties : M.properties.map(function(prop) {\n if (prop.type === \"SpreadElement\") {\n return from_moz(prop);\n }\n prop.type = \"Property\";\n return from_moz(prop);\n })\n });\n },\n SequenceExpression: function(M) {\n return new AST_Sequence({\n start : my_start_token(M),\n end : my_end_token(M),\n expressions: M.expressions.map(from_moz)\n });\n },\n MemberExpression: function(M) {\n return new (M.computed ? AST_Sub : AST_Dot)({\n start : my_start_token(M),\n end : my_end_token(M),\n property : M.computed ? from_moz(M.property) : M.property.name,\n expression : from_moz(M.object)\n });\n },\n SwitchCase: function(M) {\n return new (M.test ? AST_Case : AST_Default)({\n start : my_start_token(M),\n end : my_end_token(M),\n expression : from_moz(M.test),\n body : M.consequent.map(from_moz)\n });\n },\n VariableDeclaration: function(M) {\n return new (M.kind === \"const\" ? AST_Const :\n M.kind === \"let\" ? AST_Let : AST_Var)({\n start : my_start_token(M),\n end : my_end_token(M),\n definitions : M.declarations.map(from_moz)\n });\n },\n\n ImportDeclaration: function(M) {\n var imported_name = null;\n var imported_names = null;\n M.specifiers.forEach(function (specifier) {\n if (specifier.type === \"ImportSpecifier\") {\n if (!imported_names) { imported_names = []; }\n imported_names.push(new AST_NameMapping({\n start: my_start_token(specifier),\n end: my_end_token(specifier),\n foreign_name: from_moz(specifier.imported),\n name: from_moz(specifier.local)\n }));\n } else if (specifier.type === \"ImportDefaultSpecifier\") {\n imported_name = from_moz(specifier.local);\n } else if (specifier.type === \"ImportNamespaceSpecifier\") {\n if (!imported_names) { imported_names = []; }\n imported_names.push(new AST_NameMapping({\n start: my_start_token(specifier),\n end: my_end_token(specifier),\n foreign_name: new AST_SymbolImportForeign({ name: \"*\" }),\n name: from_moz(specifier.local)\n }));\n }\n });\n return new AST_Import({\n start : my_start_token(M),\n end : my_end_token(M),\n imported_name: imported_name,\n imported_names : imported_names,\n module_name : from_moz(M.source)\n });\n },\n ExportAllDeclaration: function(M) {\n return new AST_Export({\n start: my_start_token(M),\n end: my_end_token(M),\n exported_names: [\n new AST_NameMapping({\n name: new AST_SymbolExportForeign({ name: \"*\" }),\n foreign_name: new AST_SymbolExportForeign({ name: \"*\" })\n })\n ],\n module_name: from_moz(M.source)\n });\n },\n ExportNamedDeclaration: function(M) {\n return new AST_Export({\n start: my_start_token(M),\n end: my_end_token(M),\n exported_definition: from_moz(M.declaration),\n exported_names: M.specifiers && M.specifiers.length ? M.specifiers.map(function (specifier) {\n return new AST_NameMapping({\n foreign_name: from_moz(specifier.exported),\n name: from_moz(specifier.local)\n });\n }) : null,\n module_name: from_moz(M.source)\n });\n },\n ExportDefaultDeclaration: function(M) {\n return new AST_Export({\n start: my_start_token(M),\n end: my_end_token(M),\n exported_value: from_moz(M.declaration),\n is_default: true\n });\n },\n Literal: function(M) {\n var val = M.value, args = {\n start : my_start_token(M),\n end : my_end_token(M)\n };\n var rx = M.regex;\n if (rx && rx.pattern) {\n // RegExpLiteral as per ESTree AST spec\n args.value = {\n source: rx.pattern,\n flags: rx.flags\n };\n return new AST_RegExp(args);\n } else if (rx) {\n // support legacy RegExp\n const rx_source = M.raw || val;\n const match = rx_source.match(/^\\/(.*)\\/(\\w*)$/);\n if (!match) throw new Error(\"Invalid regex source \" + rx_source);\n const [_, source, flags] = match;\n args.value = { source, flags };\n return new AST_RegExp(args);\n }\n if (val === null) return new AST_Null(args);\n switch (typeof val) {\n case \"string\":\n args.value = val;\n return new AST_String(args);\n case \"number\":\n args.value = val;\n return new AST_Number(args);\n case \"boolean\":\n return new (val ? AST_True : AST_False)(args);\n }\n },\n MetaProperty: function(M) {\n if (M.meta.name === \"new\" && M.property.name === \"target\") {\n return new AST_NewTarget({\n start: my_start_token(M),\n end: my_end_token(M)\n });\n }\n },\n Identifier: function(M) {\n var p = FROM_MOZ_STACK[FROM_MOZ_STACK.length - 2];\n return new ( p.type == \"LabeledStatement\" ? AST_Label\n : p.type == \"VariableDeclarator\" && p.id === M ? (p.kind == \"const\" ? AST_SymbolConst : p.kind == \"let\" ? AST_SymbolLet : AST_SymbolVar)\n : /Import.*Specifier/.test(p.type) ? (p.local === M ? AST_SymbolImport : AST_SymbolImportForeign)\n : p.type == \"ExportSpecifier\" ? (p.local === M ? AST_SymbolExport : AST_SymbolExportForeign)\n : p.type == \"FunctionExpression\" ? (p.id === M ? AST_SymbolLambda : AST_SymbolFunarg)\n : p.type == \"FunctionDeclaration\" ? (p.id === M ? AST_SymbolDefun : AST_SymbolFunarg)\n : p.type == \"ArrowFunctionExpression\" ? (p.params.includes(M)) ? AST_SymbolFunarg : AST_SymbolRef\n : p.type == \"ClassExpression\" ? (p.id === M ? AST_SymbolClass : AST_SymbolRef)\n : p.type == \"Property\" ? (p.key === M && p.computed || p.value === M ? AST_SymbolRef : AST_SymbolMethod)\n : p.type == \"FieldDefinition\" ? (p.key === M && p.computed || p.value === M ? AST_SymbolRef : AST_SymbolClassProperty)\n : p.type == \"ClassDeclaration\" ? (p.id === M ? AST_SymbolDefClass : AST_SymbolRef)\n : p.type == \"MethodDefinition\" ? (p.computed ? AST_SymbolRef : AST_SymbolMethod)\n : p.type == \"CatchClause\" ? AST_SymbolCatch\n : p.type == \"BreakStatement\" || p.type == \"ContinueStatement\" ? AST_LabelRef\n : AST_SymbolRef)({\n start : my_start_token(M),\n end : my_end_token(M),\n name : M.name\n });\n },\n BigIntLiteral(M) {\n return new AST_BigInt({\n start : my_start_token(M),\n end : my_end_token(M),\n value : M.value\n });\n }\n };\n\n MOZ_TO_ME.UpdateExpression =\n MOZ_TO_ME.UnaryExpression = function To_Moz_Unary(M) {\n var prefix = \"prefix\" in M ? M.prefix\n : M.type == \"UnaryExpression\" ? true : false;\n return new (prefix ? AST_UnaryPrefix : AST_UnaryPostfix)({\n start : my_start_token(M),\n end : my_end_token(M),\n operator : M.operator,\n expression : from_moz(M.argument)\n });\n };\n\n MOZ_TO_ME.ClassDeclaration =\n MOZ_TO_ME.ClassExpression = function From_Moz_Class(M) {\n return new (M.type === \"ClassDeclaration\" ? AST_DefClass : AST_ClassExpression)({\n start : my_start_token(M),\n end : my_end_token(M),\n name : from_moz(M.id),\n extends : from_moz(M.superClass),\n properties: M.body.body.map(from_moz)\n });\n };\n\n map(\"EmptyStatement\", AST_EmptyStatement);\n map(\"BlockStatement\", AST_BlockStatement, \"body@body\");\n map(\"IfStatement\", AST_If, \"test>condition, consequent>body, alternate>alternative\");\n map(\"LabeledStatement\", AST_LabeledStatement, \"label>label, body>body\");\n map(\"BreakStatement\", AST_Break, \"label>label\");\n map(\"ContinueStatement\", AST_Continue, \"label>label\");\n map(\"WithStatement\", AST_With, \"object>expression, body>body\");\n map(\"SwitchStatement\", AST_Switch, \"discriminant>expression, cases@body\");\n map(\"ReturnStatement\", AST_Return, \"argument>value\");\n map(\"ThrowStatement\", AST_Throw, \"argument>value\");\n map(\"WhileStatement\", AST_While, \"test>condition, body>body\");\n map(\"DoWhileStatement\", AST_Do, \"test>condition, body>body\");\n map(\"ForStatement\", AST_For, \"init>init, test>condition, update>step, body>body\");\n map(\"ForInStatement\", AST_ForIn, \"left>init, right>object, body>body\");\n map(\"ForOfStatement\", AST_ForOf, \"left>init, right>object, body>body, await=await\");\n map(\"AwaitExpression\", AST_Await, \"argument>expression\");\n map(\"YieldExpression\", AST_Yield, \"argument>expression, delegate=is_star\");\n map(\"DebuggerStatement\", AST_Debugger);\n map(\"VariableDeclarator\", AST_VarDef, \"id>name, init>value\");\n map(\"CatchClause\", AST_Catch, \"param>argname, body%body\");\n\n map(\"ThisExpression\", AST_This);\n map(\"Super\", AST_Super);\n map(\"BinaryExpression\", AST_Binary, \"operator=operator, left>left, right>right\");\n map(\"LogicalExpression\", AST_Binary, \"operator=operator, left>left, right>right\");\n map(\"AssignmentExpression\", AST_Assign, \"operator=operator, left>left, right>right\");\n map(\"ConditionalExpression\", AST_Conditional, \"test>condition, consequent>consequent, alternate>alternative\");\n map(\"NewExpression\", AST_New, \"callee>expression, arguments@args\");\n map(\"CallExpression\", AST_Call, \"callee>expression, arguments@args\");\n\n def_to_moz(AST_Toplevel, function To_Moz_Program(M) {\n return to_moz_scope(\"Program\", M);\n });\n\n def_to_moz(AST_Expansion, function To_Moz_Spread(M) {\n return {\n type: to_moz_in_destructuring() ? \"RestElement\" : \"SpreadElement\",\n argument: to_moz(M.expression)\n };\n });\n\n def_to_moz(AST_PrefixedTemplateString, function To_Moz_TaggedTemplateExpression(M) {\n return {\n type: \"TaggedTemplateExpression\",\n tag: to_moz(M.prefix),\n quasi: to_moz(M.template_string)\n };\n });\n\n def_to_moz(AST_TemplateString, function To_Moz_TemplateLiteral(M) {\n var quasis = [];\n var expressions = [];\n for (var i = 0; i < M.segments.length; i++) {\n if (i % 2 !== 0) {\n expressions.push(to_moz(M.segments[i]));\n } else {\n quasis.push({\n type: \"TemplateElement\",\n value: {\n raw: M.segments[i].raw,\n cooked: M.segments[i].value\n },\n tail: i === M.segments.length - 1\n });\n }\n }\n return {\n type: \"TemplateLiteral\",\n quasis: quasis,\n expressions: expressions\n };\n });\n\n def_to_moz(AST_Defun, function To_Moz_FunctionDeclaration(M) {\n return {\n type: \"FunctionDeclaration\",\n id: to_moz(M.name),\n params: M.argnames.map(to_moz),\n generator: M.is_generator,\n async: M.async,\n body: to_moz_scope(\"BlockStatement\", M)\n };\n });\n\n def_to_moz(AST_Function, function To_Moz_FunctionExpression(M, parent) {\n var is_generator = parent.is_generator !== undefined ?\n parent.is_generator : M.is_generator;\n return {\n type: \"FunctionExpression\",\n id: to_moz(M.name),\n params: M.argnames.map(to_moz),\n generator: is_generator,\n async: M.async,\n body: to_moz_scope(\"BlockStatement\", M)\n };\n });\n\n def_to_moz(AST_Arrow, function To_Moz_ArrowFunctionExpression(M) {\n var body = {\n type: \"BlockStatement\",\n body: M.body.map(to_moz)\n };\n return {\n type: \"ArrowFunctionExpression\",\n params: M.argnames.map(to_moz),\n async: M.async,\n body: body\n };\n });\n\n def_to_moz(AST_Destructuring, function To_Moz_ObjectPattern(M) {\n if (M.is_array) {\n return {\n type: \"ArrayPattern\",\n elements: M.names.map(to_moz)\n };\n }\n return {\n type: \"ObjectPattern\",\n properties: M.names.map(to_moz)\n };\n });\n\n def_to_moz(AST_Directive, function To_Moz_Directive(M) {\n return {\n type: \"ExpressionStatement\",\n expression: {\n type: \"Literal\",\n value: M.value,\n raw: M.print_to_string()\n },\n directive: M.value\n };\n });\n\n def_to_moz(AST_SimpleStatement, function To_Moz_ExpressionStatement(M) {\n return {\n type: \"ExpressionStatement\",\n expression: to_moz(M.body)\n };\n });\n\n def_to_moz(AST_SwitchBranch, function To_Moz_SwitchCase(M) {\n return {\n type: \"SwitchCase\",\n test: to_moz(M.expression),\n consequent: M.body.map(to_moz)\n };\n });\n\n def_to_moz(AST_Try, function To_Moz_TryStatement(M) {\n return {\n type: \"TryStatement\",\n block: to_moz_block(M),\n handler: to_moz(M.bcatch),\n guardedHandlers: [],\n finalizer: to_moz(M.bfinally)\n };\n });\n\n def_to_moz(AST_Catch, function To_Moz_CatchClause(M) {\n return {\n type: \"CatchClause\",\n param: to_moz(M.argname),\n guard: null,\n body: to_moz_block(M)\n };\n });\n\n def_to_moz(AST_Definitions, function To_Moz_VariableDeclaration(M) {\n return {\n type: \"VariableDeclaration\",\n kind:\n M instanceof AST_Const ? \"const\" :\n M instanceof AST_Let ? \"let\" : \"var\",\n declarations: M.definitions.map(to_moz)\n };\n });\n\n def_to_moz(AST_Export, function To_Moz_ExportDeclaration(M) {\n if (M.exported_names) {\n if (M.exported_names[0].name.name === \"*\") {\n return {\n type: \"ExportAllDeclaration\",\n source: to_moz(M.module_name)\n };\n }\n return {\n type: \"ExportNamedDeclaration\",\n specifiers: M.exported_names.map(function (name_mapping) {\n return {\n type: \"ExportSpecifier\",\n exported: to_moz(name_mapping.foreign_name),\n local: to_moz(name_mapping.name)\n };\n }),\n declaration: to_moz(M.exported_definition),\n source: to_moz(M.module_name)\n };\n }\n return {\n type: M.is_default ? \"ExportDefaultDeclaration\" : \"ExportNamedDeclaration\",\n declaration: to_moz(M.exported_value || M.exported_definition)\n };\n });\n\n def_to_moz(AST_Import, function To_Moz_ImportDeclaration(M) {\n var specifiers = [];\n if (M.imported_name) {\n specifiers.push({\n type: \"ImportDefaultSpecifier\",\n local: to_moz(M.imported_name)\n });\n }\n if (M.imported_names && M.imported_names[0].foreign_name.name === \"*\") {\n specifiers.push({\n type: \"ImportNamespaceSpecifier\",\n local: to_moz(M.imported_names[0].name)\n });\n } else if (M.imported_names) {\n M.imported_names.forEach(function(name_mapping) {\n specifiers.push({\n type: \"ImportSpecifier\",\n local: to_moz(name_mapping.name),\n imported: to_moz(name_mapping.foreign_name)\n });\n });\n }\n return {\n type: \"ImportDeclaration\",\n specifiers: specifiers,\n source: to_moz(M.module_name)\n };\n });\n\n def_to_moz(AST_Sequence, function To_Moz_SequenceExpression(M) {\n return {\n type: \"SequenceExpression\",\n expressions: M.expressions.map(to_moz)\n };\n });\n\n def_to_moz(AST_PropAccess, function To_Moz_MemberExpression(M) {\n var isComputed = M instanceof AST_Sub;\n return {\n type: \"MemberExpression\",\n object: to_moz(M.expression),\n computed: isComputed,\n property: isComputed ? to_moz(M.property) : {type: \"Identifier\", name: M.property}\n };\n });\n\n def_to_moz(AST_Unary, function To_Moz_Unary(M) {\n return {\n type: M.operator == \"++\" || M.operator == \"--\" ? \"UpdateExpression\" : \"UnaryExpression\",\n operator: M.operator,\n prefix: M instanceof AST_UnaryPrefix,\n argument: to_moz(M.expression)\n };\n });\n\n def_to_moz(AST_Binary, function To_Moz_BinaryExpression(M) {\n if (M.operator == \"=\" && to_moz_in_destructuring()) {\n return {\n type: \"AssignmentPattern\",\n left: to_moz(M.left),\n right: to_moz(M.right)\n };\n }\n\n const type = M.operator == \"&&\" || M.operator == \"||\" || M.operator === \"??\"\n ? \"LogicalExpression\"\n : \"BinaryExpression\";\n\n return {\n type,\n left: to_moz(M.left),\n operator: M.operator,\n right: to_moz(M.right)\n };\n });\n\n def_to_moz(AST_Array, function To_Moz_ArrayExpression(M) {\n return {\n type: \"ArrayExpression\",\n elements: M.elements.map(to_moz)\n };\n });\n\n def_to_moz(AST_Object, function To_Moz_ObjectExpression(M) {\n return {\n type: \"ObjectExpression\",\n properties: M.properties.map(to_moz)\n };\n });\n\n def_to_moz(AST_ObjectProperty, function To_Moz_Property(M, parent) {\n var key = M.key instanceof AST_Node ? to_moz(M.key) : {\n type: \"Identifier\",\n value: M.key\n };\n if (typeof M.key === \"number\") {\n key = {\n type: \"Literal\",\n value: Number(M.key)\n };\n }\n if (typeof M.key === \"string\") {\n key = {\n type: \"Identifier\",\n name: M.key\n };\n }\n var kind;\n var string_or_num = typeof M.key === \"string\" || typeof M.key === \"number\";\n var computed = string_or_num ? false : !(M.key instanceof AST_Symbol) || M.key instanceof AST_SymbolRef;\n if (M instanceof AST_ObjectKeyVal) {\n kind = \"init\";\n computed = !string_or_num;\n } else\n if (M instanceof AST_ObjectGetter) {\n kind = \"get\";\n } else\n if (M instanceof AST_ObjectSetter) {\n kind = \"set\";\n }\n if (M instanceof AST_ClassProperty) {\n return {\n type: \"FieldDefinition\",\n computed,\n key,\n value: to_moz(M.value),\n static: M.static\n };\n }\n if (parent instanceof AST_Class) {\n return {\n type: \"MethodDefinition\",\n computed: computed,\n kind: kind,\n static: M.static,\n key: to_moz(M.key),\n value: to_moz(M.value)\n };\n }\n return {\n type: \"Property\",\n computed: computed,\n kind: kind,\n key: key,\n value: to_moz(M.value)\n };\n });\n\n def_to_moz(AST_ConciseMethod, function To_Moz_MethodDefinition(M, parent) {\n if (parent instanceof AST_Object) {\n return {\n type: \"Property\",\n computed: !(M.key instanceof AST_Symbol) || M.key instanceof AST_SymbolRef,\n kind: \"init\",\n method: true,\n shorthand: false,\n key: to_moz(M.key),\n value: to_moz(M.value)\n };\n }\n return {\n type: \"MethodDefinition\",\n computed: !(M.key instanceof AST_Symbol) || M.key instanceof AST_SymbolRef,\n kind: M.key === \"constructor\" ? \"constructor\" : \"method\",\n static: M.static,\n key: to_moz(M.key),\n value: to_moz(M.value)\n };\n });\n\n def_to_moz(AST_Class, function To_Moz_Class(M) {\n var type = M instanceof AST_ClassExpression ? \"ClassExpression\" : \"ClassDeclaration\";\n return {\n type: type,\n superClass: to_moz(M.extends),\n id: M.name ? to_moz(M.name) : null,\n body: {\n type: \"ClassBody\",\n body: M.properties.map(to_moz)\n }\n };\n });\n\n def_to_moz(AST_NewTarget, function To_Moz_MetaProperty() {\n return {\n type: \"MetaProperty\",\n meta: {\n type: \"Identifier\",\n name: \"new\"\n },\n property: {\n type: \"Identifier\",\n name: \"target\"\n }\n };\n });\n\n def_to_moz(AST_Symbol, function To_Moz_Identifier(M, parent) {\n if (M instanceof AST_SymbolMethod && parent.quote) {\n return {\n type: \"Literal\",\n value: M.name\n };\n }\n var def = M.definition();\n return {\n type: \"Identifier\",\n name: def ? def.mangled_name || def.name : M.name\n };\n });\n\n def_to_moz(AST_RegExp, function To_Moz_RegExpLiteral(M) {\n const pattern = M.value.source;\n const flags = M.value.flags;\n return {\n type: \"Literal\",\n value: null,\n raw: M.print_to_string(),\n regex: { pattern, flags }\n };\n });\n\n def_to_moz(AST_Constant, function To_Moz_Literal(M) {\n var value = M.value;\n if (typeof value === \"number\" && (value < 0 || (value === 0 && 1 / value < 0))) {\n return {\n type: \"UnaryExpression\",\n operator: \"-\",\n prefix: true,\n argument: {\n type: \"Literal\",\n value: -value,\n raw: M.start.raw\n }\n };\n }\n return {\n type: \"Literal\",\n value: value,\n raw: M.start.raw\n };\n });\n\n def_to_moz(AST_Atom, function To_Moz_Atom(M) {\n return {\n type: \"Identifier\",\n name: String(M.value)\n };\n });\n\n def_to_moz(AST_BigInt, M => ({\n type: \"BigIntLiteral\",\n value: M.value\n }));\n\n AST_Boolean.DEFMETHOD(\"to_mozilla_ast\", AST_Constant.prototype.to_mozilla_ast);\n AST_Null.DEFMETHOD(\"to_mozilla_ast\", AST_Constant.prototype.to_mozilla_ast);\n AST_Hole.DEFMETHOD(\"to_mozilla_ast\", function To_Moz_ArrayHole() { return null; });\n\n AST_Block.DEFMETHOD(\"to_mozilla_ast\", AST_BlockStatement.prototype.to_mozilla_ast);\n AST_Lambda.DEFMETHOD(\"to_mozilla_ast\", AST_Function.prototype.to_mozilla_ast);\n\n /* -----[ tools ]----- */\n\n function raw_token(moznode) {\n if (moznode.type == \"Literal\") {\n return moznode.raw != null ? moznode.raw : moznode.value + \"\";\n }\n }\n\n function my_start_token(moznode) {\n var loc = moznode.loc, start = loc && loc.start;\n var range = moznode.range;\n return new AST_Token({\n file : loc && loc.source,\n line : start && start.line,\n col : start && start.column,\n pos : range ? range[0] : moznode.start,\n endline : start && start.line,\n endcol : start && start.column,\n endpos : range ? range[0] : moznode.start,\n raw : raw_token(moznode),\n });\n }\n\n function my_end_token(moznode) {\n var loc = moznode.loc, end = loc && loc.end;\n var range = moznode.range;\n return new AST_Token({\n file : loc && loc.source,\n line : end && end.line,\n col : end && end.column,\n pos : range ? range[1] : moznode.end,\n endline : end && end.line,\n endcol : end && end.column,\n endpos : range ? range[1] : moznode.end,\n raw : raw_token(moznode),\n });\n }\n\n function map(moztype, mytype, propmap) {\n var moz_to_me = \"function From_Moz_\" + moztype + \"(M){\\n\";\n moz_to_me += \"return new U2.\" + mytype.name + \"({\\n\" +\n \"start: my_start_token(M),\\n\" +\n \"end: my_end_token(M)\";\n\n var me_to_moz = \"function To_Moz_\" + moztype + \"(M){\\n\";\n me_to_moz += \"return {\\n\" +\n \"type: \" + JSON.stringify(moztype);\n\n if (propmap) propmap.split(/\\s*,\\s*/).forEach(function(prop) {\n var m = /([a-z0-9$_]+)([=@>%])([a-z0-9$_]+)/i.exec(prop);\n if (!m) throw new Error(\"Can't understand property map: \" + prop);\n var moz = m[1], how = m[2], my = m[3];\n moz_to_me += \",\\n\" + my + \": \";\n me_to_moz += \",\\n\" + moz + \": \";\n switch (how) {\n case \"@\":\n moz_to_me += \"M.\" + moz + \".map(from_moz)\";\n me_to_moz += \"M.\" + my + \".map(to_moz)\";\n break;\n case \">\":\n moz_to_me += \"from_moz(M.\" + moz + \")\";\n me_to_moz += \"to_moz(M.\" + my + \")\";\n break;\n case \"=\":\n moz_to_me += \"M.\" + moz;\n me_to_moz += \"M.\" + my;\n break;\n case \"%\":\n moz_to_me += \"from_moz(M.\" + moz + \").body\";\n me_to_moz += \"to_moz_block(M)\";\n break;\n default:\n throw new Error(\"Can't understand operator in propmap: \" + prop);\n }\n });\n\n moz_to_me += \"\\n})\\n}\";\n me_to_moz += \"\\n}\\n}\";\n\n moz_to_me = new Function(\"U2\", \"my_start_token\", \"my_end_token\", \"from_moz\", \"return(\" + moz_to_me + \")\")(\n ast, my_start_token, my_end_token, from_moz\n );\n me_to_moz = new Function(\"to_moz\", \"to_moz_block\", \"to_moz_scope\", \"return(\" + me_to_moz + \")\")(\n to_moz, to_moz_block, to_moz_scope\n );\n MOZ_TO_ME[moztype] = moz_to_me;\n def_to_moz(mytype, me_to_moz);\n }\n\n var FROM_MOZ_STACK = null;\n\n function from_moz(node) {\n FROM_MOZ_STACK.push(node);\n var ret = node != null ? MOZ_TO_ME[node.type](node) : null;\n FROM_MOZ_STACK.pop();\n return ret;\n }\n\n AST_Node.from_mozilla_ast = function(node) {\n var save_stack = FROM_MOZ_STACK;\n FROM_MOZ_STACK = [];\n var ast = from_moz(node);\n FROM_MOZ_STACK = save_stack;\n return ast;\n };\n\n function set_moz_loc(mynode, moznode) {\n var start = mynode.start;\n var end = mynode.end;\n if (!(start && end)) {\n return moznode;\n }\n if (start.pos != null && end.endpos != null) {\n moznode.range = [start.pos, end.endpos];\n }\n if (start.line) {\n moznode.loc = {\n start: {line: start.line, column: start.col},\n end: end.endline ? {line: end.endline, column: end.endcol} : null\n };\n if (start.file) {\n moznode.loc.source = start.file;\n }\n }\n return moznode;\n }\n\n function def_to_moz(mytype, handler) {\n mytype.DEFMETHOD(\"to_mozilla_ast\", function(parent) {\n return set_moz_loc(this, handler(this, parent));\n });\n }\n\n var TO_MOZ_STACK = null;\n\n function to_moz(node) {\n if (TO_MOZ_STACK === null) { TO_MOZ_STACK = []; }\n TO_MOZ_STACK.push(node);\n var ast = node != null ? node.to_mozilla_ast(TO_MOZ_STACK[TO_MOZ_STACK.length - 2]) : null;\n TO_MOZ_STACK.pop();\n if (TO_MOZ_STACK.length === 0) { TO_MOZ_STACK = null; }\n return ast;\n }\n\n function to_moz_in_destructuring() {\n var i = TO_MOZ_STACK.length;\n while (i--) {\n if (TO_MOZ_STACK[i] instanceof AST_Destructuring) {\n return true;\n }\n }\n return false;\n }\n\n function to_moz_block(node) {\n return {\n type: \"BlockStatement\",\n body: node.body.map(to_moz)\n };\n }\n\n function to_moz_scope(type, node) {\n var body = node.body.map(to_moz);\n if (node.body[0] instanceof AST_SimpleStatement && node.body[0].body instanceof AST_String) {\n body.unshift(to_moz(new AST_EmptyStatement(node.body[0])));\n }\n return {\n type: type,\n body: body\n };\n }\n})();\n"],"names":["characters","str","split","member","name","array","includes","DefaultsError","Error","[object Object]","msg","defs","super","this","message","defaults","args","croak","ret","i","HOP","ecma","noop","return_false","return_true","return_this","return_null","MAP","a","f","backwards","top","doit","val","is_last","Last","v","AtTop","Splice","push","apply","slice","reverse","skip","Array","isArray","length","concat","at_top","splice","last","make_node","ctor","orig","props","start","end","push_uniq","el","string_template","text","replace","p","remove","mergeSort","cmp","_ms","m","Math","floor","left","right","b","r","ai","bi","merge","makePredicate","words","Set","map_add","map","key","value","has","get","set","obj","prop","Object","prototype","hasOwnProperty","call","keep_name","keep_setting","RegExp","test","lineTerminatorEscape","\n","\r","
","
","regexp_source_fix","source","match","offset","re_safe_regexp","regexp_is_safe","has_annotation","node","annotation","_annotations","set_annotation","KEYWORDS","KEYWORDS_ATOM","RESERVED_WORDS","KEYWORDS_BEFORE_EXPRESSION","OPERATOR_CHARS","RE_NUM_LITERAL","RE_HEX_NUMBER","RE_OCT_NUMBER","RE_ES6_OCT_NUMBER","RE_BIN_NUMBER","RE_DEC_NUMBER","RE_BIG_INT","OPERATORS","WHITESPACE_CHARS","NEWLINE_CHARS","PUNC_AFTER_EXPRESSION","PUNC_BEFORE_EXPRESSION","PUNC_CHARS","UNICODE","ID_Start","ID_Continue","get_full_char","pos","is_surrogate_pair_head","charCodeAt","is_surrogate_pair_tail","charAt","code","is_digit","is_identifier_start","ch","is_identifier_char","is_basic_identifier_string","is_identifier_string","allow_surrogates","exec","index","parse_js_number","num","allow_e","NaN","parseInt","substr","parseFloat","JS_Parse_Error","filename","line","col","js_error","is_token","token","type","EX_EOF","tokenizer","$TEXT","html5_comments","shebang","S","tokpos","tokline","tokcol","newline_before","regex_allowed","brace_counter","template_braces","comments_before","directives","directive_stack","peek","next","signal_eof","in_string","forward","looking_at","find","what","indexOf","start_token","prev_was_dot","previous_token","is_comment","UNARY_POSTFIX","endline","endcol","endpos","nlb","file","raw","substring","comments_after","AST_Token","skip_whitespace","parse_error","err","read_num","prefix","has_e","after_e","has_x","has_dot","is_big_int","numeric_separator","pred","read_while","next_token","has_directive","endsWith","without_n","valid","isNaN","is_octal","read_escaped_char","strict_hex","template_string","String","fromCharCode","hex_bytes","result","strict_octal","read_octal_escape_sequence","n","digit","read_string","with_eof_error","quote","tok","read_template_characters","begin","content","tmp","pop","skip_line_comment","find_eol","skip_multiline_comment","surrogates","get_full_char_length","read_name","escaped","read_escaped_identifier_char","read_regexp","prev_backslash","in_class","flags","read_operator","grow","op","bigger","handle_slash","eof_error","cont","x","ex","force_regexp","word","context","nc","add_directive","directive","undefined","push_directives_stack","pop_directives_stack","UNARY_PREFIX","ASSIGNMENT","PRECEDENCE","j","ATOMIC_START_TOKEN","parse","options","outer_comments_before_counts","Map","bare_returns","expression","module","strict","toplevel","input","prev","peeked","in_function","in_async","in_generator","in_directives","in_loop","labels","is","ctx","token_error","unexpected","expect_token","expect","punc","has_newline_before","every","comment","can_insert_semicolon","is_in_generator","is_in_async","semicolon","optional","parenthesised","exp","embed_tokens","parser","expr","handle_regexp","statement","is_export_default","is_for_body","is_if_body","dir","stat","simple_statement","body","AST_String","AST_Directive","function_","AST_Defun","imported_name","imported_names","as_symbol","AST_SymbolImport","map_names","mod_str","AST_Import","module_name","import_","label","AST_Label","some","l","AST_IterationStatement","references","forEach","ref","AST_Continue","AST_LabeledStatement","labeled_statement","AST_BlockStatement","block_","AST_EmptyStatement","break_cont","AST_Break","AST_Debugger","condition","AST_Do","AST_While","for_await_error","await_tok","init","var_","let_","const_","is_in","is_of","AST_Definitions","definitions","is_assignable","to_destructuring","AST_Destructuring","AST_ForIn","object","for_in","is_await","lhs","AST_ForOf","await","for_of","step","AST_For","regular_for","for_","class_","AST_DefClass","cond","belse","AST_If","alternative","if_","AST_Return","AST_Switch","switch_body_","AST_Throw","bcatch","bfinally","parameter","AST_SymbolCatch","AST_Catch","argname","AST_Finally","AST_Try","try_","AST_With","is_default","exported_names","exported_value","exported_definition","AST_Export","AST_Lambda","AST_SimpleStatement","export_","ldef","AST_LabelRef","thedef","TYPE","arrow_function","argnames","is_async","_function_body","AST_Arrow","async","is_generator_property","in_statement","is_generator","AST_SymbolDefun","AST_SymbolLambda","AST_Function","AST_Accessor","AST_SymbolDeclaration","track_used_binding_identifiers","is_parameter","parameters","duplicate","default_assignment","spread","strict_mode","tracker","add_parameter","check_strict","add","mark_default_assignment","mark_spread","mark_strict_mode","is_strict","used_parameters","symbol_type","param","expand","binding_element","AST_DefaultAssign","operator","AST_Expansion","expand_token","elements","first","is_expand","first_token","AST_SymbolFunarg","AST_Hole","names","is_array","AST_ObjectKeyVal","property_token","property","as_property_name","block","generator","loop","current_generator","current_async","params","_verify_symbol","cur","branch","AST_Case","AST_Default","vardefs","no_in","kind","def","sym_type","AST_SymbolVar","AST_SymbolConst","AST_SymbolLet","AST_VarDef","AST_Var","AST_Let","AST_Const","as_atom_node","_make_symbol","AST_SymbolRef","AST_Number","AST_BigInt","AST_RegExp","AST_False","AST_True","AST_Null","to_fun_args","_","__","default_seen_above","insert_default","default_value","AST_Object","properties","AST_Array","AST_Assign","expr_atom","allow_calls","allow_arrows","subscripts","AST_NewTarget","newexp","expr_list","AST_New","annotate","new_","exprs","maybe_sequence","spread_token","invalid_sequence","trailing_comma","params_or_seq_","AST_Call","AST_Sequence","expressions","outer_comments_before","unshift","array_","object_or_destructuring_","func","cls","AST_ClassExpression","segments","AST_TemplateSegment","AST_TemplateString","closing","allow_trailing_comma","allow_empty","create_accessor","concise","concise_method_or_getset","AST_Node","KindOfClass","method","class_name","extends_","AST_SymbolDefClass","AST_SymbolClass","extends","is_class","get_method_name_ast","AST_SymbolMethod","is_static","AST_ConciseMethod","static","setter_token","AST_ObjectGetter","AST_ObjectSetter","AST_SymbolClassProperty","get_class_property_key_ast","AST_ClassProperty","map_name","is_import","make_symbol","foreign_name","foreign_type","AST_SymbolImportForeign","AST_SymbolExportForeign","AST_SymbolExport","AST_NameMapping","map_nameAsterisk","AST_This","AST_Super","sym","noerror","comments","comments_outside_parens","_PURE","_INLINE","_NOINLINE","AST_Dot","AST_Sub","call_args","AST_PrefixedTemplateString","maybe_unary","AST_Await","make_unary","AST_UnaryPrefix","AST_UnaryPostfix","expr_op","min_prec","prec","AST_Binary","maybe_conditional","expr_ops","yes","AST_Conditional","consequent","AST_PropAccess","AST_ObjectProperty","maybe_assign","star","has_expression","AST_Yield","is_star","_yield_expression","commas","AST_Toplevel","DEFNODE","methods","base","self_props","PROPS","proto","create","initialize","Function","BASE","SUBCLASSES","CTOR","constructor","SELF_PROPS","DEFMETHOD","_clone","deep","self","clone","transform","TreeTransformer","$documentation","$propdoc","_walk","visitor","_visit","walk","_children_backwards","warn_function","warn","txt","AST_Statement","walk_body","len","clone_block_scope","block_scope","AST_Block","AST_StatementWithBody","TreeWalker","AST_LoopControl","AST_DWLoop","AST_Scope","variables","functions","uses_with","uses_eval","parent_scope","enclosed","cname","get_defun_scope","is_block_scope","_block_scope","pinned","globals","wrap_commonjs","wrapped_tl","wrap_enclose","args_values","join","uses_arguments","args_as_names","out","all_symbols","AST_Symbol","seg","AST_Jump","AST_Exit","AST_SwitchBranch","name_import","name_export","AST_Unary","AST_Class","scope","AST_SymbolBlockDeclaration","AST_Constant","getValue","literal","AST_Atom","AST_NaN","AST_Undefined","AST_Infinity","AST_Boolean","cb","to_visit","bind","walk_abort","walk_parent","initial_stack","stack","parent_pop_indices","current","info","parent","visit_length","Symbol","callback","visit","descend","getPrototypeOf","st","before","after","def_transform","tw","in_list","transformed","after_ret","do_list","list","first_in_statement","EXPECT_DIRECTIVE","r_annotation","is_some_comments","OutputStream","readonly","ascii_only","beautify","braces","ie8","indent_level","indent_start","inline_script","keep_numbers","keep_quoted_props","max_line_len","preamble","preserve_annotations","quote_keys","quote_style","safari10","semicolons","shorthand","source_map","webkit","width","wrap_iife","wrap_func_args","comment_filter","regex_pos","lastIndexOf","indentation","current_col","current_line","current_pos","OUTPUT","printed_comments","to_utf8","identifier","get_full_char_code","toString","lone","encode_string","dq","sq","quote_single","quote_double","s","make_string","mapping_token","mapping_name","has_parens","might_need_space","might_need_semicolon","might_add_newline","need_newline_indented","need_space","newline_insert","mappings","do_add_mapping","mapping","cline","ccol","ensure_line_len","delta","requireSemicolonChars","print","indent","space","half","back","repeat","with_indent","next_indent","save_indentation","newline","force_semicolon","has_nlb","filter_comment","in_directive","use_asm","active_scope","current_width","should_break","comma","colon","print_name","make_name","print_string","escape_directive","encoded","print_template_string_chars","with_block","with_parens","with_square","add_mapping","option","opt","prepend_comments","return_with_value","shift","filter","c","last_nlb","append_comments","tail","insert","push_node","pop_node","DEFPRINT","nodetype","PARENS","display_body","is_toplevel","output","allow_directives","stmt","print_braced_empty","print_braced","parenthesize_for_noin","noin","parens","print_property_name","make_num","force_parens","_codegen","add_source_map","needs_parens","po","so","pp","sp","p1","startsWith","force_statement","make_block","_do_print_body","nokeyword","arg","_do_print","tag","parenthesize_tag","is_tagged","first_statement","returned","left_is_object","e","make_then","definition","mangled_name","get_name","allowShortHand","_print_getter_setter","r_slash_script","slash_script_replace","$1","digits","candidates","toLowerCase","best","best_of","DEFMAP","existing_flags","flag","delete","size","sort_regexp_flags","shallow_cmp","node1","node2","mkshallow","comparisons","keys","pass_through","label.name","other","function_defs","unmangleable_names","SymbolDef","eliminated","assignments","replaced","global","export","undeclared","id","next_id","chained","direct_access","recursive_refs","should_replace","single_use","fixed","seal","keep_fnames","eval","keep_classnames","cache","unmangleable","redefinition","redefined_catch_def","next_mangled","ext","base54","reserved","defun","in_destructuring","for_scopes","save_scope","init_scope_vars","the_block_scope","save_destructuring","save_defun","save_labels","def_function","mark_export","def_variable","mark_enclosed","find_variable","reference","level","exported","def_global","refs","g","_var_name_cache","varNames","var_names","_added_var_names","add_var_name","new_scope_enclosed_set","scope_ancestry","ancestry","to_enclose","scope_topdown","values","arguments","symbol","mangled_names","tricky_def","tricky_name","_default_mangler_options","lname","to_mangle","collect","save_nesting","mangle","avoid","to_avoid","add_def","reset","sort","find_colliding_names","rename","next_name","stream","_print","consider","skip_string","tail_node","print_to_string","leading","chars","frequency","compare","default_options","infer_options","0","component","minify","error","mangle_options","compressor","_size","list_overhead","lambda_modifiers","args_and_arrow","def_size","key_size","static_size","log10","has_flag","set_flag","clear_flag","Compressor","false_by_default","arrows","booleans","booleans_as_integers","collapse_vars","computed_props","conditionals","dead_code","drop_console","drop_debugger","evaluate","global_defs","hoist_funs","hoist_props","hoist_vars","if_return","inline","join_vars","keep_fargs","keep_infinity","loops","negate_iife","passes","pure_getters","pure_funcs","reduce_funcs","reduce_vars","sequences","side_effects","switches","top_retain","typeofs","unsafe","unsafe_arrows","unsafe_comps","unsafe_Function","unsafe_math","unsafe_symbols","unsafe_methods","unsafe_proto","unsafe_regexp","unsafe_undefined","unused","warnings","funcs","vars","sequences_limit","warnings_produced","evaluated_regexps","resolve_defines","process_expression","min_count","stopping","pass","figure_out_scope","reset_opt_flags","count","was_scope","hoist_properties","hoist_declarations","optimize","drop_unused","def_optimize","optimizer","read_property","get_value","make_node_from_constant","fixed_value","is_modified","immutable","is_lhs","is_expr_pure","contains_this","is_func_expr","is_lhs_read_only","is_immutable","is_ref_of","find_scope","make_sequence","reduce","merge_sequence","isFinite","maintain_this_binding","as_statement_array","thing","is_empty","can_be_evicted_from_block","loop_body","is_iife_call","is_undeclared_ref","tree1","tree2","walk_1_state","walk_2_state","walk_1_push","walk_2_push","node_1","node_2","equivalent_to","tt","drop_side_effect_free","def_reduce_vars","reset_def","exposed","reset_variables","defs_to_safe_ids","safe_ids","mark","loop_ids","reset_block_variables","safe","safe_to_read","safe_to_assign","def_safe_ids","mark_escaped","d","depth","is_constant","is_constant_expression","lazy_op","suppress","eq","iife","arg_name","saved_loop","has_break_or_continue","recursive_ref","ref_once","preparation","SQUEEZED","global_names","def_is_string","identifier_atom","is_identifier_atom","tighten_body","statements","in_try","find_parent","find_loop_scope_try","CHANGED","max_iter","eliminate_spurious_blocks","eliminate_dead_code","handle_if_return","sequencesize","sequencesize_2","join_consecutive_vars","collapse","stat_index","scanner","abort","hit","hit_stack","hit_index","handle_custom_scan_order","stop_after","find_stop","write_only","lvalues","replace_all","is_declared","pure_prop_access_globals","stop_if_hit","lhs_local","can_replace","value_def","candidate","funarg","may_modify","may_throw_on_access","may_throw","has_side_effects","side_effects_external","multi_replacer","extract_args","extract_candidates","get_lhs","get_lvalues","is_lhs_local","value_has_side_effects","replace_all_symbols","remove_candidate","has_overlapping_symbol","fn","fn_strict","found","scan_this","cur_scope","redefined_within_scope","referenced","var_def","mangleable_var","get_rvalue","min","unary_side_effects","seen_dirs","multiple_if_returns","has_multiple_if_returns","in_lambda","next_index","ab","can_merge_flow","aborts","negate","as_statement_array_with_return","extract_functions","prev_index","lct","loopcontrol_target","is_return_void","declarations_only","has_quit","extract_declarations_from_unreachable_code","seq","push_seq","to_simple_statement","decls","cons_seq","alt","join_object_assignments","defn","trimmed","diff","extract_object_assignments","target","remove_initializers","is_undefined","def_may_throw_on_access","_dot_throw","def_is_boolean","unary_bool","binary_bool","is_boolean","def_is_number","unary","binary","is_number","is_string","best_of_expression","ast1","ast2","best_of_statement","convert_to_predicate","def_find_defs","_find_defs","child","suffix","defines","to_node","object_fns","native_fns","Boolean","Number","static_fns","def_eval","_eval","unaryPrefix","evaluated","element","non_converting_unary","non_converting_binary","pow","global_objs","static_values","aa","first_arg","static_value","static_fn","native_fn","def_negate","basic_negation","negated","global_pure_fns","def_has_side_effects","any","is_call_pure","computed_key","def_may_throw","def_is_constant_expression","all_refs_local","scope_def","def_aborts","block_aborts","opt_AST_Lambda","r_keep_assign","retain_top_func","drop_funcs","drop_vars","assign_as_unused","in_use_ids","fixed_ids","var_defs_by_id","initializations","node_def","in_export","scan_ref_scoped","in_use","trim","unreferenced","template","drop_block","head","is_destructure","var_defs","assign","redef","dirs","hoisted","vars_found","var_decl","to_assignments","is_lambda","defs_by_id","hoister","make_sym","new_var","make_var_name","def_drop_side_effect_free","nodes","changed","with_effects","trimmed_extends","trimmed_prop","if_break_in_loop","is_break","drop_it","rest","self_condition_length","negated_length","negated_is_best","default_branch","exact_match","decl","eliminate_branch","default_index","has_break","varDef","inline_array_like_spread","simple_args","is_func","rx","EXIT","separator","consts","ast","fun","comp","compute_char_frequency","mangle_names","is_regular_func","can_inline","returned_value","nearest_scope","return_value","can_flatten_body","block_scoped","variable","safe_to_inject","can_inject_vars","can_inject_args","arg_vals_outer_refs","value_walker","scope_outer_refs","can_inject_args_values","is_reachable","can_inject_symbols","scope_encloses_variables_in_this_scope","add_child_scope","append_var","flatten_args","lines","flatten_vars","flatten_fn","ev","trim_right_for_undefined","lift_sequences","in_boolean_context","commutativeOperators","pulled_scope","looked_up","is_atomic","find_ref","reversible","is_strict_comparison","combined","ll","rr","lr","is_nullish","associative","reversed","within_array_or_object_literal","defun_def","lambda_def","value_length","name_length","overhead","undef","ASSIGN_OPS","ASSIGN_OPS_COMMUTATIVE","safe_to_flatten","literals_in_boolean_context","lift_key","evaluateRight","arg_index","single_arg_diff","check","check_subject","nullish_side","null_cmp","undefined_cmp","find_comparison","defined_side","is_nullish_check","in_bool","is_true","is_false","booleanize","OPT_ARGUMENTS","sub","flatten_object","retValue","FLATTEN","flatten","k","optimized","segment","inners","arrow","ancestors","is_destructuring_export_decl","keep","elem","should_retain","domprops","reserve_quoted_keys","addStrings","mangle_properties","reserved_option","builtins","debug","keep_quoted","only_cache","regex","objects","global_ref","new_global","Date","ArrayBuffer","DataView","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","EvalError","Float32Array","Float64Array","Int8Array","Int16Array","Int32Array","JSON","Promise","Proxy","RangeError","ReferenceError","Reflect","SyntaxError","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","URIError","WeakMap","WeakSet","getOwnPropertyNames","find_builtins","debug_name_suffix","names_to_mangle","keep_quoted_strict","declared","root","mangleStrings","can_mangle","should_mangle","mangled","debug_mangled","to_ascii","atob","b64","Buffer","from","to_base64","btoa","set_shorthand","init_cache","map_from_object","cache_to_json","files","quoted_props","timings","compress","enclose","nameCache","sourceMap","wrap","now","asObject","includeSources","url","warning","orig_line_diff","dest_line_diff","MOZ_SourceMap","SourceMapGenerator","sourceRoot","orig_map","SourceMapConsumer","sources","sourceContent","sourceContentFor","setSourceContent","gen_line","gen_col","orig_line","orig_col","originalPositionFor","column","addMapping","generated","original","stringify","toJSON","SourceMap","total","normalize_directives","MOZ_TO_ME","Program","M","my_start_token","my_end_token","from_moz","ArrayPattern","elm","ObjectPattern","AssignmentPattern","SpreadElement","argument","RestElement","TemplateElement","cooked","TemplateLiteral","quasis","TaggedTemplateExpression","quasi","FunctionDeclaration","FunctionExpression","ArrowFunctionExpression","ExpressionStatement","TryStatement","handlers","handler","guardedHandlers","finalizer","Property","computed","MethodDefinition","FieldDefinition","ArrayExpression","ObjectExpression","SequenceExpression","MemberExpression","SwitchCase","VariableDeclaration","declarations","ImportDeclaration","specifiers","specifier","imported","local","ExportAllDeclaration","ExportNamedDeclaration","declaration","ExportDefaultDeclaration","Literal","pattern","rx_source","MetaProperty","meta","Identifier","FROM_MOZ_STACK","BigIntLiteral","raw_token","moznode","loc","range","moztype","mytype","propmap","moz_to_me","me_to_moz","moz","how","my","to_moz","to_moz_block","to_moz_scope","def_to_moz","UpdateExpression","UnaryExpression","ClassDeclaration","ClassExpression","superClass","to_moz_in_destructuring","guard","name_mapping","isComputed","string_or_num","to_mozilla_ast","mynode","from_mozilla_ast","save_stack","TO_MOZ_STACK"],"mappings":"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CACzD,IAAIioB,EAASiS,EAAWjS,OAAOjoB,GAC/B,IAAKioB,EAAQ,OAAO,EACpB,GAAU,IAANnqB,GAA0B,iBAAfmqB,EAAO/R,KAAtB,CACA,IAAK0/B,EAAU93C,GAAGoE,KAAK+lB,EAAO/R,MAC1B,OAAO,EAEXpY,KAEJ,OAAO,EA5BH+3C,CAA6B3b,GAAa,CAE9C,IADA,IAAI4b,EAAO,GACFz4C,EAAI,EAAGA,EAAIimB,EAAKvK,MAAM/Z,OAAQ3B,IAAK,CACxC,IAAI04C,EAAOzyB,EAAKvK,MAAM1b,GAChB04C,aAAgB98B,IACI,iBAAZ88B,EAAK30C,KACZ20C,EAAK10C,iBAAiB2V,KACrBg/B,EAAc9b,EAAY6b,EAAK10C,MAAMixB,eACzCwjB,EAAKr3C,KAAKs3C,GAGdD,EAAK92C,QAAUskB,EAAKvK,MAAM/Z,SAC1BskB,EAAKvK,MAAQ+8B,GAGrB,OAAOxyB,EAgBP,SAAS0yB,EAAc9b,EAAY/f,GAC/B,QAAIA,EAAIzI,WAAW1S,UACdmb,EAAIqa,UACL0F,EAAWjsB,SAAS2vB,QACf1D,EAAW2C,YACJ3C,EAAW2C,WAAW1iB,QCv6OvC,IAAI87B,GAAW,CAClB,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,SACA,aACA,YACA,SACA,oBACA,iBACA,kBACA,WACA,2BACA,2BACA,uBACA,UACA,QACA,aACA,WACA,SACA,WACA,0BACA,eACA,uBACA,mBACA,iBACA,YACA,oBACA,eACA,iBACA,qBACA,mBACA,6BACA,QACA,cACA,OACA,QACA,cACA,wBACA,eACA,uBACA,gBACA,YACA,aACA,uBACA,mBACA,yBACA,OACA,yBACA,WACA,QACA,cACA,kBACA,gBACA,iBACA,uBACA,qBACA,kBACA,gBACA,YACA,OACA,OACA,eACA,YACA,YACA,YACA,OACA,wBACA,iBACA,cACA,eACA,OACA,oBACA,UACA,WACA,iBACA,kBACA,oBACA,mBACA,OACA,YACA,UACA,kBACA,MACA,eACA,qBACA,SACA,eACA,WACA,gBACA,QACA,SACA,UACA,oBACA,mBACA,oBACA,kBACA,eACA,iBACA,gCACA,gCACA,gCACA,+BACA,6BACA,aACA,iBACA,iBACA,iBACA,qBACA,eACA,qBACA,MACA,iBACA,iBACA,mBACA,sBACA,kBACA,2BACA,kBACA,gBACA,kBACA,mBACA,eACA,qBACA,mBACA,cACA,oBACA,UACA,cACA,sBACA,eACA,gBACA,kBACA,iBACA,WACA,eACA,0BACA,mBACA,kBACA,WACA,SACA,cACA,aACA,UACA,gBACA,UACA,UACA,kBACA,wBACA,sBACA,oBACA,yBACA,uBACA,wBACA,oBACA,qBACA,uBACA,sBACA,mBACA,WACA,SACA,YACA,SACA,cACA,UACA,aACA,eACA,SACA,SACA,aACA,SACA,iBACA,kBACA,sBACA,SACA,SACA,UACA,WACA,eACA,aACA,eACA,cACA,cACA,cACA,QACA,YACA,cACA,aACA,aACA,aACA,WACA,YACA,YACA,aACA,gBACA,kBACA,iBACA,iBACA,iBACA,cACA,UACA,iBACA,SACA,WACA,WACA,SACA,YACA,iBACA,kBACA,wBACA,SACA,KACA,iBACA,gBACA,2BACA,gBACA,oBACA,sBACA,gBACA,aACA,iBACA,YACA,iBACA,aACA,WACA,eACA,UACA,mBACA,UACA,cACA,gBACA,UACA,SACA,YACA,cACA,eACA,iBACA,WACA,WACA,OACA,YACA,gBACA,mBACA,aACA,mBACA,oBACA,kBACA,oBACA,aACA,cACA,gBACA,2BACA,aACA,kBACA,iBACA,iBACA,kBACA,eACA,WACA,uBACA,SACA,yBACA,gBACA,iCACA,6BACA,iCACA,8BACA,4CACA,8BACA,qBACA,YACA,WACA,eACA,oBACA,sBACA,YACA,oBACA,YACA,WACA,mBACA,UACA,UACA,cACA,kBACA,aACA,qBACA,uBACA,gBACA,eACA,eACA,sBACA,iBACA,iBACA,kBACA,wBACA,+BACA,uBACA,4BACA,8BACA,0BACA,yBACA,0BACA,2BACA,yBACA,4BACA,wBACA,0BACA,0BACA,yBACA,4BACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,gBACA,aACA,aACA,eACA,mBACA,kBACA,YACA,cACA,WACA,mBACA,oBACA,oBACA,oBACA,WACA,gBACA,mBACA,oBACA,eACA,uBACA,6BACA,qBACA,eACA,eACA,sBACA,iBACA,iBACA,eACA,cACA,WACA,iBACA,gBACA,gBACA,gBACA,sBACA,cACA,WACA,cACA,aACA,eACA,gBACA,eACA,gBACA,qBACA,iBACA,eACA,WACA,YACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,YACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,YACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,YACA,YACA,YACA,YACA,YACA,YACA,eACA,eACA,WACA,sBACA,WACA,gBACA,eACA,cACA,cACA,mBACA,cACA,sBACA,WACA,gBACA,WACA,eACA,WACA,cACA,eACA,WACA,cACA,kBACA,mBACA,WACA,cACA,oBACA,kBACA,WACA,oBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,kBACA,WACA,eACA,iBACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,mBACA,mBACA,oBACA,kBACA,sBACA,4BACA,oBACA,WACA,aACA,kBACA,gBACA,mBACA,iBACA,eACA,iBACA,gBACA,cACA,cACA,cACA,eACA,qBACA,oBACA,oBACA,WACA,uBACA,eACA,WACA,cACA,gBACA,eACA,WACA,qBACA,gBACA,mBACA,mBACA,eACA,eACA,eACA,eACA,kBACA,WACA,aACA,eACA,WACA,oBACA,cACA,iBACA,YACA,WACA,qBACA,qBACA,mBACA,WACA,aACA,gBACA,oBACA,uBACA,sBACA,sBACA,sBACA,yBACA,uBACA,sBACA,uBACA,sBACA,wBACA,0BACA,yBACA,4BACA,yBACA,4BACA,sBACA,qBACA,qBACA,qBACA,uBACA,wBACA,WACA,6BACA,iCACA,kCACA,kCACA,8BACA,mCACA,4BACA,2BACA,2BACA,4BACA,2BACA,2BACA,mCACA,kCACA,6BACA,6BACA,6BACA,2BACA,qBACA,qBACA,6BACA,wBACA,qBACA,0BACA,qBACA,kCACA,2BACA,yBACA,mBACA,sBACA,0BACA,gCACA,qBACA,oBACA,4BACA,wBACA,0BACA,oBACA,sBACA,sBACA,yBACA,0BACA,wBACA,wBACA,2BACA,8BACA,qBACA,mBACA,sBACA,0BACA,wBACA,0BACA,0BACA,wBACA,oCACA,kCACA,iCACA,wBACA,wBACA,wBACA,wBACA,wBACA,wBACA,wBACA,wBACA,wBACA,wBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,2BACA,wBACA,qBACA,6BACA,uBACA,wBACA,qBACA,wBACA,wBACA,0BACA,oCACA,kCACA,sBACA,4BACA,yBACA,oBACA,qBACA,4BACA,qBACA,yBACA,uBACA,sBACA,sBACA,yBACA,2BACA,0BACA,oBACA,wBACA,uBACA,sBACA,4BACA,6BACA,0BACA,+BACA,4BACA,4BACA,qBACA,6BACA,6BACA,4BACA,0BACA,uBACA,qBACA,qBACA,sBACA,6BACA,wBACA,sBACA,qBACA,yBACA,wBACA,wBACA,0BACA,yBACA,qBACA,sBACA,yBACA,2BACA,uBACA,wBACA,wBACA,wBACA,oBACA,4BACA,sBACA,qBACA,wBACA,wBACA,6BACA,qBACA,qBACA,oBACA,qBACA,uBACA,wBACA,yBACA,WACA,WACA,cACA,OACA,YACA,cACA,WACA,YACA,YACA,eACA,cACA,eACA,mBACA,uBACA,WACA,OACA,iBACA,YACA,sBACA,4BACA,mBACA,oBACA,yBACA,uBACA,gBACA,2BACA,WACA,mBACA,eACA,YACA,yBACA,IACA,uBACA,+BACA,eACA,QACA,eACA,QACA,aACA,eACA,cACA,wBACA,UACA,QACA,aACA,QACA,uBACA,UACA,eACA,SACA,kBACA,QACA,aACA,YACA,QACA,iBACA,cACA,cACA,WACA,UACA,UACA,gBACA,mBACA,gBACA,cACA,iBACA,0BACA,QACA,aACA,aACA,aACA,aACA,aACA,aACA,QACA,iBACA,2BACA,kBACA,sCACA,cACA,qCACA,qCACA,+CACA,uCACA,sBACA,uBACA,oCACA,oCACA,4CACA,0BACA,QACA,iBACA,aACA,WACA,wBACA,gBACA,OACA,YACA,OACA,YACA,WACA,aACA,aACA,eACA,eACA,aACA,WACA,WACA,WACA,uBACA,SACA,UACA,aACA,WACA,UACA,gBACA,eACA,eACA,oBACA,mBACA,mBACA,gBACA,eACA,mBACA,SACA,wBACA,WACA,YACA,aACA,WACA,aACA,kBACA,OACA,oBACA,oBACA,oBACA,kBACA,mBACA,gBACA,kBACA,sBACA,wBACA,kBACA,oBACA,oBACA,iBACA,qBACA,qBACA,mBACA,kBACA,sBACA,qBACA,oBACA,uBACA,iBACA,eACA,cACA,mBACA,sBACA,kBACA,6BACA,kBACA,mBACA,sBACA,gBACA,kBACA,qBACA,kBACA,oBACA,mBACA,mBACA,qBACA,oBACA,gBACA,mBACA,oBACA,kBACA,iBACA,qBACA,mBACA,kBACA,sBACA,kBACA,mBACA,iBACA,mBACA,oBACA,sBACA,oBACA,wBACA,oBACA,uBACA,mBACA,qBACA,iBACA,sBACA,2BACA,mBACA,oBACA,oBACA,oBACA,oBACA,kBACA,mBACA,0BACA,uBACA,sBACA,mBACA,sBACA,0BACA,sBACA,sBACA,kBACA,mBACA,mBACA,mBACA,qBACA,mBACA,kBACA,UACA,UACA,eACA,aACA,gBACA,gBACA,aACA,gBACA,cACA,YACA,qBACA,cACA,uBACA,aACA,gBACA,iBACA,WACA,cACA,iBACA,iBACA,mBACA,aACA,iBACA,wBACA,OACA,mCACA,iCACA,cACA,OACA,YACA,iBACA,MACA,WACA,WACA,WACA,sBACA,qBACA,wBACA,eACA,yBACA,gCACA,2BACA,wBACA,oBACA,oBACA,gBACA,mBACA,SACA,eACA,QACA,cACA,YACA,WACA,aACA,qBACA,iBACA,aACA,aACA,YACA,SACA,gBACA,OACA,4BACA,WACA,OACA,OACA,UACA,iBACA,gBACA,WACA,QACA,WACA,gBACA,uBACA,gCACA,uBACA,SACA,OACA,SACA,kBACA,uBACA,wBACA,QACA,YACA,aACA,aACA,cACA,OACA,OACA,MACA,SACA,UACA,SACA,QACA,UACA,WACA,YACA,UACA,cACA,iBACA,YACA,kBACA,mBACA,WACA,mCACA,4BACA,+BACA,wBACA,mBACA,0BACA,iCACA,mBACA,YACA,sBACA,qBACA,iCACA,6BACA,oBACA,oBACA,mBACA,sBACA,oBACA,8BACA,sBACA,sBACA,8BACA,sBACA,uBACA,uBACA,aACA,eACA,aACA,YACA,mBACA,YACA,kBACA,oBACA,mBACA,eACA,YACA,YACA,YACA,WACA,YACA,UACA,qBACA,oBACA,oBACA,oBACA,sBACA,mBACA,iBACA,mBACA,qBACA,uBACA,wBACA,qBACA,yBACA,sBACA,uBACA,qBACA,uBACA,2CACA,kCACA,qCACA,iCACA,gCACA,8BACA,2BACA,6BACA,+BACA,kCACA,kCACA,iCACA,gCACA,kCACA,kCACA,gCACA,yBACA,yBACA,yBACA,iCACA,yBACA,0BACA,0BACA,MACA,OACA,kBACA,eACA,8BACA,sBACA,aACA,gBACA,gBACA,uBACA,sBACA,kBACA,oBACA,uBACA,YACA,YACA,iBACA,sBACA,gBACA,cACA,cACA,kCACA,6BACA,mBACA,mBACA,wBACA,iBACA,eACA,cACA,UACA,WACA,gBACA,aACA,mBACA,eACA,oBACA,wBACA,uBACA,uBACA,6BACA,mBACA,wBACA,6BACA,gBACA,wBACA,aACA,wBACA,eACA,oBACA,oBACA,oBACA,iBACA,sBACA,uBACA,iBACA,sBACA,sBACA,sBACA,qBACA,cACA,kBACA,aACA,qBACA,eACA,aACA,eACA,qBACA,sBACA,iBACA,gBACA,eACA,gBACA,qBACA,qBACA,qBACA,iBACA,aACA,wBACA,eACA,yBACA,0BACA,0BACA,aACA,iBACA,eACA,iBACA,cACA,gBACA,yBACA,sBACA,YACA,mBACA,6BACA,8BACA,0BACA,2BACA,gBACA,kBACA,iBACA,uBACA,kBACA,mBACA,cACA,gBACA,iBACA,aACA,mBACA,yBACA,wBACA,yBACA,oBACA,eACA,qBACA,oBACA,gBACA,qBACA,wBACA,wBACA,8BACA,eACA,eACA,gBACA,gBACA,oBACA,kBACA,gBACA,mBACA,iBACA,gBACA,iBACA,UACA,wBACA,yBACA,oBACA,gBACA,cACA,eACA,iBACA,kBACA,oBACA,QACA,MACA,OACA,oBACA,SACA,aACA,cACA,wBACA,cACA,OACA,oBACA,gBACA,QACA,WACA,kBACA,gBACA,mBACA,oBACA,sBACA,SACA,WACA,8BACA,cACA,iCACA,MACA,eACA,YACA,cACA,qBACA,OACA,aACA,eACA,WACA,WACA,eACA,mBACA,SACA,eACA,WACA,MACA,2BACA,2BACA,sBACA,sBACA,sBACA,sBACA,OACA,SACA,UACA,6BACA,6BACA,gBACA,SACA,8BACA,sBACA,sBACA,SACA,iBACA,gBACA,iBACA,YACA,YACA,kBACA,kBACA,oBACA,4BACA,4BACA,mCACA,mCACA,gCACA,gCACA,uCACA,uCACA,qBACA,gCACA,gCACA,qBACA,8BACA,8BACA,qBACA,qBACA,kBACA,kBACA,UACA,oBACA,aACA,KACA,gBACA,SACA,wBACA,sBACA,uBACA,uBACA,oBACA,OACA,oBACA,8BACA,kBACA,sBACA,eACA,mBACA,aACA,SACA,cACA,mBACA,kBACA,qBACA,wBACA,4BACA,oBACA,eACA,SACA,cACA,gBACA,oBACA,wBACA,gBACA,UACA,mBACA,QACA,cACA,mBACA,IACA,YACA,qBACA,iBACA,YACA,gBACA,aACA,WACA,UACA,eACA,0BACA,uBACA,yBACA,0BACA,0BACA,sBACA,+BACA,wBACA,4BACA,qBACA,WACA,yCACA,wBACA,8BACA,yCACA,8BACA,2BACA,SACA,UACA,MACA,SACA,UACA,OACA,QACA,WACA,qBACA,4BACA,sBACA,kBACA,4BACA,iBACA,eACA,wBACA,iBACA,gBACA,QACA,aACA,iBACA,mBACA,OACA,iBACA,SACA,UACA,WACA,aACA,eACA,UACA,2BACA,iBACA,kBACA,yBACA,wBACA,WACA,kBACA,cACA,eACA,mBACA,iBACA,aACA,YACA,eACA,eACA,SACA,gBACA,iBACA,uBACA,mBACA,kBACA,cACA,2BACA,aACA,QACA,UACA,WACA,iBACA,qBACA,eACA,gBACA,yBACA,qBACA,eACA,cACA,wBACA,gBACA,8BACA,YACA,OACA,aACA,eACA,UACA,QACA,SACA,YACA,qBACA,YACA,eACA,iBACA,cACA,qBACA,oBACA,oBACA,+BACA,+BACA,mBACA,0BACA,yBACA,eACA,qBACA,sBACA,eACA,eACA,gBACA,iBACA,0BACA,0BACA,cACA,eACA,qBACA,oBACA,cACA,cACA,aACA,gBACA,gBACA,cACA,wBACA,qBACA,yBACA,WACA,yBACA,oBACA,0BACA,6BACA,mBACA,qBACA,yBACA,qBACA,oBACA,wBACA,oBACA,wBACA,iCACA,kBACA,oBACA,2BACA,sBACA,mBACA,qBACA,WACA,sCACA,mBACA,iBACA,iBACA,oBACA,cACA,aACA,qBACA,yBACA,oBACA,eACA,oBACA,0BACA,gCACA,wBACA,6BACA,8BACA,8BACA,2BACA,yBACA,oBACA,oBACA,oBACA,oBACA,oBACA,2BACA,oBACA,oBACA,wBACA,yBACA,qBACA,yBACA,+BACA,wBACA,mBACA,yBACA,mBACA,iBACA,qBACA,2BACA,yBACA,wBACA,wBACA,0BACA,cACA,qBACA,kBACA,qBACA,qBACA,qBACA,kBACA,kBACA,YACA,gBACA,iBACA,2BACA,kBACA,mBACA,iBACA,YACA,qBACA,yBACA,YACA,gBACA,WACA,iBACA,aACA,mBACA,mBACA,sBACA,4BACA,4BACA,kCACA,kCACA,gCACA,gCACA,sCACA,sCACA,sBACA,gCACA,gCACA,sBACA,8BACA,8BACA,iBACA,sBACA,sBACA,oBACA,WACA,eACA,oBACA,qBACA,yBACA,2BACA,UACA,iBACA,qBACA,gBACA,mBACA,gBACA,iBACA,gBACA,kBACA,mBACA,mBACA,iBACA,kBACA,wBACA,iBACA,qBACA,4BACA,kBACA,eACA,mBACA,eACA,gBACA,kBACA,iBACA,cACA,gBACA,eACA,oBACA,qBACA,oBACA,wBACA,4BACA,gBACA,gBACA,gBACA,gBACA,sBACA,6BACA,yBACA,kCACA,wBACA,yBACA,oBACA,uBACA,oBACA,yBACA,8BACA,+BACA,0BACA,8BACA,6BACA,8BACA,uBACA,2BACA,8BACA,4BACA,0BACA,2BACA,8BACA,0BACA,8BACA,2BACA,mCACA,0CACA,gCACA,kCACA,iCACA,wCACA,qCACA,wCACA,sCACA,qCACA,uCACA,sCACA,gCACA,8BACA,+BACA,gCACA,mCACA,+BACA,wBACA,oBACA,qBACA,qBACA,oBACA,oBACA,wBACA,oBACA,4BACA,oBACA,oBACA,yBACA,8BACA,0BACA,iCACA,0BACA,yBACA,4BACA,qBACA,yBACA,4BACA,uBACA,wBACA,0BACA,iCACA,gCACA,kCACA,6BACA,qBACA,yBACA,kCACA,wBACA,oBACA,iCACA,yBACA,6BACA,sCACA,+BACA,kCACA,mCACA,mCACA,mCACA,mCACA,mCACA,mCACA,mCACA,mCACA,mCACA,uBACA,2BACA,0BACA,2BACA,0BACA,wBACA,yBACA,uBACA,uBACA,sBACA,sBACA,sBACA,0BACA,wBACA,mCACA,iCACA,8BACA,kCACA,wBACA,+BACA,qBACA,yBACA,yBACA,yBACA,aACA,aACA,SACA,oBACA,SACA,sBACA,kBACA,+BACA,YACA,gBACA,yBACA,4BACA,qBACA,MACA,aACA,eACA,qBACA,uBACA,2BACA,gBACA,UACA,eACA,SACA,aACA,iBACA,eACA,SACA,cACA,YACA,4BACA,8BACA,8BACA,4BACA,6BACA,+BACA,UACA,WACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,WACA,YACA,YACA,WACA,WACA,WACA,WACA,WACA,WACA,aACA,qBACA,2BACA,mBACA,8BACA,8BACA,8BACA,8BACA,8BACA,8BACA,qBACA,6BACA,qBACA,iBACA,iBACA,YACA,UACA,cACA,gBACA,2BACA,WACA,YACA,eACA,iBACA,oBACA,WACA,oBACA,gBACA,cACA,gBACA,OACA,cACA,cACA,YACA,cACA,YACA,eACA,mBACA,gBACA,YACA,aACA,QACA,aACA,YACA,aACA,kBACA,aACA,YACA,UACA,WACA,cACA,eACA,0BACA,wBACA,+BACA,+BACA,mBACA,qCACA,sBACA,iCACA,oBACA,SACA,gBACA,eACA,iBACA,yBACA,yBACA,uBACA,6BACA,cACA,WACA,MACA,kBACA,eACA,mBACA,MACA,cACA,cACA,aACA,oBACA,qBACA,+BACA,qBACA,kBACA,iBACA,iBACA,SACA,UACA,iBACA,cACA,qCACA,oCACA,8BACA,iCACA,8BACA,2BACA,6BACA,2BACA,gBACA,WACA,gBACA,UACA,WACA,gBACA,SACA,YACA,gBACA,mBACA,qBACA,wBACA,uBACA,qBACA,qBACA,iBACA,UACA,UACA,kBACA,cACA,oBACA,mBACA,eACA,oBACA,wBACA,cACA,6BACA,eACA,uBACA,mBACA,uBACA,oBACA,sBACA,uBACA,wBACA,yBACA,kBACA,sBACA,0BACA,gBACA,gBACA,sBACA,6BACA,wBACA,kBACA,oBACA,yBACA,kBACA,wCACA,cACA,mBACA,qBACA,yBACA,wBACA,YACA,aACA,SACA,SACA,cACA,iBACA,4BACA,0BACA,8BACA,uBACA,gBACA,qCACA,iBACA,iBACA,kBACA,kBACA,cACA,gBACA,OACA,SACA,SACA,mBACA,mBACA,mBACA,mBACA,UACA,YACA,gBACA,IACA,QACA,OACA,QACA,MACA,WACA,eACA,+BACA,cACA,SACA,gBACA,aACA,YACA,iBACA,WACA,OACA,QACA,SACA,YACA,SACA,aACA,gBACA,sBACA,oBACA,gBACA,MACA,cACA,eACA,eACA,SACA,aACA,mBACA,YACA,gBACA,aACA,kBACA,YACA,cACA,WACA,cACA,UACA,aACA,WACA,YACA,UACA,kBACA,kBACA,YACA,eACA,WACA,sBACA,aACA,iBACA,kBACA,SACA,YACA,MACA,UACA,QACA,YACA,QACA,gBACA,cACA,aACA,eACA,aACA,YACA,oBACA,aACA,MACA,aACA,kBACA,oBACA,QACA,MACA,cACA,UACA,SACA,UACA,WACA,mBACA,YACA,kBACA,SACA,aACA,eACA,UACA,QACA,UACA,UACA,uBACA,gCACA,sBACA,iBACA,YACA,kBACA,sBACA,qBACA,sBACA,4BACA,iBACA,uBACA,4BACA,iBACA,qBACA,oBACA,oBACA,0BACA,gBACA,qBACA,qBACA,0BACA,mBACA,cACA,MACA,MACA,cACA,kBACA,UACA,mBACA,aACA,SACA,eACA,cACA,aACA,aACA,eACA,cACA,aACA,eACA,kBACA,oBACA,UACA,mBACA,QACA,eACA,MACA,QACA,UACA,QACA,YACA,cACA,OACA,QACA,SACA,SACA,QACA,QACA,OACA,QACA,QACA,OACA,cACA,eACA,eACA,cACA,SACA,aACA,WACA,kBACA,gBACA,qBACA,oBACA,aACA,cACA,gBACA,aACA,iBACA,eACA,cACA,YACA,WACA,cACA,YACA,WACA,aACA,eACA,YACA,WACA,OACA,OACA,UACA,IACA,OACA,sBACA,qBACA,aACA,wBACA,wBACA,kBACA,mBACA,mBACA,oBACA,sBACA,oBACA,kBACA,uBACA,sBACA,iBACA,kBACA,kBACA,mBACA,qBACA,sBACA,sBACA,mBACA,iBACA,WACA,UACA,iBACA,iBACA,WACA,aACA,UACA,UACA,gBACA,UACA,OACA,eACA,iBACA,YACA,WACA,iBACA,eACA,eACA,OACA,gBACA,UACA,eACA,OACA,MACA,aACA,OACA,qBACA,aACA,kBACA,mBACA,cACA,aACA,gBACA,wBACA,YACA,oBACA,QACA,OACA,iBACA,OACA,OACA,OACA,WACA,OACA,YACA,eACA,SACA,gBACA,sBACA,4BACA,6BACA,sBACA,sBACA,kBACA,eACA,eACA,sBACA,sBACA,qBACA,sBACA,qBACA,cACA,oBACA,oBACA,oBACA,gBACA,eACA,qBACA,qBACA,qBACA,iBACA,eACA,aACA,mBACA,yBACA,0BACA,mBACA,mBACA,eACA,eACA,oBACA,yBACA,0BACA,oBACA,oBACA,iBACA,cACA,kBACA,mBACA,cACA,oBACA,oBACA,mBACA,oBACA,mBACA,aACA,kBACA,kBACA,kBACA,eACA,cACA,mBACA,mBACA,mBACA,gBACA,cACA,YACA,iBACA,sBACA,uBACA,iBACA,iBACA,cACA,SACA,eACA,QACA,gBACA,qBACA,iBACA,eACA,cACA,gBACA,SACA,uBACA,aACA,aACA,qBACA,YACA,YACA,aACA,cACA,cACA,kBACA,OACA,UACA,SACA,aACA,cACA,aACA,gBACA,WACA,iBACA,UACA,cACA,SACA,WACA,UACA,aACA,aACA,IACA,OACA,SACA,iBACA,eACA,cACA,kBACA,cACA,cACA,SACA,uBACA,eACA,wBACA,aACA,YACA,SACA,UACA,eACA,cACA,UACA,gBACA,oBACA,yBACA,sBACA,OACA,QACA,WACA,OACA,KACA,OACA,YACA,cACA,cACA,QACA,KACA,QACA,QACA,YACA,iBACA,UACA,eACA,mBACA,wBACA,OACA,SACA,WACA,aACA,YACA,gBACA,wBACA,eACA,WACA,eACA,UACA,iBACA,yBACA,oBACA,gBACA,UACA,oBACA,YACA,aACA,WACA,SACA,aACA,OACA,YACA,YACA,UACA,QACA,kBACA,aACA,YACA,aACA,iBACA,gBACA,aACA,gBACA,kBACA,YACA,uBACA,cACA,eACA,eACA,aACA,QACA,aACA,eACA,oBACA,aACA,aACA,cACA,YACA,cACA,UACA,UACA,OACA,YACA,YACA,aACA,WACA,WACA,gBACA,YACA,WACA,UACA,gBACA,QACA,gBACA,YACA,aACA,QACA,YACA,SACA,UACA,MACA,QACA,MACA,OACA,WACA,cACA,WACA,UACA,WACA,gBACA,kBACA,YACA,UACA,QACA,QACA,sBACA,8BACA,aACA,qBACA,4BACA,YACA,YACA,OACA,cACA,aACA,YACA,eACA,aACA,kBACA,kBACA,kBACA,aACA,cACA,UACA,UACA,oBACA,0BACA,UACA,wBACA,0BACA,mBACA,cACA,eACA,aACA,aACA,UACA,gBACA,WACA,qBACA,uBACA,yBACA,uBACA,0BACA,SACA,gBACA,iBACA,iBACA,gBACA,UACA,qBACA,uCACA,kCACA,UACA,aACA,eACA,YACA,aACA,kBACA,UACA,cACA,qBACA,cACA,YACA,WACA,eACA,UACA,kBACA,kBACA,kBACA,oBACA,mBACA,cACA,gBACA,UACA,cACA,cACA,WACA,aACA,UACA,aACA,WACA,0BACA,SACA,gBACA,SACA,kBACA,iBACA,oBACA,gBACA,aACA,uBACA,0BACA,MACA,OACA,QACA,oBACA,gBACA,mBACA,eACA,WACA,kBACA,SACA,iBACA,eACA,kBACA,oBACA,qBACA,eACA,qBACA,qBACA,sBACA,gBACA,sBACA,wBACA,gBACA,2BACA,qBACA,kBACA,mBACA,oBACA,cACA,kBACA,iBACA,yBACA,qBACA,2BACA,gBACA,kBACA,wBACA,cACA,oBACA,mBACA,oBACA,iBACA,aACA,iBACA,qBACA,oBACA,kBACA,cACA,uBACA,uBACA,2BACA,kBACA,+BACA,0BACA,oBACA,mBACA,qBACA,qBACA,oBACA,kBACA,cACA,mBACA,eACA,gBACA,qBACA,cACA,8BACA,gBACA,uBACA,cACA,wBACA,qBACA,iBACA,kBACA,kBACA,kBACA,yBACA,yBACA,4BACA,kCACA,kCACA,wCACA,wCACA,sCACA,sCACA,4CACA,4CACA,4BACA,sCACA,sCACA,4BACA,oCACA,oCACA,4BACA,4BACA,iBACA,gBACA,qBACA,+BACA,wBACA,gBACA,eACA,mBACA,qBACA,mBACA,cACA,cACA,cACA,iBACA,kBACA,gBACA,cACA,kBACA,mBACA,mBACA,eACA,cACA,SACA,MACA,WACA,WACA,UACA,eACA,UACA,WACA,OACA,WACA,cACA,cACA,eACA,gBACA,aACA,eACA,eACA,gBACA,cACA,mBACA,cACA,SACA,QACA,cACA,KACA,KACA,IACA,OACA,UACA,eACA,eACA,UACA,eACA,WACA,UACA,WACA,KACA,QACA,kBACA,UACA,SACA,kBACA,YACA,qBACA,eACA,UACA,UACA,iBACA,iBACA,eACA,sBACA,mBACA,kBACA,gBACA,aACA,eACA,cACA,gBACA,QACA,sBACA,sBACA,mBACA,iBACA,YACA,SACA,eACA,gBACA,aACA,iBACA,aACA,iBACA,oBACA,qBACA,cACA,eACA,oBACA,gBACA,qBACA,YACA,aACA,eACA,cACA,cACA,gBACA,uBACA,WACA,eACA,iBACA,oBACA,QACA,YACA,SACA,SACA,SACA,YACA,YACA,aACA,aACA,YACA,cACA,cACA,aACA,cACA,iBACA,SACA,cACA,eACA,SACA,SACA,mBACA,aACA,aACA,kBACA,SACA,aACA,MACA,UACA,YACA,SACA,UACA,2BACA,WACA,kBACA,aACA,gBACA,UACA,gBACA,UACA,SACA,WACA,WACA,aACA,WACA,UACA,WACA,kBACA,eACA,cACA,UACA,oBACA,cACA,cACA,cACA,2BACA,6BACA,iBACA,aACA,SACA,kBACA,oBACA,oBACA,mBACA,OACA,gBACA,WACA,WACA,YACA,aACA,2BACA,sBACA,eACA,6BACA,oBACA,YACA,oBACA,sBACA,sBACA,qBACA,aACA,qBACA,WACA,OACA,YACA,WACA,SACA,QACA,KACA,KACA,SACA,IACA,WACA,gBACA,cACA,mBACA,WACA,YACA,UACA,QACA,SACA,QACA,cACA,aACA,SACA,mBACA,0BACA,0BACA,UACA,gBACA,SACA,YACA,qBACA,WACA,UACA,UACA,MACA,eACA,aACA,eACA,cACA,YACA,UACA,QACA,WACA,WACA,UACA,YACA,YACA,oBACA,QACA,YACA,SACA,OACA,WACA,QACA,aACA,QACA,YACA,OACA,cACA,sBACA,aACA,iBACA,kBACA,MACA,SACA,yBACA,UACA,YACA,aACA,yBACA,QACA,WACA,+BACA,YACA,SACA,aACA,aACA,eACA,WACA,4BACA,kBACA,cACA,IACA,OACA,eACA,WACA,aACA,0BACA,WACA,QACA,QACA,aACA,UACA,UACA,kBACA,aACA,mBACA,WACA,WACA,kBACA,WACA,QACA,OACA,eACA,YACA,cACA,WACA,WACA,YACA,WACA,SACA,aACA,aACA,cACA,UACA,UACA,OACA,YACA,WACA,WACA,SACA,YACA,aACA,oBACA,YACA,QACA,OACA,aACA,iBACA,YACA,YACA,cACA,YACA,YACA,gBACA,WACA,WACA,aACA,WACA,QACA,QACA,QACA,cACA,gBACA,aACA,eACA,QACA,QACA,QACA,YACA,cACA,OACA,cACA,wBACA,eACA,yBACA,YACA,mBACA,eACA,aACA,iBACA,eACA,0BACA,oBACA,0BACA,yBACA,uBACA,wBACA,cACA,aACA,sBACA,cACA,uBACA,WACA,iBACA,uBACA,cACA,YACA,gBACA,cACA,wBACA,kBACA,uBACA,uBACA,qBACA,sBACA,aACA,YACA,QACA,WACA,MACA,UACA,cACA,OACA,aACA,cACA,aACA,iBACA,aACA,SACA,gBACA,QACA,UACA,KACA,QACA,cACA,eACA,eACA,0BACA,uBACA,SACA,YACA,SACA,YACA,oBACA,OACA,eACA,gBACA,cACA,YACA,SACA,aACA,oBACA,oBACA,KACA,KACA,OACA,UACA,QACA,iBACA,cACA,iBACA,kBACA,cACA,gBACA,MACA,kBACA,mBACA,kBACA,SACA,wBACA,YACA,cACA,qBACA,oBACA,eACA,iBACA,mBACA,qBACA,iBACA,UACA,aACA,UACA,cACA,wBACA,qBACA,uBACA,wBACA,sBACA,SACA,+BACA,iBACA,uBACA,gBACA,iBACA,6BACA,mBACA,wBACA,mBACA,aACA,uBACA,kBACA,eACA,aACA,qBACA,iBACA,UACA,mBACA,UACA,SACA,0BACA,gCACA,sBACA,cACA,iBACA,yBACA,oBACA,uBACA,yBACA,mBACA,uBACA,aACA,mBACA,mBACA,WACA,eACA,kBACA,aACA,UACA,aACA,aACA,wBACA,yBACA,gBACA,oCACA,uBACA,cACA,cACA,WACA,eACA,WACA,WACA,UACA,sBACA,UACA,WACA,SACA,cACA,kBACA,WACA,qBACA,cACA,cACA,kBACA,aACA,mBACA,WACA,eACA,iBACA,cACA,mBACA,mCACA,mBACA,2BACA,sBACA,wBACA,eACA,qBACA,mBACA,gBACA,uBACA,2BACA,oBACA,oBACA,sBACA,sBACA,sBACA,uBACA,mBACA,iBACA,mBACA,kBACA,aACA,eACA,eACA,kBACA,mBACA,2BACA,oBACA,UACA,oBACA,iBACA,eACA,aACA,eACA,aACA,mBACA,qBACA,2BACA,kBACA,oBACA,eACA,aACA,2BACA,yBACA,eACA,WACA,oBACA,gBACA,iBACA,qBACA,kBACA,yBACA,kBACA,UACA,oBACA,iBACA,eACA,YACA,wBACA,aACA,YACA,iBACA,cACA,qBACA,gBACA,cACA,gBACA,YACA,YACA,WACA,aACA,qBACA,eACA,YACA,aACA,mBACA,kBACA,wBACA,0BACA,iBACA,mBACA,UACA,YACA,SACA,cACA,2BACA,6BACA,2BACA,WACA,KACA,oBACA,gBACA,WACA,QACA,QACA,iBACA,WACA,sBACA,MACA,eACA,iBACA,gBACA,gBACA,iBACA,eACA,aACA,WACA,YACA,iBACA,OACA,OACA,UACA,UACA,SACA,SACA,OACA,YACA,OACA,OACA,UACA,kBACA,kBACA,qBACA,OACA,WACA,OACA,WACA,SACA,wBACA,UACA,WACA,YACA,cACA,QACA,QACA,qBACA,oBACA,OACA,KACA,aACA,WACA,YACA,aACA,oBACA,kBACA,mBACA,iBACA,SACA,WACA,UACA,iBACA,YACA,aACA,mBACA,UACA,OACA,OACA,MACA,MACA,kCACA,UACA,WACA,cACA,gBACA,QACA,aACA,UACA,YACA,sBACA,sBACA,OACA,OACA,qBACA,sBACA,qBACA,iBACA,mBACA,uBACA,kBACA,WACA,wBACA,6BACA,gBACA,iBACA,YACA,iBACA,mBACA,sBACA,eACA,oBACA,0BACA,mBACA,iBACA,uBACA,sBACA,oBACA,mBACA,oBACA,gBACA,0BACA,mBACA,oBACA,oBACA,sBACA,yBACA,mBACA,gBACA,gBACA,iBACA,sBACA,cACA,2BACA,4BACA,uBACA,iBACA,cACA,aACA,gBACA,QACA,YACA,cACA,YACA,aACA,QACA,cACA,gBACA,cACA,wBACA,qBACA,qBACA,eACA,aACA,aACA,mBACA,aACA,YACA,aACA,eACA,YACA,iBACA,iBACA,iBACA,WACA,uBACA,UACA,aACA,KACA,OACA,cACA,UACA,6BACA,WACA,2BACA,SACA,cACA,cACA,oBACA,6BACA,gBACA,qBACA,aACA,YACA,UACA,cACA,eACA,WACA,gBACA,WACA,cACA,OACA,aACA,YACA,QACA,cACA,QACA,SACA,gBACA,gBACA,iBACA,kBACA,kBACA,YACA,YACA,qBACA,8BACA,gBACA,iBACA,gBACA,aACA,WACA,WACA,cACA,aACA,YACA,YACA,kBACA,SACA,YACA,UACA,OACA,SACA,WACA,UACA,YACA,WACA,YACA,cACA,WACA,cACA,WACA,OACA,OACA,kBACA,iBACA,KACA,KACA,KACA,KACA,eACA,oBACA,oBACA,UACA,MACA,UACA,SACA,gBACA,kBACA,cACA,UACA,YACA,UACA,WACA,OACA,UACA,OACA,OACA,QACA,SACA,OACA,WACA,YACA,eACA,YACA,mBACA,cACA,YACA,cACA,YACA,qBACA,kBACA,eACA,mBACA,WACA,YACA,YACA,oBACA,WACA,SACA,SACA,aACA,aACA,iBACA,iBACA,iBACA,iBACA,SACA,OACA,cACA,aACA,SACA,eACA,mBACA,iBACA,gBACA,QACA,iBACA,gBACA,oBACA,OACA,cACA,YACA,YACA,UACA,iBACA,aACA,WACA,aACA,SACA,YACA,0BACA,SACA,OACA,YACA,cACA,QACA,OACA,aACA,mBACA,sBACA,kBACA,YACA,iBACA,oBACA,gBACA,WACA,OACA,eACA,iBACA,YACA,SACA,mBACA,YACA,eACA,SACA,gBACA,WACA,cACA,OACA,aACA,MACA,QACA,QACA,OACA,cACA,cACA,WACA,YACA,qBACA,eACA,OACA,UACA,YACA,UACA,MACA,QACA,aACA,YACA,SACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,WACA,MACA,UACA,SACA,gBACA,cACA,eACA,aACA,eACA,eACA,aACA,cACA,YACA,cACA,OACA,SACA,aACA,aACA,gBACA,eACA,YACA,eACA,YACA,eACA,cACA,cACA,cACA,QACA,OACA,YACA,mBACA,WACA,YACA,QACA,aACA,cACA,UACA,SACA,kBACA,MACA,aACA,YACA,kBACA,kBACA,0BACA,cACA,cACA,YACA,YACA,iBACA,WACA,WACA,UACA,cACA,QACA,oBACA,eACA,eACA,aACA,YACA,YACA,cACA,SACA,UACA,kBACA,UACA,eACA,kBACA,UACA,SACA,WACA,YACA,MACA,aACA,YACA,cACA,YACA,WACA,WACA,aACA,iBACA,eACA,OACA,SACA,QACA,OACA,SACA,UACA,YACA,gBACA,gBACA,iBACA,cACA,WACA,UACA,YACA,SACA,iBACA,oBACA,cACA,SACA,wBACA,UACA,UACA,mBACA,sBACA,qBACA,0BACA,sBACA,iCACA,mBACA,6BACA,iBACA,aACA,cACA,sBACA,sBACA,6BACA,YACA,UACA,gBACA,mBACA,qBACA,cACA,iBACA,gBACA,gBACA,uBACA,uBACA,YACA,gBACA,eACA,eACA,iBACA,kBACA,cACA,aACA,YACA,2BACA,eACA,kBACA,kBACA,iBACA,iBACA,UACA,eACA,WACA,YACA,qBACA,qBACA,eACA,eACA,YACA,iBACA,gBACA,mBACA,kBACA,SACA,wBACA,qBACA,oBACA,cACA,mBACA,qBACA,uBACA,2BACA,YACA,2BACA,uBACA,wBACA,eACA,qBACA,gBACA,eACA,YACA,eACA,eACA,aACA,uBACA,mBACA,qBACA,cACA,mBACA,uBACA,sBACA,sBACA,4BACA,kBACA,uBACA,uBACA,4BACA,uBACA,qBACA,6BACA,YACA,mBACA,gCACA,uBACA,mBACA,UACA,wBACA,sBACA,qBACA,wBACA,wBACA,oBACA,0BACA,wBACA,mBACA,eACA,WACA,eACA,sBACA,qBACA,mBACA,iBACA,aACA,eACA,SACA,cACA,kBACA,aACA,kBACA,iBACA,iBACA,cACA,aACA,iBACA,sBACA,aACA,aACA,aACA,wBACA,sBACA,sBACA,oBACA,qBACA,2BACA,wBACA,eACA,oBACA,mBACA,gBACA,YACA,iBACA,gBACA,aACA,WACA,uBACA,wBACA,wBACA,uBACA,YACA,0BACA,aACA,cACA,sBACA,iBACA,cACA,SACA,cACA,oBACA,6BACA,eACA,oBACA,mBACA,gBACA,kBACA,gBACA,sBACA,mBACA,6BACA,kBACA,mBACA,mBACA,0BACA,0BACA,sBACA,aACA,mBACA,mBACA,gBACA,oBACA,oBACA,oBACA,oBACA,gBACA,sBACA,sBACA,mBACA,gBACA,gBACA,sBACA,iBACA,iBACA,sBACA,0BACA,mBACA,WACA,gBACA,gBACA,gCACA,+BACA,iCACA,gCACA,cACA,oBACA,mBACA,eACA,oBACA,uBACA,uBACA,6BACA,sBACA,gCACA,eACA,oBACA,aACA,eACA,gBACA,sBACA,SACA,WACA,KACA,aACA,oBACA,YACA,WACA,WACA,eACA,cACA,QACA,IACA,OACA,WACA,YACA,iBACA,QACA,eACA,aACA,gBACA,eACA,WACA,aACA,iBACA,kBACA,YACA,OACA,yBACA,WACA,WACA,eACA,WACA,eACA,SACA,WACA,yBACA,aACA,UACA,OACA,qBACA,WACA,WACA,cACA,WACA,SACA,WACA,UACA,aACA,SACA,WACA,WACA,YACA,YACA,wBACA,eACA,YACA,OACA,cACA,UACA,SACA,MACA,aACA,SACA,mBACA,iBACA,gBACA,kBACA,cACA,mBACA,SACA,aACA,kBACA,YACA,iBACA,cACA,mBACA,UACA,KACA,qBACA,SACA,eACA,aACA,aACA,eACA,YACA,cACA,UACA,UACA,KACA,SACA,WACA,aACA,kBACA,SACA,UACA,aACA,WACA,cACA,aACA,eACA,uBACA,gBACA,aACA,iBACA,eACA,iBACA,sBACA,mBACA,eACA,cACA,qBACA,oBACA,gBACA,gBACA,wBACA,iBACA,iBACA,YACA,SACA,WACA,aACA,WACA,WACA,wBACA,wBACA,0BACA,YACA,mBACA,OACA,eACA,WACA,mBACA,uBACA,aACA,UACA,UACA,4BACA,aACA,gBACA,kBACA,SACA,cACA,QACA,kBACA,gBACA,mBACA,oBACA,aACA,eACA,gBACA,iBACA,sBACA,oBACA,0BACA,YACA,gBACA,SACA,YACA,cACA,cACA,aACA,cACA,SACA,mBACA,YACA,cACA,QACA,UACA,UACA,UACA,gBACA,SACA,iBACA,WACA,UACA,YACA,aACA,qBACA,oBACA,kBACA,eACA,iBACA,sBACA,eACA,SACA,iBACA,6BACA,aACA,UACA,YACA,YACA,aACA,UACA,mBACA,mBACA,gBACA,SACA,eACA,mBACA,YACA,cACA,gBACA,uBACA,OACA,SACA,YACA,cACA,eACA,eACA,cACA,aACA,cACA,YACA,eACA,SACA,YACA,cACA,wBACA,uBACA,yBACA,yBACA,wBACA,kBACA,uBACA,sBACA,oBACA,uBACA,iBACA,kBACA,mBACA,iBACA,wBACA,mBACA,yBACA,+BACA,cACA,wBACA,oBACA,kBACA,mBACA,mBACA,mBACA,kBACA,iBACA,kBACA,gBACA,kCACA,qBACA,sBACA,YACA,aACA,aACA,YACA,WACA,SACA,sBACA,eACA,aACA,aACA,UACA,UACA,SACA,YACA,sBACA,kBACA,gBACA,iBACA,iBACA,sBACA,qBACA,gBACA,eACA,gBACA,cACA,aACA,aACA,mBACA,eACA,qBACA,iBACA,gBACA,UACA,WACA,cACA,gBACA,6BACA,WACA,WACA,aACA,YACA,eACA,iBACA,WACA,WACA,WACA,YACA,WACA,oBACA,gBACA,SACA,yBACA,aACA,eACA,cACA,gBACA,YACA,UACA,gBACA,SACA,YACA,kBACA,WACA,YACA,YACA,cACA,YACA,eACA,WACA,gBACA,aACA,cACA,eACA,kBACA,WACA,gBACA,kBACA,kBACA,kBACA,kBACA,iBACA,YACA,YACA,uBACA,6BACA,yBACA,iDACA,2BACA,0BACA,mBACA,mBACA,qBACA,kBACA,4BACA,4CACA,4BACA,2BACA,mCACA,wBACA,UACA,SACA,UACA,OACA,aACA,eACA,gBACA,SACA,QACA,gBACA,WACA,MACA,UACA,UACA,QACA,SACA,SACA,UACA,MACA,SACA,cACA,aACA,cACA,SACA,iBACA,UACA,QACA,YACA,cACA,YACA,aACA,UACA,gBACA,iBACA,gBACA,gBACA,eACA,gBACA,eACA,eACA,eACA,WACA,aACA,aACA,YACA,YACA,mBACA,aACA,gBACA,eACA,YACA,YACA,kBACA,gBACA,KACA,KACA,KACA,KACA,MACA,UACA,iBACA,eACA,gBACA,cACA,gBACA,cACA,eACA,aACA,OACA,mBACA,oBACA,oBACA,iBACA,kBACA,kBACA,YACA,QACA,cACA,QACA,cACA,QACA,cACA,aACA,gBACA,YACA,UACA,eACA,SACA,gBACA,aACA,aACA,mBACA,iBACA,eACA,QACA,aACA,kBACA,WACA,eACA,UACA,WACA,YACA,OACA,aACA,cACA,cACA,sBACA,WACA,UACA,sBACA,kBACA,mBACA,eACA,QACA,kBACA,cACA,SACA,UACA,cACA,aACA,YACA,cACA,cACA,qBACA,oBACA,qBACA,oBACA,QACA,OACA,QACA,cACA,aACA,cACA,YACA,aACA,cACA,WACA,yBACA,yBACA,aACA,cACA,WACA,OACA,eACA,gBACA,eACA,SACA,UACA,cACA,QACA,iBACA,6BACA,iBACA,gBACA,YACA,qBACA,cACA,SACA,YACA,YACA,YACA,gBACA,MACA,sBACA,kBACA,iBACA,OACA,QACA,QACA,QACA,YACA,YACA,UACA,WACA,SACA,WACA,WACA,gBACA,YACA,cACA,SACA,MACA,WACA,kBACA,YACA,yBACA,yBACA,SACA,UACA,UACA,gBACA,sBACA,4BACA,UACA,WACA,YACA,iBACA,oBACA,yBACA,eACA,eACA,gBACA,kBACA,oBACA,aACA,gBACA,iBACA,aACA,QACA,aACA,0BACA,UACA,oBACA,UACA,aACA,UACA,aACA,WACA,SACA,aACA,uBACA,eACA,WACA,eACA,YACA,cACA,gBACA,WACA,YACA,YACA,OACA,mBACA,YACA,MACA,eACA,mBACA,YACA,sBACA,uBACA,oBACA,wBACA,mBACA,oBACA,gBACA,mBACA,QACA,SACA,IACA,KACA,KACA,OACA,aACA,UACA,UACA,SACA,QACA,aACA,WACA,WACA,cACA,gBACA,cACA,iBACA,OACA,QACA,MACA,OACA,oBACA,qBACA,aACA,gBACA,aACA,WACA,aACA,sBACA,aACA,SACA,SACA,WACA,YACA,eACA,YACA,OACA,MACA,gBACA,cACA,gBACA,SACA,cACA,YACA,cACA,OACA,OACA,gBACA,WACA,UACA,SACA,gBACA,gBACA,WACA,UACA,WACA,yBACA,kBACA,0BACA,SACA,MACA,UACA,cACA,gBACA,UACA,iBACA,gBACA,wBACA,wBACA,WACA,SACA,iBACA,oBACA,SACA,kBACA,kBACA,oBACA,sBACA,iBACA,cACA,YACA,sBACA,eACA,eACA,aACA,iBACA,kBACA,oBACA,aACA,kBACA,iBACA,cACA,eACA,aACA,sCACA,qBACA,eACA,cACA,iBACA,yBACA,iCACA,eACA,sBACA,iBACA,gBACA,SACA,UACA,sBACA,eACA,cACA,YACA,cACA,cACA,eACA,eACA,mBACA,iBACA,wBACA,sBACA,cACA,oBACA,8BACA,oBACA,qBACA,eACA,mBACA,WACA,qBACA,mBACA,QACA,iBACA,SACA,WACA,WACA,UACA,WACA,eACA,cACA,gBACA,eACA,eACA,cACA,cACA,UACA,SACA,aACA,SACA,cACA,MACA,UACA,WACA,YACA,kBACA,WACA,QACA,eACA,cACA,gBACA,OACA,cACA,SACA,kBACA,sBACA,mBACA,uBACA,aACA,WACA,eACA,QACA,WACA,UACA,OACA,YACA,eACA,eACA,QACA,UACA,eACA,KACA,KACA,SACA,iBACA,aACA,UACA,OACA,QACA,UACA,cACA,kBACA,sBACA,YACA,SACA,UACA,QACA,YACA,SACA,SACA,mBACA,gBACA,aACA,2BACA,2BACA,YACA,UACA,UACA,UACA,SACA,kBACA,eACA,iBACA,WACA,gBACA,gBACA,cACA,eACA,iBACA,yBACA,aACA,gBACA,aACA,aACA,WACA,YACA,eACA,cACA,UACA,UACA,wBACA,sBACA,qBACA,2BACA,qBACA,0BACA,uBACA,sBACA,aACA,YACA,MACA,gBACA,SACA,OACA,SACA,YACA,uBACA,eACA,kBACA,wBACA,WACA,OACA,WACA,UACA,SACA,oBACA,aACA,qBACA,cACA,mBACA,kBACA,WACA,gBACA,kBACA,wBACA,wBACA,YACA,qBACA,eACA,iBACA,WACA,eACA,OACA,OACA,eACA,aACA,SACA,gBACA,YACA,oBACA,gBACA,YACA,iBACA,MACA,YACA,WACA,eACA,iBACA,mBACA,qBACA,mBACA,8BACA,aACA,WACA,wBACA,iBACA,oBACA,UACA,UACA,eACA,SACA,cACA,eACA,cACA,eACA,eACA,aACA,aACA,gBACA,cACA,WACA,eACA,WACA,WACA,UACA,cACA,UACA,aACA,cACA,cACA,eACA,sBACA,YACA,iBACA,eACA,kBACA,aACA,gBACA,WACA,eACA,iBACA,2BACA,mBACA,kBACA,iBACA,mCACA,WACA,eACA,kBACA,oBACA,cACA,gBACA,cACA,iBACA,cACA,sBACA,YACA,eACA,uBACA,mBACA,eACA,8BACA,YACA,WACA,aACA,oBACA,uBACA,YACA,WACA,WACA,WACA,gBACA,iBACA,kBACA,iBACA,iBACA,mBACA,kBACA,uBACA,UACA,aACA,eACA,eACA,aACA,iBACA,cACA,qBACA,gBACA,cACA,gBACA,YACA,YACA,WACA,SACA,iBACA,sBACA,cACA,cACA,aACA,UACA,cACA,eACA,MACA,eACA,aACA,cACA,gBACA,gBACA,aACA,QACA,kBACA,iBACA,QACA,QACA,WACA,YACA,OACA,WACA,YACA,kBACA,qBACA,mBACA,UACA,OACA,iBACA,MACA,kBACA,OACA,OACA,gBACA,QACA,QACA,YACA,QACA,YACA,QACA,QACA,QACA,OACA,SACA,wBACA,cACA,eACA,iBACA,OACA,OACA,SACA,eACA,gBACA,cACA,UACA,OACA,UACA,WACA,YACA,mBACA,mBACA,kBACA,QACA,eACA,aACA,SACA,QACA,YACA,eACA,OACA,MACA,aACA,YACA,SACA,SACA,UACA,SACA,QACA,kBACA,aACA,aACA,UACA,QACA,iBACA,WACA,cACA,iBACA,YACA,aACA,QACA,SACA,gBACA,aACA,YACA,gBACA,gBACA,cACA,sBACA,cACA,sBACA,YACA,oBACA,OACA,WACA,eACA,SACA,SACA,cACA,OACA,aACA,eACA,YACA,2BACA,cACA,kBACA,cACA,cACA,gBACA,qCACA,gCACA,aACA,SACA,SACA,cACA,YACA,SACA,mBACA,oBACA,iBACA,kBACA,oBACA,iBACA,eACA,kBACA,mBACA,gBACA,iBACA,mBACA,gBACA,aACA,cACA,aACA,cACA,QACA,aACA,aACA,aACA,iBACA,cACA,MACA,WACA,UACA,SACA,YACA,SACA,YACA,gBACA,SACA,UACA,SACA,WACA,UACA,MACA,WACA,eACA,mBACA,UACA,gBACA,YACA,WACA,YACA,UACA,SACA,aACA,WACA,iBACA,aACA,aACA,UACA,QACA,QACA,WACA,QACA,eACA,cACA,cACA,MACA,UACA,SACA,OACA,eACA,cACA,MACA,OACA,SACA,gBACA,gBACA,UACA,UACA,MACA,YACA,OACA,aACA,gBACA,gBACA,gBACA,OACA,aACA,cACA,kBACA,wBACA,uBACA,wBACA,cACA,gBACA,iBACA,cACA,iBACA,YACA,gBACA,aACA,gBACA,eACA,cACA,iBACA,sBACA,sBACA,qBACA,4BACA,qBACA,yBACA,sBACA,0BACA,aACA,cACA,kBACA,cACA,mBACA,aACA,eACA,gBACA,aACA,aACA,gBACA,wBACA,OACA,WACA,YACA,QACA,QACA,OACA,UACA,YACA,UACA,YACA,kBACA,SACA,QACA,UACA,SACA,YACA,eACA,YACA,gBACA,UACA,iBACA,iBACA,cACA,cACA,SACA,qBACA,iBACA,oBACA,iBACA,qBACA,oBACA,cACA,WACA,cACA,QACA,WACA,eACA,WACA,cACA,eACA,cACA,cACA,SACA,yBACA,UACA,UACA,MACA,YACA,QACA,kBACA,mBACA,cACA,UACA,QACA,QACA,cACA,eACA,YACA,mBACA,kBACA,kBACA,iBACA,kBACA,iBACA,sBACA,sBACA,aACA,mBACA,sBACA,sBACA,6BACA,kBACA,qBACA,qBACA,2BACA,YACA,gBACA,eACA,eACA,OACA,WACA,YACA,YACA,QACA,WACA,OACA,aACA,eACA,gBACA,QACA,SACA,YACA,WACA,SACA,eACA,cACA,YACA,aACA,YACA,aACA,YACA,aACA,YACA,aACA,YACA,aACA,YACA,aACA,YACA,aACA,YACA,aACA,mBACA,mBACA,mBACA,SACA,WACA,eACA,WACA,QACA,iBACA,mBACA,SACA,UACA,YACA,UACA,oBACA,cACA,aACA,2BACA,4BACA,cACA,eACA,UACA,cACA,kBACA,qBACA,UACA,YACA,SACA,iBACA,YACA,iBACA,iBACA,UACA,WACA,SACA,QACA,aACA,YACA,MACA,MACA,MACA,OACA,SACA,iBACA,SACA,aACA,YACA,YACA,eACA,WACA,kBACA,SACA,QACA,QACA,kBACA,oBACA,WACA,QACA,cACA,gBACA,gBACA,wBACA,eACA,UACA,YACA,YACA,SACA,gBACA,eACA,kBACA,oBACA,YACA,YACA,SACA,YACA,SACA,UACA,iBACA,kBACA,iBACA,kBACA,iBACA,kBACA,iBACA,kBACA,2BACA,sBACA,WACA,iBACA,gBACA,mBACA,UACA,cACA,cACA,aACA,OACA,UACA,gBACA,aACA,mBACA,WACA,kBACA,kBACA,kBACA,aACA,kBACA,UACA,aACA,QACA,SACA,OACA,SACA,IACA,OACA,OACA,WACA,QACA,gBACA,YACA,eACA,kBACA,uBACA,2BACA,0BACA,0BACA,gCACA,sBACA,2BACA,gCACA,mBACA,qBACA,8BACA,wBACA,2BACA,mBACA,6BACA,uBACA,wBACA,wBACA,yBACA,2BACA,4BACA,4BACA,yBACA,uBACA,+BACA,oBACA,0BACA,0BACA,yBACA,0BACA,yBACA,iBACA,qBACA,gBACA,wBACA,kBACA,gBACA,kBACA,6BACA,yBACA,yBACA,oCACA,6BACA,8BACA,mCACA,mCACA,yBACA,iCACA,wCACA,oCACA,6BACA,wBACA,wBACA,uBACA,uBACA,wBACA,uCACA,0BACA,0BACA,2BACA,mBACA,yBACA,mBACA,yBACA,yBACA,sBACA,oBACA,uBACA,sBACA,4BACA,qBACA,0BACA,eACA,kBACA,oBACA,yBACA,6BACA,mBACA,iBACA,oBACA,uBACA,mBACA,uBACA,8BACA,kBACA,yBACA,qBACA,aACA,uBACA,wBACA,wBACA,oBACA,sBACA,4BACA,oBACA,yBACA,0BACA,2BACA,oBACA,uBACA,uBACA,0BACA,sBACA,8BACA,0BACA,0BACA,0BACA,2BACA,kCACA,qBACA,oCACA,mBACA,iCACA,cACA,sBACA,0BACA,0BACA,+BACA,+BACA,oBACA,2BACA,yBACA,uBACA,kBAC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"}node_modules/terser/dist/.gitkeep000066600000000000150425117220013112 0ustar00node_modules/terser/dist/bundle.min.js000066600001302621150425117220014071 0ustar00!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("source-map")):"function"==typeof define&&define.amd?define(["exports","source-map"],t):t((e=e||self).Terser={},e.sourceMap)}(this,(function(e,t){"use strict";function n(e){return e.split("")}function i(e,t){return t.includes(e)}t=t&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t;class r extends Error{constructor(e,t){super(),this.name="DefaultsError",this.message=e,this.defs=t}}function o(e,t,n){!0===e&&(e={});const i=e||{};if(n)for(const e in i)if(D(i,e)&&!D(t,e))throw new r("`"+e+"` is not a supported option",t);for(const n in t)if(D(t,n))if(e&&D(e,n))if("ecma"===n){let t=0|e[n];t>5&&t<2015&&(t+=2009),i[n]=t}else i[n]=e&&D(e,n)?e[n]:t[n];else i[n]=t[n];return i}function a(){}function s(){return!1}function u(){return!0}function c(){return this}function l(){return null}var f=function(){function e(e,o,a){var s,u=[],c=[];function l(){var l=o(e[s],s),f=l instanceof r;return f&&(l=l.v),l instanceof n?(l=l.v)instanceof i?c.push.apply(c,a?l.v.slice().reverse():l.v):c.push(l):l!==t&&(l instanceof i?u.push.apply(u,a?l.v.slice().reverse():l.v):u.push(l)),f}if(Array.isArray(e))if(a){for(s=e.length;--s>=0&&!l(););u.reverse(),c.reverse()}else for(s=0;s=0;)e[n]===t&&e.splice(n,1)}function h(e,t){if(e.length<2)return e.slice();return function e(n){if(n.length<=1)return n;var i=Math.floor(n.length/2),r=n.slice(0,i),o=n.slice(i);return function(e,n){for(var i=[],r=0,o=0,a=0;rT.test(e);function b(e,t){return e._annotations&t}function C(e,t){e._annotations|=t}var O="break case catch class const continue debugger default delete do else export extends finally for function if in instanceof let new return switch throw try typeof var void while with",F="false null true",M="enum implements import interface package private protected public static super this "+F+" "+O,R="return new delete throw else case yield await";O=E(O),M=E(M),R=E(R),F=E(F);var w=E(n("+-*&%=<>!?|~^")),x=/[0-9a-f]/i,N=/^0x[0-9a-f]+$/i,k=/^0[0-7]+$/,I=/^0o[0-7]+$/i,L=/^0b[01]+$/i,P=/^\d*\.?\d*(?:e[+-]?\d*(?:\d\.?|\.?\d)\d*)?$/i,V=/^(0[xob])?[0-9a-f]+n$/i,B=E(["in","instanceof","typeof","new","void","delete","++","--","+","-","!","~","&","|","^","*","**","/","%",">>","<<",">>>","<",">","<=",">=","==","===","!=","!==","?","=","+=","-=","/=","*=","**=","%=",">>=","<<=",">>>=","|=","^=","&=","&&","??","||"]),K=E(n("  \n\r\t\f\v​           \u2028\u2029   \ufeff")),U=E(n("\n\r\u2028\u2029")),G=E(n(";]),:")),H=E(n("[{(,;:")),X=E(n("[]{}(),;:")),z={ID_Start:/[$A-Z_a-z\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]/,ID_Continue:/(?:[$0-9A-Z_a-z\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])+/};function W(e,t){if(Y(e.charCodeAt(t))){if(q(e.charCodeAt(t+1)))return e.charAt(t)+e.charAt(t+1)}else if(q(e.charCodeAt(t))&&Y(e.charCodeAt(t-1)))return e.charAt(t-1)+e.charAt(t);return e.charAt(t)}function Y(e){return e>=55296&&e<=56319}function q(e){return e>=56320&&e<=57343}function $(e){return e>=48&&e<=57}function j(e){return z.ID_Start.test(e)}function Z(e){return z.ID_Continue.test(e)}function J(e){return/^[a-z_$][a-z0-9_$]*$/i.test(e)}function Q(e,t){if(/^[a-z_$][a-z0-9_$]*$/i.test(e))return!0;if(!t&&/[\ud800-\udfff]/.test(e))return!1;var n=z.ID_Start.exec(e);return!(!n||0!==n.index)&&(!(e=e.slice(n[0].length))||!!(n=z.ID_Continue.exec(e))&&n[0].length===e.length)}function ee(e,t=!0){if(!t&&e.includes("e"))return NaN;if(N.test(e))return parseInt(e.substr(2),16);if(k.test(e))return parseInt(e.substr(1),8);if(I.test(e))return parseInt(e.substr(2),8);if(L.test(e))return parseInt(e.substr(2),2);if(P.test(e))return parseFloat(e);var n=parseFloat(e);return n==e?n:void 0}class te extends Error{constructor(e,t,n,i,r){super(),this.name="SyntaxError",this.message=e,this.filename=t,this.line=n,this.col=i,this.pos=r}}function ne(e,t,n,i,r){throw new te(e,t,n,i,r)}function ie(e,t,n){return e.type==t&&(null==n||e.value==n)}var re={};function oe(e,t,n,i){var r={text:e,filename:t,pos:0,tokpos:0,line:1,tokline:0,col:0,tokcol:0,newline_before:!1,regex_allowed:!1,brace_counter:0,template_braces:[],comments_before:[],directives:{},directive_stack:[]};function o(){return W(r.text,r.pos)}function a(e,t){var n=W(r.text,r.pos++);if(e&&!n)throw re;return U.has(n)?(r.newline_before=r.newline_before||!t,++r.line,r.col=0,"\r"==n&&"\n"==o()&&(++r.pos,n="\n")):(n.length>1&&(++r.pos,++r.col),++r.col),n}function s(e){for(;e--;)a()}function u(e){return r.text.substr(r.pos,e.length)==e}function c(e,t){var n=r.text.indexOf(e,r.pos);if(t&&-1==n)throw re;return n}function l(){r.tokline=r.line,r.tokcol=r.col,r.tokpos=r.pos}var f=!1,p=null;function _(n,i,o){r.regex_allowed="operator"==n&&!se.has(i)||"keyword"==n&&R.has(i)||"punc"==n&&H.has(i)||"arrow"==n,"punc"==n&&"."==i?f=!0:o||(f=!1);var a={type:n,value:i,line:r.tokline,col:r.tokcol,pos:r.tokpos,endline:r.line,endcol:r.col,endpos:r.pos,nlb:r.newline_before,file:t};return/^(?:num|string|regexp)$/i.test(n)&&(a.raw=e.substring(a.pos,a.endpos)),o||(a.comments_before=r.comments_before,a.comments_after=r.comments_before=[]),r.newline_before=!1,a=new _e(a),o||(p=a),a}function d(){for(;K.has(o());)a()}function m(e){ne(e,t,r.tokline,r.tokcol,r.tokpos)}function h(e){var t=!1,n=!1,i=!1,r="."==e,s=!1,u=!1,c=function(e){for(var t,n="",i=0;(t=o())&&e(t,i++);)n+=a();return n}((function(o,a){if(s)return!1;switch(o.charCodeAt(0)){case 95:return u=!0;case 98:case 66:return i=!0;case 111:case 79:case 120:case 88:return!i&&(i=!0);case 101:case 69:return!!i||!t&&(t=n=!0);case 45:return n||0==a&&!e;case 43:return n;case n=!1,46:return!(r||i||t)&&(r=!0)}return"n"===o?(s=!0,!0):x.test(o)}));if(e&&(c=e+c),k.test(c)&&P.has_directive("use strict")&&m("Legacy octal literals are not allowed in strict mode"),u&&(c.endsWith("_")?m("Numeric separators are not allowed at the end of numeric literals"):c.includes("__")&&m("Only one underscore is allowed as numeric separator"),c=c.replace(/_/g,"")),c.endsWith("n")){const e=c.slice(0,-1),t=ee(e,N.test(e));if(!r&&V.test(c)&&!isNaN(t))return _("big_int",e);m("Invalid or unexpected token")}var l=ee(c);if(!isNaN(l))return _("num",l);m("Invalid syntax: "+c)}function E(e){return e>="0"&&e<="7"}function g(e,t,n){var i,s=a(!0,e);switch(s.charCodeAt(0)){case 110:return"\n";case 114:return"\r";case 116:return"\t";case 98:return"\b";case 118:return"\v";case 102:return"\f";case 120:return String.fromCharCode(D(2,t));case 117:if("{"==o()){for(a(!0),"}"===o()&&m("Expecting hex-character between {}");"0"==o();)a(!0);var u,l=c("}",!0)-r.pos;return(l>6||(u=D(l,t))>1114111)&&m("Unicode reference out of bounds"),a(!0),(i=u)>65535?(i-=65536,String.fromCharCode(55296+(i>>10))+String.fromCharCode(i%1024+56320)):String.fromCharCode(i)}return String.fromCharCode(D(4,t));case 10:return"";case 13:if("\n"==o())return a(!0,e),""}if(E(s)){if(n&&t){"0"===s&&!E(o())||m("Octal escape sequences are not allowed in template strings")}return function(e,t){var n=o();n>="0"&&n<="7"&&(e+=a(!0))[0]<="3"&&(n=o())>="0"&&n<="7"&&(e+=a(!0));if("0"===e)return"\0";e.length>0&&P.has_directive("use strict")&&t&&m("Legacy octal escape sequences are not allowed in strict mode");return String.fromCharCode(parseInt(e,8))}(s,t)}return s}function D(e,t){for(var n=0;e>0;--e){if(!t&&isNaN(parseInt(o(),16)))return parseInt(n,16)||"";var i=a(!0);isNaN(parseInt(i,16))&&m("Invalid hex-character pattern in string"),n+=i}return parseInt(n,16)}var S=L("Unterminated string constant",(function(){for(var e=a(),t="";;){var n=a(!0,!0);if("\\"==n)n=g(!0,!0);else if("\r"==n||"\n"==n)m("Unterminated string constant");else if(n==e)break;t+=n}var i=_("string",t);return i.quote=e,i})),v=L("Unterminated template",(function(e){e&&r.template_braces.push(r.brace_counter);var t,n,i="",s="";for(a(!0,!0);"`"!=(t=a(!0,!0));){if("\r"==t)"\n"==o()&&++r.pos,t="\n";else if("$"==t&&"{"==o())return a(!0,!0),r.brace_counter++,(n=_(e?"template_head":"template_substitution",i)).raw=s,n;if(s+=t,"\\"==t){var u=r.pos;t=g(!0,!(p&&("name"===p.type||"punc"===p.type&&(")"===p.value||"]"===p.value))),!0),s+=r.text.substr(u,r.pos-u)}i+=t}return r.template_braces.pop(),(n=_(e?"template_head":"template_substitution",i)).raw=s,n.end=!0,n}));function A(e){var t,n=r.regex_allowed,i=function(){for(var e=r.text,t=r.pos,n=r.text.length;t"===o()?(a(),_("arrow","=>")):C("=");case 96:return v(!0);case 123:r.brace_counter++;break;case 125:if(r.brace_counter--,r.template_braces.length>0&&r.template_braces[r.template_braces.length-1]===r.brace_counter)return v(!1)}if($(c))return h();if(X.has(t))return _("punc",a());if(w.has(t))return C();if(92==c||j(t))return E=void 0,E=y(),f?_("name",E):F.has(E)?_("atom",E):O.has(E)?B.has(E)?_("operator",E):_("keyword",E):_("name",E);break}var E;m("Unexpected character '"+t+"'")}return P.next=a,P.peek=o,P.context=function(e){return e&&(r=e),r},P.add_directive=function(e){r.directive_stack[r.directive_stack.length-1].push(e),void 0===r.directives[e]?r.directives[e]=1:r.directives[e]++},P.push_directives_stack=function(){r.directive_stack.push([])},P.pop_directives_stack=function(){for(var e=r.directive_stack[r.directive_stack.length-1],t=0;t0},P}var ae=E(["typeof","void","delete","--","++","!","~","-","+"]),se=E(["--","++"]),ue=E(["=","+=","-=","/=","*=","**=","%=",">>=","<<=",">>>=","|=","^=","&="]),ce=function(e,t){for(var n=0;n","<=",">=","in","instanceof"],[">>","<<",">>>"],["+","-"],["*","/","%"],["**"]],{}),le=E(["atom","num","big_int","string","regexp","name"]);function fe(e,t){const n=new Map;t=o(t,{bare_returns:!1,ecma:2017,expression:!1,filename:null,html5_comments:!0,module:!1,shebang:!0,strict:!1,toplevel:null},!0);var i={input:"string"==typeof e?oe(e,t.filename,t.html5_comments,t.shebang):e,token:null,prev:null,peeked:null,in_function:0,in_async:-1,in_generator:-1,in_directives:!0,in_loop:0,labels:[]};function r(e,t){return ie(i.token,e,t)}function a(){return i.peeked||(i.peeked=i.input())}function s(){return i.prev=i.token,i.peeked||a(),i.token=i.peeked,i.peeked=null,i.in_directives=i.in_directives&&("string"==i.token.type||r("punc",";")),i.token}function u(){return i.prev}function c(e,t,n,r){var o=i.input.context();ne(e,o.filename,null!=t?t:o.tokline,null!=n?n:o.tokcol,null!=r?r:o.tokpos)}function l(e,t){c(t,e.line,e.col)}function f(e){null==e&&(e=i.token),l(e,"Unexpected token: "+e.type+" ("+e.value+")")}function p(e,t){if(r(e,t))return s();l(i.token,"Unexpected token "+i.token.type+" «"+i.token.value+"», expected "+e+" «"+t+"»")}function _(e){return p("punc",e)}function d(e){return e.nlb||!e.comments_before.every(e=>!e.nlb)}function m(){return!t.strict&&(r("eof")||r("punc","}")||d(i.token))}function h(){return i.in_generator===i.in_function}function E(){return i.in_async===i.in_function}function g(e){r("punc",";")?s():e||m()||f()}function D(){_("(");var e=We(!0);return _(")"),e}function S(e){return function(...t){const n=i.token,r=e(...t);return r.start=n,r.end=u(),r}}function v(){(r("operator","/")||r("operator","/="))&&(i.peeked=null,i.token=i.input(i.token.value.substr(1)))}i.token=s();var A=S((function(e,n,o){switch(v(),i.token.type){case"string":if(i.in_directives){var h=a();!i.token.raw.includes("\\")&&(ie(h,"punc",";")||ie(h,"punc","}")||d(h)||ie(h,"eof"))?i.input.add_directive(i.token.value):i.in_directives=!1}var S=i.in_directives,b=T();return S&&b.body instanceof _n?new Ee(b.body):b;case"template_head":case"num":case"big_int":case"regexp":case"operator":case"atom":return T();case"name":if("async"==i.token.value&&ie(a(),"keyword","function"))return s(),s(),n&&c("functions are not allowed as the body of a loop"),O(Ue,!1,!0,e);if("import"==i.token.value&&!ie(a(),"punc","(")){s();var C=function(){var e,t,n=u();r("name")&&(e=re(nn));r("punc",",")&&s();((t=J(!0))||e)&&p("name","from");var o=i.token;"string"!==o.type&&f();return s(),new mt({start:n,imported_name:e,imported_names:t,module_name:new _n({start:o,value:o.value,quote:o.quote,end:o}),end:i.token})}();return g(),C}return ie(a(),"punc",":")?function(){var e=re(on);"await"===e.name&&E()&&l(i.prev,"await cannot be used as label inside async function");i.labels.some(t=>t.name===e.name)&&c("Label "+e.name+" defined twice");_(":"),i.labels.push(e);var t=A();i.labels.pop(),t instanceof Ce||e.references.forEach((function(t){t instanceof Je&&(t=t.label.start,c("Continue label `"+e.name+"` refers to non-IterationStatement.",t.line,t.col,t.pos))}));return new be({body:t,label:e})}():T();case"punc":switch(i.token.value){case"{":return new Ae({start:i.token,body:N(),end:u()});case"[":case"(":return T();case";":return i.in_directives=!1,s(),new Te;default:f()}case"keyword":switch(i.token.value){case"break":return s(),y(Ze);case"continue":return s(),y(Je);case"debugger":return s(),g(),new he;case"do":s();var F=Ye(A);p("keyword","while");var M=D();return g(!0),new Fe({body:F,condition:M});case"while":return s(),new Me({condition:D(),body:Ye((function(){return A(!1,!0)}))});case"for":return s(),function(){var e="`for await` invalid in this context",t=i.token;"name"==t.type&&"await"==t.value?(E()||l(t,e),s()):t=!1;_("(");var n=null;if(r("punc",";"))t&&l(t,e);else{n=r("keyword","var")?(s(),L(!0)):r("keyword","let")?(s(),P(!0)):r("keyword","const")?(s(),V(!0)):We(!0,!0);var o=r("operator","in"),a=r("name","of");if(t&&!a&&l(t,e),o||a)return n instanceof ct?n.definitions.length>1&&l(n.start,"Only one variable declaration allowed in for..in loop"):ye(n)||(n=Oe(n))instanceof Ge||l(n.start,"Invalid left-hand side in for..in loop"),s(),o?function(e){var t=We(!0);return _(")"),new we({init:e,object:t,body:Ye((function(){return A(!1,!0)}))})}(n):function(e,t){var n=e instanceof ct?e.definitions[0].name:null,i=We(!0);return _(")"),new xe({await:t,init:e,name:n,object:i,body:Ye((function(){return A(!1,!0)}))})}(n,!!t)}return function(e){_(";");var t=r("punc",";")?null:We(!0);_(";");var n=r("punc",")")?null:We(!0);return _(")"),new Re({init:e,condition:t,step:n,body:Ye((function(){return A(!1,!0)}))})}(n)}();case"class":return s(),n&&c("classes are not allowed as the body of a loop"),o&&c("classes are not allowed as the body of an if"),q(Bt);case"function":return s(),n&&c("functions are not allowed as the body of a loop"),O(Ue,!1,!1,e);case"if":return s(),function(){var e=D(),t=A(!1,!1,!0),n=null;r("keyword","else")&&(s(),n=A(!1,!1,!0));return new tt({condition:e,body:t,alternative:n})}();case"return":0!=i.in_function||t.bare_returns||c("'return' outside of function"),s();var w=null;return r("punc",";")?s():m()||(w=We(!0),g()),new qe({value:w});case"switch":return s(),new nt({expression:D(),body:Ye(k)});case"throw":s(),d(i.token)&&c("Illegal newline after 'throw'");w=We(!0);return g(),new $e({value:w});case"try":return s(),function(){var e=N(),t=null,n=null;if(r("keyword","catch")){var o=i.token;if(s(),r("punc","{"))var a=null;else{_("(");a=R(void 0,tn);_(")")}t=new st({start:o,argname:a,body:N(),end:u()})}if(r("keyword","finally")){o=i.token;s(),n=new ut({start:o,body:N(),end:u()})}t||n||c("Missing catch/finally blocks");return new at({body:e,bcatch:t,bfinally:n})}();case"var":s();C=L();return g(),C;case"let":s();C=P();return g(),C;case"const":s();C=V();return g(),C;case"with":return i.input.has_directive("use strict")&&c("Strict mode may not include a with statement"),s(),new Ne({expression:D(),body:A()});case"export":if(!ie(a(),"punc","(")){s();C=function(){var e,t,n,o,c,l=i.token;if(r("keyword","default"))e=!0,s();else if(t=J(!1)){if(r("name","from")){s();var p=i.token;return"string"!==p.type&&f(),s(),new ht({start:l,is_default:e,exported_names:t,module_name:new _n({start:p,value:p.value,quote:p.quote,end:p}),end:u()})}return new ht({start:l,is_default:e,exported_names:t,end:u()})}r("punc","{")||e&&(r("keyword","class")||r("keyword","function"))&&ie(a(),"punc")?(o=We(!1),g()):(n=A(e))instanceof ct&&e?f(n.start):n instanceof ct||n instanceof Pe||n instanceof Bt?c=n:n instanceof ge?o=n.body:f(n.start);return new ht({start:l,is_default:e,exported_value:o,exported_definition:c,end:u()})}();return r("punc",";")&&g(),C}}}f()}));function T(e){return new ge({body:(e=We(!0),g(),e)})}function y(e){var t,n=null;m()||(n=re(cn,!0)),null!=n?((t=i.labels.find(e=>e.name===n.name))||c("Undefined label "+n.name),n.thedef=t):0==i.in_loop&&c(e.TYPE+" not inside a loop or switch"),g();var r=new e({label:n});return t&&t.references.push(r),r}var b=function(e,t,n){d(i.token)&&c("Unexpected newline before arrow (=>)"),p("arrow","=>");var o=x(r("punc","{"),!1,n),a=o instanceof Array&&o.length?o[o.length-1].end:o instanceof Array?e:o.end;return new Ke({start:e,end:a,async:n,argnames:t,body:o})},O=function(e,t,n,i){var o=e===Ue,a=r("operator","*");a&&s();var c=r("name")?re(o?$t:Jt):null;o&&!c&&(i?e=Be:f()),!c||e===Ve||c instanceof Ht||f(u());var l=[],p=x(!0,a||t,n,c,l);return new e({start:l.start,end:p.end,is_generator:a,async:n,name:c,argnames:l,body:p})};function F(e,t){var n=new Set,i=!1,r=!1,o=!1,a=!!t,s={add_parameter:function(t){if(n.has(t.value))!1===i&&(i=t),s.check_strict();else if(n.add(t.value),e)switch(t.value){case"arguments":case"eval":case"yield":a&&l(t,"Unexpected "+t.value+" identifier as parameter inside strict mode");break;default:M.has(t.value)&&f()}},mark_default_assignment:function(e){!1===r&&(r=e)},mark_spread:function(e){!1===o&&(o=e)},mark_strict_mode:function(){a=!0},is_strict:function(){return!1!==r||!1!==o||a},check_strict:function(){s.is_strict()&&!1!==i&&l(i,"Parameter "+i.value+" was used already")}};return s}function R(e,t){var n,o=!1;return void 0===e&&(e=F(!0,i.input.has_directive("use strict"))),r("expand","...")&&(o=i.token,e.mark_spread(i.token),s()),n=w(e,t),r("operator","=")&&!1===o&&(e.mark_default_assignment(i.token),s(),n=new Mt({start:n.start,left:n,operator:"=",right:We(!1),end:i.token})),!1!==o&&(r("punc",")")||f(),n=new Le({start:o,expression:n,end:o})),e.check_strict(),n}function w(e,t){var n,o=[],l=!0,p=!1,d=i.token;if(void 0===e&&(e=F(!1,i.input.has_directive("use strict"))),t=void 0===t?qt:t,r("punc","[")){for(s();!r("punc","]");){if(l?l=!1:_(","),r("expand","...")&&(p=!0,n=i.token,e.mark_spread(i.token),s()),r("punc"))switch(i.token.value){case",":o.push(new vn({start:i.token,end:i.token}));continue;case"]":break;case"[":case"{":o.push(w(e,t));break;default:f()}else r("name")?(e.add_parameter(i.token),o.push(re(t))):c("Invalid function parameter");r("operator","=")&&!1===p&&(e.mark_default_assignment(i.token),s(),o[o.length-1]=new Mt({start:o[o.length-1].start,left:o[o.length-1],operator:"=",right:We(!1),end:i.token})),p&&(r("punc","]")||c("Rest element must be last element"),o[o.length-1]=new Le({start:n,expression:o[o.length-1],end:n}))}return _("]"),e.check_strict(),new Ge({start:d,names:o,is_array:!0,end:u()})}if(r("punc","{")){for(s();!r("punc","}");){if(l?l=!1:_(","),r("expand","...")&&(p=!0,n=i.token,e.mark_spread(i.token),s()),r("name")&&(ie(a(),"punc")||ie(a(),"operator"))&&[",","}","="].includes(a().value)){e.add_parameter(i.token);var m=u(),h=re(t);p?o.push(new Le({start:n,expression:h,end:h.end})):o.push(new Nt({start:m,key:h.name,value:h,end:h.end}))}else{if(r("punc","}"))continue;var E=i.token,g=Q();null===g?f(u()):"name"!==u().type||r("punc",":")?(_(":"),o.push(new Nt({start:E,quote:E.quote,key:g,value:w(e,t),end:u()}))):o.push(new Nt({start:u(),key:g,value:new t({start:u(),name:g,end:u()}),end:u()}))}p?r("punc","}")||c("Rest element must be last element"):r("operator","=")&&(e.mark_default_assignment(i.token),s(),o[o.length-1].value=new Mt({start:o[o.length-1].value.start,left:o[o.length-1].value,operator:"=",right:We(!1),end:i.token}))}return _("}"),e.check_strict(),new Ge({start:d,names:o,is_array:!1,end:u()})}if(r("name"))return e.add_parameter(i.token),re(t);c("Invalid function parameter")}function x(e,n,o,a,u){var c=i.in_loop,l=i.labels,p=i.in_generator,d=i.in_async;if(++i.in_function,n&&(i.in_generator=i.in_function),o&&(i.in_async=i.in_function),u&&function(e){var n=F(!0,i.input.has_directive("use strict"));for(_("(");!r("punc",")");){var o=R(n);if(e.push(o),r("punc",")")||(_(","),r("punc",")")&&t.ecma<2017&&f()),o instanceof Le)break}s()}(u),e&&(i.in_directives=!0),i.in_loop=0,i.labels=[],e){i.input.push_directives_stack();var m=N();a&&te(a),u&&u.forEach(te),i.input.pop_directives_stack()}else m=[new qe({start:i.token,value:We(!1),end:i.token})];return--i.in_function,i.in_loop=c,i.labels=l,i.in_generator=p,i.in_async=d,m}function N(){_("{");for(var e=[];!r("punc","}");)r("eof")&&f(),e.push(A());return s(),e}function k(){_("{");for(var e,t=[],n=null,o=null;!r("punc","}");)r("eof")&&f(),r("keyword","case")?(o&&(o.end=u()),n=[],o=new ot({start:(e=i.token,s(),e),expression:We(!0),body:n}),t.push(o),_(":")):r("keyword","default")?(o&&(o.end=u()),n=[],o=new rt({start:(e=i.token,s(),_(":"),e),body:n}),t.push(o)):(n||f(),n.push(A()));return o&&(o.end=u()),s(),t}function I(e,t){for(var n,o=[];;){var a="var"===t?Xt:"const"===t?Wt:"let"===t?Yt:null;if(r("punc","{")||r("punc","[")?n=new _t({start:i.token,name:w(void 0,a),value:r("operator","=")?(p("operator","="),We(!1,e)):null,end:u()}):"import"==(n=new _t({start:i.token,name:re(a),value:r("operator","=")?(s(),We(!1,e)):e||"const"!==t?null:c("Missing initializer in const declaration"),end:u()})).name.name&&c("Unexpected token: import"),o.push(n),!r("punc",","))break;s()}return o}var L=function(e){return new lt({start:u(),definitions:I(e,"var"),end:u()})},P=function(e){return new ft({start:u(),definitions:I(e,"let"),end:u()})},V=function(e){return new pt({start:u(),definitions:I(e,"const"),end:u()})};function B(){var e,t=i.token;switch(t.type){case"name":e=ee(an);break;case"num":e=new dn({start:t,end:t,value:t.value});break;case"big_int":e=new mn({start:t,end:t,value:t.value});break;case"string":e=new _n({start:t,end:t,value:t.value,quote:t.quote});break;case"regexp":e=new hn({start:t,end:t,value:t.value});break;case"atom":switch(t.value){case"false":e=new yn({start:t,end:t});break;case"true":e=new bn({start:t,end:t});break;case"null":e=new gn({start:t,end:t})}}return s(),e}function K(e,t,n,i){var r=function(e,t){return t?new Mt({start:e.start,left:e,operator:"=",right:t,end:t.end}):e};return e instanceof wt?r(new Ge({start:e.start,end:e.end,is_array:!1,names:e.properties.map(K)}),i):e instanceof Nt?(e.value=K(e.value,0,[e.key]),r(e,i)):e instanceof vn?e:e instanceof Ge?(e.names=e.names.map(K),r(e,i)):e instanceof an?r(new qt({name:e.name,start:e.start,end:e.end}),i):e instanceof Le?(e.expression=K(e.expression),r(e,i)):e instanceof Rt?r(new Ge({start:e.start,end:e.end,is_array:!0,names:e.elements.map(K)}),i):e instanceof Ft?r(K(e.left,void 0,void 0,e.right),i):e instanceof Mt?(e.left=K(e.left,0,[e.left]),e):void c("Invalid function parameter",e.start.line,e.start.col)}var U=function(e,o){if(r("operator","new"))return function(e){var n=i.token;if(p("operator","new"),r("punc","."))return s(),p("name","target"),pe(new Gt({start:n,end:u()}),e);var o,a=U(!1);r("punc","(")?(s(),o=X(")",t.ecma>=2017)):o=[];var c=new gt({start:n,expression:a,args:o,end:u()});return fe(c),pe(c,e)}(e);var c,l=i.token,d=r("name","async")&&"["!=(c=a()).value&&"arrow"!=c.type&&B();if(r("punc")){switch(i.token.value){case"(":if(d&&!e)break;var m=function(e,n){var o,a,c,l=[];for(_("(");!r("punc",")");)o&&f(o),r("expand","...")?(o=i.token,n&&(a=i.token),s(),l.push(new Le({start:u(),expression:We(),end:i.token}))):l.push(We()),r("punc",")")||(_(","),r("punc",")")&&(t.ecma<2017&&f(),c=u(),n&&(a=c)));return _(")"),e&&r("arrow","=>")?o&&c&&f(c):a&&f(a),l}(o,!d);if(o&&r("arrow","=>"))return b(l,m.map(K),!!d);var h=d?new Et({expression:d,args:m}):1==m.length?m[0]:new Dt({expressions:m});if(h.start){const e=l.comments_before.length;if(n.set(l,e),h.start.comments_before.unshift(...l.comments_before),l.comments_before=h.start.comments_before,0==e&&l.comments_before.length>0){var E=l.comments_before[0];E.nlb||(E.nlb=l.nlb,l.nlb=!1)}l.comments_after=h.start.comments_after}h.start=l;var g=u();return h.end&&(g.comments_before=h.end.comments_before,h.end.comments_after.push(...g.comments_after),g.comments_after=h.end.comments_after),h.end=g,h instanceof Et&&fe(h),pe(h,e);case"[":return pe(z(),e);case"{":return pe(Y(),e)}d||f()}if(o&&r("name")&&ie(a(),"arrow")){var D=new qt({name:i.token.value,start:l,end:l});return s(),b(l,[D],!!d)}if(r("keyword","function")){s();var S=O(Be,!1,!!d);return S.start=l,S.end=u(),pe(S,e)}if(d)return pe(d,e);if(r("keyword","class")){s();var v=q(Kt);return v.start=l,v.end=u(),pe(v,e)}return r("template_head")?pe(H(),e):le.has(i.token.type)?pe(B(),e):void f()};function H(){var e=[],t=i.token;for(e.push(new ze({start:i.token,raw:i.token.raw,value:i.token.value,end:i.token}));!i.token.end;)s(),v(),e.push(We(!0)),ie("template_substitution")||f(),e.push(new ze({start:i.token,raw:i.token.raw,value:i.token.value,end:i.token}));return s(),new Xe({start:t,segments:e,end:i.token})}function X(e,t,n){for(var o=!0,a=[];!r("punc",e)&&(o?o=!1:_(","),!t||!r("punc",e));)r("punc",",")&&n?a.push(new vn({start:i.token,end:i.token})):r("expand","...")?(s(),a.push(new Le({start:u(),expression:We(),end:i.token}))):a.push(We(!1));return s(),a}var z=S((function(){return _("["),new Rt({elements:X("]",!t.strict,!0)})})),W=S((e,t)=>O(Ve,e,t)),Y=S((function(){var e=i.token,n=!0,o=[];for(_("{");!r("punc","}")&&(n?n=!1:_(","),t.strict||!r("punc","}"));)if("expand"!=(e=i.token).type){var a,c=Q();if(r("punc",":"))null===c?f(u()):(s(),a=We(!1));else{var l=$(c,e);if(l){o.push(l);continue}a=new an({start:u(),name:c,end:u()})}r("operator","=")&&(s(),a=new Ft({start:e,left:a,operator:"=",right:We(!1),end:u()})),o.push(new Nt({start:e,quote:e.quote,key:c instanceof de?c:""+c,value:a,end:u()}))}else s(),o.push(new Le({start:e,expression:We(!1),end:u()}));return s(),new wt({properties:o})}));function q(e){var t,n,o,a,c=[];for(i.input.push_directives_stack(),i.input.add_directive("use strict"),"name"==i.token.type&&"extends"!=i.token.value&&(o=re(e===Bt?Qt:en)),e!==Bt||o||f(),"extends"==i.token.value&&(s(),a=We(!0)),_("{");r("punc",";");)s();for(;!r("punc","}");)for(t=i.token,(n=$(Q(),t,!0))||f(),c.push(n);r("punc",";");)s();return i.input.pop_directives_stack(),s(),new e({start:t,name:o,extends:a,properties:c,end:u()})}function $(e,t,n){var o=function(e,t){return"string"==typeof e||"number"==typeof e?new jt({start:t,name:""+e,end:u()}):(null===e&&f(),e)};var a=!1,c=!1,l=!1,p=t;if(n&&"static"===e&&!r("punc","(")&&(c=!0,p=i.token,e=Q()),"async"!==e||r("punc","(")||r("punc",",")||r("punc","}")||r("operator","=")||(a=!0,p=i.token,e=Q()),null===e&&(l=!0,p=i.token,null===(e=Q())&&f()),r("punc","("))return e=o(e,t),new Lt({start:t,static:c,is_generator:l,async:a,key:e,quote:e instanceof jt?p.quote:void 0,value:W(l,a),end:u()});const _=i.token;if("get"==e){if(!r("punc")||r("punc","["))return e=o(Q(),t),new It({start:t,static:c,key:e,quote:e instanceof jt?_.quote:void 0,value:W(),end:u()})}else if("set"==e&&(!r("punc")||r("punc","[")))return e=o(Q(),t),new kt({start:t,static:c,key:e,quote:e instanceof jt?_.quote:void 0,value:W(),end:u()});if(n){const n=(e=>"string"==typeof e||"number"==typeof e?new Zt({start:p,end:p,name:""+e}):(null===e&&f(),e))(e),i=n instanceof Zt?p.quote:void 0;if(r("operator","="))return s(),new Vt({start:t,static:c,quote:i,key:n,value:We(!1),end:u()});if(r("name")||r("punc",";")||r("punc","}"))return new Vt({start:t,static:c,quote:i,key:n,end:u()})}}function j(e){function t(e){return new e({name:Q(),start:u(),end:u()})}var n,o,a=e?rn:un,c=e?nn:sn,l=i.token;return e?n=t(a):o=t(c),r("name","as")?(s(),e?o=t(c):n=t(a)):e?o=new c(n):n=new a(o),new dt({start:l,foreign_name:n,name:o,end:u()})}function Z(e,t){var n,r=e?rn:un,o=e?nn:sn,a=i.token,s=u();return t=t||new o({name:"*",start:a,end:s}),n=new r({name:"*",start:a,end:s}),new dt({start:a,foreign_name:n,name:t,end:s})}function J(e){var t;if(r("punc","{")){for(s(),t=[];!r("punc","}");)t.push(j(e)),r("punc",",")&&s();s()}else if(r("operator","*")){var n;s(),e&&r("name","as")&&(s(),n=re(e?nn:un)),t=[Z(e,n)]}return t}function Q(){var e=i.token;switch(e.type){case"punc":if("["===e.value){s();var t=We(!1);return _("]"),t}f(e);case"operator":if("*"===e.value)return s(),null;["delete","in","instanceof","new","typeof","void"].includes(e.value)||f(e);case"name":case"string":case"num":case"big_int":case"keyword":case"atom":return s(),e.value;default:f(e)}}function ee(e){var t=i.token.value;return new("this"==t?ln:"super"==t?fn:e)({name:String(t),start:i.token,end:i.token})}function te(e){var t=e.name;h()&&"yield"==t&&l(e.start,"Yield cannot be used as identifier inside generators"),i.input.has_directive("use strict")&&("yield"==t&&l(e.start,"Unexpected yield identifier inside strict mode"),e instanceof Ht&&("arguments"==t||"eval"==t)&&l(e.start,"Unexpected "+t+" in strict mode"))}function re(e,t){if(!r("name"))return t||c("Name expected"),null;var n=ee(e);return te(n),s(),n}function fe(e){var t=e.start,i=t.comments_before;const r=n.get(t);for(var o=null!=r?r:i.length;--o>=0;){var a=i[o];if(/[@#]__/.test(a.value)){if(/[@#]__PURE__/.test(a.value)){C(e,wn);break}if(/[@#]__INLINE__/.test(a.value)){C(e,xn);break}if(/[@#]__NOINLINE__/.test(a.value)){C(e,Nn);break}}}}var pe=function(e,t){var n,o=e.start;if(r("punc","."))return s(),pe(new vt({start:o,expression:e,property:(n=i.token,"name"!=n.type&&f(),s(),n.value),end:u()}),t);if(r("punc","[")){s();var a=We(!0);return _("]"),pe(new At({start:o,expression:e,property:a,end:u()}),t)}if(t&&r("punc","(")){s();var c=new Et({start:o,expression:e,args:_e(),end:u()});return fe(c),pe(c,!0)}return r("template_head")?pe(new He({start:o,prefix:e,template_string:H(),end:u()}),t):e};function _e(){for(var e=[];!r("punc",")");)r("expand","...")?(s(),e.push(new Le({start:u(),expression:We(!1),end:u()}))):e.push(We(!1)),r("punc",")")||(_(","),r("punc",")")&&t.ecma<2017&&f());return s(),e}var me=function(e,t){var n=i.token;if("name"==n.type&&"await"==n.value){if(E())return s(),E()||c("Unexpected await expression outside async function",i.prev.line,i.prev.col,i.prev.pos),new Qe({start:u(),end:i.token,expression:me(!0)});i.input.has_directive("use strict")&&l(i.token,"Unexpected await identifier inside strict mode")}if(r("operator")&&ae.has(n.value)){s(),v();var o=De(yt,n,me(e));return o.start=n,o.end=u(),o}for(var a=U(e,t);r("operator")&&se.has(i.token.value)&&!d(i.token);)a instanceof Ke&&f(),(a=De(bt,i.token,a)).start=n,a.end=i.token,s();return a};function De(e,t,n){var r=t.value;switch(r){case"++":case"--":ye(n)||c("Invalid use of "+r+" operator",t.line,t.col,t.pos);break;case"delete":n instanceof an&&i.input.has_directive("use strict")&&c("Calling delete on expression not allowed in strict mode",n.start.line,n.start.col,n.start.pos)}return new e({operator:r,expression:n})}var Se=function(e,t,n){var o=r("operator")?i.token.value:null;"in"==o&&n&&(o=null),"**"==o&&e instanceof yt&&!ie(e.start,"punc","(")&&"--"!==e.operator&&"++"!==e.operator&&f(e.start);var a=null!=o?ce[o]:null;if(null!=a&&(a>t||"**"===o&&t===a)){s();var u=Se(me(!0),a,n);return Se(new Ct({start:e.start,left:e,operator:o,right:u,end:u.end}),t,n)}return e};var ve=function(e){var t=i.token,n=function(e){return Se(me(!0,!0),0,e)}(e);if(r("operator","?")){s();var o=We(!1);return _(":"),new Ot({start:t,condition:n,consequent:o,alternative:We(!1,e),end:u()})}return n};function ye(e){return e instanceof St||e instanceof an}function Oe(e){if(e instanceof wt)e=new Ge({start:e.start,names:e.properties.map(Oe),is_array:!1,end:e.end});else if(e instanceof Rt){for(var t=[],n=0;n=0;)o+="this."+t[a]+" = props."+t[a]+";";const s=i&&Object.create(i.prototype);(s&&s.initialize||n&&n.initialize)&&(o+="this.initialize();"),o+="}",o+="this.flags = 0;",o+="}";var u=new Function(o)();if(s&&(u.prototype=s,u.BASE=i),i&&i.SUBCLASSES.push(u),u.prototype.CTOR=u,u.prototype.constructor=u,u.PROPS=t||null,u.SELF_PROPS=r,u.SUBCLASSES=[],e&&(u.prototype.TYPE=u.TYPE=e),n)for(a in n)D(n,a)&&("$"===a[0]?u[a.substr(1)]=n[a]:u.prototype[a]=n[a]);return u.DEFMETHOD=function(e,t){this.prototype[e]=t},u}var _e=pe("Token","type value line col pos endline endcol endpos nlb comments_before comments_after file raw quote end",{},null),de=pe("Node","start end",{_clone:function(e){if(e){var t=this.clone();return t.transform(new Rn((function(e){if(e!==t)return e.clone(!0)})))}return new this.CTOR(this)},clone:function(e){return this._clone(e)},$documentation:"Base class of all AST nodes",$propdoc:{start:"[AST_Token] The first token of this node",end:"[AST_Token] The last token of this node"},_walk:function(e){return e._visit(this)},walk:function(e){return this._walk(e)},_children_backwards:()=>{}},null);de.warn_function=null,de.warn=function(e,t){de.warn_function&&de.warn_function(d(e,t))};var me=pe("Statement",null,{$documentation:"Base class of all statements"}),he=pe("Debugger",null,{$documentation:"Represents a debugger statement"},me),Ee=pe("Directive","value quote",{$documentation:'Represents a directive, like "use strict";',$propdoc:{value:"[string] The value of this directive as a plain string (it's not an AST_String!)",quote:"[string] the original quote character"}},me),ge=pe("SimpleStatement","body",{$documentation:"A statement consisting of an expression, i.e. a = 1 + 2",$propdoc:{body:"[AST_Node] an expression node (should not be instanceof AST_Statement)"},_walk:function(e){return e._visit(this,(function(){this.body._walk(e)}))},_children_backwards(e){e(this.body)}},me);function De(e,t){const n=e.body;for(var i=0,r=n.length;i SymbolDef for all variables/functions defined in this scope",functions:"[Map/S] like `variables`, but only lists function declarations",uses_with:"[boolean/S] tells whether this scope uses the `with` statement",uses_eval:"[boolean/S] tells whether this scope contains a direct call to the global `eval`",parent_scope:"[AST_Scope?/S] link to the parent scope",enclosed:"[SymbolDef*/S] a list of all symbol definitions that are accessed from this scope or any subscopes",cname:"[integer/S] current index for mangling variables (used internally by the mangler)"},get_defun_scope:function(){for(var e=this;e.is_block_scope();)e=e.parent_scope;return e},clone:function(e){var t=this._clone(e);return this.variables&&(t.variables=new Map(this.variables)),this.functions&&(t.functions=new Map(this.functions)),this.enclosed&&(t.enclosed=this.enclosed.slice()),this._block_scope&&(t._block_scope=this._block_scope),t},pinned:function(){return this.uses_eval||this.uses_with}},ve),Ie=pe("Toplevel","globals",{$documentation:"The toplevel scope",$propdoc:{globals:"[Map/S] a map of name -> SymbolDef for all undeclared names"},wrap_commonjs:function(e){var t=this.body,n="(function(exports){'$ORIG';})(typeof "+e+"=='undefined'?("+e+"={}):"+e+");";return n=(n=fe(n)).transform(new Rn((function(e){if(e instanceof Ee&&"$ORIG"==e.value)return f.splice(t)})))},wrap_enclose:function(e){"string"!=typeof e&&(e="");var t=e.indexOf(":");t<0&&(t=e.length);var n=this.body;return fe(["(function(",e.slice(0,t),'){"$ORIG"})(',e.slice(t+1),")"].join("")).transform(new Rn((function(e){if(e instanceof Ee&&"$ORIG"==e.value)return f.splice(n)})))}},ke),Le=pe("Expansion","expression",{$documentation:"An expandible argument, such as ...rest, a splat, such as [1,2,...all], or an expansion in a variable declaration, such as var [first, ...rest] = list",$propdoc:{expression:"[AST_Node] the thing to be expanded"},_walk:function(e){return e._visit(this,(function(){this.expression.walk(e)}))},_children_backwards(e){e(this.expression)}}),Pe=pe("Lambda","name argnames uses_arguments is_generator async",{$documentation:"Base class for functions",$propdoc:{name:"[AST_SymbolDeclaration?] the name of this function",argnames:"[AST_SymbolFunarg|AST_Destructuring|AST_Expansion|AST_DefaultAssign*] array of function arguments, destructurings, or expanding arguments",uses_arguments:"[boolean/S] tells whether this function accesses the arguments array",is_generator:"[boolean] is this a generator method",async:"[boolean] is this method async"},args_as_names:function(){for(var e=[],t=0;t b)"},Pe),Ue=pe("Defun",null,{$documentation:"A function definition"},Pe),Ge=pe("Destructuring","names is_array",{$documentation:"A destructuring of several names. Used in destructuring assignment and with destructuring function argument names",$propdoc:{names:"[AST_Node*] Array of properties or elements",is_array:"[Boolean] Whether the destructuring represents an object or array"},_walk:function(e){return e._visit(this,(function(){this.names.forEach((function(t){t._walk(e)}))}))},_children_backwards(e){let t=this.names.length;for(;t--;)e(this.names[t])},all_symbols:function(){var e=[];return this.walk(new Mn((function(t){t instanceof Ut&&e.push(t)}))),e}}),He=pe("PrefixedTemplateString","template_string prefix",{$documentation:"A templatestring with a prefix, such as String.raw`foobarbaz`",$propdoc:{template_string:"[AST_TemplateString] The template string",prefix:"[AST_SymbolRef|AST_PropAccess] The prefix, which can be a symbol such as `foo` or a dotted expression such as `String.raw`."},_walk:function(e){return e._visit(this,(function(){this.prefix._walk(e),this.template_string._walk(e)}))},_children_backwards(e){e(this.template_string),e(this.prefix)}}),Xe=pe("TemplateString","segments",{$documentation:"A template string literal",$propdoc:{segments:"[AST_Node*] One or more segments, starting with AST_TemplateSegment. AST_Node may follow AST_TemplateSegment, but each AST_Node must be followed by AST_TemplateSegment."},_walk:function(e){return e._visit(this,(function(){this.segments.forEach((function(t){t._walk(e)}))}))},_children_backwards(e){let t=this.segments.length;for(;t--;)e(this.segments[t])}}),ze=pe("TemplateSegment","value raw",{$documentation:"A segment of a template string literal",$propdoc:{value:"Content of the segment",raw:"Raw content of the segment"}}),We=pe("Jump",null,{$documentation:"Base class for “jumps” (for now that's `return`, `throw`, `break` and `continue`)"},me),Ye=pe("Exit","value",{$documentation:"Base class for “exits” (`return` and `throw`)",$propdoc:{value:"[AST_Node?] the value returned or thrown by this statement; could be null for AST_Return"},_walk:function(e){return e._visit(this,this.value&&function(){this.value._walk(e)})},_children_backwards(e){this.value&&e(this.value)}},We),qe=pe("Return",null,{$documentation:"A `return` statement"},Ye),$e=pe("Throw",null,{$documentation:"A `throw` statement"},Ye),je=pe("LoopControl","label",{$documentation:"Base class for loop control statements (`break` and `continue`)",$propdoc:{label:"[AST_LabelRef?] the label, or null if none"},_walk:function(e){return e._visit(this,this.label&&function(){this.label._walk(e)})},_children_backwards(e){this.label&&e(this.label)}},We),Ze=pe("Break",null,{$documentation:"A `break` statement"},je),Je=pe("Continue",null,{$documentation:"A `continue` statement"},je),Qe=pe("Await","expression",{$documentation:"An `await` statement",$propdoc:{expression:"[AST_Node] the mandatory expression being awaited"},_walk:function(e){return e._visit(this,(function(){this.expression._walk(e)}))},_children_backwards(e){e(this.expression)}}),et=pe("Yield","expression is_star",{$documentation:"A `yield` statement",$propdoc:{expression:"[AST_Node?] the value returned or thrown by this statement; could be null (representing undefined) but only when is_star is set to false",is_star:"[Boolean] Whether this is a yield or yield* statement"},_walk:function(e){return e._visit(this,this.expression&&function(){this.expression._walk(e)})},_children_backwards(e){this.expression&&e(this.expression)}}),tt=pe("If","condition alternative",{$documentation:"A `if` statement",$propdoc:{condition:"[AST_Node] the `if` condition",alternative:"[AST_Statement?] the `else` part, or null if not present"},_walk:function(e){return e._visit(this,(function(){this.condition._walk(e),this.body._walk(e),this.alternative&&this.alternative._walk(e)}))},_children_backwards(e){this.alternative&&e(this.alternative),e(this.body),e(this.condition)}},ye),nt=pe("Switch","expression",{$documentation:"A `switch` statement",$propdoc:{expression:"[AST_Node] the `switch` “discriminant”"},_walk:function(e){return e._visit(this,(function(){this.expression._walk(e),De(this,e)}))},_children_backwards(e){let t=this.body.length;for(;t--;)e(this.body[t]);e(this.expression)}},ve),it=pe("SwitchBranch",null,{$documentation:"Base class for `switch` branches"},ve),rt=pe("Default",null,{$documentation:"A `default` switch branch"},it),ot=pe("Case","expression",{$documentation:"A `case` switch branch",$propdoc:{expression:"[AST_Node] the `case` expression"},_walk:function(e){return e._visit(this,(function(){this.expression._walk(e),De(this,e)}))},_children_backwards(e){let t=this.body.length;for(;t--;)e(this.body[t]);e(this.expression)}},it),at=pe("Try","bcatch bfinally",{$documentation:"A `try` statement",$propdoc:{bcatch:"[AST_Catch?] the catch block, or null if not present",bfinally:"[AST_Finally?] the finally block, or null if not present"},_walk:function(e){return e._visit(this,(function(){De(this,e),this.bcatch&&this.bcatch._walk(e),this.bfinally&&this.bfinally._walk(e)}))},_children_backwards(e){this.bfinally&&e(this.bfinally),this.bcatch&&e(this.bcatch);let t=this.body.length;for(;t--;)e(this.body[t])}},ve),st=pe("Catch","argname",{$documentation:"A `catch` node; only makes sense as part of a `try` statement",$propdoc:{argname:"[AST_SymbolCatch|AST_Destructuring|AST_Expansion|AST_DefaultAssign] symbol for the exception"},_walk:function(e){return e._visit(this,(function(){this.argname&&this.argname._walk(e),De(this,e)}))},_children_backwards(e){let t=this.body.length;for(;t--;)e(this.body[t]);this.argname&&e(this.argname)}},ve),ut=pe("Finally",null,{$documentation:"A `finally` node; only makes sense as part of a `try` statement"},ve),ct=pe("Definitions","definitions",{$documentation:"Base class for `var` or `const` nodes (variable declarations/initializations)",$propdoc:{definitions:"[AST_VarDef*] array of variable definitions"},_walk:function(e){return e._visit(this,(function(){for(var t=this.definitions,n=0,i=t.length;n a`"},Ct),Rt=pe("Array","elements",{$documentation:"An array literal",$propdoc:{elements:"[AST_Node*] array of elements"},_walk:function(e){return e._visit(this,(function(){for(var t=this.elements,n=0,i=t.length;nt._walk(e))}))},_children_backwards(e){let t=this.properties.length;for(;t--;)e(this.properties[t]);this.extends&&e(this.extends),this.name&&e(this.name)}},ke),Vt=pe("ClassProperty","static quote",{$documentation:"A class property",$propdoc:{static:"[boolean] whether this is a static key",quote:"[string] which quote is being used"},_walk:function(e){return e._visit(this,(function(){this.key instanceof de&&this.key._walk(e),this.value instanceof de&&this.value._walk(e)}))},_children_backwards(e){this.value instanceof de&&e(this.value),this.key instanceof de&&e(this.key)},computed_key(){return!(this.key instanceof Zt)}},xt),Bt=pe("DefClass",null,{$documentation:"A class definition"},Pt),Kt=pe("ClassExpression",null,{$documentation:"A class expression."},Pt),Ut=pe("Symbol","scope name thedef",{$propdoc:{name:"[string] name of this symbol",scope:"[AST_Scope/S] the current scope (not necessarily the definition scope)",thedef:"[SymbolDef/S] the definition of this symbol"},$documentation:"Base class for all symbols"}),Gt=pe("NewTarget",null,{$documentation:"A reference to new.target"}),Ht=pe("SymbolDeclaration","init",{$documentation:"A declaration symbol (symbol in var/const, function name or argument, symbol in catch)"},Ut),Xt=pe("SymbolVar",null,{$documentation:"Symbol defining a variable"},Ht),zt=pe("SymbolBlockDeclaration",null,{$documentation:"Base class for block-scoped declaration symbols"},Ht),Wt=pe("SymbolConst",null,{$documentation:"A constant declaration"},zt),Yt=pe("SymbolLet",null,{$documentation:"A block-scoped `let` declaration"},zt),qt=pe("SymbolFunarg",null,{$documentation:"Symbol naming a function argument"},Xt),$t=pe("SymbolDefun",null,{$documentation:"Symbol defining a function"},Ht),jt=pe("SymbolMethod",null,{$documentation:"Symbol in an object defining a method"},Ut),Zt=pe("SymbolClassProperty",null,{$documentation:"Symbol for a class property"},Ut),Jt=pe("SymbolLambda",null,{$documentation:"Symbol naming a function expression"},Ht),Qt=pe("SymbolDefClass",null,{$documentation:"Symbol naming a class's name in a class declaration. Lexically scoped to its containing scope, and accessible within the class."},zt),en=pe("SymbolClass",null,{$documentation:"Symbol naming a class's name. Lexically scoped to the class."},Ht),tn=pe("SymbolCatch",null,{$documentation:"Symbol naming the exception in catch"},zt),nn=pe("SymbolImport",null,{$documentation:"Symbol referring to an imported name"},zt),rn=pe("SymbolImportForeign",null,{$documentation:"A symbol imported from a module, but it is defined in the other module, and its real name is irrelevant for this module's purposes"},Ut),on=pe("Label","references",{$documentation:"Symbol naming a label (declaration)",$propdoc:{references:"[AST_LoopControl*] a list of nodes referring to this label"},initialize:function(){this.references=[],this.thedef=this}},Ut),an=pe("SymbolRef",null,{$documentation:"Reference to some symbol (not definition/declaration)"},Ut),sn=pe("SymbolExport",null,{$documentation:"Symbol referring to a name to export"},an),un=pe("SymbolExportForeign",null,{$documentation:"A symbol exported from this module, but it is used in the other module, and its real name is irrelevant for this module's purposes"},Ut),cn=pe("LabelRef",null,{$documentation:"Reference to a label symbol"},Ut),ln=pe("This",null,{$documentation:"The `this` symbol"},Ut),fn=pe("Super",null,{$documentation:"The `super` symbol"},ln),pn=pe("Constant",null,{$documentation:"Base class for all constants",getValue:function(){return this.value}}),_n=pe("String","value quote",{$documentation:"A string literal",$propdoc:{value:"[string] the contents of this string",quote:"[string] the original quote character"}},pn),dn=pe("Number","value literal",{$documentation:"A number literal",$propdoc:{value:"[number] the numeric value",literal:"[string] numeric value as string (optional)"}},pn),mn=pe("BigInt","value",{$documentation:"A big int literal",$propdoc:{value:"[string] big int value"}},pn),hn=pe("RegExp","value",{$documentation:"A regexp literal",$propdoc:{value:"[RegExp] the actual regexp"}},pn),En=pe("Atom",null,{$documentation:"Base class for atoms"},pn),gn=pe("Null",null,{$documentation:"The `null` atom",value:null},En),Dn=pe("NaN",null,{$documentation:"The impossible value",value:NaN},En),Sn=pe("Undefined",null,{$documentation:"The `undefined` value",value:void 0},En),vn=pe("Hole",null,{$documentation:"A hole in an array",value:void 0},En),An=pe("Infinity",null,{$documentation:"The `Infinity` value",value:1/0},En),Tn=pe("Boolean",null,{$documentation:"Base class for booleans"},En),yn=pe("False",null,{$documentation:"The `false` atom",value:!1},Tn),bn=pe("True",null,{$documentation:"The `true` atom",value:!0},Tn);function Cn(e,t,n=[e]){const i=n.push.bind(n);for(;n.length;){const e=n.pop(),r=t(e,n);if(r){if(r===Fn)return!0}else e._children_backwards(i)}return!1}function On(e,t,n){const i=[e],r=i.push.bind(i),o=n?n.slice():[],a=[];let s;const u={parent:(e=0)=>-1===e?s:n&&e>=o.length?(e-=o.length,n[n.length-(e+1)]):o[o.length-(1+e)]};for(;i.length;){for(s=i.pop();a.length&&i.length==a[a.length-1];)o.pop(),a.pop();const e=t(s,u);if(e){if(e===Fn)return!0;continue}const n=i.length;s._children_backwards(r),i.length>n&&(o.push(s),a.push(n-1))}return!1}const Fn=Symbol("abort walk");class Mn{constructor(e){this.visit=e,this.stack=[],this.directives=Object.create(null)}_visit(e,t){this.push(e);var n=this.visit(e,t?function(){t.call(e)}:a);return!n&&t&&t.call(e),this.pop(),n}parent(e){return this.stack[this.stack.length-2-(e||0)]}push(e){e instanceof Pe?this.directives=Object.create(this.directives):e instanceof Ee&&!this.directives[e.value]?this.directives[e.value]=e:e instanceof Pt&&(this.directives=Object.create(this.directives),this.directives["use strict"]||(this.directives["use strict"]=e)),this.stack.push(e)}pop(){var e=this.stack.pop();(e instanceof Pe||e instanceof Pt)&&(this.directives=Object.getPrototypeOf(this.directives))}self(){return this.stack[this.stack.length-1]}find_parent(e){for(var t=this.stack,n=t.length;--n>=0;){var i=t[n];if(i instanceof e)return i}}has_directive(e){var t=this.directives[e];if(t)return t;var n=this.stack[this.stack.length-1];if(n instanceof ke&&n.body)for(var i=0;i=0;){if((i=t[n])instanceof be&&i.label.name==e.label.name)return i.body}else for(n=t.length;--n>=0;){var i;if((i=t[n])instanceof Ce||e instanceof Ze&&i instanceof nt)return i}}}class Rn extends Mn{constructor(e,t){super(),this.before=e,this.after=t}}const wn=1,xn=2,Nn=4;var kn=Object.freeze({__proto__:null,AST_Accessor:Ve,AST_Array:Rt,AST_Arrow:Ke,AST_Assign:Ft,AST_Atom:En,AST_Await:Qe,AST_BigInt:mn,AST_Binary:Ct,AST_Block:ve,AST_BlockStatement:Ae,AST_Boolean:Tn,AST_Break:Ze,AST_Call:Et,AST_Case:ot,AST_Catch:st,AST_Class:Pt,AST_ClassExpression:Kt,AST_ClassProperty:Vt,AST_ConciseMethod:Lt,AST_Conditional:Ot,AST_Const:pt,AST_Constant:pn,AST_Continue:Je,AST_Debugger:he,AST_Default:rt,AST_DefaultAssign:Mt,AST_DefClass:Bt,AST_Definitions:ct,AST_Defun:Ue,AST_Destructuring:Ge,AST_Directive:Ee,AST_Do:Fe,AST_Dot:vt,AST_DWLoop:Oe,AST_EmptyStatement:Te,AST_Exit:Ye,AST_Expansion:Le,AST_Export:ht,AST_False:yn,AST_Finally:ut,AST_For:Re,AST_ForIn:we,AST_ForOf:xe,AST_Function:Be,AST_Hole:vn,AST_If:tt,AST_Import:mt,AST_Infinity:An,AST_IterationStatement:Ce,AST_Jump:We,AST_Label:on,AST_LabeledStatement:be,AST_LabelRef:cn,AST_Lambda:Pe,AST_Let:ft,AST_LoopControl:je,AST_NameMapping:dt,AST_NaN:Dn,AST_New:gt,AST_NewTarget:Gt,AST_Node:de,AST_Null:gn,AST_Number:dn,AST_Object:wt,AST_ObjectGetter:It,AST_ObjectKeyVal:Nt,AST_ObjectProperty:xt,AST_ObjectSetter:kt,AST_PrefixedTemplateString:He,AST_PropAccess:St,AST_RegExp:hn,AST_Return:qe,AST_Scope:ke,AST_Sequence:Dt,AST_SimpleStatement:ge,AST_Statement:me,AST_StatementWithBody:ye,AST_String:_n,AST_Sub:At,AST_Super:fn,AST_Switch:nt,AST_SwitchBranch:it,AST_Symbol:Ut,AST_SymbolBlockDeclaration:zt,AST_SymbolCatch:tn,AST_SymbolClass:en,AST_SymbolClassProperty:Zt,AST_SymbolConst:Wt,AST_SymbolDeclaration:Ht,AST_SymbolDefClass:Qt,AST_SymbolDefun:$t,AST_SymbolExport:sn,AST_SymbolExportForeign:un,AST_SymbolFunarg:qt,AST_SymbolImport:nn,AST_SymbolImportForeign:rn,AST_SymbolLambda:Jt,AST_SymbolLet:Yt,AST_SymbolMethod:jt,AST_SymbolRef:an,AST_SymbolVar:Xt,AST_TemplateSegment:ze,AST_TemplateString:Xe,AST_This:ln,AST_Throw:$e,AST_Token:_e,AST_Toplevel:Ie,AST_True:bn,AST_Try:at,AST_Unary:Tt,AST_UnaryPostfix:bt,AST_UnaryPrefix:yt,AST_Undefined:Sn,AST_Var:lt,AST_VarDef:_t,AST_While:Me,AST_With:Ne,AST_Yield:et,TreeTransformer:Rn,TreeWalker:Mn,walk:Cn,walk_abort:Fn,walk_body:De,walk_parent:On,_INLINE:xn,_NOINLINE:Nn,_PURE:wn});function In(e,t){e.DEFMETHOD("transform",(function(e,n){let i=void 0;if(e.push(this),e.before&&(i=e.before(this,t,n)),void 0===i&&(i=this,t(i,e),e.after)){const t=e.after(i,n);void 0!==t&&(i=t)}return e.pop(),i}))}function Ln(e,t){return f(e,(function(e){return e.transform(t,!0)}))}function Pn(e){let t=e.parent(-1);for(let n,i=0;n=e.parent(i);i++){if(n instanceof me&&n.body===t)return!0;if(!(n instanceof Dt&&n.expressions[0]===t||"Call"===n.TYPE&&n.expression===t||n instanceof He&&n.prefix===t||n instanceof vt&&n.expression===t||n instanceof At&&n.expression===t||n instanceof Ot&&n.condition===t||n instanceof Ct&&n.left===t||n instanceof bt&&n.expression===t))return!1;t=n}}In(de,a),In(be,(function(e,t){e.label=e.label.transform(t),e.body=e.body.transform(t)})),In(ge,(function(e,t){e.body=e.body.transform(t)})),In(ve,(function(e,t){e.body=Ln(e.body,t)})),In(Fe,(function(e,t){e.body=e.body.transform(t),e.condition=e.condition.transform(t)})),In(Me,(function(e,t){e.condition=e.condition.transform(t),e.body=e.body.transform(t)})),In(Re,(function(e,t){e.init&&(e.init=e.init.transform(t)),e.condition&&(e.condition=e.condition.transform(t)),e.step&&(e.step=e.step.transform(t)),e.body=e.body.transform(t)})),In(we,(function(e,t){e.init=e.init.transform(t),e.object=e.object.transform(t),e.body=e.body.transform(t)})),In(Ne,(function(e,t){e.expression=e.expression.transform(t),e.body=e.body.transform(t)})),In(Ye,(function(e,t){e.value&&(e.value=e.value.transform(t))})),In(je,(function(e,t){e.label&&(e.label=e.label.transform(t))})),In(tt,(function(e,t){e.condition=e.condition.transform(t),e.body=e.body.transform(t),e.alternative&&(e.alternative=e.alternative.transform(t))})),In(nt,(function(e,t){e.expression=e.expression.transform(t),e.body=Ln(e.body,t)})),In(ot,(function(e,t){e.expression=e.expression.transform(t),e.body=Ln(e.body,t)})),In(at,(function(e,t){e.body=Ln(e.body,t),e.bcatch&&(e.bcatch=e.bcatch.transform(t)),e.bfinally&&(e.bfinally=e.bfinally.transform(t))})),In(st,(function(e,t){e.argname&&(e.argname=e.argname.transform(t)),e.body=Ln(e.body,t)})),In(ct,(function(e,t){e.definitions=Ln(e.definitions,t)})),In(_t,(function(e,t){e.name=e.name.transform(t),e.value&&(e.value=e.value.transform(t))})),In(Ge,(function(e,t){e.names=Ln(e.names,t)})),In(Pe,(function(e,t){e.name&&(e.name=e.name.transform(t)),e.argnames=Ln(e.argnames,t),e.body instanceof de?e.body=e.body.transform(t):e.body=Ln(e.body,t)})),In(Et,(function(e,t){e.expression=e.expression.transform(t),e.args=Ln(e.args,t)})),In(Dt,(function(e,t){const n=Ln(e.expressions,t);e.expressions=n.length?n:[new dn({value:0})]})),In(vt,(function(e,t){e.expression=e.expression.transform(t)})),In(At,(function(e,t){e.expression=e.expression.transform(t),e.property=e.property.transform(t)})),In(et,(function(e,t){e.expression&&(e.expression=e.expression.transform(t))})),In(Qe,(function(e,t){e.expression=e.expression.transform(t)})),In(Tt,(function(e,t){e.expression=e.expression.transform(t)})),In(Ct,(function(e,t){e.left=e.left.transform(t),e.right=e.right.transform(t)})),In(Ot,(function(e,t){e.condition=e.condition.transform(t),e.consequent=e.consequent.transform(t),e.alternative=e.alternative.transform(t)})),In(Rt,(function(e,t){e.elements=Ln(e.elements,t)})),In(wt,(function(e,t){e.properties=Ln(e.properties,t)})),In(xt,(function(e,t){e.key instanceof de&&(e.key=e.key.transform(t)),e.value&&(e.value=e.value.transform(t))})),In(Pt,(function(e,t){e.name&&(e.name=e.name.transform(t)),e.extends&&(e.extends=e.extends.transform(t)),e.properties=Ln(e.properties,t)})),In(Le,(function(e,t){e.expression=e.expression.transform(t)})),In(dt,(function(e,t){e.foreign_name=e.foreign_name.transform(t),e.name=e.name.transform(t)})),In(mt,(function(e,t){e.imported_name&&(e.imported_name=e.imported_name.transform(t)),e.imported_names&&Ln(e.imported_names,t),e.module_name=e.module_name.transform(t)})),In(ht,(function(e,t){e.exported_definition&&(e.exported_definition=e.exported_definition.transform(t)),e.exported_value&&(e.exported_value=e.exported_value.transform(t)),e.exported_names&&Ln(e.exported_names,t),e.module_name&&(e.module_name=e.module_name.transform(t))})),In(Xe,(function(e,t){e.segments=Ln(e.segments,t)})),In(He,(function(e,t){e.prefix=e.prefix.transform(t),e.template_string=e.template_string.transform(t)}));const Vn=/^$|[;{][\s\n]*$/,Bn=/[@#]__(PURE|INLINE|NOINLINE)__/g;function Kn(e){return("comment2"===e.type||"comment1"===e.type)&&/@preserve|@lic|@cc_on|^\**!/i.test(e.value)}function Un(e){var t=!e;void 0===(e=o(e,{ascii_only:!1,beautify:!1,braces:!1,comments:"some",ecma:5,ie8:!1,indent_level:4,indent_start:0,inline_script:!0,keep_numbers:!1,keep_quoted_props:!1,max_line_len:!1,preamble:null,preserve_annotations:!1,quote_keys:!1,quote_style:0,safari10:!1,semicolons:!0,shebang:!0,shorthand:void 0,source_map:null,webkit:!1,width:80,wrap_iife:!1,wrap_func_args:!0},!0)).shorthand&&(e.shorthand=e.ecma>5);var n=s;if(e.comments){let t=e.comments;if("string"==typeof e.comments&&/^\/.*\/[a-zA-Z]*$/.test(e.comments)){var i=e.comments.lastIndexOf("/");t=new RegExp(e.comments.substr(1,i-1),e.comments.substr(i+1))}n=t instanceof RegExp?function(e){return"comment5"!=e.type&&t.test(e.value)}:"function"==typeof t?function(e){return"comment5"!=e.type&&t(this,e)}:"some"===t?Kn:u}var r=0,c=0,l=1,f=0,p="";let _=new Set;var d=e.ascii_only?function(t,n){return e.ecma>=2015&&(t=t.replace(/[\ud800-\udbff][\udc00-\udfff]/g,(function(e){return"\\u{"+function(e,t){return Y(e.charCodeAt(t))?65536+(e.charCodeAt(t)-55296<<10)+e.charCodeAt(t+1)-56320:e.charCodeAt(t)}(e,0).toString(16)+"}"}))),t.replace(/[\u0000-\u001f\u007f-\uffff]/g,(function(e){var t=e.charCodeAt(0).toString(16);if(t.length<=2&&!n){for(;t.length<2;)t="0"+t;return"\\x"+t}for(;t.length<4;)t="0"+t;return"\\u"+t}))}:function(e){return e.replace(/[\ud800-\udbff][\udc00-\udfff]|([\ud800-\udbff]|[\udc00-\udfff])/g,(function(e,t){return t?"\\u"+t.charCodeAt(0).toString(16):e}))};function m(t,n){var i=function(t,n){var i=0,r=0;function o(){return"'"+t.replace(/\x27/g,"\\'")+"'"}function a(){return'"'+t.replace(/\x22/g,'\\"')+'"'}if(t=t.replace(/[\\\b\f\n\r\v\t\x22\x27\u2028\u2029\0\ufeff]/g,(function(n,o){switch(n){case'"':return++i,'"';case"'":return++r,"'";case"\\":return"\\\\";case"\n":return"\\n";case"\r":return"\\r";case"\t":return"\\t";case"\b":return"\\b";case"\f":return"\\f";case"\v":return e.ie8?"\\x0B":"\\v";case"\u2028":return"\\u2028";case"\u2029":return"\\u2029";case"\ufeff":return"\\ufeff";case"\0":return/[0-9]/.test(W(t,o+1))?"\\x00":"\\0"}return n})),t=d(t),"`"===n)return"`"+t.replace(/`/g,"\\`")+"`";switch(e.quote_style){case 1:return o();case 2:return a();case 3:return"'"==n?o():a();default:return i>r?o():a()}}(t,n);return e.inline_script&&(i=(i=(i=i.replace(/<\x2f(script)([>\/\t\n\f\r ])/gi,"<\\/$1$2")).replace(/\x3c!--/g,"\\x3c!--")).replace(/--\x3e/g,"--\\x3e")),i}var h,g,D=!1,S=!1,v=!1,A=0,T=!1,y=!1,b=-1,C="",O=e.source_map&&[],F=O?function(){O.forEach((function(t){try{e.source_map.add(t.token.file,t.line,t.col,t.token.line,t.token.col,t.name||"name"!=t.token.type?t.name:t.token.value)}catch(e){null!=t.token.file&&de.warn("Couldn't figure out mapping for {file}:{line},{col} → {cline},{ccol} [{name}]",{file:t.token.file,line:t.token.line,col:t.token.col,cline:t.line,ccol:t.col,name:t.name||""})}})),O=[]}:a,M=e.max_line_len?function(){if(c>e.max_line_len){if(A){var t=p.slice(0,A),n=p.slice(A);if(O){var i=n.length-c;O.forEach((function(e){e.line++,e.col+=i}))}p=t+"\n"+n,l++,f++,c=n.length}c>e.max_line_len&&de.warn("Output exceeds {max_line_len} characters",e)}A&&(A=0,F())}:a,R=E("( [ + * / - , . `");function w(t){var n=W(t=String(t),0);T&&n&&(T=!1,"\n"!==n&&(w("\n"),N())),y&&n&&(y=!1,/[\s;})]/.test(n)||x()),b=-1;var i=C.charAt(C.length-1);v&&(v=!1,(":"!==i||"}"!==n)&&(n&&";}".includes(n)||";"===i)||(e.semicolons||R.has(n)?(p+=";",c++,f++):(M(),c>0&&(p+="\n",f++,l++,c=0),/^\s+$/.test(t)&&(v=!0)),e.beautify||(S=!1))),S&&((Z(i)&&(Z(n)||"\\"==n)||"/"==n&&n==i||("+"==n||"-"==n)&&n==C)&&(p+=" ",c++,f++),S=!1),h&&(O.push({token:h,name:g,line:l,col:c}),h=!1,A||F()),p+=t,D="("==t[t.length-1],f+=t.length;var r=t.split(/\r?\n/),o=r.length-1;l+=o,c+=r[0].length,o>0&&(M(),c=r[o].length),C=t}var x=e.beautify?function(){w(" ")}:function(){S=!0},N=e.beautify?function(t){var n;e.beautify&&w((n=t?.5:0," ".repeat(e.indent_start+r-n*e.indent_level)))}:a,k=e.beautify?function(e,t){!0===e&&(e=V());var n=r;r=e;var i=t();return r=n,i}:function(e,t){return t()},I=e.beautify?function(){if(b<0)return w("\n");"\n"!=p[b]&&(p=p.slice(0,b)+"\n"+p.slice(b),f++,l++),b++}:e.max_line_len?function(){M(),A=p.length}:a,L=e.beautify?function(){w(";")}:function(){v=!0};function P(){v=!1,w(";")}function V(){return r+e.indent_level}function B(){return A&&M(),p}function K(){let e=p.length-1;for(;e>=0;){const t=p.charCodeAt(e);if(10===t)return!0;if(32!==t)return!1;e--}return!0}function U(t){return e.preserve_annotations||(t=t.replace(Bn," ")),/^\s*$/.test(t)?"":t.replace(/(<\s*\/\s*)(script)/i,"<\\/$2")}var G=[];return{get:B,toString:B,indent:N,in_directive:!1,use_asm:null,active_scope:null,indentation:function(){return r},current_width:function(){return c-r},should_break:function(){return e.width&&this.current_width()>=e.width},has_parens:function(){return D},newline:I,print:w,star:function(){w("*")},space:x,comma:function(){w(","),x()},colon:function(){w(":"),x()},last:function(){return C},semicolon:L,force_semicolon:P,to_utf8:d,print_name:function(e){w(function(e){return e=e.toString(),e=d(e,!0)}(e))},print_string:function(e,t,n){var i=m(e,t);!0!==n||i.includes("\\")||(Vn.test(p)||P(),P()),w(i)},print_template_string_chars:function(e){var t=m(e,"`").replace(/\${/g,"\\${");return w(t.substr(1,t.length-2))},encode_string:m,next_indent:V,with_indent:k,with_block:function(e){var t;return w("{"),I(),k(V(),(function(){t=e()})),N(),w("}"),t},with_parens:function(e){w("(");var t=e();return w(")"),t},with_square:function(e){w("[");var t=e();return w("]"),t},add_mapping:O?function(e,t){h=e,g=t}:a,option:function(t){return e[t]},printed_comments:_,prepend_comments:t?a:function(t){var i=t.start;if(!i)return;var r=this.printed_comments;const o=t instanceof Ye&&t.value;if(i.comments_before&&r.has(i.comments_before)){if(!o)return;i.comments_before=[]}var a=i.comments_before;if(a||(a=i.comments_before=[]),r.add(a),o){var s=new Mn((function(e){var t=s.parent();if(!(t instanceof Ye||t instanceof Ct&&t.left===e||"Call"==t.TYPE&&t.expression===e||t instanceof Ot&&t.condition===e||t instanceof vt&&t.expression===e||t instanceof Dt&&t.expressions[0]===e||t instanceof At&&t.expression===e||t instanceof bt))return!0;if(e.start){var n=e.start.comments_before;n&&!r.has(n)&&(r.add(n),a=a.concat(n))}}));s.push(t),t.value.walk(s)}if(0==f){a.length>0&&e.shebang&&"comment5"===a[0].type&&!r.has(a[0])&&(w("#!"+a.shift().value+"\n"),N());var u=e.preamble;u&&w(u.replace(/\r\n?|[\n\u2028\u2029]|\s*$/g,"\n"))}if(0!=(a=a.filter(n,t).filter(e=>!r.has(e))).length){var c=K();a.forEach((function(e,t){if(r.add(e),c||(e.nlb?(w("\n"),N(),c=!0):t>0&&x()),/comment[134]/.test(e.type))(n=U(e.value))&&(w("//"+n+"\n"),N()),c=!0;else if("comment2"==e.type){var n;(n=U(e.value))&&w("/*"+n+"*/"),c=!1}})),c||(i.nlb?(w("\n"),N()):x())}},append_comments:t||n===s?a:function(e,t){var i=e.end;if(i){var r=this.printed_comments,o=i[t?"comments_before":"comments_after"];if(o&&!r.has(o)&&(e instanceof me||o.every(e=>!/comment[134]/.test(e.type)))){r.add(o);var a=p.length;o.filter(n,e).forEach((function(e,n){if(!r.has(e))if(r.add(e),y=!1,T?(w("\n"),N(),T=!1):e.nlb&&(n>0||!K())?(w("\n"),N()):(n>0||!t)&&x(),/comment[134]/.test(e.type)){const t=U(e.value);t&&w("//"+t),T=!0}else if("comment2"==e.type){const t=U(e.value);t&&w("/*"+t+"*/"),y=!0}})),p.length>a&&(b=a)}}},line:function(){return l},col:function(){return c},pos:function(){return f},push_node:function(e){G.push(e)},pop_node:function(){return G.pop()},parent:function(e){return G[G.length-2-(e||0)]}}}!function(){function e(e,t){e.DEFMETHOD("_codegen",t)}function t(e,n){Array.isArray(e)?e.forEach((function(e){t(e,n)})):e.DEFMETHOD("needs_parens",n)}function n(e,t,n,i){var r=e.length-1;n.in_directive=i,e.forEach((function(e,i){!0!==n.in_directive||e instanceof Ee||e instanceof Te||e instanceof ge&&e.body instanceof _n||(n.in_directive=!1),e instanceof Te||(n.indent(),e.print(n),i==r&&t||(n.newline(),t&&n.newline())),!0===n.in_directive&&e instanceof ge&&e.body instanceof _n&&(n.in_directive=!1)})),n.in_directive=!1}function i(e,t){t.print("{"),t.with_indent(t.next_indent(),(function(){t.append_comments(e,!0)})),t.print("}")}function r(e,t,r){e.body.length>0?t.with_block((function(){n(e.body,!1,t,r)})):i(e,t)}function o(e,t,n){var i=!1;n&&(i=Cn(e,e=>e instanceof ke||(e instanceof Ct&&"in"==e.operator?Fn:void 0))),e.print(t,i)}function u(e,t,n){return n.option("quote_keys")?n.print_string(e):""+ +e==e&&e>=0?n.option("keep_numbers")?n.print(e):n.print(p(e)):(M.has(e)?n.option("ie8"):n.option("ecma")<2015?!J(e):!Q(e,!0))||t&&n.option("keep_quoted_props")?n.print_string(e,t):n.print_name(e)}de.DEFMETHOD("print",(function(e,t){var n=this,i=n._codegen;function r(){e.prepend_comments(n),n.add_source_map(e),i(n,e),e.append_comments(n)}n instanceof ke?e.active_scope=n:!e.use_asm&&n instanceof Ee&&"use asm"==n.value&&(e.use_asm=e.active_scope),e.push_node(n),t||n.needs_parens(e)?e.with_parens(r):r(),e.pop_node(),n===e.use_asm&&(e.use_asm=null)})),de.DEFMETHOD("_print",de.prototype.print),de.DEFMETHOD("print_to_string",(function(e){var t=Un(e);return this.print(t),t.get()})),t(de,s),t(Be,(function(e){if(!e.has_parens()&&Pn(e))return!0;var t;if(e.option("webkit")&&((t=e.parent())instanceof St&&t.expression===this))return!0;if(e.option("wrap_iife")&&((t=e.parent())instanceof Et&&t.expression===this))return!0;if(e.option("wrap_func_args")&&((t=e.parent())instanceof Et&&t.args.includes(this)))return!0;return!1})),t(Ke,(function(e){var t=e.parent();return t instanceof St&&t.expression===this})),t(wt,(function(e){return!e.has_parens()&&Pn(e)})),t(Kt,Pn),t(Tt,(function(e){var t=e.parent();return t instanceof St&&t.expression===this||t instanceof Et&&t.expression===this||t instanceof Ct&&"**"===t.operator&&this instanceof yt&&t.left===this&&"++"!==this.operator&&"--"!==this.operator})),t(Qe,(function(e){var t=e.parent();return t instanceof St&&t.expression===this||t instanceof Et&&t.expression===this||e.option("safari10")&&t instanceof yt})),t(Dt,(function(e){var t=e.parent();return t instanceof Et||t instanceof Tt||t instanceof Ct||t instanceof _t||t instanceof St||t instanceof Rt||t instanceof xt||t instanceof Ot||t instanceof Ke||t instanceof Mt||t instanceof Le||t instanceof xe&&this===t.object||t instanceof et||t instanceof ht})),t(Ct,(function(e){var t=e.parent();if(t instanceof Et&&t.expression===this)return!0;if(t instanceof Tt)return!0;if(t instanceof St&&t.expression===this)return!0;if(t instanceof Ct){const e=t.operator,n=this.operator;if("??"===n&&("||"===e||"&&"===e))return!0;const i=ce[e],r=ce[n];if(i>r||i==r&&(this===t.right||"**"==e))return!0}})),t(et,(function(e){var t=e.parent();return t instanceof Ct&&"="!==t.operator||(t instanceof Et&&t.expression===this||(t instanceof Ot&&t.condition===this||(t instanceof Tt||(t instanceof St&&t.expression===this||void 0))))})),t(St,(function(e){var t=e.parent();if(t instanceof gt&&t.expression===this)return Cn(this,e=>e instanceof ke||(e instanceof Et?Fn:void 0))})),t(Et,(function(e){var t,n=e.parent();return!!(n instanceof gt&&n.expression===this||n instanceof ht&&n.is_default&&this.expression instanceof Be)||this.expression instanceof Be&&n instanceof St&&n.expression===this&&(t=e.parent(1))instanceof Ft&&t.left===n})),t(gt,(function(e){var t=e.parent();if(0===this.args.length&&(t instanceof St||t instanceof Et&&t.expression===this))return!0})),t(dn,(function(e){var t=e.parent();if(t instanceof St&&t.expression===this){var n=this.getValue();if(n<0||/^0/.test(p(n)))return!0}})),t(mn,(function(e){var t=e.parent();if(t instanceof St&&t.expression===this&&this.getValue().startsWith("-"))return!0})),t([Ft,Ot],(function(e){var t=e.parent();return t instanceof Tt||(t instanceof Ct&&!(t instanceof Ft)||(t instanceof Et&&t.expression===this||(t instanceof Ot&&t.condition===this||(t instanceof St&&t.expression===this||(this instanceof Ft&&this.left instanceof Ge&&!1===this.left.is_array||void 0)))))})),e(Ee,(function(e,t){t.print_string(e.value,e.quote),t.semicolon()})),e(Le,(function(e,t){t.print("..."),e.expression.print(t)})),e(Ge,(function(e,t){t.print(e.is_array?"[":"{");var n=e.names.length;e.names.forEach((function(e,i){i>0&&t.comma(),e.print(t),i==n-1&&e instanceof vn&&t.comma()})),t.print(e.is_array?"]":"}")})),e(he,(function(e,t){t.print("debugger"),t.semicolon()})),ye.DEFMETHOD("_do_print_body",(function(e){f(this.body,e)})),e(me,(function(e,t){e.body.print(t),t.semicolon()})),e(Ie,(function(e,t){n(e.body,!0,t,!0),t.print("")})),e(be,(function(e,t){e.label.print(t),t.colon(),e.body.print(t)})),e(ge,(function(e,t){e.body.print(t),t.semicolon()})),e(Ae,(function(e,t){r(e,t)})),e(Te,(function(e,t){t.semicolon()})),e(Fe,(function(e,t){t.print("do"),t.space(),_(e.body,t),t.space(),t.print("while"),t.space(),t.with_parens((function(){e.condition.print(t)})),t.semicolon()})),e(Me,(function(e,t){t.print("while"),t.space(),t.with_parens((function(){e.condition.print(t)})),t.space(),e._do_print_body(t)})),e(Re,(function(e,t){t.print("for"),t.space(),t.with_parens((function(){e.init?(e.init instanceof ct?e.init.print(t):o(e.init,t,!0),t.print(";"),t.space()):t.print(";"),e.condition?(e.condition.print(t),t.print(";"),t.space()):t.print(";"),e.step&&e.step.print(t)})),t.space(),e._do_print_body(t)})),e(we,(function(e,t){t.print("for"),e.await&&(t.space(),t.print("await")),t.space(),t.with_parens((function(){e.init.print(t),t.space(),t.print(e instanceof xe?"of":"in"),t.space(),e.object.print(t)})),t.space(),e._do_print_body(t)})),e(Ne,(function(e,t){t.print("with"),t.space(),t.with_parens((function(){e.expression.print(t)})),t.space(),e._do_print_body(t)})),Pe.DEFMETHOD("_do_print",(function(e,t){var n=this;t||(n.async&&(e.print("async"),e.space()),e.print("function"),n.is_generator&&e.star(),n.name&&e.space()),n.name instanceof Ut?n.name.print(e):t&&n.name instanceof de&&e.with_square((function(){n.name.print(e)})),e.with_parens((function(){n.argnames.forEach((function(t,n){n&&e.comma(),t.print(e)}))})),e.space(),r(n,e,!0)})),e(Pe,(function(e,t){e._do_print(t)})),e(He,(function(e,t){var n=e.prefix,i=n instanceof Pe||n instanceof Ct||n instanceof Ot||n instanceof Dt||n instanceof Tt||n instanceof vt&&n.expression instanceof wt;i&&t.print("("),e.prefix.print(t),i&&t.print(")"),e.template_string.print(t)})),e(Xe,(function(e,t){var n=t.parent()instanceof He;t.print("`");for(var i=0;i"),e.space();const o=t.body[0];if(1===t.body.length&&o instanceof qe){const t=o.value;t?!function e(t){return t instanceof wt||(t instanceof Dt?e(t.expressions[0]):"Call"===t.TYPE?e(t.expression):t instanceof He?e(t.prefix):t instanceof vt||t instanceof At?e(t.expression):t instanceof Ot?e(t.condition):t instanceof Ct?e(t.left):t instanceof bt&&e(t.expression))}(t)?t.print(e):(e.print("("),t.print(e),e.print(")")):e.print("{}")}else r(t,e);i&&e.print(")")})),Ye.DEFMETHOD("_do_print",(function(e,t){if(e.print(t),this.value){e.space();const t=this.value.start.comments_before;t&&t.length&&!e.printed_comments.has(t)?(e.print("("),this.value.print(e),e.print(")")):this.value.print(e)}e.semicolon()})),e(qe,(function(e,t){e._do_print(t,"return")})),e($e,(function(e,t){e._do_print(t,"throw")})),e(et,(function(e,t){var n=e.is_star?"*":"";t.print("yield"+n),e.expression&&(t.space(),e.expression.print(t))})),e(Qe,(function(e,t){t.print("await"),t.space();var n=e.expression,i=!(n instanceof Et||n instanceof an||n instanceof St||n instanceof Tt||n instanceof pn);i&&t.print("("),e.expression.print(t),i&&t.print(")")})),je.DEFMETHOD("_do_print",(function(e,t){e.print(t),this.label&&(e.space(),this.label.print(e)),e.semicolon()})),e(Ze,(function(e,t){e._do_print(t,"break")})),e(Je,(function(e,t){e._do_print(t,"continue")})),e(tt,(function(e,t){t.print("if"),t.space(),t.with_parens((function(){e.condition.print(t)})),t.space(),e.alternative?(!function(e,t){var n=e.body;if(t.option("braces")||t.option("ie8")&&n instanceof Fe)return _(n,t);if(!n)return t.force_semicolon();for(;;)if(n instanceof tt){if(!n.alternative)return void _(e.body,t);n=n.alternative}else{if(!(n instanceof ye))break;n=n.body}f(e.body,t)}(e,t),t.space(),t.print("else"),t.space(),e.alternative instanceof tt?e.alternative.print(t):f(e.alternative,t)):e._do_print_body(t)})),e(nt,(function(e,t){t.print("switch"),t.space(),t.with_parens((function(){e.expression.print(t)})),t.space();var n=e.body.length-1;n<0?i(e,t):t.with_block((function(){e.body.forEach((function(e,i){t.indent(!0),e.print(t),i0&&t.newline()}))}))})),it.DEFMETHOD("_do_print_body",(function(e){e.newline(),this.body.forEach((function(t){e.indent(),t.print(e),e.newline()}))})),e(rt,(function(e,t){t.print("default:"),e._do_print_body(t)})),e(ot,(function(e,t){t.print("case"),t.space(),e.expression.print(t),t.print(":"),e._do_print_body(t)})),e(at,(function(e,t){t.print("try"),t.space(),r(e,t),e.bcatch&&(t.space(),e.bcatch.print(t)),e.bfinally&&(t.space(),e.bfinally.print(t))})),e(st,(function(e,t){t.print("catch"),e.argname&&(t.space(),t.with_parens((function(){e.argname.print(t)}))),t.space(),r(e,t)})),e(ut,(function(e,t){t.print("finally"),t.space(),r(e,t)})),ct.DEFMETHOD("_do_print",(function(e,t){e.print(t),e.space(),this.definitions.forEach((function(t,n){n&&e.comma(),t.print(e)}));var n=e.parent();(!(n instanceof Re||n instanceof we)||n&&n.init!==this)&&e.semicolon()})),e(ft,(function(e,t){e._do_print(t,"let")})),e(lt,(function(e,t){e._do_print(t,"var")})),e(pt,(function(e,t){e._do_print(t,"const")})),e(mt,(function(e,t){t.print("import"),t.space(),e.imported_name&&e.imported_name.print(t),e.imported_name&&e.imported_names&&(t.print(","),t.space()),e.imported_names&&(1===e.imported_names.length&&"*"===e.imported_names[0].foreign_name.name?e.imported_names[0].print(t):(t.print("{"),e.imported_names.forEach((function(n,i){t.space(),n.print(t),i0&&(e.comma(),e.should_break()&&(e.newline(),e.indent())),t.print(e)}))})),e(Dt,(function(e,t){e._do_print(t)})),e(vt,(function(e,t){var n=e.expression;n.print(t);var i=e.property;(M.has(i)?t.option("ie8"):!Q(i,t.option("ecma")>=2015))?(t.print("["),t.add_mapping(e.end),t.print_string(i),t.print("]")):(n instanceof dn&&n.getValue()>=0&&(/[xa-f.)]/i.test(t.last())||t.print(".")),t.print("."),t.add_mapping(e.end),t.print_name(i))})),e(At,(function(e,t){e.expression.print(t),t.print("["),e.property.print(t),t.print("]")})),e(yt,(function(e,t){var n=e.operator;t.print(n),(/^[a-z]/i.test(n)||/[+-]$/.test(n)&&e.expression instanceof yt&&/^[+-]/.test(e.expression.operator))&&t.space(),e.expression.print(t)})),e(bt,(function(e,t){e.expression.print(t),t.print(e.operator)})),e(Ct,(function(e,t){var n=e.operator;e.left.print(t),">"==n[0]&&e.left instanceof bt&&"--"==e.left.operator?t.print(" "):t.space(),t.print(n),("<"==n||"<<"==n)&&e.right instanceof yt&&"!"==e.right.operator&&e.right.expression instanceof yt&&"--"==e.right.expression.operator?t.print(" "):t.space(),e.right.print(t)})),e(Ot,(function(e,t){e.condition.print(t),t.space(),t.print("?"),t.space(),e.consequent.print(t),t.space(),t.colon(),e.alternative.print(t)})),e(Rt,(function(e,t){t.with_square((function(){var n=e.elements,i=n.length;i>0&&t.space(),n.forEach((function(e,n){n&&t.comma(),e.print(t),n===i-1&&e instanceof vn&&t.comma()})),i>0&&t.space()}))})),e(wt,(function(e,t){e.properties.length>0?t.with_block((function(){e.properties.forEach((function(e,n){n&&(t.print(","),t.newline()),t.indent(),e.print(t)})),t.newline()})):i(e,t)})),e(Pt,(function(e,t){if(t.print("class"),t.space(),e.name&&(e.name.print(t),t.space()),e.extends){var n=!(e.extends instanceof an||e.extends instanceof St||e.extends instanceof Kt||e.extends instanceof Be);t.print("extends"),n?t.print("("):t.space(),e.extends.print(t),n?t.print(")"):t.space()}e.properties.length>0?t.with_block((function(){e.properties.forEach((function(e,n){n&&t.newline(),t.indent(),e.print(t)})),t.newline()})):t.print("{}")})),e(Gt,(function(e,t){t.print("new.target")})),e(Nt,(function(e,t){function n(e){var t=e.definition();return t?t.mangled_name||t.name:e.name}var i=t.option("shorthand");i&&e.value instanceof Ut&&Q(e.key,t.option("ecma")>=2015)&&n(e.value)===e.key&&!M.has(e.key)?u(e.key,e.quote,t):i&&e.value instanceof Mt&&e.value.left instanceof Ut&&Q(e.key,t.option("ecma")>=2015)&&n(e.value.left)===e.key?(u(e.key,e.quote,t),t.space(),t.print("="),t.space(),e.value.right.print(t)):(e.key instanceof de?t.with_square((function(){e.key.print(t)})):u(e.key,e.quote,t),t.colon(),e.value.print(t))})),e(Vt,(e,t)=>{e.static&&(t.print("static"),t.space()),e.key instanceof Zt?u(e.key.name,e.quote,t):(t.print("["),e.key.print(t),t.print("]")),e.value&&(t.print("="),e.value.print(t)),t.semicolon()}),xt.DEFMETHOD("_print_getter_setter",(function(e,t){var n=this;n.static&&(t.print("static"),t.space()),e&&(t.print(e),t.space()),n.key instanceof jt?u(n.key.name,n.quote,t):t.with_square((function(){n.key.print(t)})),n.value._do_print(t,!0)})),e(kt,(function(e,t){e._print_getter_setter("set",t)})),e(It,(function(e,t){e._print_getter_setter("get",t)})),e(Lt,(function(e,t){var n;e.is_generator&&e.async?n="async*":e.is_generator?n="*":e.async&&(n="async"),e._print_getter_setter(n,t)})),Ut.DEFMETHOD("_do_print",(function(e){var t=this.definition();e.print_name(t?t.mangled_name||t.name:this.name)})),e(Ut,(function(e,t){e._do_print(t)})),e(vn,a),e(ln,(function(e,t){t.print("this")})),e(fn,(function(e,t){t.print("super")})),e(pn,(function(e,t){t.print(e.getValue())})),e(_n,(function(e,t){t.print_string(e.getValue(),e.quote,t.in_directive)})),e(dn,(function(e,t){(t.option("keep_numbers")||t.use_asm)&&e.start&&null!=e.start.raw?t.print(e.start.raw):t.print(p(e.getValue()))})),e(mn,(function(e,t){t.print(e.getValue()+"n")}));const c=/(<\s*\/\s*script)/i,l=(e,t)=>t.replace("/","\\/");function f(e,t){t.option("braces")?_(e,t):!e||e instanceof Te?t.force_semicolon():e.print(t)}function p(e){var t,n,i,r=e.toString(10).replace(/^0\./,".").replace("e+","e"),o=[r];return Math.floor(e)===e&&(e<0?o.push("-0x"+(-e).toString(16).toLowerCase()):o.push("0x"+e.toString(16).toLowerCase())),(t=/^\.0+/.exec(r))?(n=t[0].length,i=r.slice(n),o.push(i+"e-"+(i.length+n-1))):(t=/0+$/.exec(r))?(n=t[0].length,o.push(r.slice(0,-n)+"e"+n)):(t=/^(\d)\.(\d+)e(-?\d+)$/.exec(r))&&o.push(t[1]+t[2]+"e"+(t[3]-t[2].length)),function(e){for(var t=e[0],n=t.length,i=1;i{n+=e}),n}(i):"",n=n.replace(c,l),t.print(t.to_utf8(`/${n}/${i}`));const r=t.parent();r instanceof Ct&&/^\w/.test(r.operator)&&r.left===e&&t.print(" ")})),d([de,be,Ie],a),d([Rt,Ae,st,Pt,pn,he,ct,Ee,ut,We,Pe,gt,wt,ye,Ut,nt,it,Xe,ze,at],(function(e){e.add_mapping(this.start)})),d([It,kt],(function(e){e.add_mapping(this.start,this.key.name)})),d([xt],(function(e){e.add_mapping(this.start,this.key)}))}();const Gn=(e,t)=>null===e&&null===t||e.TYPE===t.TYPE&&e.shallow_cmp(t),Hn=e=>{const t=Object.keys(e).map(t=>{if("eq"===e[t])return`this.${t} === other.${t}`;if("exist"===e[t])return`(this.${t} == null ? other.${t} == null : this.${t} === other.${t})`;throw new Error(`mkshallow: Unexpected instruction: ${e[t]}`)}).join(" && ");return new Function("other","return "+t)},Xn=()=>!0;de.prototype.shallow_cmp=function(){throw new Error("did not find a shallow_cmp function for "+this.constructor.name)},he.prototype.shallow_cmp=Xn,Ee.prototype.shallow_cmp=Hn({value:"eq"}),ge.prototype.shallow_cmp=Xn,ve.prototype.shallow_cmp=Xn,Te.prototype.shallow_cmp=Xn,be.prototype.shallow_cmp=Hn({"label.name":"eq"}),Fe.prototype.shallow_cmp=Xn,Me.prototype.shallow_cmp=Xn,Re.prototype.shallow_cmp=Hn({init:"exist",condition:"exist",step:"exist"}),we.prototype.shallow_cmp=Xn,xe.prototype.shallow_cmp=Xn,Ne.prototype.shallow_cmp=Xn,Ie.prototype.shallow_cmp=Xn,Le.prototype.shallow_cmp=Xn,Pe.prototype.shallow_cmp=Hn({is_generator:"eq",async:"eq"}),Ge.prototype.shallow_cmp=Hn({is_array:"eq"}),He.prototype.shallow_cmp=Xn,Xe.prototype.shallow_cmp=Xn,ze.prototype.shallow_cmp=Hn({value:"eq"}),We.prototype.shallow_cmp=Xn,je.prototype.shallow_cmp=Xn,Qe.prototype.shallow_cmp=Xn,et.prototype.shallow_cmp=Hn({is_star:"eq"}),tt.prototype.shallow_cmp=Hn({alternative:"exist"}),nt.prototype.shallow_cmp=Xn,it.prototype.shallow_cmp=Xn,at.prototype.shallow_cmp=Hn({bcatch:"exist",bfinally:"exist"}),st.prototype.shallow_cmp=Hn({argname:"exist"}),ut.prototype.shallow_cmp=Xn,ct.prototype.shallow_cmp=Xn,_t.prototype.shallow_cmp=Hn({value:"exist"}),dt.prototype.shallow_cmp=Xn,mt.prototype.shallow_cmp=Hn({imported_name:"exist",imported_names:"exist"}),ht.prototype.shallow_cmp=Hn({exported_definition:"exist",exported_value:"exist",exported_names:"exist",module_name:"eq",is_default:"eq"}),Et.prototype.shallow_cmp=Xn,Dt.prototype.shallow_cmp=Xn,St.prototype.shallow_cmp=Xn,vt.prototype.shallow_cmp=Hn({property:"eq"}),Tt.prototype.shallow_cmp=Hn({operator:"eq"}),Ct.prototype.shallow_cmp=Hn({operator:"eq"}),Ot.prototype.shallow_cmp=Xn,Rt.prototype.shallow_cmp=Xn,wt.prototype.shallow_cmp=Xn,xt.prototype.shallow_cmp=Xn,Nt.prototype.shallow_cmp=Hn({key:"eq"}),kt.prototype.shallow_cmp=Hn({static:"eq"}),It.prototype.shallow_cmp=Hn({static:"eq"}),Lt.prototype.shallow_cmp=Hn({static:"eq",is_generator:"eq",async:"eq"}),Pt.prototype.shallow_cmp=Hn({name:"exist",extends:"exist"}),Vt.prototype.shallow_cmp=Hn({static:"eq"}),Ut.prototype.shallow_cmp=Hn({name:"eq"}),Gt.prototype.shallow_cmp=Xn,ln.prototype.shallow_cmp=Xn,fn.prototype.shallow_cmp=Xn,_n.prototype.shallow_cmp=Hn({value:"eq"}),dn.prototype.shallow_cmp=Hn({value:"eq"}),mn.prototype.shallow_cmp=Hn({value:"eq"}),hn.prototype.shallow_cmp=function(e){return this.value.flags===e.value.flags&&this.value.source===e.value.source},En.prototype.shallow_cmp=Xn;let zn=null,Wn=null;class Yn{constructor(e,t,n){this.name=t.name,this.orig=[t],this.init=n,this.eliminated=0,this.assignments=0,this.scope=e,this.replaced=0,this.global=!1,this.export=0,this.mangled_name=null,this.undeclared=!1,this.id=Yn.next_id++,this.chained=!1,this.direct_access=!1,this.escaped=0,this.recursive_refs=0,this.references=[],this.should_replace=void 0,this.single_use=!1,this.fixed=!1,Object.seal(this)}fixed_value(){return!this.fixed||this.fixed instanceof de?this.fixed:this.fixed()}unmangleable(e){return e||(e={}),!!(zn&&zn.has(this.id)&&S(e.keep_fnames,this.orig[0].name))||(this.global&&!e.toplevel||1&this.export||this.undeclared||!e.eval&&this.scope.pinned()||(this.orig[0]instanceof Jt||this.orig[0]instanceof $t)&&S(e.keep_fnames,this.orig[0].name)||this.orig[0]instanceof jt||(this.orig[0]instanceof en||this.orig[0]instanceof Qt)&&S(e.keep_classnames,this.orig[0].name))}mangle(e){const t=e.cache&&e.cache.props;if(this.global&&t&&t.has(this.name))this.mangled_name=t.get(this.name);else if(!this.mangled_name&&!this.unmangleable(e)){var n=this.scope,i=this.orig[0];e.ie8&&i instanceof Jt&&(n=n.parent_scope);const r=qn(this);this.mangled_name=r?r.mangled_name||r.name:n.next_mangled(e,this),this.global&&t&&t.set(this.name,this.mangled_name)}}}function qn(e){if(e.orig[0]instanceof tn&&e.scope.is_block_scope())return e.scope.get_defun_scope().variables.get(e.name)}function $n(e,t){var n=e.enclosed;e:for(;;){var i=jn(++e.cname);if(!M.has(i)&&!(t.reserved.has(i)||Wn&&Wn.has(i))){for(let e=n.length;--e>=0;){const r=n[e];if(i==(r.mangled_name||r.unmangleable(t)&&r.name))continue e}return i}}}Yn.next_id=1,ke.DEFMETHOD("figure_out_scope",(function(e,{parent_scope:t=null,toplevel:n=this}={}){if(e=o(e,{cache:null,ie8:!1,safari10:!1}),!(n instanceof Ie))throw new Error("Invalid toplevel scope");var i=this.parent_scope=t,r=new Map,a=null,s=null,u=[],c=new Mn((t,n)=>{if(t.is_block_scope()){const r=i;t.block_scope=i=new ke(t),i._block_scope=!0;const o=t instanceof st?r.parent_scope:r;if(i.init_scope_vars(o),i.uses_with=r.uses_with,i.uses_eval=r.uses_eval,e.safari10&&(t instanceof Re||t instanceof we)&&u.push(i),t instanceof nt){const e=i;i=r,t.expression.walk(c),i=e;for(let e=0;ee===t||(t instanceof zt?e instanceof Jt:!(e instanceof Yt||e instanceof Wt)))||ne(`"${t.name}" is redeclared`,t.start.file,t.start.line,t.start.col,t.start.pos),t instanceof qt||l(h,2),a!==i){t.mark_enclosed();var h=i.find_variable(t);t.thedef!==h&&(t.thedef=h,t.reference())}}else if(t instanceof cn){var E=r.get(t.name);if(!E)throw new Error(d("Undefined label {name} [{line},{col}]",{name:t.name,line:t.start.line,col:t.start.col}));t.thedef=E}i instanceof Ie||!(t instanceof ht||t instanceof mt)||ne(`"${t.TYPE}" statement may only appear at the top level`,t.start.file,t.start.line,t.start.col,t.start.pos)}});function l(e,t){if(s){var n=0;do{t++}while(c.parent(n++)!==s)}var i=c.parent(t);if(e.export=i instanceof ht?1:0){var r=i.exported_definition;(r instanceof Ue||r instanceof Bt)&&i.is_default&&(e.export=2)}}this.walk(c),this instanceof Ie&&(this.globals=new Map);c=new Mn(e=>{if(e instanceof je&&e.label)return e.label.thedef.references.push(e),!0;if(e instanceof an){var t,i=e.name;if("eval"==i&&c.parent()instanceof Et)for(var r=e.scope;r&&!r.uses_eval;r=r.parent_scope)r.uses_eval=!0;return c.parent()instanceof dt&&c.parent(1).module_name||!(t=e.scope.find_variable(i))?(t=n.def_global(e),e instanceof sn&&(t.export=1)):t.scope instanceof Pe&&"arguments"==i&&(t.scope.uses_arguments=!0),e.thedef=t,e.reference(),!e.scope.is_block_scope()||t.orig[0]instanceof zt||(e.scope=e.scope.get_defun_scope()),!0}var o;if(e instanceof tn&&(o=qn(e.definition())))for(r=e.scope;r&&(_(r.enclosed,o),r!==o.scope);)r=r.parent_scope});if(this.walk(c),(e.ie8||e.safari10)&&Cn(this,e=>{if(e instanceof tn){var t=e.name,i=e.thedef.references,r=e.scope.get_defun_scope(),o=r.find_variable(t)||n.globals.get(t)||r.def_variable(e);return i.forEach((function(e){e.thedef=o,e.reference()})),e.thedef=o,e.reference(),!0}}),e.safari10)for(const e of u)e.parent_scope.variables.forEach((function(t){_(e.enclosed,t)}))})),Ie.DEFMETHOD("def_global",(function(e){var t=this.globals,n=e.name;if(t.has(n))return t.get(n);var i=new Yn(this,e);return i.undeclared=!0,i.global=!0,t.set(n,i),i})),ke.DEFMETHOD("init_scope_vars",(function(e){this.variables=new Map,this.functions=new Map,this.uses_with=!1,this.uses_eval=!1,this.parent_scope=e,this.enclosed=[],this.cname=-1,this._var_name_cache=null})),ke.DEFMETHOD("var_names",(function e(){var t=this._var_name_cache;return t||(this._var_name_cache=t=new Set(this.parent_scope?e.call(this.parent_scope):null),this._added_var_names&&this._added_var_names.forEach(e=>{t.add(e)}),this.enclosed.forEach((function(e){t.add(e.name)})),this.variables.forEach((function(e,n){t.add(n)}))),t})),ke.DEFMETHOD("add_var_name",(function(e){this._added_var_names||(this._added_var_names=new Set),this._added_var_names.add(e),this._var_name_cache||this.var_names(),this._var_name_cache.add(e)})),ke.DEFMETHOD("add_child_scope",(function(e){if(e.parent_scope===this)return;e.parent_scope=this,e._var_name_cache=null,e._added_var_names&&e._added_var_names.forEach(t=>e.add_var_name(t));const t=new Set(e.enclosed),n=(()=>{const e=[];let t=this;do{e.push(t)}while(t=t.parent_scope);return e.reverse(),e})(),i=[];for(const e of n){i.forEach(t=>_(e.enclosed,t));for(const n of e.variables.values())t.has(n)&&(_(i,n),_(e.enclosed,n))}})),de.DEFMETHOD("is_block_scope",s),Pt.DEFMETHOD("is_block_scope",s),Pe.DEFMETHOD("is_block_scope",s),Ie.DEFMETHOD("is_block_scope",s),it.DEFMETHOD("is_block_scope",s),ve.DEFMETHOD("is_block_scope",u),ke.DEFMETHOD("is_block_scope",(function(){return this._block_scope||!1})),Ce.DEFMETHOD("is_block_scope",u),Pe.DEFMETHOD("init_scope_vars",(function(){ke.prototype.init_scope_vars.apply(this,arguments),this.uses_arguments=!1,this.def_variable(new qt({name:"arguments",start:this.start,end:this.end}))})),Ke.DEFMETHOD("init_scope_vars",(function(){ke.prototype.init_scope_vars.apply(this,arguments),this.uses_arguments=!1})),Ut.DEFMETHOD("mark_enclosed",(function(){for(var e=this.definition(),t=this.scope;t&&(_(t.enclosed,e),t!==e.scope);)t=t.parent_scope})),Ut.DEFMETHOD("reference",(function(){this.definition().references.push(this),this.mark_enclosed()})),ke.DEFMETHOD("find_variable",(function(e){return e instanceof Ut&&(e=e.name),this.variables.get(e)||this.parent_scope&&this.parent_scope.find_variable(e)})),ke.DEFMETHOD("def_function",(function(e,t){var n=this.def_variable(e,t);return(!n.init||n.init instanceof Ue)&&(n.init=t),this.functions.set(e.name,n),n})),ke.DEFMETHOD("def_variable",(function(e,t){var n=this.variables.get(e.name);return n?(n.orig.push(e),n.init&&(n.scope!==e.scope||n.init instanceof Be)&&(n.init=t)):(n=new Yn(this,e,t),this.variables.set(e.name,n),n.global=!this.parent_scope),e.thedef=n})),ke.DEFMETHOD("next_mangled",(function(e){return $n(this,e)})),Ie.DEFMETHOD("next_mangled",(function(e){let t;const n=this.mangled_names;do{t=$n(this,e)}while(n.has(t));return t})),Be.DEFMETHOD("next_mangled",(function(e,t){for(var n=t.orig[0]instanceof qt&&this.name&&this.name.definition(),i=n?n.mangled_name||n.name:null;;){var r=$n(this,e);if(!i||i!=r)return r}})),Ut.DEFMETHOD("unmangleable",(function(e){var t=this.definition();return!t||t.unmangleable(e)})),on.DEFMETHOD("unmangleable",s),Ut.DEFMETHOD("unreferenced",(function(){return!this.definition().references.length&&!this.scope.pinned()})),Ut.DEFMETHOD("definition",(function(){return this.thedef})),Ut.DEFMETHOD("global",(function(){return this.thedef.global})),Ie.DEFMETHOD("_default_mangler_options",(function(e){return(e=o(e,{eval:!1,ie8:!1,keep_classnames:!1,keep_fnames:!1,module:!1,reserved:[],toplevel:!1})).module&&(e.toplevel=!0),Array.isArray(e.reserved)||e.reserved instanceof Set||(e.reserved=[]),e.reserved=new Set(e.reserved),e.reserved.add("arguments"),e})),Ie.DEFMETHOD("mangle_names",(function(e){e=this._default_mangler_options(e);var t=-1,n=[];e.keep_fnames&&(zn=new Set);const i=this.mangled_names=new Set;e.cache&&(this.globals.forEach(o),e.cache.props&&e.cache.props.forEach((function(e){i.add(e)})));var r=new Mn((function(i,r){if(i instanceof be){var a=t;return r(),t=a,!0}if(i instanceof ke)i.variables.forEach(o);else if(i.is_block_scope())i.block_scope.variables.forEach(o);else if(zn&&i instanceof _t&&i.value instanceof Pe&&!i.value.name&&S(e.keep_fnames,i.name.name))zn.add(i.name.definition().id);else{if(i instanceof on){let e;do{e=jn(++t)}while(M.has(e));return i.mangled_name=e,!0}!e.ie8&&!e.safari10&&i instanceof tn&&n.push(i.definition())}}));function o(t){!(e.reserved.has(t.name)||1&t.export)&&n.push(t)}this.walk(r),(e.keep_fnames||e.keep_classnames)&&(Wn=new Set,n.forEach(t=>{t.name.length<6&&t.unmangleable(e)&&Wn.add(t.name)})),n.forEach(t=>{t.mangle(e)}),zn=null,Wn=null})),Ie.DEFMETHOD("find_colliding_names",(function(e){const t=e.cache&&e.cache.props,n=new Set;return e.reserved.forEach(i),this.globals.forEach(r),this.walk(new Mn((function(e){e instanceof ke&&e.variables.forEach(r),e instanceof tn&&r(e.definition())}))),n;function i(e){n.add(e)}function r(n){var r=n.name;if(n.global&&t&&t.has(r))r=t.get(r);else if(!n.unmangleable(e))return;i(r)}})),Ie.DEFMETHOD("expand_names",(function(e){jn.reset(),jn.sort(),e=this._default_mangler_options(e);var t=this.find_colliding_names(e),n=0;function i(i){if(i.global&&e.cache)return;if(i.unmangleable(e))return;if(e.reserved.has(i.name))return;const r=qn(i),o=i.name=r?r.name:function(){var e;do{e=jn(n++)}while(t.has(e)||M.has(e));return e}();i.orig.forEach((function(e){e.name=o})),i.references.forEach((function(e){e.name=o}))}this.globals.forEach(i),this.walk(new Mn((function(e){e instanceof ke&&e.variables.forEach(i),e instanceof tn&&i(e.definition())})))})),de.DEFMETHOD("tail_node",c),Dt.DEFMETHOD("tail_node",(function(){return this.expressions[this.expressions.length-1]})),Ie.DEFMETHOD("compute_char_frequency",(function(e){e=this._default_mangler_options(e);try{de.prototype.print=function(t,n){this._print(t,n),this instanceof Ut&&!this.unmangleable(e)?jn.consider(this.name,-1):e.properties&&(this instanceof vt?jn.consider(this.property,-1):this instanceof At&&function e(t){t instanceof _n?jn.consider(t.value,-1):t instanceof Ot?(e(t.consequent),e(t.alternative)):t instanceof Dt&&e(t.tail_node())}(this.property))},jn.consider(this.print_to_string(),1)}finally{de.prototype.print=de.prototype._print}jn.sort()}));const jn=(()=>{const e="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_".split(""),t="0123456789".split("");let n,i;function r(){i=new Map,e.forEach((function(e){i.set(e,0)})),t.forEach((function(e){i.set(e,0)}))}function o(e,t){return i.get(t)-i.get(e)}function a(e){var t="",i=54;e++;do{e--,t+=n[e%i],e=Math.floor(e/i),i=64}while(e>0);return t}return a.consider=function(e,t){for(var n=e.length;--n>=0;)i.set(e[n],i.get(e[n])+t)},a.sort=function(){n=h(e,o).concat(h(t,o))},a.reset=r,r(),a})();function Zn(){const e={};return Object.keys(Jn({0:0})).forEach(t=>{const n=Jn({[t]:{0:0}});n&&(e[t]=n)}),e}function Jn(e){var t=Sr("",e);return t.error&&t.error.defs}let Qn=void 0;de.prototype.size=function(e,t){Qn=Zn.mangle;let n=0;return On(this,(e,t)=>{n+=e._size(t)},t||e&&e.stack),Qn=void 0,n},de.prototype._size=()=>0,he.prototype._size=()=>8,Ee.prototype._size=function(){return 2+this.value.length};const ei=e=>e.length&&e.length-1;ve.prototype._size=function(){return 2+ei(this.body)},Ie.prototype._size=function(){return ei(this.body)},Te.prototype._size=()=>1,be.prototype._size=()=>2,Fe.prototype._size=()=>9,Me.prototype._size=()=>7,Re.prototype._size=()=>8,we.prototype._size=()=>8,Ne.prototype._size=()=>6,Le.prototype._size=()=>3;const ti=e=>(e.is_generator?1:0)+(e.async?6:0);Ve.prototype._size=function(){return ti(this)+4+ei(this.argnames)+ei(this.body)},Be.prototype._size=function(e){return 2*!!Pn(e)+ti(this)+12+ei(this.argnames)+ei(this.body)},Ue.prototype._size=function(){return ti(this)+13+ei(this.argnames)+ei(this.body)},Ke.prototype._size=function(){let e=2+ei(this.argnames);return 1===this.argnames.length&&this.argnames[0]instanceof Ut||(e+=2),ti(this)+e+(Array.isArray(this.body)?ei(this.body):this.body._size())},Ge.prototype._size=()=>2,Xe.prototype._size=function(){return 2+3*Math.floor(this.segments.length/2)},ze.prototype._size=function(){return this.value.length},qe.prototype._size=function(){return this.value?7:6},$e.prototype._size=()=>6,Ze.prototype._size=function(){return this.label?6:5},Je.prototype._size=function(){return this.label?9:8},tt.prototype._size=()=>4,nt.prototype._size=function(){return 8+ei(this.body)},ot.prototype._size=function(){return 5+ei(this.body)},rt.prototype._size=function(){return 8+ei(this.body)},at.prototype._size=function(){return 3+ei(this.body)},st.prototype._size=function(){let e=7+ei(this.body);return this.argname&&(e+=2),e},ut.prototype._size=function(){return 7+ei(this.body)};const ni=(e,t)=>e+ei(t.definitions);lt.prototype._size=function(){return ni(4,this)},ft.prototype._size=function(){return ni(4,this)},pt.prototype._size=function(){return ni(6,this)},_t.prototype._size=function(){return this.value?1:0},dt.prototype._size=function(){return this.name?4:0},mt.prototype._size=function(){let e=6;return this.imported_name&&(e+=1),(this.imported_name||this.imported_names)&&(e+=5),this.imported_names&&(e+=2+ei(this.imported_names)),e},ht.prototype._size=function(){let e=7+(this.is_default?8:0);return this.exported_value&&(e+=this.exported_value._size()),this.exported_names&&(e+=2+ei(this.exported_names)),this.module_name&&(e+=5),e},Et.prototype._size=function(){return 2+ei(this.args)},gt.prototype._size=function(){return 6+ei(this.args)},Dt.prototype._size=function(){return ei(this.expressions)},vt.prototype._size=function(){return this.property.length+1},At.prototype._size=()=>2,Tt.prototype._size=function(){return"typeof"===this.operator?7:"void"===this.operator?5:this.operator.length},Ct.prototype._size=function(e){if("in"===this.operator)return 4;let t=this.operator.length;return("+"===this.operator||"-"===this.operator)&&this.right instanceof Tt&&this.right.operator===this.operator&&(t+=1),this.needs_parens(e)&&(t+=2),t},Ot.prototype._size=()=>3,Rt.prototype._size=function(){return 2+ei(this.elements)},wt.prototype._size=function(e){let t=2;return Pn(e)&&(t+=2),t+ei(this.properties)};const ii=e=>"string"==typeof e?e.length:0;Nt.prototype._size=function(){return ii(this.key)+1};const ri=e=>e?7:0;It.prototype._size=function(){return 5+ri(this.static)+ii(this.key)},kt.prototype._size=function(){return 5+ri(this.static)+ii(this.key)},Lt.prototype._size=function(){return ri(this.static)+ii(this.key)+ti(this)},Pt.prototype._size=function(){return(this.name?8:7)+(this.extends?8:0)},Vt.prototype._size=function(){return ri(this.static)+("string"==typeof this.key?this.key.length+2:0)+(this.value?1:0)},Ut.prototype._size=function(){return!Qn||this.definition().unmangleable(Qn)?this.name.length:2},Zt.prototype._size=function(){return this.name.length},an.prototype._size=function(){const{name:e,thedef:t}=this;return t&&t.global?e.length:"arguments"===e?9:2},Gt.prototype._size=()=>10,rn.prototype._size=function(){return this.name.length},un.prototype._size=function(){return this.name.length},ln.prototype._size=()=>4,fn.prototype._size=()=>5,_n.prototype._size=function(){return this.value.length+2},dn.prototype._size=function(){const{value:e}=this;return 0===e?1:e>0&&Math.floor(e)===e?Math.floor(Math.log10(e)+1):e.toString().length},mn.prototype._size=function(){return this.value.length},hn.prototype._size=function(){return this.value.toString().length},gn.prototype._size=()=>4,Dn.prototype._size=()=>3,Sn.prototype._size=()=>6,vn.prototype._size=()=>0,An.prototype._size=()=>8,bn.prototype._size=()=>4,yn.prototype._size=()=>5,Qe.prototype._size=()=>6,et.prototype._size=()=>6;const oi=(e,t)=>e.flags&t,ai=(e,t)=>{e.flags|=t},si=(e,t)=>{e.flags&=~t};class ui extends Mn{constructor(e,t){super(),void 0===e.defaults||e.defaults||(t=!0),this.options=o(e,{arguments:!1,arrows:!t,booleans:!t,booleans_as_integers:!1,collapse_vars:!t,comparisons:!t,computed_props:!t,conditionals:!t,dead_code:!t,defaults:!0,directives:!t,drop_console:!1,drop_debugger:!t,ecma:5,evaluate:!t,expression:!1,global_defs:!1,hoist_funs:!1,hoist_props:!t,hoist_vars:!1,ie8:!1,if_return:!t,inline:!t,join_vars:!t,keep_classnames:!1,keep_fargs:!0,keep_fnames:!1,keep_infinity:!1,loops:!t,module:!1,negate_iife:!t,passes:1,properties:!t,pure_getters:!t&&"strict",pure_funcs:null,reduce_funcs:null,reduce_vars:!t,sequences:!t,side_effects:!t,switches:!t,top_retain:null,toplevel:!(!e||!e.top_retain),typeofs:!t,unsafe:!1,unsafe_arrows:!1,unsafe_comps:!1,unsafe_Function:!1,unsafe_math:!1,unsafe_symbols:!1,unsafe_methods:!1,unsafe_proto:!1,unsafe_regexp:!1,unsafe_undefined:!1,unused:!t,warnings:!1},!0);var n=this.options.global_defs;if("object"==typeof n)for(var i in n)"@"===i[0]&&D(n,i)&&(n[i.slice(1)]=fe(n[i],{expression:!0}));!0===this.options.inline&&(this.options.inline=3);var r=this.options.pure_funcs;this.pure_funcs="function"==typeof r?r:r?function(e){return!r.includes(e.expression.print_to_string())}:u;var a=this.options.top_retain;a instanceof RegExp?this.top_retain=function(e){return a.test(e.name)}:"function"==typeof a?this.top_retain=a:a&&("string"==typeof a&&(a=a.split(/,/)),this.top_retain=function(e){return a.includes(e.name)}),this.options.module&&(this.directives["use strict"]=!0,this.options.toplevel=!0);var s=this.options.toplevel;this.toplevel="string"==typeof s?{funcs:/funcs/.test(s),vars:/vars/.test(s)}:{funcs:s,vars:s};var c=this.options.sequences;this.sequences_limit=1==c?800:0|c,this.warnings_produced={},this.evaluated_regexps=new Map}option(e){return this.options[e]}exposed(e){if(e.export)return!0;if(e.global)for(var t=0,n=e.orig.length;t0||this.option("reduce_vars"))&&e.reset_opt_flags(this),e=e.transform(this),t>1){let t=0;if(Cn(e,()=>{t++}),this.info("pass "+o+": last_count: "+n+", count: "+t),t=0;){if(!(r[o]instanceof Nt))return;n||r[o].key!==t||(n=r[o].value)}}return n instanceof an&&n.fixed_value()||n}}function fi(e,t,n,i,r,o){var a=t.parent(r),s=Pi(n,a);if(s)return s;if(!o&&a instanceof Et&&a.expression===n&&!(i instanceof Ke)&&!(i instanceof Pt)&&!a.is_expr_pure(e)&&(!(i instanceof Be)||!(a instanceof gt)&&i.contains_this()))return!0;if(a instanceof Rt)return fi(e,t,a,a,r+1);if(a instanceof Nt&&n===a.value){var u=t.parent(r+1);return fi(e,t,u,u,r+2)}if(a instanceof St&&a.expression===n){var c=li(i,a.property);return!o&&fi(e,t,a,c,r+1)}}function pi(e){return e instanceof Ke||e instanceof Be}function _i(e){if(e instanceof ln)return!0;if(e instanceof an)return e.definition().orig[0]instanceof Jt;if(e instanceof St){if((e=e.expression)instanceof an){if(e.is_immutable())return!1;e=e.fixed_value()}return!e||!(e instanceof hn)&&(e instanceof pn||_i(e))}return!1}function di(e,t){if(!(e instanceof an))return!1;for(var n=e.definition().orig,i=n.length;--i>=0;)if(n[i]instanceof t)return!0}function mi(e){for(let t=0;;t++){const n=e.parent(t);if(n instanceof Ie)return n;if(n instanceof Pe)return n;if(n.block_scope)return n.block_scope}}function hi(e,t){for(var n,i=0;(n=e.parent(i++))&&!(n instanceof ke);)if(n instanceof st&&n.argname){n=n.argname.definition().scope;break}return n.find_variable(t)}function Ei(e,t){if(1==t.length)return t[0];if(0==t.length)throw new Error("trying to create a sequence with length zero!");return p(Dt,e,{expressions:t.reduce(Si,[])})}function gi(e,t){switch(typeof e){case"string":return p(_n,t,{value:e});case"number":return isNaN(e)?p(Dn,t):isFinite(e)?1/e<0?p(yt,t,{operator:"-",expression:p(dn,t,{value:-e})}):p(dn,t,{value:e}):e<0?p(yt,t,{operator:"-",expression:p(An,t)}):p(An,t);case"boolean":return p(e?bn:yn,t);case"undefined":return p(Sn,t);default:if(null===e)return p(gn,t,{value:null});if(e instanceof RegExp)return p(hn,t,{value:{source:A(e.source),flags:e.flags}});throw new Error(d("Can't handle constant of type: {type}",{type:typeof e}))}}function Di(e,t,n){return e instanceof yt&&"delete"==e.operator||e instanceof Et&&e.expression===t&&(n instanceof St||n instanceof an&&"eval"==n.name)?Ei(t,[p(dn,t,{value:0}),n]):n}function Si(e,t){return t instanceof Dt?e.push(...t.expressions):e.push(t),e}function vi(e){if(null===e)return[];if(e instanceof Ae)return e.body;if(e instanceof Te)return[];if(e instanceof me)return[e];throw new Error("Can't convert thing to statement array")}function Ai(e){return null===e||(e instanceof Te||e instanceof Ae&&0==e.body.length)}function Ti(e){return!(e instanceof Bt||e instanceof Ue||e instanceof ft||e instanceof pt||e instanceof ht||e instanceof mt)}function yi(e){return e instanceof Ce&&e.body instanceof Ae?e.body:e}function bi(e){return"Call"==e.TYPE&&(e.expression instanceof Be||bi(e.expression))}function Ci(e){return e instanceof an&&e.definition().undeclared}ci(de,(function(e){return e})),Ie.DEFMETHOD("drop_console",(function(){return this.transform(new Rn((function(e){if("Call"==e.TYPE){var t=e.expression;if(t instanceof St){for(var n=t.expression;n.expression;)n=n.expression;if(Ci(n)&&"console"==n.name)return p(Sn,e)}}})))})),de.DEFMETHOD("equivalent_to",(function(e){return((e,t)=>{if(!Gn(e,t))return!1;const n=[e],i=[t],r=n.push.bind(n),o=i.push.bind(i);for(;n.length&&i.length;){const e=n.pop(),t=i.pop();if(!Gn(e,t))return!1;if(e._children_backwards(r),t._children_backwards(o),n.length!==i.length)return!1}return 0==n.length&&0==i.length})(this,e)})),ke.DEFMETHOD("process_expression",(function(e,t){var n=this,i=new Rn((function(r){if(e&&r instanceof ge)return p(qe,r,{value:r.body});if(!e&&r instanceof qe){if(t){var o=r.value&&r.value.drop_side_effect_free(t,!0);return o?p(ge,r,{body:o}):p(Te,r)}return p(ge,r,{body:r.value||p(yt,r,{operator:"void",expression:p(dn,r,{value:0})})})}if(r instanceof Pt||r instanceof Pe&&r!==n)return r;if(r instanceof ve){var a=r.body.length-1;a>=0&&(r.body[a]=r.body[a].transform(i))}else r instanceof tt?(r.body=r.body.transform(i),r.alternative&&(r.alternative=r.alternative.transform(i))):r instanceof Ne&&(r.body=r.body.transform(i));return r}));n.transform(i)})),function(e){function t(e,t){t.assignments=0,t.chained=!1,t.direct_access=!1,t.escaped=0,t.recursive_refs=0,t.references=[],t.should_replace=void 0,t.single_use=void 0,t.scope.pinned()?t.fixed=!1:t.orig[0]instanceof Wt||!e.exposed(t)?t.fixed=t.init:t.fixed=!1}function n(e,n,i){i.variables.forEach((function(i){t(n,i),null===i.fixed?(e.defs_to_safe_ids.set(i.id,e.safe_ids),s(e,i,!0)):i.fixed&&(e.loop_ids.set(i.id,e.in_loop),s(e,i,!0))}))}function i(e,n){n.block_scope&&n.block_scope.variables.forEach(n=>{t(e,n)})}function r(e){e.safe_ids=Object.create(e.safe_ids)}function o(e){e.safe_ids=Object.getPrototypeOf(e.safe_ids)}function s(e,t,n){e.safe_ids[t.id]=n}function u(e,t){if("m"==t.single_use)return!1;if(e.safe_ids[t.id]){if(null==t.fixed){var n=t.orig[0];if(n instanceof qt||"arguments"==n.name)return!1;t.fixed=p(Sn,n)}return!0}return t.fixed instanceof Ue}function c(e,t,n,i){if(void 0===t.fixed)return!0;let r;return null===t.fixed&&(r=e.defs_to_safe_ids.get(t.id))?(r[t.id]=!1,e.defs_to_safe_ids.delete(t.id),!0):!!D(e.safe_ids,t.id)&&(!!u(e,t)&&(!1!==t.fixed&&(!(null!=t.fixed&&(!i||t.references.length>t.assignments))&&(t.fixed instanceof Ue?i instanceof de&&t.fixed.parent_scope===n:t.orig.every(e=>!(e instanceof Wt||e instanceof $t||e instanceof Jt))))))}function l(e,t,n,i,r,o,a){var s=e.parent(o);if(r){if(r.is_constant())return;if(r instanceof Kt)return}if(s instanceof Ft&&"="==s.operator&&i===s.right||s instanceof Et&&(i!==s.expression||s instanceof gt)||s instanceof Ye&&i===s.value&&i.scope!==t.scope||s instanceof _t&&i===s.value||s instanceof et&&i===s.value&&i.scope!==t.scope)return!(a>1)||r&&r.is_constant_expression(n)||(a=1),void((!t.escaped||t.escaped>a)&&(t.escaped=a));if(s instanceof Rt||s instanceof Qe||s instanceof Ct&&Ii.has(s.operator)||s instanceof Ot&&i!==s.condition||s instanceof Le||s instanceof Dt&&i===s.tail_node())l(e,t,n,s,s,o+1,a);else if(s instanceof Nt&&i===s.value){var u=e.parent(o+1);l(e,t,n,u,u,o+2,a)}else if(s instanceof St&&i===s.expression&&(l(e,t,n,s,r=li(r,s.property),o+1,a+1),r))return;o>0||s instanceof Dt&&i!==s.tail_node()||s instanceof ge||(t.direct_access=!0)}e(de,a);const f=e=>Cn(e,e=>{if(e instanceof Ut){var t=e.definition();t&&(e instanceof an&&t.references.push(e),t.fixed=!1)}});e(Ve,(function(e,t,i){return r(e),n(e,i,this),t(),o(e),!0})),e(Ft,(function(e,t,n){var i=this;if(i.left instanceof Ge)f(i.left);else{var r=i.left;if(r instanceof an){var o=r.definition(),a=c(e,o,r.scope,i.right);if(o.assignments++,a){var u=o.fixed;if(u||"="==i.operator){var _="="==i.operator,d=_?i.right:i;if(!fi(n,e,i,d,0))return o.references.push(r),_||(o.chained=!0),o.fixed=_?function(){return i.right}:function(){return p(Ct,i,{operator:i.operator.slice(0,-1),left:u instanceof de?u:u(),right:i.right})},s(e,o,!1),i.right.walk(e),s(e,o,!0),l(e,o,r.scope,i,d,0,1),!0}}}}})),e(Ct,(function(e){if(Ii.has(this.operator))return this.left.walk(e),r(e),this.right.walk(e),o(e),!0})),e(ve,(function(e,t,n){i(n,this)})),e(ot,(function(e){return r(e),this.expression.walk(e),o(e),r(e),De(this,e),o(e),!0})),e(Pt,(function(e,t){return si(this,16),r(e),t(),o(e),!0})),e(Ot,(function(e){return this.condition.walk(e),r(e),this.consequent.walk(e),o(e),r(e),this.alternative.walk(e),o(e),!0})),e(rt,(function(e,t){return r(e),t(),o(e),!0})),e(Pe,(function(e,t,i){return si(this,16),r(e),n(e,i,this),this.uses_arguments?(t(),void o(e)):(!this.name&&(a=e.parent())instanceof Et&&a.expression===this&&!a.args.some(e=>e instanceof Le)&&this.argnames.every(e=>e instanceof Ut)&&this.argnames.forEach((t,n)=>{if(t.definition){var i=t.definition();i.orig.length>1||(void 0!==i.fixed||this.uses_arguments&&!e.has_directive("use strict")?i.fixed=!1:(i.fixed=function(){return a.args[n]||p(Sn,a)},e.loop_ids.set(i.id,e.in_loop),s(e,i,!0)))}}),t(),o(e),!0);var a})),e(Fe,(function(e,t,n){i(n,this);const a=e.in_loop;return e.in_loop=this,r(e),this.body.walk(e),Zi(this)&&(o(e),r(e)),this.condition.walk(e),o(e),e.in_loop=a,!0})),e(Re,(function(e,t,n){i(n,this),this.init&&this.init.walk(e);const a=e.in_loop;return e.in_loop=this,r(e),this.condition&&this.condition.walk(e),this.body.walk(e),this.step&&(Zi(this)&&(o(e),r(e)),this.step.walk(e)),o(e),e.in_loop=a,!0})),e(we,(function(e,t,n){i(n,this),f(this.init),this.object.walk(e);const a=e.in_loop;return e.in_loop=this,r(e),this.body.walk(e),o(e),e.in_loop=a,!0})),e(tt,(function(e){return this.condition.walk(e),r(e),this.body.walk(e),o(e),this.alternative&&(r(e),this.alternative.walk(e),o(e)),!0})),e(be,(function(e){return r(e),this.body.walk(e),o(e),!0})),e(tn,(function(){this.definition().fixed=!1})),e(an,(function(e,t,n){var i,r,o=this.definition();o.references.push(this),1==o.references.length&&!o.fixed&&o.orig[0]instanceof $t&&e.loop_ids.set(o.id,e.in_loop),void 0!==o.fixed&&u(e,o)?o.fixed&&((i=this.fixed_value())instanceof Pe&&er(e,o)?o.recursive_refs++:i&&!n.exposed(o)&&function(e,t,n){return t.option("unused")&&!n.scope.pinned()&&n.references.length-n.recursive_refs==1&&e.loop_ids.get(n.id)===e.in_loop}(e,n,o)?o.single_use=i instanceof Pe&&!i.pinned()||i instanceof Pt||o.scope===this.scope&&i.is_constant_expression():o.single_use=!1,fi(n,e,this,i,0,!!(r=i)&&(r.is_constant()||r instanceof Pe||r instanceof ln))&&(o.single_use?o.single_use="m":o.fixed=!1)):o.fixed=!1,l(e,o,this.scope,this,i,0,1)})),e(Ie,(function(e,i,r){this.globals.forEach((function(e){t(r,e)})),n(e,r,this)})),e(at,(function(e,t,n){return i(n,this),r(e),De(this,e),o(e),this.bcatch&&(r(e),this.bcatch.walk(e),o(e)),this.bfinally&&this.bfinally.walk(e),!0})),e(Tt,(function(e){var t=this;if("++"===t.operator||"--"===t.operator){var n=t.expression;if(n instanceof an){var i=n.definition(),r=c(e,i,n.scope,!0);if(i.assignments++,r){var o=i.fixed;if(o)return i.references.push(n),i.chained=!0,i.fixed=function(){return p(Ct,t,{operator:t.operator.slice(0,-1),left:p(yt,t,{operator:"+",expression:o instanceof de?o:o()}),right:p(dn,t,{value:1})})},s(e,i,!0),!0}}}})),e(_t,(function(e,t){var n=this;if(n.name instanceof Ge)f(n.name);else{var i=n.name.definition();if(n.value){if(c(e,i,n.name.scope,n.value))return i.fixed=function(){return n.value},e.loop_ids.set(i.id,e.in_loop),s(e,i,!1),t(),s(e,i,!0),!0;i.fixed=!1}}})),e(Me,(function(e,t,n){i(n,this);const a=e.in_loop;return e.in_loop=this,r(e),t(),o(e),e.in_loop=a,!0}))}((function(e,t){e.DEFMETHOD("reduce_vars",t)})),Ie.DEFMETHOD("reset_opt_flags",(function(e){const t=this,n=e.option("reduce_vars"),i=new Mn((function(r,o){if(si(r,1792),n)return e.top_retain&&r instanceof Ue&&i.parent()===t&&ai(r,1024),r.reduce_vars(i,o,e)}));i.safe_ids=Object.create(null),i.in_loop=null,i.loop_ids=new Map,i.defs_to_safe_ids=new Map,t.walk(i)})),Ut.DEFMETHOD("fixed_value",(function(){var e=this.thedef.fixed;return!e||e instanceof de?e:e()})),an.DEFMETHOD("is_immutable",(function(){var e=this.definition().orig;return 1==e.length&&e[0]instanceof Jt}));var Oi=E("Array Boolean clearInterval clearTimeout console Date decodeURI decodeURIComponent encodeURI encodeURIComponent Error escape eval EvalError Function isFinite isNaN JSON Math Number parseFloat parseInt RangeError ReferenceError RegExp Object setInterval setTimeout String SyntaxError TypeError unescape URIError");an.DEFMETHOD("is_declared",(function(e){return!this.definition().undeclared||e.option("unsafe")&&Oi.has(this.name)}));var Fi,Mi=E("Infinity NaN undefined");function Ri(e){return e instanceof An||e instanceof Dn||e instanceof Sn}function wi(e,t){var n,r,o=t.find_parent(ke).get_defun_scope();!function(){var e=t.self(),i=0;do{if(e instanceof st||e instanceof ut)i++;else if(e instanceof Ce)n=!0;else{if(e instanceof ke){o=e;break}e instanceof at&&(r=!0)}}while(e=t.parent(i++))}();var a,s=10;do{a=!1,c(e),t.option("dead_code")&&_(e,t),t.option("if_return")&&l(e,t),t.sequences_limit>0&&(h(e,t),g(e,t)),t.option("join_vars")&&S(e),t.option("collapse_vars")&&u(e,t)}while(a&&s-- >0);function u(e,t){if(o.pinned())return e;for(var s,u=[],c=e.length,l=new Rn((function(e){if(M)return e;if(!F)return e!==d[m]?e:++m=0;){0==c&&t.option("unused")&&P();var d=[];for(V(e[c]);u.length>0;){d=u.pop();var m=0,h=d[d.length-1],E=null,g=null,D=null,S=B(h);if(S&&!_i(S)&&!S.has_side_effects(t)){var v=U(h),A=H(S);S instanceof an&&v.set(S.name,!1);var T=X(h),y=z(),C=h.may_throw(t),O=h.name instanceof qt,F=O,M=!1,R=0,w=!s||!F;if(!w){for(var x=t.self().argnames.lastIndexOf(h.name)+1;!M&&xR)R=!1;else{M=!1,m=0,F=O;for(N=c;!M&&N!(e instanceof Le))){var r=t.has_directive("use strict");r&&!i(r,n.body)&&(r=!1);var o=n.argnames.length;s=e.args.slice(o);for(var a=new Set,c=o;--c>=0;){var l=n.argnames[c],f=e.args[c];const i=l.definition&&l.definition();if(!(i&&i.orig.length>1)&&(s.unshift(p(_t,l,{name:l,value:f})),!a.has(l.name)))if(a.add(l.name),l instanceof Le){var _=e.args.slice(c);_.every(e=>!L(n,e,r))&&u.unshift([p(_t,l,{name:l.expression,value:p(Rt,e,{elements:_})})])}else f?(f instanceof Pe&&f.pinned()||L(n,f,r))&&(f=null):f=p(Sn,l).transform(t),f&&u.unshift([p(_t,l,{name:l,value:f})])}}}function V(e){if(d.push(e),e instanceof Ft)e.left.has_side_effects(t)||u.push(d.slice()),V(e.right);else if(e instanceof Ct)V(e.left),V(e.right);else if(e instanceof Et&&!b(e,Nn))V(e.expression),e.args.forEach(V);else if(e instanceof ot)V(e.expression);else if(e instanceof Ot)V(e.condition),V(e.consequent),V(e.alternative);else if(e instanceof ct){var n=e.definitions.length,i=n-200;for(i<0&&(i=0);i1&&!(e.name instanceof qt)||(r>1?function(e){var t=e.value;if(t instanceof an&&"arguments"!=t.name){var n=t.definition();if(!n.undeclared)return E=n}}(e):!t.exposed(n))?p(an,e.name,e.name):void 0}}function K(e){return e[e instanceof Ft?"right":"value"]}function U(e){var n=new Map;if(e instanceof Tt)return n;var i=new Mn((function(e){for(var r=e;r instanceof St;)r=r.expression;(r instanceof an||r instanceof ln)&&n.set(r.name,n.get(r.name)||fi(t,i,e,e,0))}));return K(e).walk(i),n}function G(n){if(n.name instanceof qt){var i=t.parent(),r=t.self().argnames,o=r.indexOf(n.name);if(o<0)i.args.length=Math.min(i.args.length,r.length-1);else{var a=i.args;a[o]&&(a[o]=p(dn,a[o],{value:0}))}return!0}var s=!1;return e[c].transform(new Rn((function(e,t,i){return s?e:e===n||e.body===n?(s=!0,e instanceof _t?(e.value=e.name instanceof Wt?p(Sn,e.value):null,e):i?f.skip:null):void 0}),(function(e){if(e instanceof Dt)switch(e.expressions.length){case 0:return null;case 1:return e.expressions[0]}})))}function H(e){for(;e instanceof St;)e=e.expression;return e instanceof an&&e.definition().scope===o&&!(n&&(v.has(e.name)||h instanceof Tt||h instanceof Ft&&"="!=h.operator))}function X(e){return e instanceof Tt?Li.has(e.operator):K(e).has_side_effects(t)}function z(){if(T)return!1;if(E)return!0;if(S instanceof an){var e=S.definition();if(e.references.length-e.replaced==(h instanceof _t?1:2))return!0}return!1}function W(e){if(!e.definition)return!0;var t=e.definition();return!(1==t.orig.length&&t.orig[0]instanceof $t)&&(t.scope.get_defun_scope()!==o||!t.references.every(e=>{var t=e.scope.get_defun_scope();return"Scope"==t.TYPE&&(t=t.parent_scope),t===o}))}}function c(e){for(var t=[],n=0;n=0;){var i=e[n];if(i instanceof tt&&i.body instanceof qe&&++t>1)return!0}return!1}(e),r=n instanceof Pe,o=e.length;--o>=0;){var s=e[o],u=S(o),c=e[u];if(r&&!c&&s instanceof qe){if(!s.value){a=!0,e.splice(o,1);continue}if(s.value instanceof yt&&"void"==s.value.operator){a=!0,e[o]=p(ge,s,{body:s.value.expression});continue}}if(s instanceof tt){var l;if(E(l=Yi(s.body))){l.label&&m(l.label.thedef.references,l),a=!0,(s=s.clone()).condition=s.condition.negate(t);var f=D(s.body,l);s.body=p(Ae,s,{body:vi(s.alternative).concat(g())}),s.alternative=p(Ae,s,{body:f}),e[o]=s.transform(t);continue}if(E(l=Yi(s.alternative))){l.label&&m(l.label.thedef.references,l),a=!0,(s=s.clone()).body=p(Ae,s.body,{body:vi(s.body).concat(g())});f=D(s.alternative,l);s.alternative=p(Ae,s.alternative,{body:f}),e[o]=s.transform(t);continue}}if(s instanceof tt&&s.body instanceof qe){var _=s.body.value;if(!_&&!s.alternative&&(r&&!c||c instanceof qe&&!c.value)){a=!0,e[o]=p(ge,s.condition,{body:s.condition});continue}if(_&&!s.alternative&&c instanceof qe&&c.value){a=!0,(s=s.clone()).alternative=c,e[o]=s.transform(t),e.splice(u,1);continue}if(_&&!s.alternative&&(!c&&r&&i||c instanceof qe)){a=!0,(s=s.clone()).alternative=c||p(qe,s,{value:null}),e[o]=s.transform(t),c&&e.splice(u,1);continue}var h=e[v(o)];if(t.option("sequences")&&r&&!s.alternative&&h instanceof tt&&h.body instanceof qe&&S(u)==e.length&&c instanceof ge){a=!0,(s=s.clone()).alternative=p(Ae,c,{body:[c,p(qe,c,{value:null})]}),e[o]=s.transform(t),e.splice(u,1);continue}}}function E(i){if(!i)return!1;for(var a=o+1,s=e.length;a=0;){var i=e[n];if(!(i instanceof lt&&d(i)))break}return n}}function _(e,t){for(var n,i=t.self(),r=0,o=0,s=e.length;r!e.value)}function h(e,t){if(!(e.length<2)){for(var n=[],i=0,r=0,o=e.length;r=t.sequences_limit&&c();var u=s.body;n.length>0&&(u=u.drop_side_effect_free(t)),u&&Si(n,u)}else s instanceof ct&&d(s)||s instanceof Ue||c(),e[i++]=s}c(),e.length=i,i!=o&&(a=!0)}function c(){if(n.length){var t=Ei(n[0],n);e[i++]=p(ge,t,{body:t}),n=[]}}}function E(e,t){if(!(e instanceof Ae))return e;for(var n=null,i=0,r=e.body.length;ie instanceof ke||(e instanceof Ct&&"in"===e.operator?Fn:void 0))||(s.init?s.init=n(s.init):(s.init=i.body,r--,a=!0))}}else s instanceof we?s.init instanceof pt||s.init instanceof ft||(s.object=n(s.object)):s instanceof tt?s.condition=n(s.condition):(s instanceof nt||s instanceof Ne)&&(s.expression=n(s.expression));if(t.option("conditionals")&&s instanceof tt){var u=[],c=E(s.body,u),l=E(s.alternative,u);if(!1!==c&&!1!==l&&u.length>0){var f=u.length;u.push(p(tt,s,{condition:s.condition,body:c||p(Te,s.body),alternative:l})),u.unshift(r,1),[].splice.apply(e,u),o+=f,r+=f+1,i=null,a=!0;continue}}e[r++]=s,i=s instanceof ge?s:null}e.length=r}function D(e,n){if(e instanceof ct){var i,r=e.definitions[e.definitions.length-1];if(r.value instanceof wt)if(n instanceof Ft?i=[n]:n instanceof Dt&&(i=n.expressions.slice()),i){var a=!1;do{var s=i[0];if(!(s instanceof Ft))break;if("="!=s.operator)break;if(!(s.left instanceof St))break;var u=s.left.expression;if(!(u instanceof an))break;if(r.name.name!=u.name)break;if(!s.right.is_constant_expression(o))break;var c=s.left.property;if(c instanceof de&&(c=c.evaluate(t)),c instanceof de)break;c=""+c;var l=t.option("ecma")<2015&&t.has_directive("use strict")?function(e){return e.key!=c&&e.key&&e.key.name!=c}:function(e){return e.key&&e.key.name!=c};if(!r.value.properties.every(l))break;var f=r.value.properties.filter((function(e){return e.key===c}))[0];f?f.value=new Dt({start:f.start,expressions:[f.value.clone(),s.right.clone()],end:f.end}):r.value.properties.push(p(Nt,s,{key:c,value:s.right})),i.shift(),a=!0}while(i.length);return a&&i}}}function S(e){for(var t,n=0,i=-1,r=e.length;ni instanceof lt?(e.warn("Declarations in unreachable code! [{file}:{line},{col}]",i.start),i.remove_initializers(),n.push(i),!0):i instanceof Ue&&(i===t||!e.has_directive("use strict"))?(n.push(i===t?i:p(lt,i,{definitions:[p(_t,i,{name:p(Xt,i.name,i.name),value:null})]})),!0):i instanceof ke||void 0)}function Ni(e){return e instanceof pn?e.getValue():e instanceof yt&&"void"==e.operator&&e.expression instanceof pn?void 0:e}function ki(e,t){return oi(e,8)||e instanceof Sn||e instanceof yt&&"void"==e.operator&&!e.expression.has_side_effects(t)}!function(e){function t(e){return/strict/.test(e.option("pure_getters"))}de.DEFMETHOD("may_throw_on_access",(function(e){return!e.option("pure_getters")||this._dot_throw(e)})),e(de,t),e(gn,u),e(Sn,u),e(pn,s),e(Rt,s),e(wt,(function(e){if(!t(e))return!1;for(var n=this.properties.length;--n>=0;)if(this.properties[n]._dot_throw(e))return!0;return!1})),e(Pt,s),e(xt,s),e(It,u),e(Le,(function(e){return this.expression._dot_throw(e)})),e(Be,s),e(Ke,s),e(bt,s),e(yt,(function(){return"void"==this.operator})),e(Ct,(function(e){return("&&"==this.operator||"||"==this.operator||"??"==this.operator)&&(this.left._dot_throw(e)||this.right._dot_throw(e))})),e(Ft,(function(e){return"="==this.operator&&this.right._dot_throw(e)})),e(Ot,(function(e){return this.consequent._dot_throw(e)||this.alternative._dot_throw(e)})),e(vt,(function(e){return!!t(e)&&!(this.expression instanceof Be&&"prototype"==this.property)})),e(Dt,(function(e){return this.tail_node()._dot_throw(e)})),e(an,(function(e){if("arguments"===this.name)return!1;if(oi(this,8))return!0;if(!t(e))return!1;if(Ci(this)&&this.is_declared(e))return!1;if(this.is_immutable())return!1;var n=this.fixed_value();return!n||n._dot_throw(e)}))}((function(e,t){e.DEFMETHOD("_dot_throw",t)})),function(e){const t=E("! delete"),n=E("in instanceof == != === !== < <= >= >");e(de,s),e(yt,(function(){return t.has(this.operator)})),e(Ct,(function(){return n.has(this.operator)||Ii.has(this.operator)&&this.left.is_boolean()&&this.right.is_boolean()})),e(Ot,(function(){return this.consequent.is_boolean()&&this.alternative.is_boolean()})),e(Ft,(function(){return"="==this.operator&&this.right.is_boolean()})),e(Dt,(function(){return this.tail_node().is_boolean()})),e(bn,u),e(yn,u)}((function(e,t){e.DEFMETHOD("is_boolean",t)})),function(e){e(de,s),e(dn,u);var t=E("+ - ~ ++ --");e(Tt,(function(){return t.has(this.operator)}));var n=E("- * / % & | ^ << >> >>>");e(Ct,(function(e){return n.has(this.operator)||"+"==this.operator&&this.left.is_number(e)&&this.right.is_number(e)})),e(Ft,(function(e){return n.has(this.operator.slice(0,-1))||"="==this.operator&&this.right.is_number(e)})),e(Dt,(function(e){return this.tail_node().is_number(e)})),e(Ot,(function(e){return this.consequent.is_number(e)&&this.alternative.is_number(e)}))}((function(e,t){e.DEFMETHOD("is_number",t)})),(Fi=function(e,t){e.DEFMETHOD("is_string",t)})(de,s),Fi(_n,u),Fi(Xe,u),Fi(yt,(function(){return"typeof"==this.operator})),Fi(Ct,(function(e){return"+"==this.operator&&(this.left.is_string(e)||this.right.is_string(e))})),Fi(Ft,(function(e){return("="==this.operator||"+="==this.operator)&&this.right.is_string(e)})),Fi(Dt,(function(e){return this.tail_node().is_string(e)})),Fi(Ot,(function(e){return this.consequent.is_string(e)&&this.alternative.is_string(e)}));var Ii=E("&& || ??"),Li=E("delete ++ --");function Pi(e,t){return t instanceof Tt&&Li.has(t.operator)?t.expression:t instanceof Ft&&t.left===e?e:void 0}function Vi(e,t){return e.size()>t.size()?t:e}function Bi(e,t){return Vi(p(ge,e,{body:e}),p(ge,t,{body:t})).body}function Ki(e,t,n){return(Pn(e)?Bi:Vi)(t,n)}function Ui(e){const t=new Map;for(var n of Object.keys(e))t.set(n,E(e[n]));return t}!function(e){function t(e,t){e.warn("global_defs "+t.print_to_string()+" redefined [{file}:{line},{col}]",t.start)}Ie.DEFMETHOD("resolve_defines",(function(e){return e.option("global_defs")?(this.figure_out_scope({ie8:e.option("ie8")}),this.transform(new Rn((function(n){var i=n._find_defs(e,"");if(i){for(var r,o=0,a=n;(r=this.parent(o++))&&r instanceof St&&r.expression===a;)a=r;if(!Pi(a,r))return i;t(e,n)}})))):this})),e(de,a),e(vt,(function(e,t){return this.expression._find_defs(e,"."+this.property+t)})),e(Ht,(function(e){this.global()&&D(e.option("global_defs"),this.name)&&t(e,this)})),e(an,(function(e,t){if(this.global()){var n=e.option("global_defs"),i=this.name+t;return D(n,i)?function e(t,n){if(t instanceof de)return p(t.CTOR,n,t);if(Array.isArray(t))return p(Rt,n,{elements:t.map((function(t){return e(t,n)}))});if(t&&"object"==typeof t){var i=[];for(var r in t)D(t,r)&&i.push(p(Nt,n,{key:r,value:e(t[r],n)}));return p(wt,n,{properties:i})}return gi(t,n)}(n[i],this):void 0}}))}((function(e,t){e.DEFMETHOD("_find_defs",t)}));var Gi=["constructor","toString","valueOf"],Hi=Ui({Array:["indexOf","join","lastIndexOf","slice"].concat(Gi),Boolean:Gi,Function:Gi,Number:["toExponential","toFixed","toPrecision"].concat(Gi),Object:Gi,RegExp:["test"].concat(Gi),String:["charAt","charCodeAt","concat","indexOf","italics","lastIndexOf","match","replace","search","slice","split","substr","substring","toLowerCase","toUpperCase","trim"].concat(Gi)}),Xi=Ui({Array:["isArray"],Math:["abs","acos","asin","atan","ceil","cos","exp","floor","log","round","sin","sqrt","tan","atan2","pow","max","min"],Number:["isFinite","isNaN"],Object:["create","getOwnPropertyDescriptor","getOwnPropertyNames","getPrototypeOf","isExtensible","isFrozen","isSealed","keys"],String:["fromCharCode"]});!function(e){de.DEFMETHOD("evaluate",(function(e){if(!e.option("evaluate"))return this;var t=this._eval(e,1);return!t||t instanceof RegExp?t:"function"==typeof t||"object"==typeof t?this:t}));var t=E("! ~ - + void");de.DEFMETHOD("is_constant",(function(){return this instanceof pn?!(this instanceof hn):this instanceof yt&&this.expression instanceof pn&&t.has(this.operator)})),e(me,(function(){throw new Error(d("Cannot evaluate a statement [{file}:{line},{col}]",this.start))})),e(Pe,c),e(Pt,c),e(de,c),e(pn,(function(){return this.getValue()})),e(mn,c),e(hn,(function(e){let t=e.evaluated_regexps.get(this);if(void 0===t&&y(this.value.source)){try{t=(0,eval)(this.print_to_string())}catch(e){t=null}e.evaluated_regexps.set(this,t)}return t||this})),e(Xe,(function(){return 1!==this.segments.length?this:this.segments[0].value})),e(Be,(function(e){if(e.option("unsafe")){var t=function(){};return t.node=this,t.toString=function(){return this.node.print_to_string()},t}return this})),e(Rt,(function(e,t){if(e.option("unsafe")){for(var n=[],i=0,r=this.elements.length;i>":r=n>>o;break;case">>>":r=n>>>o;break;case"==":r=n==o;break;case"===":r=n===o;break;case"!=":r=n!=o;break;case"!==":r=n!==o;break;case"<":r=n":r=n>o;break;case">=":r=n>=o;break;default:return this}return isNaN(r)&&e.find_parent(Ne)?this:r})),e(Ot,(function(e,t){var n=this.condition._eval(e,t);if(n===this.condition)return this;var i=n?this.consequent:this.alternative,r=i._eval(e,t);return r===i?this:r})),e(an,(function(e,t){var n,i=this.fixed_value();if(!i)return this;if(D(i,"_eval"))n=i._eval();else{if(this._eval=c,n=i._eval(e,t),delete this._eval,n===i)return this;i._eval=function(){return n}}if(n&&"object"==typeof n){var r=this.definition().escaped;if(r&&t>r)return this}return n}));var r={Array:Array,Math:Math,Number:Number,Object:Object,String:String},o=Ui({Math:["E","LN10","LN2","LOG2E","LOG10E","PI","SQRT1_2","SQRT2"],Number:["MAX_VALUE","MIN_VALUE","NaN","NEGATIVE_INFINITY","POSITIVE_INFINITY"]});e(St,(function(e,t){if(e.option("unsafe")){var n=this.property;if(n instanceof de&&(n=n._eval(e,t))===this.property)return this;var i,a=this.expression;if(Ci(a)){var s,u="hasOwnProperty"===a.name&&"call"===n&&(s=e.parent()&&e.parent().args)&&s&&s[0]&&s[0].evaluate(e);if(null==(u=u instanceof vt?u.expression:u)||u.thedef&&u.thedef.undeclared)return this.clone();var c=o.get(a.name);if(!c||!c.has(n))return this;i=r[a.name]}else{if(!(i=a._eval(e,t+1))||i===a||!D(i,n))return this;if("function"==typeof i)switch(n){case"name":return i.node.name?i.node.name.name:"";case"length":return i.node.argnames.length;default:return this}}return i[n]}return this})),e(Et,(function(e,t){var n=this.expression;if(e.option("unsafe")&&n instanceof St){var i,o=n.property;if(o instanceof de&&(o=o._eval(e,t))===n.property)return this;var a=n.expression;if(Ci(a)){var s="hasOwnProperty"===a.name&&"call"===o&&this.args[0]&&this.args[0].evaluate(e);if(null==(s=s instanceof vt?s.expression:s)||s.thedef&&s.thedef.undeclared)return this.clone();var u=Xi.get(a.name);if(!u||!u.has(o))return this;i=r[a.name]}else{if((i=a._eval(e,t+1))===a||!i)return this;var c=Hi.get(i.constructor.name);if(!c||!c.has(o))return this}for(var l=[],f=0,p=this.args.length;f=":return r.operator="<",r;case">":return r.operator="<=",r}switch(o){case"==":return r.operator="!=",r;case"!=":return r.operator="==",r;case"===":return r.operator="!==",r;case"!==":return r.operator="===",r;case"&&":return r.operator="||",r.left=r.left.negate(e,i),r.right=r.right.negate(e),n(this,r,i);case"||":return r.operator="&&",r.left=r.left.negate(e,i),r.right=r.right.negate(e),n(this,r,i);case"??":return r.right=r.right.negate(e),n(this,r,i)}return t(this)}))}((function(e,t){e.DEFMETHOD("negate",(function(e,n){return t.call(this,e,n)}))}));var zi=E("Boolean decodeURI decodeURIComponent Date encodeURI encodeURIComponent Error escape EvalError isFinite isNaN Number Object parseFloat parseInt RangeError ReferenceError String SyntaxError TypeError unescape URIError");Et.DEFMETHOD("is_expr_pure",(function(e){if(e.option("unsafe")){var t=this.expression,n=this.args&&this.args[0]&&this.args[0].evaluate(e);if(t.expression&&"hasOwnProperty"===t.expression.name&&(null==n||n.thedef&&n.thedef.undeclared))return!1;if(Ci(t)&&zi.has(t.name))return!0;let i;if(t instanceof vt&&Ci(t.expression)&&(i=Xi.get(t.expression.name))&&i.has(t.property))return!0}return!!b(this,wn)||!e.pure_funcs(this)})),de.DEFMETHOD("is_call_pure",s),vt.DEFMETHOD("is_call_pure",(function(e){if(!e.option("unsafe"))return;const t=this.expression;let n;return t instanceof Rt?n=Hi.get("Array"):t.is_boolean()?n=Hi.get("Boolean"):t.is_number(e)?n=Hi.get("Number"):t instanceof hn?n=Hi.get("RegExp"):t.is_string(e)?n=Hi.get("String"):this.may_throw_on_access(e)||(n=Hi.get("Object")),n&&n.has(this.property)}));const Wi=new Set(["Number","String","Array","Object","Function","Promise"]);function Yi(e){return e&&e.aborts()}!function(e){function t(e,t){for(var n=e.length;--n>=0;)if(e[n].has_side_effects(t))return!0;return!1}e(de,u),e(Te,s),e(pn,s),e(ln,s),e(ve,(function(e){return t(this.body,e)})),e(Et,(function(e){return!(this.is_expr_pure(e)||this.expression.is_call_pure(e)&&!this.expression.has_side_effects(e))||t(this.args,e)})),e(nt,(function(e){return this.expression.has_side_effects(e)||t(this.body,e)})),e(ot,(function(e){return this.expression.has_side_effects(e)||t(this.body,e)})),e(at,(function(e){return t(this.body,e)||this.bcatch&&this.bcatch.has_side_effects(e)||this.bfinally&&this.bfinally.has_side_effects(e)})),e(tt,(function(e){return this.condition.has_side_effects(e)||this.body&&this.body.has_side_effects(e)||this.alternative&&this.alternative.has_side_effects(e)})),e(be,(function(e){return this.body.has_side_effects(e)})),e(ge,(function(e){return this.body.has_side_effects(e)})),e(Pe,s),e(Pt,(function(e){return!(!this.extends||!this.extends.has_side_effects(e))||t(this.properties,e)})),e(Ct,(function(e){return this.left.has_side_effects(e)||this.right.has_side_effects(e)})),e(Ft,u),e(Ot,(function(e){return this.condition.has_side_effects(e)||this.consequent.has_side_effects(e)||this.alternative.has_side_effects(e)})),e(Tt,(function(e){return Li.has(this.operator)||this.expression.has_side_effects(e)})),e(an,(function(e){return!this.is_declared(e)&&!Wi.has(this.name)})),e(Zt,s),e(Ht,s),e(wt,(function(e){return t(this.properties,e)})),e(xt,(function(e){return this.computed_key()&&this.key.has_side_effects(e)||this.value.has_side_effects(e)})),e(Vt,(function(e){return this.computed_key()&&this.key.has_side_effects(e)||this.static&&this.value&&this.value.has_side_effects(e)})),e(Lt,(function(e){return this.computed_key()&&this.key.has_side_effects(e)})),e(It,(function(e){return this.computed_key()&&this.key.has_side_effects(e)})),e(kt,(function(e){return this.computed_key()&&this.key.has_side_effects(e)})),e(Rt,(function(e){return t(this.elements,e)})),e(vt,(function(e){return this.expression.may_throw_on_access(e)||this.expression.has_side_effects(e)})),e(At,(function(e){return this.expression.may_throw_on_access(e)||this.expression.has_side_effects(e)||this.property.has_side_effects(e)})),e(Dt,(function(e){return t(this.expressions,e)})),e(ct,(function(e){return t(this.definitions,e)})),e(_t,(function(){return this.value})),e(ze,s),e(Xe,(function(e){return t(this.segments,e)}))}((function(e,t){e.DEFMETHOD("has_side_effects",t)})),function(e){function t(e,t){for(var n=e.length;--n>=0;)if(e[n].may_throw(t))return!0;return!1}e(de,u),e(pn,s),e(Te,s),e(Pe,s),e(Ht,s),e(ln,s),e(Pt,(function(e){return!(!this.extends||!this.extends.may_throw(e))||t(this.properties,e)})),e(Rt,(function(e){return t(this.elements,e)})),e(Ft,(function(e){return!!this.right.may_throw(e)||!(!e.has_directive("use strict")&&"="==this.operator&&this.left instanceof an)&&this.left.may_throw(e)})),e(Ct,(function(e){return this.left.may_throw(e)||this.right.may_throw(e)})),e(ve,(function(e){return t(this.body,e)})),e(Et,(function(e){return!!t(this.args,e)||!this.is_expr_pure(e)&&(!!this.expression.may_throw(e)||(!(this.expression instanceof Pe)||t(this.expression.body,e)))})),e(ot,(function(e){return this.expression.may_throw(e)||t(this.body,e)})),e(Ot,(function(e){return this.condition.may_throw(e)||this.consequent.may_throw(e)||this.alternative.may_throw(e)})),e(ct,(function(e){return t(this.definitions,e)})),e(vt,(function(e){return this.expression.may_throw_on_access(e)||this.expression.may_throw(e)})),e(tt,(function(e){return this.condition.may_throw(e)||this.body&&this.body.may_throw(e)||this.alternative&&this.alternative.may_throw(e)})),e(be,(function(e){return this.body.may_throw(e)})),e(wt,(function(e){return t(this.properties,e)})),e(xt,(function(e){return this.value.may_throw(e)})),e(Vt,(function(e){return this.computed_key()&&this.key.may_throw(e)||this.static&&this.value&&this.value.may_throw(e)})),e(Lt,(function(e){return this.computed_key()&&this.key.may_throw(e)})),e(It,(function(e){return this.computed_key()&&this.key.may_throw(e)})),e(kt,(function(e){return this.computed_key()&&this.key.may_throw(e)})),e(qe,(function(e){return this.value&&this.value.may_throw(e)})),e(Dt,(function(e){return t(this.expressions,e)})),e(ge,(function(e){return this.body.may_throw(e)})),e(At,(function(e){return this.expression.may_throw_on_access(e)||this.expression.may_throw(e)||this.property.may_throw(e)})),e(nt,(function(e){return this.expression.may_throw(e)||t(this.body,e)})),e(an,(function(e){return!this.is_declared(e)&&!Wi.has(this.name)})),e(Zt,s),e(at,(function(e){return this.bcatch?this.bcatch.may_throw(e):t(this.body,e)||this.bfinally&&this.bfinally.may_throw(e)})),e(Tt,(function(e){return!("typeof"==this.operator&&this.expression instanceof an)&&this.expression.may_throw(e)})),e(_t,(function(e){return!!this.value&&this.value.may_throw(e)}))}((function(e,t){e.DEFMETHOD("may_throw",t)})),function(e){function t(e){let t=!0;return Cn(this,n=>{if(n instanceof an){if(oi(this,16))return t=!1,Fn;var r=n.definition();if(i(r,this.enclosed)&&!this.variables.has(r.name)){if(e){var o=e.find_variable(n);if(r.undeclared?!o:o===r)return t="f",!0}return t=!1,Fn}return!0}if(n instanceof ln&&this instanceof Ke)return t=!1,Fn}),t}e(de,s),e(pn,u),e(Pt,(function(e){if(this.extends&&!this.extends.is_constant_expression(e))return!1;for(const t of this.properties){if(t.computed_key()&&!t.key.is_constant_expression(e))return!1;if(t.static&&t.value&&!t.value.is_constant_expression(e))return!1}return t.call(this,e)})),e(Pe,t),e(Tt,(function(){return this.expression.is_constant_expression()})),e(Ct,(function(){return this.left.is_constant_expression()&&this.right.is_constant_expression()})),e(Rt,(function(){return this.elements.every(e=>e.is_constant_expression())})),e(wt,(function(){return this.properties.every(e=>e.is_constant_expression())})),e(xt,(function(){return!(this.key instanceof de)&&this.value.is_constant_expression()}))}((function(e,t){e.DEFMETHOD("is_constant_expression",t)})),function(e){function t(){for(var e=0;e{if(e instanceof Ht){const n=e.definition();!t&&!n.global||o.has(n.id)||o.set(n.id,n)}}),n.value){if(n.name instanceof Ge)n.walk(_);else{var r=n.name.definition();g(c,r.id,n.value),r.chained||n.name.fixed_value()!==n.value||a.set(r.id,n)}n.value.has_side_effects(e)&&n.value.walk(_)}})),!0}return h(r,s)}}));t.walk(_),_=new Mn(h),o.forEach((function(e){var t=c.get(e.id);t&&t.forEach((function(e){e.walk(_)}))}));var d=new Rn((function(s,c,_){var h=d.parent();if(i){const e=r(s);if(e instanceof an){var E=e.definition(),g=o.has(E.id);if(s instanceof Ft){if(!g||a.has(E.id)&&a.get(E.id)!==s)return Di(h,s,s.right.transform(d))}else if(!g)return _?f.skip:p(dn,s,{value:0})}}if(l===t){if(s.name&&(s instanceof Kt&&!S(e.option("keep_classnames"),(E=s.name.definition()).name)||s instanceof Be&&!S(e.option("keep_fnames"),(E=s.name.definition()).name))&&(!o.has(E.id)||E.orig.length>1)&&(s.name=null),s instanceof Pe&&!(s instanceof Ve))for(var D=!e.option("keep_fargs"),v=s.argnames,A=v.length;--A>=0;){var T=v[A];T instanceof Le&&(T=T.expression),T instanceof Mt&&(T=T.left),T instanceof Ge||o.has(T.definition().id)?D=!1:(ai(T,1),D&&(v.pop(),e[T.unreferenced()?"warn":"info"]("Dropping unused function argument {name} [{file}:{line},{col}]",R(T))))}if((s instanceof Ue||s instanceof Bt)&&s!==t){const t=s.name.definition();if(!(t.global&&!n||o.has(t.id))){if(e[s.name.unreferenced()?"warn":"info"]("Dropping unused function {name} [{file}:{line},{col}]",R(s.name)),t.eliminated++,s instanceof Bt){const t=s.drop_side_effect_free(e);if(t)return p(ge,s,{body:t})}return _?f.skip:p(Te,s)}}if(s instanceof ct&&!(h instanceof we&&h.init===s)){var y=!(h instanceof Ie||s instanceof lt),b=[],C=[],O=[],F=[];switch(s.definitions.forEach((function(t){t.value&&(t.value=t.value.transform(d));var n=t.name instanceof Ge,r=n?new Yn(null,{name:""}):t.name.definition();if(y&&r.global)return O.push(t);if(!i&&!y||n&&(t.name.names.length||t.name.is_array||1!=e.option("pure_getters"))||o.has(r.id)){if(t.value&&a.has(r.id)&&a.get(r.id)!==t&&(t.value=t.value.drop_side_effect_free(e)),t.name instanceof Xt){var c=u.get(r.id);if(c.length>1&&(!t.value||r.orig.indexOf(t.name)>r.eliminated)){if(e.warn("Dropping duplicated definition of variable {name} [{file}:{line},{col}]",R(t.name)),t.value){var l=p(an,t.name,t.name);r.references.push(l);var f=p(Ft,t,{operator:"=",left:l,right:t.value});a.get(r.id)===t&&a.set(r.id,f),F.push(f.transform(d))}return m(c,t),void r.eliminated++}}t.value?(F.length>0&&(O.length>0?(F.push(t.value),t.value=Ei(t.value,F)):b.push(p(ge,s,{body:Ei(s,F)})),F=[]),O.push(t)):C.push(t)}else if(r.orig[0]instanceof tn){(_=t.value&&t.value.drop_side_effect_free(e))&&F.push(_),t.value=null,C.push(t)}else{var _;(_=t.value&&t.value.drop_side_effect_free(e))?(n||e.warn("Side effects in initialization of unused variable {name} [{file}:{line},{col}]",R(t.name)),F.push(_)):n||e[t.name.unreferenced()?"warn":"info"]("Dropping unused variable {name} [{file}:{line},{col}]",R(t.name)),r.eliminated++}})),(C.length>0||O.length>0)&&(s.definitions=C.concat(O),b.push(s)),F.length>0&&b.push(p(ge,s,{body:Ei(s,F)})),b.length){case 0:return _?f.skip:p(Te,s);case 1:return b[0];default:return _?f.splice(b):p(Ae,s,{body:b})}}if(s instanceof Re)return c(s,this),s.init instanceof Ae&&(M=s.init,s.init=M.body.pop(),M.body.push(s)),s.init instanceof ge?s.init=s.init.body:Ai(s.init)&&(s.init=null),M?_?f.splice(M.body):M:s;if(s instanceof be&&s.body instanceof Re){if(c(s,this),s.body instanceof Ae){var M=s.body;return s.body=M.body.pop(),M.body.push(s),_?f.splice(M.body):M}return s}if(s instanceof Ae)return c(s,this),_&&s.body.every(Ti)?f.splice(s.body):s;if(s instanceof ke){const e=l;return l=s,c(s,this),l=e,s}}function R(e){return{name:e.name,file:e.start.file,line:e.start.line,col:e.start.col}}}));function h(e,n){var i;const s=r(e);if(s instanceof an&&!di(e.left,zt)&&t.variables.get(s.name)===(i=s.definition()))return e instanceof Ft&&(e.right.walk(_),i.chained||e.left.fixed_value()!==e.right||a.set(i.id,e)),!0;if(e instanceof an){if(i=e.definition(),!o.has(i.id)&&(o.set(i.id,i),i.orig[0]instanceof tn)){const e=i.scope.is_block_scope()&&i.scope.get_defun_scope().variables.get(i.name);e&&o.set(e.id,e)}return!0}if(e instanceof ke){var u=l;return l=e,n(),l=u,!0}}t.transform(d)})),ke.DEFMETHOD("hoist_declarations",(function(e){var t=this;if(e.has_directive("use asm"))return t;if(!Array.isArray(t.body))return t;var n=e.option("hoist_funs"),i=e.option("hoist_vars");if(n||i){var r=[],o=[],a=new Map,s=0,u=0;Cn(t,e=>e instanceof ke&&e!==t||(e instanceof lt?(++u,!0):void 0)),i=i&&u>1;var c=new Rn((function(u){if(u!==t){if(u instanceof Ee)return r.push(u),p(Te,u);if(n&&u instanceof Ue&&!(c.parent()instanceof ht)&&c.parent()===t)return o.push(u),p(Te,u);if(i&&u instanceof lt){u.definitions.forEach((function(e){e.name instanceof Ge||(a.set(e.name.name,e),++s)}));var l=u.to_assignments(e),f=c.parent();if(f instanceof we&&f.init===u){if(null==l){var _=u.definitions[0].name;return p(an,_,_)}return l}return f instanceof Re&&f.init===u?l:l?p(ge,u,{body:l}):p(Te,u)}if(u instanceof ke)return u}}));if(t=t.transform(c),s>0){var l=[];const e=t instanceof Pe,n=e?t.args_as_names():null;if(a.forEach((t,i)=>{e&&n.some(e=>e.name===t.name.name)?a.delete(i):((t=t.clone()).value=null,l.push(t),a.set(i,t))}),l.length>0){for(var f=0;f"string"==typeof e.key)){a(o,this);const e=new Map,t=[];return c.properties.forEach((function(n){t.push(p(_t,o,{name:s(r,n.key,e),value:n.value}))})),i.set(u.id,e),f.splice(t)}}else if(o instanceof St&&o.expression instanceof an){const e=i.get(o.expression.definition().id);if(e){const t=e.get(String(Ni(o.property))),n=p(an,o,{name:t.name,scope:o.expression.scope,thedef:t});return n.reference({}),n}}function s(e,n,i){const r=p(e.CTOR,e,{name:t.make_var_name(e.name+"_"+n),scope:t}),o=t.def_variable(r);return i.set(String(n),o),t.enclosed.push(o),r}}));return t.transform(r)})),function(e){function t(e,t,n){var i=e.length;if(!i)return null;for(var r=[],o=!1,a=0;a0&&(u[0].body=s.concat(u[0].body)),e.body=u;n=u[u.length-1];){var d=n.body[n.body.length-1];if(d instanceof Ze&&t.loopcontrol_target(d)===e&&n.body.pop(),n.body.length||n instanceof ot&&(o||n.expression.has_side_effects(t)))break;u.pop()===o&&(o=null)}if(0==u.length)return p(Ae,e,{body:s.concat(p(ge,e.expression,{body:e.expression}))}).optimize(t);if(1==u.length&&(u[0]===a||u[0]===o)){var m=!1,h=new Mn((function(t){if(m||t instanceof Pe||t instanceof ge)return!0;t instanceof Ze&&h.loopcontrol_target(t)===e&&(m=!0)}));if(e.walk(h),!m){var E,g=u[0].body.slice();return(E=u[0].expression)&&g.unshift(p(ge,E,{body:E})),g.unshift(p(ge,e.expression,{body:e.expression})),p(Ae,e,{body:g}).optimize(t)}}return e;function D(e,n){n&&!Yi(n)?n.body=n.body.concat(e.body):xi(t,e,s)}})),ci(at,(function(e,t){if(wi(e.body,t),e.bcatch&&e.bfinally&&e.bfinally.body.every(Ai)&&(e.bfinally=null),t.option("dead_code")&&e.body.every(Ai)){var n=[];return e.bcatch&&xi(t,e.bcatch,n),e.bfinally&&n.push(...e.bfinally.body),p(Ae,e,{body:n}).optimize(t)}return e})),ct.DEFMETHOD("remove_initializers",(function(){var e=[];this.definitions.forEach((function(t){t.name instanceof Ht?(t.value=null,e.push(t)):Cn(t.name,n=>{n instanceof Ht&&e.push(p(_t,t,{name:n,value:null}))})})),this.definitions=e})),ct.DEFMETHOD("to_assignments",(function(e){var t=e.option("reduce_vars"),n=this.definitions.reduce((function(e,n){if(!n.value||n.name instanceof Ge){if(n.value){var i=p(_t,n,{name:n.name,value:n.value}),r=p(lt,n,{definitions:[i]});e.push(r)}}else{var o=p(an,n.name,n.name);e.push(p(Ft,n,{operator:"=",left:o,right:n.value})),t&&(o.definition().fixed=!1)}return(n=n.name.definition()).eliminated++,n.replaced--,e}),[]);return 0==n.length?null:Ei(this,n)})),ci(ct,(function(e){return 0==e.definitions.length?p(Te,e):e})),ci(mt,(function(e){return e})),ci(Et,(function(e,t){var n=e.expression,i=n;cr(e,t,e.args);var r=e.args.every(e=>!(e instanceof Le));if(t.option("reduce_vars")&&i instanceof an&&!b(e,Nn)){const e=i.fixed_value();Ji(e,t)||(i=e)}var o=i instanceof Pe;if(t.option("unused")&&r&&o&&!i.uses_arguments&&!i.pinned()){for(var a=0,s=0,u=0,c=e.args.length;u=i.argnames.length;if(l||oi(i.argnames[u],1)){if(D=e.args[u].drop_side_effect_free(t))e.args[a++]=D;else if(!l){e.args[a++]=p(dn,e.args[u],{value:0});continue}}else e.args[a++]=e.args[u];s=a}e.args.length=s}if(t.option("unsafe"))if(Ci(n))switch(n.name){case"Array":if(1!=e.args.length)return p(Rt,e,{elements:e.args}).optimize(t);if(e.args[0]instanceof dn&&e.args[0].value<=11){const t=[];for(let n=0;n=1&&e.args.length<=2&&e.args.every(e=>{var n=e.evaluate(t);return f.push(n),e!==n})&&y(f[0])){let[n,i]=f;n=A(new RegExp(n).source);const r=p(hn,e,{value:{source:n,flags:i}});if(r._eval(t)!==r)return r;t.warn("Error converting {expr} [{file}:{line},{col}]",{expr:e.print_to_string(),file:e.start.file,line:e.start.line,col:e.start.col})}}else if(n instanceof vt)switch(n.property){case"toString":if(0==e.args.length&&!n.expression.may_throw_on_access(t))return p(Ct,e,{left:p(_n,e,{value:""}),operator:"+",right:n.expression}).optimize(t);break;case"join":if(n.expression instanceof Rt)e:{var _;if(!(e.args.length>0&&(_=e.args[0].evaluate(t))===e.args[0])){var d,m=[],h=[];for(u=0,c=n.expression.elements.length;u0&&(m.push(p(_n,e,{value:h.join(_)})),h.length=0),m.push(E))}return h.length>0&&m.push(p(_n,e,{value:h.join(_)})),0==m.length?p(_n,e,{value:""}):1==m.length?m[0].is_string(t)?m[0]:p(Ct,m[0],{operator:"+",left:p(_n,e,{value:""}),right:m[0]}):""==_?(d=m[0].is_string(t)||m[1].is_string(t)?m.shift():p(_n,e,{value:""}),m.reduce((function(e,t){return p(Ct,t,{operator:"+",left:e,right:t})}),d).optimize(t)):((D=e.clone()).expression=D.expression.clone(),D.expression.expression=D.expression.expression.clone(),D.expression.expression.elements=m,Ki(t,e,D));var D}}break;case"charAt":if(n.expression.is_string(t)){var S=e.args[0],v=S?S.evaluate(t):0;if(v!==S)return p(At,n,{expression:n.expression,property:gi(0|v,S||n)}).optimize(t)}break;case"apply":if(2==e.args.length&&e.args[1]instanceof Rt)return(P=e.args[1].elements.slice()).unshift(e.args[0]),p(Et,e,{expression:p(vt,n,{expression:n.expression,property:"call"}),args:P}).optimize(t);break;case"call":var T=n.expression;if(T instanceof an&&(T=T.fixed_value()),T instanceof Pe&&!T.contains_this())return(e.args.length?Ei(this,[e.args[0],p(Et,e,{expression:n.expression,args:e.args.slice(1)})]):p(Et,e,{expression:n.expression,args:[]})).optimize(t)}if(t.option("unsafe_Function")&&Ci(n)&&"Function"==n.name){if(0==e.args.length)return p(Be,e,{argnames:[],body:[]}).optimize(t);if(e.args.every(e=>e instanceof _n))try{var C=fe(R="n(function("+e.args.slice(0,-1).map((function(e){return e.value})).join(",")+"){"+e.args[e.args.length-1].value+"})"),O={ie8:t.option("ie8")};C.figure_out_scope(O);var F,M=new ui(t.options);(C=C.transform(M)).figure_out_scope(O),jn.reset(),C.compute_char_frequency(O),C.mangle_names(O),Cn(C,e=>{if(pi(e))return F=e,Fn});var R=Un();return Ae.prototype._codegen.call(F,F,R),e.args=[p(_n,e,{value:F.argnames.map((function(e){return e.print_to_string()})).join(",")}),p(_n,e.args[e.args.length-1],{value:R.get().replace(/^{|}$/g,"")})],e}catch(n){if(!(n instanceof te))throw n;t.warn("Error parsing code passed to new Function [{file}:{line},{col}]",e.args[e.args.length-1].start),t.warn(n.toString())}}var w=o&&i.body[0],x=o&&!i.is_generator&&!i.async,N=x&&t.option("inline")&&!e.is_expr_pure(t);if(N&&w instanceof qe){let n=w.value;if(!n||n.is_constant_expression()){n=n?n.clone(!0):p(Sn,e);const i=e.args.concat(n);return Ei(e,i).optimize(t)}if(1===i.argnames.length&&i.argnames[0]instanceof qt&&e.args.length<2&&n instanceof an&&n.name===i.argnames[0].name){let n;return e.args[0]instanceof St&&(n=t.parent())instanceof Et&&n.expression===e?Ei(e,[p(dn,e,{value:0}),e.args[0].optimize(t)]):(e.args[0]||p(Sn)).optimize(t)}}if(N){var k,I,L=-1;let o,a,s;if(r&&!i.uses_arguments&&!i.pinned()&&!(t.parent()instanceof Pt)&&!(i.name&&i instanceof Be)&&(a=function(e){var n=i.body,r=n.length;if(t.option("inline")<3)return 1==r&&B(e);e=null;for(var o=0;o!e.value))return!1}else{if(e)return!1;a instanceof Te||(e=a)}}return B(e)}(w))&&(n===i||b(e,xn)||t.option("unused")&&1==(o=n.definition()).references.length&&!er(t,o)&&i.is_constant_expression(n.scope))&&!b(e,wn|Nn)&&!i.contains_this()&&function(){var n=new Set;do{if((k=t.parent(++L)).is_block_scope()&&k.block_scope&&k.block_scope.variables.forEach((function(e){n.add(e.name)})),k instanceof st)k.argname&&n.add(k.argname.name);else if(k instanceof Ce)I=[];else if(k instanceof an&&k.fixed_value()instanceof ke)return!1}while(!(k instanceof ke));var r=!(k instanceof Ie)||t.toplevel.vars,o=t.option("inline");return!!function(e,t){for(var n=i.body.length,r=0;r=0;){var s=o.definitions[a].name;if(s instanceof Ge||e.has(s.name)||Mi.has(s.name)||k.var_names().has(s.name))return!1;I&&I.push(s.definition())}}}return!0}(n,o>=3&&r)&&(!!function(e,t){for(var n=0,r=i.argnames.length;n=2&&r)&&(!!function(){var t=new Set;const n=e=>{if(e instanceof ke){var n=new Set;return e.enclosed.forEach((function(e){n.add(e.name)})),e.variables.forEach((function(e){n.delete(e)})),n.forEach((function(e){t.add(e)})),!0}};for(let t=0;t=0;){var s=o.definitions[a].name;if(s instanceof Ge||t.has(s.name))return!1}}return!0}()&&(!I||0==I.length||!ir(i,I))))}()&&(s=mi(t))&&!tr(s,i)&&!function(){let e,n=0;for(;e=t.parent(n++);){if(e instanceof Mt)return!0;if(e instanceof ve)break}return!1}()&&!(k instanceof Pt))return ai(i,256),s.add_child_scope(i),Ei(e,function(n){var r=[],o=[];if(function(t,n){for(var r=i.argnames.length,o=e.args.length;--o>=r;)n.push(e.args[o]);for(o=r;--o>=0;){var a=i.argnames[o],s=e.args[o];if(oi(a,1)||!a.name||k.var_names().has(a.name))s&&n.push(s);else{var u=p(Xt,a,a);a.definition().orig.push(u),!s&&I&&(s=p(Sn,e)),K(t,n,u,s)}}t.reverse(),n.reverse()}(r,o),function(e,t){for(var n=t.length,r=0,o=i.body.length;re.name!=l.name)){var f=i.variables.get(l.name),_=p(an,l,l);f.references.push(_),t.splice(n++,0,p(Ft,c,{operator:"=",left:_,right:p(Sn,l)}))}}}}(r,o),o.push(n),r.length){const e=k.body.indexOf(t.parent(L-1))+1;k.body.splice(e,0,p(lt,i,{definitions:r}))}return o.map(e=>e.clone(!0))}(a)).optimize(t)}if(x&&t.option("side_effects")&&i.body.every(Ai)){var P=e.args.concat(p(Sn,e));return Ei(e,P).optimize(t)}if(t.option("negate_iife")&&t.parent()instanceof ge&&bi(e))return e.negate(t,!0);var V=e.evaluate(t);return V!==e?(V=gi(V,e).optimize(t),Ki(t,V,e)):e;function B(t){return t?t instanceof qe?t.value?t.value.clone(!0):p(Sn,e):t instanceof ge?p(yt,t,{operator:"void",expression:t.body.clone(!0)}):void 0:p(Sn,e)}function K(t,n,i,r){var o=i.definition();k.variables.set(i.name,o),k.enclosed.push(o),k.var_names().has(i.name)||(k.add_var_name(i.name),t.push(p(_t,i,{name:i,value:null})));var a=p(an,i,i);o.references.push(a),r&&n.push(p(Ft,e,{operator:"=",left:a,right:r.clone()}))}})),ci(gt,(function(e,t){return t.option("unsafe")&&Ci(e.expression)&&["Object","RegExp","Function","Error","Array"].includes(e.expression.name)?p(Et,e,e).transform(t):e})),ci(Dt,(function(e,t){if(!t.option("side_effects"))return e;var n,i,r=[];n=Pn(t),i=e.expressions.length-1,e.expressions.forEach((function(e,o){o0&&ki(r[o],t);)o--;o0)return(n=this.clone()).right=Ei(this.right,t.slice(o)),(t=t.slice(0,o)).push(n),Ei(this,t).optimize(e)}}return this}));var Qi=E("== === != !== * & | ^");function er(e,t){for(var n,i=0;n=e.parent(i);i++)if(n instanceof Pe||n instanceof Pt){var r=n.name;if(r&&r.definition()===t)break}return n}function tr(e,t){for(const n of t.enclosed){if(t.variables.has(n.name))continue;const i=e.find_variable(n.name);if(i){if(i===n)continue;return!0}}return!1}function nr(e,t){return e instanceof an||e.TYPE===t.TYPE}function ir(e,t){const n=e=>{if(e instanceof an&&i(e.definition(),t))return Fn};return On(e,(t,i)=>{if(t instanceof ke&&t!==e){var r=i.parent();if(r instanceof Et&&r.expression===t)return;return!Cn(t,n)||Fn}})}ci(Ct,(function(e,t){function n(){return e.left.is_constant()||e.right.is_constant()||!e.left.has_side_effects(t)&&!e.right.has_side_effects(t)}function i(t){if(n()){t&&(e.operator=t);var i=e.left;e.left=e.right,e.right=i}}if(Qi.has(e.operator)&&e.right.is_constant()&&!e.left.is_constant()&&(e.left instanceof Ct&&ce[e.left.operator]>=ce[e.operator]||i()),e=e.lift_sequences(t),t.option("comparisons"))switch(e.operator){case"===":case"!==":var r=!0;(e.left.is_string(t)&&e.right.is_string(t)||e.left.is_number(t)&&e.right.is_number(t)||e.left.is_boolean()&&e.right.is_boolean()||e.left.equivalent_to(e.right))&&(e.operator=e.operator.substr(0,2));case"==":case"!=":if(!r&&ki(e.left,t))e.left=p(gn,e.left);else if(t.option("typeofs")&&e.left instanceof _n&&"undefined"==e.left.value&&e.right instanceof yt&&"typeof"==e.right.operator){var o=e.right.expression;(o instanceof an?!o.is_declared(t):o instanceof St&&t.option("ie8"))||(e.right=o,e.left=p(Sn,e.left).optimize(t),2==e.operator.length&&(e.operator+="="))}else if(e.left instanceof an&&e.right instanceof an&&e.left.definition()===e.right.definition()&&((u=e.left.fixed_value())instanceof Rt||u instanceof Pe||u instanceof wt||u instanceof Pt))return p("="==e.operator[0]?bn:yn,e);break;case"&&":case"||":var a=e.left;if(a.operator==e.operator&&(a=a.right),a instanceof Ct&&a.operator==("&&"==e.operator?"!==":"===")&&e.right instanceof Ct&&a.operator==e.right.operator&&(ki(a.left,t)&&e.right.left instanceof gn||a.left instanceof gn&&ki(e.right.left,t))&&!a.right.has_side_effects(t)&&a.right.equivalent_to(e.right.right)){var s=p(Ct,e,{operator:a.operator.slice(0,-1),left:p(gn,e),right:a.right});return a!==e.left&&(s=p(Ct,e,{operator:e.operator,left:e.left.left,right:s})),s}}var u;if("+"==e.operator&&t.in_boolean_context()){var c=e.left.evaluate(t),l=e.right.evaluate(t);if(c&&"string"==typeof c)return t.warn("+ in boolean context always true [{file}:{line},{col}]",e.start),Ei(e,[e.right,p(bn,e)]).optimize(t);if(l&&"string"==typeof l)return t.warn("+ in boolean context always true [{file}:{line},{col}]",e.start),Ei(e,[e.left,p(bn,e)]).optimize(t)}if(t.option("comparisons")&&e.is_boolean()){if(!(t.parent()instanceof Ct)||t.parent()instanceof Ft){var f=p(yt,e,{operator:"!",expression:e.negate(t,Pn(t))});e=Ki(t,e,f)}if(t.option("unsafe_comps"))switch(e.operator){case"<":i(">");break;case"<=":i(">=")}}if("+"==e.operator){if(e.right instanceof _n&&""==e.right.getValue()&&e.left.is_string(t))return e.left;if(e.left instanceof _n&&""==e.left.getValue()&&e.right.is_string(t))return e.right;if(e.left instanceof Ct&&"+"==e.left.operator&&e.left.left instanceof _n&&""==e.left.left.getValue()&&e.right.is_string(t))return e.left=e.left.right,e.transform(t)}if(t.option("evaluate")){switch(e.operator){case"&&":if(!(c=!!oi(e.left,2)||!oi(e.left,4)&&e.left.evaluate(t)))return t.warn("Condition left of && always false [{file}:{line},{col}]",e.start),Di(t.parent(),t.self(),e.left).optimize(t);if(!(c instanceof de))return t.warn("Condition left of && always true [{file}:{line},{col}]",e.start),Ei(e,[e.left,e.right]).optimize(t);if(l=e.right.evaluate(t)){if(!(l instanceof de)){if("&&"==(_=t.parent()).operator&&_.left===t.self()||t.in_boolean_context())return t.warn("Dropping side-effect-free && [{file}:{line},{col}]",e.start),e.left.optimize(t)}}else{if(t.in_boolean_context())return t.warn("Boolean && always false [{file}:{line},{col}]",e.start),Ei(e,[e.left,p(yn,e)]).optimize(t);ai(e,4)}if("||"==e.left.operator)if(!(d=e.left.right.evaluate(t)))return p(Ot,e,{condition:e.left.left,consequent:e.right,alternative:e.left.right}).optimize(t);break;case"||":var _,d;if(!(c=!!oi(e.left,2)||!oi(e.left,4)&&e.left.evaluate(t)))return t.warn("Condition left of || always false [{file}:{line},{col}]",e.start),Ei(e,[e.left,e.right]).optimize(t);if(!(c instanceof de))return t.warn("Condition left of || always true [{file}:{line},{col}]",e.start),Di(t.parent(),t.self(),e.left).optimize(t);if(l=e.right.evaluate(t)){if(!(l instanceof de)){if(t.in_boolean_context())return t.warn("Boolean || always true [{file}:{line},{col}]",e.start),Ei(e,[e.left,p(bn,e)]).optimize(t);ai(e,2)}}else if("||"==(_=t.parent()).operator&&_.left===t.self()||t.in_boolean_context())return t.warn("Dropping side-effect-free || [{file}:{line},{col}]",e.start),e.left.optimize(t);if("&&"==e.left.operator)if((d=e.left.right.evaluate(t))&&!(d instanceof de))return p(Ot,e,{condition:e.left.left,consequent:e.left.right,alternative:e.right}).optimize(t);break;case"??":if(ar(e.left))return e.right;if(!((c=e.left.evaluate(t))instanceof de))return null==c?e.right:e.left;if(t.in_boolean_context()){const n=e.right.evaluate(t);if(!(n instanceof de||n))return e.left}}var m=!0;switch(e.operator){case"+":if(e.left instanceof pn&&e.right instanceof Ct&&"+"==e.right.operator&&e.right.is_string(t)){var h=(g=p(Ct,e,{operator:"+",left:e.left,right:e.right.left})).optimize(t);g!==h&&(e=p(Ct,e,{operator:"+",left:h,right:e.right.right}))}if(e.right instanceof pn&&e.left instanceof Ct&&"+"==e.left.operator&&e.left.is_string(t)){var E=(g=p(Ct,e,{operator:"+",left:e.left.right,right:e.right})).optimize(t);g!==E&&(e=p(Ct,e,{operator:"+",left:e.left.left,right:E}))}if(e.left instanceof Ct&&"+"==e.left.operator&&e.left.is_string(t)&&e.right instanceof Ct&&"+"==e.right.operator&&e.right.is_string(t)){var g,D=(g=p(Ct,e,{operator:"+",left:e.left.right,right:e.right.left})).optimize(t);g!==D&&(e=p(Ct,e,{operator:"+",left:p(Ct,e.left,{operator:"+",left:e.left.left,right:D}),right:e.right.right}))}if(e.right instanceof yt&&"-"==e.right.operator&&e.left.is_number(t)){e=p(Ct,e,{operator:"-",left:e.left,right:e.right.expression});break}if(e.left instanceof yt&&"-"==e.left.operator&&n()&&e.right.is_number(t)){e=p(Ct,e,{operator:"-",left:e.right,right:e.left.expression});break}if(e.left instanceof Xe){h=e.left;if((E=e.right.evaluate(t))!=e.right)return h.segments[h.segments.length-1].value+=E.toString(),h}if(e.right instanceof Xe){E=e.right;if((h=e.left.evaluate(t))!=e.left)return E.segments[0].value=h.toString()+E.segments[0].value,E}if(e.left instanceof Xe&&e.right instanceof Xe){var S=(h=e.left).segments;E=e.right;S[S.length-1].value+=E.segments[0].value;for(var v=1;v=ce[e.operator])){var A=p(Ct,e,{operator:e.operator,left:e.right,right:e.left});e=e.right instanceof pn&&!(e.left instanceof pn)?Ki(t,A,e):Ki(t,e,A)}m&&e.is_number(t)&&(e.right instanceof Ct&&e.right.operator==e.operator&&(e=p(Ct,e,{operator:e.operator,left:p(Ct,e.left,{operator:e.operator,left:e.left,right:e.right.left,start:e.left.start,end:e.right.left.end}),right:e.right.right})),e.right instanceof pn&&e.left instanceof Ct&&e.left.operator==e.operator&&(e.left.left instanceof pn?e=p(Ct,e,{operator:e.operator,left:p(Ct,e.left,{operator:e.operator,left:e.left.left,right:e.right,start:e.left.left.start,end:e.right.end}),right:e.left.right}):e.left.right instanceof pn&&(e=p(Ct,e,{operator:e.operator,left:p(Ct,e.left,{operator:e.operator,left:e.left.right,right:e.right,start:e.left.right.start,end:e.right.end}),right:e.left.left}))),e.left instanceof Ct&&e.left.operator==e.operator&&e.left.right instanceof pn&&e.right instanceof Ct&&e.right.operator==e.operator&&e.right.left instanceof pn&&(e=p(Ct,e,{operator:e.operator,left:p(Ct,e.left,{operator:e.operator,left:p(Ct,e.left.left,{operator:e.operator,left:e.left.right,right:e.right.left,start:e.left.right.start,end:e.right.left.end}),right:e.left.left}),right:e.right.right})))}}if(e.right instanceof Ct&&e.right.operator==e.operator&&(Ii.has(e.operator)||"+"==e.operator&&(e.right.left.is_string(t)||e.left.is_string(t)&&e.right.right.is_string(t))))return e.left=p(Ct,e.left,{operator:e.operator,left:e.left,right:e.right.left}),e.right=e.right.right,e.transform(t);var T=e.evaluate(t);return T!==e?(T=gi(T,e).optimize(t),Ki(t,T,e)):e})),ci(sn,(function(e){return e})),ci(an,(function(e,t){if(!t.option("ie8")&&Ci(e)&&(!e.scope.uses_with||!t.find_parent(Ne)))switch(e.name){case"undefined":return p(Sn,e).optimize(t);case"NaN":return p(Dn,e).optimize(t);case"Infinity":return p(An,e).optimize(t)}var n=t.parent();if(t.option("reduce_vars")&&Pi(e,n)!==e){const f=e.definition();if(t.top_retain&&f.global&&t.top_retain(f))return f.fixed=!1,f.should_replace=!1,f.single_use=!1,e;var i=e.fixed_value(),r=f.single_use&&!(n instanceof Et&&n.is_expr_pure(t)||b(n,Nn));if(r&&(i instanceof Pe||i instanceof Pt))if(Ji(i,t))r=!1;else if(f.scope!==e.scope&&(1==f.escaped||oi(i,16)||function(e){for(var t,n=0;t=e.parent(n++);){if(t instanceof me)return!1;if(t instanceof Rt||t instanceof Nt||t instanceof wt)return!0}return!1}(t)))r=!1;else if(er(t,f))r=!1;else if((f.scope!==e.scope||f.orig[0]instanceof qt)&&"f"==(r=i.is_constant_expression(e.scope))){var o=e.scope;do{(o instanceof Ue||pi(o))&&ai(o,16)}while(o=o.parent_scope)}if(r&&i instanceof Pe){const o=mi(t);r=f.scope===e.scope&&!tr(o,i)||n instanceof Et&&n.expression===e&&!tr(o,i)}if(r&&i instanceof Pt){r=(!i.extends||!i.extends.may_throw(t)&&!i.extends.has_side_effects(t))&&!i.properties.some(e=>e.may_throw(t)||e.has_side_effects(t))}if(r&&i){if(i instanceof Bt&&(ai(i,256),i=p(Kt,i,i)),i instanceof Ue&&(ai(i,256),i=p(Be,i,i)),f.recursive_refs>0&&i.name instanceof $t){const e=i.name.definition();let t=i.variables.get(i.name.name),n=t&&t.orig[0];n instanceof Jt||(n=p(Jt,i.name,i.name),n.scope=i,i.name=n,t=i.def_function(n)),Cn(i,n=>{n instanceof an&&n.definition()===e&&(n.thedef=t,t.references.push(n))})}return(i instanceof Pe||i instanceof Pt)&&mi(t).add_child_scope(i),i.optimize(t)}if(i&&void 0===f.should_replace){let e;if(i instanceof ln)f.orig[0]instanceof qt||!f.references.every(e=>f.scope===e.scope)||(e=i);else{var a=i.evaluate(t);a===i||!t.option("unsafe_regexp")&&a instanceof RegExp||(e=gi(a,i))}if(e){var s,u=e.optimize(t).size();Cn(i,e=>{if(e instanceof an)return Fn})?s=function(){var n=e.optimize(t);return n===e?n.clone(!0):n}:(u=Math.min(u,i.size()),s=function(){var n=Vi(e.optimize(t),i);return n===e||n===i?n.clone(!0):n});var c=f.name.length,l=0;t.option("unused")&&!t.exposed(f)&&(l=(c+2+u)/(f.references.length-f.assignments)),f.should_replace=u<=c+l&&s}else f.should_replace=!1}if(f.should_replace)return f.should_replace()}return e})),ci(Sn,(function(e,t){if(t.option("unsafe_undefined")){var n=hi(t,"undefined");if(n){var i=p(an,e,{name:"undefined",scope:n.scope,thedef:n});return ai(i,8),i}}var r=Pi(t.self(),t.parent());return r&&nr(r,e)?e:p(yt,e,{operator:"void",expression:p(dn,e,{value:0})})})),ci(An,(function(e,t){var n=Pi(t.self(),t.parent());return n&&nr(n,e)?e:!t.option("keep_infinity")||n&&!nr(n,e)||hi(t,"Infinity")?p(Ct,e,{operator:"/",left:p(dn,e,{value:1}),right:p(dn,e,{value:0})}):e})),ci(Dn,(function(e,t){var n=Pi(t.self(),t.parent());return n&&!nr(n,e)||hi(t,"NaN")?p(Ct,e,{operator:"/",left:p(dn,e,{value:0}),right:p(dn,e,{value:0})}):e}));const rr=E("+ - / * % >> << >>> | ^ &"),or=E("* | ^ &");function ar(e){let t;return e instanceof gn||ki(e)||e instanceof an&&(t=e.definition().fixed)instanceof de&&ar(t)}function sr(e,t){return e instanceof an&&(e=e.fixed_value()),!!e&&(!(e instanceof Pe||e instanceof Pt)||(!(e instanceof Pe&&e.contains_this())||t.parent()instanceof gt))}function ur(e,t){return t.in_boolean_context()?Ki(t,e,Ei(e,[e,p(bn,e)]).optimize(t)):e}function cr(e,t,n){for(var i=0;i0&&s.args.length==u.args.length&&s.expression.equivalent_to(u.expression)&&!e.condition.has_side_effects(t)&&!s.expression.has_side_effects(t)&&"number"==typeof(o=function(){for(var e=s.args,t=u.args,n=0,i=e.length;n=2020&&function(e,t,n){if(t.may_throw(n))return!1;let i;if(e instanceof Ct&&"=="===e.operator&&((i=ar(e.left)&&e.left)||(i=ar(e.right)&&e.right))&&(i===e.left?e.right:e.left).equivalent_to(t))return!0;if(e instanceof Ct&&"||"===e.operator){let n,i;const r=e=>{if(!(e instanceof Ct)||"==="!==e.operator&&"=="!==e.operator)return!1;let r,o=0;return e.left instanceof gn&&(o++,n=e,r=e.right),e.right instanceof gn&&(o++,n=e,r=e.left),ki(e.left)&&(o++,i=e,r=e.right),ki(e.right)&&(o++,i=e,r=e.left),1===o&&!!r.equivalent_to(t)};if(!r(e.left))return!1;if(!r(e.right))return!1;if(n&&i&&n!==i)return!0}return!1}(a,u,t))return p(Ct,e,{operator:"??",left:u,right:s}).optimize(t);if(u instanceof Dt&&s.equivalent_to(u.expressions[u.expressions.length-1]))return Ei(e,[p(Ct,e,{operator:"||",left:a,right:Ei(e,u.expressions.slice(0,-1))}),s]).optimize(t);if(u instanceof Ct&&"&&"==u.operator&&s.equivalent_to(u.right))return p(Ct,e,{operator:"&&",left:p(Ct,e,{operator:"||",left:a,right:u.left}),right:s}).optimize(t);if(s instanceof Ot&&s.alternative.equivalent_to(u))return p(Ot,e,{condition:p(Ct,e,{left:e.condition,operator:"&&",right:s.condition}),consequent:s.consequent,alternative:u});if(s.equivalent_to(u))return Ei(e,[e.condition,s]).optimize(t);if(s instanceof Ct&&"||"==s.operator&&s.right.equivalent_to(u))return p(Ct,e,{operator:"||",left:p(Ct,e,{operator:"&&",left:e.condition,right:s.left}),right:u}).optimize(t);var l=t.in_boolean_context();return _(e.consequent)?d(e.alternative)?f(e.condition):p(Ct,e,{operator:"||",left:f(e.condition),right:e.alternative}):d(e.consequent)?_(e.alternative)?f(e.condition.negate(t)):p(Ct,e,{operator:"&&",left:f(e.condition.negate(t)),right:e.alternative}):_(e.alternative)?p(Ct,e,{operator:"||",left:f(e.condition.negate(t)),right:e.consequent}):d(e.alternative)?p(Ct,e,{operator:"&&",left:f(e.condition),right:e.consequent}):e;function f(e){return e.is_boolean()?e:p(yt,e,{operator:"!",expression:e.negate(t)})}function _(e){return e instanceof bn||l&&e instanceof pn&&e.getValue()||e instanceof yt&&"!"==e.operator&&e.expression instanceof pn&&!e.expression.getValue()}function d(e){return e instanceof yn||l&&e instanceof pn&&!e.getValue()||e instanceof yt&&"!"==e.operator&&e.expression instanceof pn&&e.expression.getValue()}})),ci(Tn,(function(e,t){if(t.in_boolean_context())return p(dn,e,{value:+e.value});var n=t.parent();return t.option("booleans_as_integers")?(n instanceof Ct&&("==="==n.operator||"!=="==n.operator)&&(n.operator=n.operator.replace(/=$/,"")),p(dn,e,{value:+e.value})):t.option("booleans")?n instanceof Ct&&("=="==n.operator||"!="==n.operator)?(t.warn("Non-strict equality against boolean: {operator} {value} [{file}:{line},{col}]",{operator:n.operator,value:e.value,file:n.start.file,line:n.start.line,col:n.start.col}),p(dn,e,{value:+e.value})):p(yt,e,{operator:"!",expression:p(dn,e,{value:1-e.value})}):e})),ci(At,(function(e,t){var n,i=e.expression,r=e.property;if(t.option("properties")){var o=r.evaluate(t);if(o!==r){if("string"==typeof o)if("undefined"==o)o=void 0;else(A=parseFloat(o)).toString()==o&&(o=A);r=e.property=Vi(r,gi(o,r).transform(t));var a=""+o;if(J(a)&&a.length<=r.size()+1)return p(vt,e,{expression:i,property:a,quote:r.quote}).optimize(t)}}e:if(t.option("arguments")&&i instanceof an&&"arguments"==i.name&&1==i.definition().orig.length&&(n=i.scope)instanceof Pe&&n.uses_arguments&&!(n instanceof Ke)&&r instanceof dn){for(var s=r.getValue(),u=new Set,c=n.argnames,l=0;l1)&&(_=null)}else if(!_&&!t.option("keep_fargs")&&s=n.argnames.length;)_=p(qt,n,{name:n.make_var_name("argument_"+n.argnames.length),scope:n}),n.argnames.push(_),n.enclosed.push(n.def_variable(_));if(_){var m=p(an,e,_);return m.reference({}),si(_,1),m}}if(Pi(e,t.parent()))return e;if(o!==r){var h=e.flatten_object(a,t);h&&(i=e.expression=h.expression,r=e.property=h.property)}if(t.option("properties")&&t.option("side_effects")&&r instanceof dn&&i instanceof Rt){s=r.getValue();var E=i.elements,g=E[s];e:if(sr(g,t)){for(var D=!0,S=[],v=E.length;--v>s;){(A=E[v].drop_side_effect_free(t))&&(S.unshift(A),D&&A.has_side_effects(t)&&(D=!1))}if(g instanceof Le)break e;for(g=g instanceof vn?p(Sn,g):g,D||S.unshift(g);--v>=0;){var A;if((A=E[v])instanceof Le)break e;(A=A.drop_side_effect_free(t))?S.unshift(A):s--}return D?(S.push(g),Ei(e,S).optimize(t)):p(At,e,{expression:p(Rt,i,{elements:S}),property:p(dn,r,{value:s})})}}var T=e.evaluate(t);return T!==e?Ki(t,T=gi(T,e).optimize(t),e):e})),Pe.DEFMETHOD("contains_this",(function(){return Cn(this,e=>e instanceof ln?Fn:e!==this&&e instanceof ke&&!(e instanceof Ke)||void 0)})),St.DEFMETHOD("flatten_object",(function(e,t){if(t.option("properties")){var n=t.option("unsafe_arrows")&&t.option("ecma")>=2015,i=this.expression;if(i instanceof wt)for(var r=i.properties,o=r.length;--o>=0;){var a=r[o];if(""+(a instanceof Lt?a.key.name:a.key)==e){if(!r.every(e=>e instanceof Nt||n&&e instanceof Lt&&!e.is_generator))break;if(!sr(a.value,t))break;return p(At,this,{expression:p(Rt,i,{elements:r.map((function(e){var t=e.value;t instanceof Ve&&(t=p(Be,t,t));var n=e.key;return n instanceof de&&!(n instanceof jt)?Ei(e,[n,t]):t}))}),property:p(dn,this,{value:o})})}}}})),ci(vt,(function(e,t){"arguments"!=e.property&&"caller"!=e.property||t.warn("Function.prototype.{prop} not supported [{file}:{line},{col}]",{prop:e.property,file:e.start.file,line:e.start.line,col:e.start.col});const n=t.parent();if(Pi(e,n))return e;if(t.option("unsafe_proto")&&e.expression instanceof vt&&"prototype"==e.expression.property){var i=e.expression.expression;if(Ci(i))switch(i.name){case"Array":e.expression=p(Rt,e.expression,{elements:[]});break;case"Function":e.expression=p(Be,e.expression,{argnames:[],body:[]});break;case"Number":e.expression=p(dn,e.expression,{value:0});break;case"Object":e.expression=p(wt,e.expression,{properties:[]});break;case"RegExp":e.expression=p(hn,e.expression,{value:{source:"t",flags:""}});break;case"String":e.expression=p(_n,e.expression,{value:""})}}if(!(n instanceof Et&&b(n,Nn))){const n=e.flatten_object(e.property,t);if(n)return n.optimize(t)}let r=e.evaluate(t);return r!==e?(r=gi(r,e).optimize(t),Ki(t,r,e)):e})),ci(Rt,(function(e,t){var n=ur(e,t);return n!==e?n:cr(e,0,e.elements)})),ci(wt,(function(e,t){var n=ur(e,t);if(n!==e)return n;for(var i=e.properties,r=0;r=2015&&!e.name&&!e.is_generator&&!e.uses_arguments&&!e.pinned()){if(!Cn(e,e=>{if(e instanceof ln)return Fn}))return p(Ke,e,e).optimize(t)}return e})),ci(Pt,(function(e){return e})),ci(et,(function(e,t){return e.expression&&!e.is_star&&ki(e.expression,t)&&(e.expression=null),e})),ci(Xe,(function(e,t){if(!t.option("evaluate")||t.parent()instanceof He)return e;for(var n=[],i=0;i=2015&&(!(n instanceof RegExp)||n.test(e.key+""))){var i=e.key,r=e.value;if((r instanceof Ke&&Array.isArray(r.body)&&!r.contains_this()||r instanceof Be)&&!r.name)return p(Lt,e,{async:r.async,is_generator:r.is_generator,key:i instanceof de?i:p(jt,e,{name:i}),value:p(Ve,r,r),quote:e.quote})}return e})),ci(Ge,(function(e,t){if(1==t.option("pure_getters")&&t.option("unused")&&!e.is_array&&Array.isArray(e.names)&&!function(e){for(var t=[/^VarDef$/,/^(Const|Let|Var)$/,/^Export$/],n=0,i=0,r=t.length;n1)throw new Error("inline source map only works with singular input");n.sourceMap.content=(i=e[f],r=void 0,(r=/(?:^|[^.])\/\/# sourceMappingURL=data:application\/json(;[\w=-]*)?;base64,([+/0-9A-Za-z]*=*)\s*$/.exec(i))?mr(r[2]):(de.warn("inline source map not found"),null))}c=n.parse.toplevel}s&&"strict"!==n.mangle.properties.keep_quoted&&pr(c,s),n.wrap&&(c=c.wrap_commonjs(n.wrap)),n.enclose&&(c=c.wrap_enclose(n.enclose)),u&&(u.rename=Date.now()),u&&(u.compress=Date.now()),n.compress&&(c=new ui(n.compress).compress(c)),u&&(u.scope=Date.now()),n.mangle&&c.figure_out_scope(n.mangle),u&&(u.mangle=Date.now()),n.mangle&&(jn.reset(),c.compute_char_frequency(n.mangle),c.mangle_names(n.mangle)),u&&(u.properties=Date.now()),n.mangle&&n.mangle.properties&&(c=dr(c,n.mangle.properties)),u&&(u.output=Date.now());var p={};if(n.output.ast&&(p.ast=c),!D(n.output,"code")||n.output.code){if(n.sourceMap&&("string"==typeof n.sourceMap.content&&(n.sourceMap.content=JSON.parse(n.sourceMap.content)),n.output.source_map=function(e){e=o(e,{file:null,root:null,orig:null,orig_line_diff:0,dest_line_diff:0});var n=new t.SourceMapGenerator({file:e.file,sourceRoot:e.root}),i=e.orig&&new t.SourceMapConsumer(e.orig);return i&&i.sources.forEach((function(e){var t=i.sourceContentFor(e,!0);t&&n.setSourceContent(e,t)})),{add:function(t,r,o,a,s,u){if(i){var c=i.originalPositionFor({line:a,column:s});if(null===c.source)return;t=c.source,a=c.line,s=c.column,u=c.name||u}n.addMapping({generated:{line:r+e.dest_line_diff,column:o},original:{line:a+e.orig_line_diff,column:s},source:t,name:u})},get:function(){return n},toString:function(){return JSON.stringify(n.toJSON())}}}({file:n.sourceMap.filename,orig:n.sourceMap.content,root:n.sourceMap.root}),n.sourceMap.includeSources)){if(e instanceof Ie)throw new Error("original source content unavailable");for(var f in e)D(e,f)&&n.output.source_map.get().setSourceContent(f,e[f])}delete n.output.ast,delete n.output.code;var _=Un(n.output);if(c.print(_),p.code=_.get(),n.sourceMap)if(n.sourceMap.asObject?p.map=n.output.source_map.get().toJSON():p.map=n.output.source_map.toString(),"inline"==n.sourceMap.url){var d="object"==typeof p.map?JSON.stringify(p.map):p.map;p.code+="\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,"+hr(d)}else n.sourceMap.url&&(p.code+="\n//# sourceMappingURL="+n.sourceMap.url)}return n.nameCache&&n.mangle&&(n.mangle.cache&&(n.nameCache.vars=Dr(n.mangle.cache)),n.mangle.properties&&n.mangle.properties.cache&&(n.nameCache.props=Dr(n.mangle.properties.cache))),u&&(u.end=Date.now(),p.timings={parse:.001*(u.rename-u.parse),rename:.001*(u.compress-u.rename),compress:.001*(u.scope-u.compress),scope:.001*(u.mangle-u.scope),mangle:.001*(u.properties-u.mangle),properties:.001*(u.output-u.properties),output:.001*(u.end-u.output),total:.001*(u.end-u.start)}),l.length&&(p.warnings=l),p}catch(e){return{error:e}}finally{de.warn_function=a}}!function(){var e=function(e){for(var t=!0,n=0;n1||e.guardedHandlers&&e.guardedHandlers.length)throw new Error("Multiple catch clauses are not supported.");return new at({start:i(e),end:r(e),body:s(e.block).body,bcatch:s(t[0]),bfinally:e.finalizer?new ut(s(e.finalizer)):null})},Property:function(e){var t=e.key,n={start:i(t||e.value),end:r(e.value),key:"Identifier"==t.type?t.name:t.value,value:s(e.value)};return e.computed&&(n.key=s(e.key)),e.method?(n.is_generator=e.value.generator,n.async=e.value.async,e.computed?n.key=s(e.key):n.key=new jt({name:n.key}),new Lt(n)):"init"==e.kind?("Identifier"!=t.type&&"Literal"!=t.type&&(n.key=s(t)),new Nt(n)):("string"!=typeof n.key&&"number"!=typeof n.key||(n.key=new jt({name:n.key})),n.value=new Ve(n.value),"get"==e.kind?new It(n):"set"==e.kind?new kt(n):"method"==e.kind?(n.async=e.value.async,n.is_generator=e.value.generator,n.quote=e.computed?'"':null,new Lt(n)):void 0)},MethodDefinition:function(e){var t={start:i(e),end:r(e),key:e.computed?s(e.key):new jt({name:e.key.name||e.key.value}),value:s(e.value),static:e.static};return"get"==e.kind?new It(t):"set"==e.kind?new kt(t):(t.is_generator=e.value.generator,t.async=e.value.async,new Lt(t))},FieldDefinition:function(e){let t;if(e.computed)t=s(e.key);else{if("Identifier"!==e.key.type)throw new Error("Non-Identifier key in FieldDefinition");t=s(e.key)}return new Vt({start:i(e),end:r(e),key:t,value:s(e.value),static:e.static})},ArrayExpression:function(e){return new Rt({start:i(e),end:r(e),elements:e.elements.map((function(e){return null===e?new vn:s(e)}))})},ObjectExpression:function(e){return new wt({start:i(e),end:r(e),properties:e.properties.map((function(e){return"SpreadElement"===e.type||(e.type="Property"),s(e)}))})},SequenceExpression:function(e){return new Dt({start:i(e),end:r(e),expressions:e.expressions.map(s)})},MemberExpression:function(e){return new(e.computed?At:vt)({start:i(e),end:r(e),property:e.computed?s(e.property):e.property.name,expression:s(e.object)})},SwitchCase:function(e){return new(e.test?ot:rt)({start:i(e),end:r(e),expression:s(e.test),body:e.consequent.map(s)})},VariableDeclaration:function(e){return new("const"===e.kind?pt:"let"===e.kind?ft:lt)({start:i(e),end:r(e),definitions:e.declarations.map(s)})},ImportDeclaration:function(e){var t=null,n=null;return e.specifiers.forEach((function(e){"ImportSpecifier"===e.type?(n||(n=[]),n.push(new dt({start:i(e),end:r(e),foreign_name:s(e.imported),name:s(e.local)}))):"ImportDefaultSpecifier"===e.type?t=s(e.local):"ImportNamespaceSpecifier"===e.type&&(n||(n=[]),n.push(new dt({start:i(e),end:r(e),foreign_name:new rn({name:"*"}),name:s(e.local)})))})),new mt({start:i(e),end:r(e),imported_name:t,imported_names:n,module_name:s(e.source)})},ExportAllDeclaration:function(e){return new ht({start:i(e),end:r(e),exported_names:[new dt({name:new un({name:"*"}),foreign_name:new un({name:"*"})})],module_name:s(e.source)})},ExportNamedDeclaration:function(e){return new ht({start:i(e),end:r(e),exported_definition:s(e.declaration),exported_names:e.specifiers&&e.specifiers.length?e.specifiers.map((function(e){return new dt({foreign_name:s(e.exported),name:s(e.local)})})):null,module_name:s(e.source)})},ExportDefaultDeclaration:function(e){return new ht({start:i(e),end:r(e),exported_value:s(e.declaration),is_default:!0})},Literal:function(e){var t=e.value,n={start:i(e),end:r(e)},o=e.regex;if(o&&o.pattern)return n.value={source:o.pattern,flags:o.flags},new hn(n);if(o){const i=e.raw||t,r=i.match(/^\/(.*)\/(\w*)$/);if(!r)throw new Error("Invalid regex source "+i);const[o,a,s]=r;return n.value={source:a,flags:s},new hn(n)}if(null===t)return new gn(n);switch(typeof t){case"string":return n.value=t,new _n(n);case"number":return n.value=t,new dn(n);case"boolean":return new(t?bn:yn)(n)}},MetaProperty:function(e){if("new"===e.meta.name&&"target"===e.property.name)return new Gt({start:i(e),end:r(e)})},Identifier:function(e){var t=a[a.length-2];return new("LabeledStatement"==t.type?on:"VariableDeclarator"==t.type&&t.id===e?"const"==t.kind?Wt:"let"==t.kind?Yt:Xt:/Import.*Specifier/.test(t.type)?t.local===e?nn:rn:"ExportSpecifier"==t.type?t.local===e?sn:un:"FunctionExpression"==t.type?t.id===e?Jt:qt:"FunctionDeclaration"==t.type?t.id===e?$t:qt:"ArrowFunctionExpression"==t.type?t.params.includes(e)?qt:an:"ClassExpression"==t.type?t.id===e?en:an:"Property"==t.type?t.key===e&&t.computed||t.value===e?an:jt:"FieldDefinition"==t.type?t.key===e&&t.computed||t.value===e?an:Zt:"ClassDeclaration"==t.type?t.id===e?Qt:an:"MethodDefinition"==t.type?t.computed?an:jt:"CatchClause"==t.type?tn:"BreakStatement"==t.type||"ContinueStatement"==t.type?cn:an)({start:i(e),end:r(e),name:e.name})},BigIntLiteral:e=>new mn({start:i(e),end:r(e),value:e.value})};function n(e){if("Literal"==e.type)return null!=e.raw?e.raw:e.value+""}function i(e){var t=e.loc,i=t&&t.start,r=e.range;return new _e({file:t&&t.source,line:i&&i.line,col:i&&i.column,pos:r?r[0]:e.start,endline:i&&i.line,endcol:i&&i.column,endpos:r?r[0]:e.start,raw:n(e)})}function r(e){var t=e.loc,i=t&&t.end,r=e.range;return new _e({file:t&&t.source,line:i&&i.line,col:i&&i.column,pos:r?r[1]:e.end,endline:i&&i.line,endcol:i&&i.column,endpos:r?r[1]:e.end,raw:n(e)})}function o(e,n,o){var a="function From_Moz_"+e+"(M){\n";a+="return new U2."+n.name+"({\nstart: my_start_token(M),\nend: my_end_token(M)";var c="function To_Moz_"+e+"(M){\n";c+="return {\ntype: "+JSON.stringify(e),o&&o.split(/\s*,\s*/).forEach((function(e){var t=/([a-z0-9$_]+)([=@>%])([a-z0-9$_]+)/i.exec(e);if(!t)throw new Error("Can't understand property map: "+e);var n=t[1],i=t[2],r=t[3];switch(a+=",\n"+r+": ",c+=",\n"+n+": ",i){case"@":a+="M."+n+".map(from_moz)",c+="M."+r+".map(to_moz)";break;case">":a+="from_moz(M."+n+")",c+="to_moz(M."+r+")";break;case"=":a+="M."+n,c+="M."+r;break;case"%":a+="from_moz(M."+n+").body",c+="to_moz_block(M)";break;default:throw new Error("Can't understand operator in propmap: "+e)}})),a+="\n})\n}",c+="\n}\n}",a=new Function("U2","my_start_token","my_end_token","from_moz","return("+a+")")(kn,i,r,s),c=new Function("to_moz","to_moz_block","to_moz_scope","return("+c+")")(l,_,d),t[e]=a,u(n,c)}t.UpdateExpression=t.UnaryExpression=function(e){return new(("prefix"in e?e.prefix:"UnaryExpression"==e.type)?yt:bt)({start:i(e),end:r(e),operator:e.operator,expression:s(e.argument)})},t.ClassDeclaration=t.ClassExpression=function(e){return new("ClassDeclaration"===e.type?Bt:Kt)({start:i(e),end:r(e),name:s(e.id),extends:s(e.superClass),properties:e.body.body.map(s)})},o("EmptyStatement",Te),o("BlockStatement",Ae,"body@body"),o("IfStatement",tt,"test>condition, consequent>body, alternate>alternative"),o("LabeledStatement",be,"label>label, body>body"),o("BreakStatement",Ze,"label>label"),o("ContinueStatement",Je,"label>label"),o("WithStatement",Ne,"object>expression, body>body"),o("SwitchStatement",nt,"discriminant>expression, cases@body"),o("ReturnStatement",qe,"argument>value"),o("ThrowStatement",$e,"argument>value"),o("WhileStatement",Me,"test>condition, body>body"),o("DoWhileStatement",Fe,"test>condition, body>body"),o("ForStatement",Re,"init>init, test>condition, update>step, body>body"),o("ForInStatement",we,"left>init, right>object, body>body"),o("ForOfStatement",xe,"left>init, right>object, body>body, await=await"),o("AwaitExpression",Qe,"argument>expression"),o("YieldExpression",et,"argument>expression, delegate=is_star"),o("DebuggerStatement",he),o("VariableDeclarator",_t,"id>name, init>value"),o("CatchClause",st,"param>argname, body%body"),o("ThisExpression",ln),o("Super",fn),o("BinaryExpression",Ct,"operator=operator, left>left, right>right"),o("LogicalExpression",Ct,"operator=operator, left>left, right>right"),o("AssignmentExpression",Ft,"operator=operator, left>left, right>right"),o("ConditionalExpression",Ot,"test>condition, consequent>consequent, alternate>alternative"),o("NewExpression",gt,"callee>expression, arguments@args"),o("CallExpression",Et,"callee>expression, arguments@args"),u(Ie,(function(e){return d("Program",e)})),u(Le,(function(e){return{type:f()?"RestElement":"SpreadElement",argument:l(e.expression)}})),u(He,(function(e){return{type:"TaggedTemplateExpression",tag:l(e.prefix),quasi:l(e.template_string)}})),u(Xe,(function(e){for(var t=[],n=[],i=0;i({type:"BigIntLiteral",value:e.value})),Tn.DEFMETHOD("to_mozilla_ast",pn.prototype.to_mozilla_ast),gn.DEFMETHOD("to_mozilla_ast",pn.prototype.to_mozilla_ast),vn.DEFMETHOD("to_mozilla_ast",(function(){return null})),ve.DEFMETHOD("to_mozilla_ast",Ae.prototype.to_mozilla_ast),Pe.DEFMETHOD("to_mozilla_ast",Be.prototype.to_mozilla_ast);var a=null;function s(e){a.push(e);var n=null!=e?t[e.type](e):null;return a.pop(),n}function u(e,t){e.DEFMETHOD("to_mozilla_ast",(function(e){return n=this,i=t(this,e),r=n.start,o=n.end,r&&o?(null!=r.pos&&null!=o.endpos&&(i.range=[r.pos,o.endpos]),r.line&&(i.loc={start:{line:r.line,column:r.col},end:o.endline?{line:o.endline,column:o.endcol}:null},r.file&&(i.loc.source=r.file)),i):i;var n,i,r,o}))}de.from_mozilla_ast=function(e){var t=a;a=[];var n=s(e);return a=t,n};var c=null;function l(e){null===c&&(c=[]),c.push(e);var t=null!=e?e.to_mozilla_ast(c[c.length-2]):null;return c.pop(),0===c.length&&(c=null),t}function f(){for(var e=c.length;e--;)if(c[e]instanceof Ge)return!0;return!1}function _(e){return{type:"BlockStatement",body:e.body.map(l)}}function d(e,t){var n=t.body.map(l);return t.body[0]instanceof ge&&t.body[0].body instanceof _n&&n.unshift(l(new Te(t.body[0]))),{type:e,body:n}}}(),e.AST_Accessor=Ve,e.AST_Array=Rt,e.AST_Arrow=Ke,e.AST_Assign=Ft,e.AST_Atom=En,e.AST_Await=Qe,e.AST_Binary=Ct,e.AST_Block=ve,e.AST_BlockStatement=Ae,e.AST_Boolean=Tn,e.AST_Break=Ze,e.AST_Call=Et,e.AST_Case=ot,e.AST_Catch=st,e.AST_Class=Pt,e.AST_ClassExpression=Kt,e.AST_ConciseMethod=Lt,e.AST_Conditional=Ot,e.AST_Const=pt,e.AST_Constant=pn,e.AST_Continue=Je,e.AST_DWLoop=Oe,e.AST_Debugger=he,e.AST_DefClass=Bt,e.AST_Default=rt,e.AST_DefaultAssign=Mt,e.AST_Definitions=ct,e.AST_Defun=Ue,e.AST_Destructuring=Ge,e.AST_Directive=Ee,e.AST_Do=Fe,e.AST_Dot=vt,e.AST_EmptyStatement=Te,e.AST_Exit=Ye,e.AST_Expansion=Le,e.AST_Export=ht,e.AST_False=yn,e.AST_Finally=ut,e.AST_For=Re,e.AST_ForIn=we,e.AST_ForOf=xe,e.AST_Function=Be,e.AST_Hole=vn,e.AST_If=tt,e.AST_Import=mt,e.AST_Infinity=An,e.AST_IterationStatement=Ce,e.AST_Jump=We,e.AST_Label=on,e.AST_LabelRef=cn,e.AST_LabeledStatement=be,e.AST_Lambda=Pe,e.AST_Let=ft,e.AST_LoopControl=je,e.AST_NaN=Dn,e.AST_NameMapping=dt,e.AST_New=gt,e.AST_NewTarget=Gt,e.AST_Node=de,e.AST_Null=gn,e.AST_Number=dn,e.AST_Object=wt,e.AST_ObjectGetter=It,e.AST_ObjectKeyVal=Nt,e.AST_ObjectProperty=xt,e.AST_ObjectSetter=kt,e.AST_PrefixedTemplateString=He,e.AST_PropAccess=St,e.AST_RegExp=hn,e.AST_Return=qe,e.AST_Scope=ke,e.AST_Sequence=Dt,e.AST_SimpleStatement=ge,e.AST_Statement=me,e.AST_StatementWithBody=ye,e.AST_String=_n,e.AST_Sub=At,e.AST_Super=fn,e.AST_Switch=nt,e.AST_SwitchBranch=it,e.AST_Symbol=Ut,e.AST_SymbolBlockDeclaration=zt,e.AST_SymbolCatch=tn,e.AST_SymbolClass=en,e.AST_SymbolConst=Wt,e.AST_SymbolDeclaration=Ht,e.AST_SymbolDefClass=Qt,e.AST_SymbolDefun=$t,e.AST_SymbolExport=sn,e.AST_SymbolExportForeign=un,e.AST_SymbolFunarg=qt,e.AST_SymbolImport=nn,e.AST_SymbolImportForeign=rn,e.AST_SymbolLambda=Jt,e.AST_SymbolLet=Yt,e.AST_SymbolMethod=jt,e.AST_SymbolRef=an,e.AST_SymbolVar=Xt,e.AST_TemplateSegment=ze,e.AST_TemplateString=Xe,e.AST_This=ln,e.AST_Throw=$e,e.AST_Token=_e,e.AST_Toplevel=Ie,e.AST_True=bn,e.AST_Try=at,e.AST_Unary=Tt,e.AST_UnaryPostfix=bt,e.AST_UnaryPrefix=yt,e.AST_Undefined=Sn,e.AST_Var=lt,e.AST_VarDef=_t,e.AST_While=Me,e.AST_With=Ne,e.AST_Yield=et,e.Compressor=ui,e.OutputStream=Un,e.TreeTransformer=Rn,e.TreeWalker=Mn,e._INLINE=xn,e._JS_Parse_Error=te,e._NOINLINE=Nn,e._PURE=wn,e._has_annotation=b,e._tokenizer=oe,e.base54=jn,e.default_options=Zn,e.defaults=o,e.mangle_properties=dr,e.minify=Sr,e.parse=fe,e.push_uniq=_,e.reserve_quoted_keys=pr,e.string_template=d,e.to_ascii=mr})); //# sourceMappingURL=bundle.min.js.map node_modules/terser/CHANGELOG.md000066600000032223150425117220012343 0ustar00# Changelog ## v4.8.1 - Security fix for RegExps that should not be evaluated (regexp DDOS) ## v4.8.0 - Support for numeric separators (`million = 1_000_000`) was added. - Assigning properties to a class is now assumed to be pure. - Fixed bug where `yield` wasn't considered a valid property key in generators. ## v4.7.0 - A bug was fixed where an arrow function would have the wrong size - `arguments` object is now considered safe to retrieve properties from (useful for `length`, or `0`) even when `pure_getters` is not set. - Fixed erroneous `const` declarations without value (which is invalid) in some corner cases when using `collapse_vars`. ## v4.6.13 - Fixed issue where ES5 object properties were being turned into ES6 object properties due to more lax unicode rules. - Fixed parsing of BigInt with lowercase `e` in them. ## v4.6.12 - Fixed subtree comparison code, making it see that `[1,[2, 3]]` is different from `[1, 2, [3]]` - Printing of unicode identifiers has been improved ## v4.6.11 - Read unused classes' properties and method keys, to figure out if they use other variables. - Prevent inlining into block scopes when there are name collisions - Functions are no longer inlined into parameter defaults, because they live in their own special scope. - When inlining identity functions, take into account the fact they may be used to drop `this` in function calls. - Nullish coalescing operator (`x ?? y`), plus basic optimization for it. - Template literals in binary expressions such as `+` have been further optimized ## v4.6.10 - Do not use reduce_vars when classes are present ## v4.6.9 - Check if block scopes actually exist in blocks ## v4.6.8 - Take into account "executed bits" of classes like static properties or computed keys, when checking if a class evaluation might throw or have side effects. ## v4.6.7 - Some new performance gains through a `AST_Node.size()` method which measures a node's source code length without printing it to a string first. - An issue with setting `--comments` to `false` in the CLI has been fixed. - Fixed some issues with inlining - `unsafe_symbols` compress option was added, which turns `Symbol("name")` into just `Symbol()` - Brought back compress performance improvement through the `AST_Node.equivalent_to(other)` method (which was reverted in v4.6.6). ## v4.6.6 (hotfix release) - Reverted code to 4.6.4 to allow for more time to investigate an issue. ## v4.6.5 (REVERTED) - Improved compress performance through using a new method to see if two nodes are equivalent, instead of printing them to a string. ## v4.6.4 - The `"some"` value in the `comments` output option now preserves `@lic` and other important comments when using `//` - `` is now better escaped in regex, and in comments, when using the `inline_script` output option - Fixed an issue when transforming `new RegExp` into `/.../` when slashes are included in the source - `AST_Node.prototype.constructor` now exists, allowing for easier debugging of crashes - Multiple if statements with the same consequents are now collapsed - Typescript typings improvements - Optimizations while looking for surrogate pairs in strings ## v4.6.3 - Annotations such as `/*#__NOINLINE__*/` and `/*#__PURE__*/` may now be preserved using the `preserve_annotations` output option - A TypeScript definition update for the `keep_quoted` output option. ## v4.6.2 - A bug where functions were inlined into other functions with scope conflicts has been fixed. - `/*#__NOINLINE__*/` annotation fixed for more use cases where inlining happens. ## v4.6.1 - Fixed an issue where a class is duplicated by reduce_vars when there's a recursive reference to the class. ## v4.6.0 - Fixed issues with recursive class references. - BigInt evaluation has been prevented, stopping Terser from evaluating BigInts like it would do regular numbers. - Class property support has been added ## v4.5.1 (hotfix release) - Fixed issue where `() => ({})[something]` was not parenthesised correctly. ## v4.5.0 - Inlining has been improved - An issue where keep_fnames combined with functions declared through variables was causing name shadowing has been fixed - You can now set the ES version through their year - The output option `keep_numbers` has been added, which prevents Terser from turning `1000` into `1e3` and such - Internal small optimisations and refactors ## v4.4.3 - Number and BigInt parsing has been fixed - `/*#__INLINE__*/` annotation fixed for arrow functions with non-block bodies. - Functional tests have been added, using [this repository](https://github.com/terser/terser-functional-tests). - A memory leak, where the entire AST lives on after compression, has been plugged. ## v4.4.2 - Fixed a problem with inlining identity functions ## v4.4.1 *note:* This introduced a feature, therefore it should have been a minor release. - Fixed a crash when `unsafe` was enabled. - An issue has been fixed where `let` statements might be collapsed out of their scope. - Some error messages have been improved by adding quotes around variable names. ## v4.4.0 - Added `/*#__INLINE__*/` and `/*#__NOINLINE__*/` annotations for calls. If a call has one of these, it either forces or forbids inlining. ## v4.3.11 - Fixed a problem where `window` was considered safe to access, even though there are situations where it isn't (Node.js, workers...) - Fixed an error where `++` and `--` were considered side-effect free - `Number(x)` now needs both `unsafe` and and `unsafe_math` to be compressed into `+x` because `x` might be a `BigInt` - `keep_fnames` now correctly supports regexes when the function is in a variable declaration ## v4.3.10 - Fixed syntax error when repeated semicolons were encountered in classes - Fixed invalid output caused by the creation of empty sequences internally - Scopes are now updated when scopes are inlined into them ## v4.3.9 - Fixed issue with mangle's `keep_fnames` option, introduced when adding code to keep variable names of anonymous functions ## v4.3.8 - Typescript typings fix ## v4.3.7 - Parsing of regex options in the CLI (which broke in v4.3.5) was fixed. - typescript definition updates ## v4.3.6 (crash hotfix) ## v4.3.5 - Fixed an issue with DOS line endings strings separated by `\` and a new line. - Improved fix for the output size regression related to unused references within the extends section of a class. - Variable names of anonymous functions (eg: `const x = () => { ... }` or `var func = function () {...}`) are now preserved when keep_fnames is true. - Fixed performance degradation introduced for large payloads in v4.2.0 ## v4.3.4 - Fixed a regression where the output size was increased when unused classes were referred to in the extends clause of a class. - Small typescript typings fixes. - Comments with `@preserve`, `@license`, `@cc_on` as well as comments starting with `/*!` and `/**!` are now preserved by default. ## v4.3.3 - Fixed a problem where parsing template strings would mix up octal notation and a slash followed by a zero representing a null character. - Started accepting the name `async` in destructuring arguments with default value. - Now Terser takes into account side effects inside class `extends` clauses. - Added parens whenever there's a comment between a return statement and the returned value, to prevent issues with ASI. - Stopped using raw RegExp objects, since the spec is going to continue to evolve. This ensures Terser is able to process new, unknown RegExp flags and features. This is a breaking change in the AST node AST_RegExp. ## v4.3.2 - Typescript typing fix - Ensure that functions can't be inlined, by reduce_vars, into places where they're accessing variables with the same name, but from somewhere else. ## v4.3.1 - Fixed an issue from 4.3.0 where any block scope within a for loop erroneously had its parent set to the function scopee - Fixed an issue where compressing IIFEs with argument expansions would result in some parameters becoming undefined - addEventListener options argument's properties are now part of the DOM properties list. ## v4.3.0 - Do not drop computed object keys with side effects - Functions passed to other functions in calls are now wrapped in parentheses by default, which speeds up loading most modules - Objects with computed properties are now less likely to be hoisted - Speed and memory efficiency optimizations - Fixed scoping issues with `try` and `switch` ## v4.2.1 - Minor refactors - Fixed a bug similar to #369 in collapse_vars - Functions can no longer be inlined into a place where they're going to be compared with themselves. - reduce_funcs option is now legacy, as using reduce_vars without reduce_funcs caused some weird corner cases. As a result, it is now implied in reduce_vars and can't be turned off without turning off reduce_vars. - Bug which would cause a random stack overflow has now been fixed. ## v4.2.0 - When the source map URL is `inline`, don't write it to a file. - Fixed output parens when a lambda literal is the tag on a tagged template string. - The `mangle.properties.undeclared` option was added. This enables the property mangler to mangle properties of variables which can be found in the name cache, but whose properties are not known to this Terser run. - The v8 bug where the toString and source representations of regexes like `RegExp("\\\n")` includes an actual newline is now fixed. - Now we're guaranteed to not have duplicate comments in the output - Domprops updates ## v4.1.4 - Fixed a crash when inlining a function into somewhere else when it has interdependent, non-removable variables. ## v4.1.3 - Several issues with the `reduce_vars` option were fixed. - Starting this version, we only have a dist/bundle.min.js ## v4.1.2 - The hotfix was hotfixed ## v4.1.1 - Fixed a bug where toplevel scopes were being mixed up with lambda scopes ## v4.1.0 - Internal functions were replaced by `Object.assign`, `Array.prototype.some`, `Array.prototype.find` and `Array.prototype.every`. - A serious issue where some ESM-native code was broken was fixed. - Performance improvements were made. - Support for BigInt was added. - Inline efficiency was improved. Functions are now being inlined more proactively instead of being inlined only after another Compressor pass. ## v4.0.2 (Hotfix release. Reverts unmapped segments PR [#342](https://github.com/terser/terser/pull/342), which will be put back on Terser when the upstream issue is resolved) ## v4.0.1 - Collisions between the arguments of inlined functions and names in the outer scope are now being avoided while inlining - Unmapped segments are now preserved when compressing a file which has source maps - Default values of functions are now correctly converted from Mozilla AST to Terser AST - JSON ⊂ ECMAScript spec (if you don't know what this is you don't need to) - Export AST_* classes to library users - Fixed issue with `collapse_vars` when functions are created with the same name as a variable which already exists - Added `MutationObserverInit` (Object with options for initialising a mutation observer) properties to the DOM property list - Custom `Error` subclasses are now internally used instead of old-school Error inheritance hacks. - Documentation fixes - Performance optimizations ## v4.0.0 - **breaking change**: The `variables` property of all scopes has become a standard JavaScript `Map` as opposed to the old bespoke `Dictionary` object. - Typescript definitions were fixed - `terser --help` was fixed - The public interface was cleaned up - Fixed optimisation of `Array` and `new Array` - Added the `keep_quoted=strict` mode to mangle_props, which behaves more like Google Closure Compiler by mangling all unquoted property names, instead of reserving quoted property names automatically. - Fixed parent functions' parameters being shadowed in some cases - Allowed Terser to run in a situation where there are custom functions attached to Object.prototype - And more bug fixes, optimisations and internal changes ## v3.17.0 - More DOM properties added to --mangle-properties's DOM property list - Closed issue where if 2 functions had the same argument name, Terser would not inline them together properly - Fixed issue with `hasOwnProperty.call` - You can now list files to minify in a Terser config file - Started replacing `new Array()` with an array literal - Started using ES6 capabilities like `Set` and the `includes` method for strings and arrays ## v3.16.1 - Fixed issue where Terser being imported with `import` would cause it not to work due to the `__esModule` property. (PR #254 was submitted, which was nice, but since it wasn't a pure commonJS approach I decided to go with my own solution) ## v3.16.0 - No longer leaves names like Array or Object or window as a SimpleStatement (statement which is just a single expression). - Add support for sections sourcemaps (IndexedSourceMapConsumer) - Drops node.js v4 and starts using commonJS - Is now built with rollup ## v3.15.0 - Inlined spread syntax (`[...[1, 2, 3], 4, 5] => [1, 2, 3, 4, 5]`) in arrays and objects. - Fixed typo in compressor warning - Fixed inline source map input bug - Fixed parsing of template literals with unnecessary escapes (Like `\\a`) node_modules/terser/bin/terser000066600000040674150425117220012542 0ustar00#!/usr/bin/env node // -*- js -*- /* eslint-env node */ "use strict"; require("../tools/exit.js"); var fs = require("fs"); var info = require("../package.json"); var path = require("path"); var program = require("commander"); var Terser = require(".."); try { require("source-map-support").install(); } catch (err) {} const skip_keys = new Set([ "cname", "parent_scope", "scope", "uses_eval", "uses_with", "_var_name_cache" ]); var files = {}; var options = { compress: false, mangle: false }; program.version(info.name + " " + info.version); program.parseArgv = program.parse; program.parse = undefined; if (process.argv.includes("ast")) program.helpInformation = describe_ast; else if (process.argv.includes("options")) program.helpInformation = function() { var text = []; var options = Terser.default_options(); for (var option in options) { text.push("--" + (option === "output" ? "beautify" : option === "sourceMap" ? "source-map" : option) + " options:"); text.push(format_object(options[option])); text.push(""); } return text.join("\n"); }; program.option("-p, --parse ", "Specify parser options.", parse_js()); program.option("-c, --compress [options]", "Enable compressor/specify compressor options.", parse_js()); program.option("-m, --mangle [options]", "Mangle names/specify mangler options.", parse_js()); program.option("--mangle-props [options]", "Mangle properties/specify mangler options.", parse_js()); program.option("-b, --beautify [options]", "Beautify output/specify output options.", parse_js()); program.option("-o, --output ", "Output file (default STDOUT)."); program.option("--comments [filter]", "Preserve copyright comments in the output."); program.option("--config-file ", "Read minify() options from JSON file."); program.option("-d, --define [=value]", "Global definitions.", parse_js("define")); program.option("--ecma ", "Specify ECMAScript release: 5, 2015, 2016 or 2017..."); program.option("-e, --enclose [arg[,...][:value[,...]]]", "Embed output in a big function with configurable arguments and values."); program.option("--ie8", "Support non-standard Internet Explorer 8."); program.option("--keep-classnames", "Do not mangle/drop class names."); program.option("--keep-fnames", "Do not mangle/drop function names. Useful for code relying on Function.prototype.name."); program.option("--module", "Input is an ES6 module"); program.option("--name-cache ", "File to hold mangled name mappings."); program.option("--rename", "Force symbol expansion."); program.option("--no-rename", "Disable symbol expansion."); program.option("--safari10", "Support non-standard Safari 10."); program.option("--source-map [options]", "Enable source map/specify source map options.", parse_js()); program.option("--timings", "Display operations run time on STDERR."); program.option("--toplevel", "Compress and/or mangle variables in toplevel scope."); program.option("--verbose", "Print diagnostic messages."); program.option("--warn", "Print warning messages."); program.option("--wrap ", "Embed everything as a function with “exports” corresponding to “name” globally."); program.arguments("[files...]").parseArgv(process.argv); if (program.configFile) { options = JSON.parse(read_file(program.configFile)); } if (!program.output && program.sourceMap && program.sourceMap.url != "inline") { fatal("ERROR: cannot write source map to STDOUT"); } [ "compress", "enclose", "ie8", "mangle", "module", "safari10", "sourceMap", "toplevel", "wrap" ].forEach(function(name) { if (name in program) { options[name] = program[name]; } }); if ("ecma" in program) { if (program.ecma != (program.ecma | 0)) fatal("ERROR: ecma must be an integer"); const ecma = program.ecma | 0; if (ecma > 5 && ecma < 2015) options.ecma = ecma + 2009; else options.ecma = ecma; } if (program.beautify) { options.output = typeof program.beautify == "object" ? program.beautify : {}; if (!("beautify" in options.output)) { options.output.beautify = true; } } if (program.comments) { if (typeof options.output != "object") options.output = {}; options.output.comments = typeof program.comments == "string" ? (program.comments == "false" ? false : program.comments) : "some"; } if (program.define) { if (typeof options.compress != "object") options.compress = {}; if (typeof options.compress.global_defs != "object") options.compress.global_defs = {}; for (var expr in program.define) { options.compress.global_defs[expr] = program.define[expr]; } } if (program.keepClassnames) { options.keep_classnames = true; } if (program.keepFnames) { options.keep_fnames = true; } if (program.mangleProps) { if (program.mangleProps.domprops) { delete program.mangleProps.domprops; } else { if (typeof program.mangleProps != "object") program.mangleProps = {}; if (!Array.isArray(program.mangleProps.reserved)) program.mangleProps.reserved = []; } if (typeof options.mangle != "object") options.mangle = {}; options.mangle.properties = program.mangleProps; } if (program.nameCache) { options.nameCache = JSON.parse(read_file(program.nameCache, "{}")); } if (program.output == "ast") { options.output = { ast: true, code: false }; } if (program.parse) { if (!program.parse.acorn && !program.parse.spidermonkey) { options.parse = program.parse; } else if (program.sourceMap && program.sourceMap.content == "inline") { fatal("ERROR: inline source map only works with built-in parser"); } } if (~program.rawArgs.indexOf("--rename")) { options.rename = true; } else if (!program.rename) { options.rename = false; } var convert_path = function(name) { return name; }; if (typeof program.sourceMap == "object" && "base" in program.sourceMap) { convert_path = function() { var base = program.sourceMap.base; delete options.sourceMap.base; return function(name) { return path.relative(base, name); }; }(); } if (program.verbose) { options.warnings = "verbose"; } else if (program.warn) { options.warnings = true; } let filesList; if (options.files && options.files.length) { filesList = options.files; delete options.files; } else if (program.args.length) { filesList = program.args; } if (filesList) { simple_glob(filesList).forEach(function(name) { files[convert_path(name)] = read_file(name); }); run(); } else { var chunks = []; process.stdin.setEncoding("utf8"); process.stdin.on("data", function(chunk) { chunks.push(chunk); }).on("end", function() { files = [ chunks.join("") ]; run(); }); process.stdin.resume(); } function convert_ast(fn) { return Terser.AST_Node.from_mozilla_ast(Object.keys(files).reduce(fn, null)); } function run() { Terser.AST_Node.warn_function = function(msg) { print_error("WARN: " + msg); }; var content = program.sourceMap && program.sourceMap.content; if (content && content !== "inline") { options.sourceMap.content = read_file(content, content); } if (program.timings) options.timings = true; try { if (program.parse) { if (program.parse.acorn) { files = convert_ast(function(toplevel, name) { return require("acorn").parse(files[name], { ecmaVersion: 2018, locations: true, program: toplevel, sourceFile: name, sourceType: options.module || program.parse.module ? "module" : "script" }); }); } else if (program.parse.spidermonkey) { files = convert_ast(function(toplevel, name) { var obj = JSON.parse(files[name]); if (!toplevel) return obj; toplevel.body = toplevel.body.concat(obj.body); return toplevel; }); } } } catch (ex) { fatal(ex); } var result = Terser.minify(files, options); if (result.error) { var ex = result.error; if (ex.name == "SyntaxError") { print_error("Parse error at " + ex.filename + ":" + ex.line + "," + ex.col); var col = ex.col; var lines = files[ex.filename].split(/\r?\n/); var line = lines[ex.line - 1]; if (!line && !col) { line = lines[ex.line - 2]; col = line.length; } if (line) { var limit = 70; if (col > limit) { line = line.slice(col - limit); col = limit; } print_error(line.slice(0, 80)); print_error(line.slice(0, col).replace(/\S/g, " ") + "^"); } } if (ex.defs) { print_error("Supported options:"); print_error(format_object(ex.defs)); } fatal(ex); } else if (program.output == "ast") { if (!options.compress && !options.mangle) { result.ast.figure_out_scope({}); } print(JSON.stringify(result.ast, function(key, value) { if (value) switch (key) { case "thedef": return symdef(value); case "enclosed": return value.length ? value.map(symdef) : undefined; case "variables": case "functions": case "globals": return value.size ? collect_from_map(value, symdef) : undefined; } if (skip_keys.has(key)) return; if (value instanceof Terser.AST_Token) return; if (value instanceof Map) return; if (value instanceof Terser.AST_Node) { var result = { _class: "AST_" + value.TYPE }; if (value.block_scope) { result.variables = value.block_scope.variables; result.functions = value.block_scope.functions; result.enclosed = value.block_scope.enclosed; } value.CTOR.PROPS.forEach(function(prop) { if (prop === "block_scope") return; result[prop] = value[prop]; }); return result; } return value; }, 2)); } else if (program.output == "spidermonkey") { print(JSON.stringify(Terser.minify(result.code, { compress: false, mangle: false, output: { ast: true, code: false } }).ast.to_mozilla_ast(), null, 2)); } else if (program.output) { fs.writeFileSync(program.output, result.code); if (options.sourceMap.url !== "inline" && result.map) { fs.writeFileSync(program.output + ".map", result.map); } } else { print(result.code); } if (program.nameCache) { fs.writeFileSync(program.nameCache, JSON.stringify(options.nameCache)); } if (result.timings) for (var phase in result.timings) { print_error("- " + phase + ": " + result.timings[phase].toFixed(3) + "s"); } } function fatal(message) { if (message instanceof Error) message = message.stack.replace(/^\S*?Error:/, "ERROR:"); print_error(message); process.exit(1); } // A file glob function that only supports "*" and "?" wildcards in the basename. // Example: "foo/bar/*baz??.*.js" // Argument `glob` may be a string or an array of strings. // Returns an array of strings. Garbage in, garbage out. function simple_glob(glob) { if (Array.isArray(glob)) { return [].concat.apply([], glob.map(simple_glob)); } if (glob && glob.match(/[*?]/)) { var dir = path.dirname(glob); try { var entries = fs.readdirSync(dir); } catch (ex) {} if (entries) { var pattern = "^" + path.basename(glob) .replace(/[.+^$[\]\\(){}]/g, "\\$&") .replace(/\*/g, "[^/\\\\]*") .replace(/\?/g, "[^/\\\\]") + "$"; var mod = process.platform === "win32" ? "i" : ""; var rx = new RegExp(pattern, mod); var results = entries.filter(function(name) { return rx.test(name); }).map(function(name) { return path.join(dir, name); }); if (results.length) return results; } } return [ glob ]; } function read_file(path, default_value) { try { return fs.readFileSync(path, "utf8"); } catch (ex) { if ((ex.code == "ENOENT" || ex.code == "ENAMETOOLONG") && default_value != null) return default_value; fatal(ex); } } function parse_js(flag) { return function(value, options) { options = options || {}; try { Terser.parse(value, { expression: true }).walk(new Terser.TreeWalker(function(node) { if (node instanceof Terser.AST_Assign) { var name = node.left.print_to_string(); var value = node.right; if (flag) { options[name] = value; } else if (value instanceof Terser.AST_Array) { options[name] = value.elements.map(to_string); } else if (value instanceof Terser.AST_RegExp) { value = value.value; options[name] = new RegExp(value.source, value.flags); } else { options[name] = to_string(value); } return true; } if (node instanceof Terser.AST_Symbol || node instanceof Terser.AST_PropAccess) { var name = node.print_to_string(); options[name] = true; return true; } if (!(node instanceof Terser.AST_Sequence)) throw node; function to_string(value) { return value instanceof Terser.AST_Constant ? value.getValue() : value.print_to_string({ quote_keys: true }); } })); } catch(ex) { if (flag) { fatal("Error parsing arguments for '" + flag + "': " + value); } else { options[value] = null; } } return options; }; } function symdef(def) { var ret = (1e6 + def.id) + " " + def.name; if (def.mangled_name) ret += " " + def.mangled_name; return ret; } function collect_from_map(map, callback) { var result = []; map.forEach(function (def) { result.push(callback(def)); }); return result; } function format_object(obj) { var lines = []; var padding = ""; Object.keys(obj).map(function(name) { if (padding.length < name.length) padding = Array(name.length + 1).join(" "); return [ name, JSON.stringify(obj[name]) ]; }).forEach(function(tokens) { lines.push(" " + tokens[0] + padding.slice(tokens[0].length - 2) + tokens[1]); }); return lines.join("\n"); } function print_error(msg) { process.stderr.write(msg); process.stderr.write("\n"); } function print(txt) { process.stdout.write(txt); process.stdout.write("\n"); } function describe_ast() { var out = Terser.OutputStream({ beautify: true }); function doitem(ctor) { out.print("AST_" + ctor.TYPE); var props = ctor.SELF_PROPS.filter(function(prop) { return !/^\$/.test(prop); }); if (props.length > 0) { out.space(); out.with_parens(function() { props.forEach(function(prop, i) { if (i) out.space(); out.print(prop); }); }); } if (ctor.documentation) { out.space(); out.print_string(ctor.documentation); } if (ctor.SUBCLASSES.length > 0) { out.space(); out.with_block(function() { ctor.SUBCLASSES.forEach(function(ctor, i) { out.indent(); doitem(ctor); out.newline(); }); }); } } doitem(Terser.AST_Node); return out + "\n"; } node_modules/terser/bin/uglifyjs000066600000000366150425117220013064 0ustar00#!/usr/bin/env node // -*- js -*- /* eslint-env node */ "use strict"; process.stderr.write( "DEPRECATION WARNING: uglifyjs binary will soon be discontinued!\n"); process.stderr.write("Please use \"terser\" instead.\n\n"); require("./terser"); node_modules/terser/tools/exit.js000066600000000725150425117220013203 0ustar00// workaround for tty output truncation upon process.exit() var exit = process.exit; process.exit = function() { var args = [].slice.call(arguments); process.once("uncaughtException", function() { (function callback() { if (process.stdout.bufferSize || process.stderr.bufferSize) { setImmediate(callback); } else { exit.apply(process, args); } })(); }); throw exit; }; node_modules/terser/tools/domprops.js000066600000353707150425117220014110 0ustar00export var domprops = [ "$&", "$'", "$*", "$+", "$1", "$2", "$3", "$4", "$5", "$6", "$7", "$8", "$9", "$_", "$`", "$input", "@@iterator", "ABORT_ERR", "ACTIVE", "ACTIVE_ATTRIBUTES", "ACTIVE_TEXTURE", "ACTIVE_UNIFORMS", "ADDITION", "ALIASED_LINE_WIDTH_RANGE", "ALIASED_POINT_SIZE_RANGE", "ALLOW_KEYBOARD_INPUT", "ALLPASS", "ALPHA", "ALPHA_BITS", "ALT_MASK", "ALWAYS", "ANY_TYPE", "ANY_UNORDERED_NODE_TYPE", "ARRAY_BUFFER", "ARRAY_BUFFER_BINDING", "ATTACHED_SHADERS", "ATTRIBUTE_NODE", "AT_TARGET", "AddSearchProvider", "AnalyserNode", "AnimationEvent", "AnonXMLHttpRequest", "ApplicationCache", "ApplicationCacheErrorEvent", "Array", "ArrayBuffer", "Attr", "Audio", "AudioBuffer", "AudioBufferSourceNode", "AudioContext", "AudioDestinationNode", "AudioListener", "AudioNode", "AudioParam", "AudioProcessingEvent", "AudioStreamTrack", "AutocompleteErrorEvent", "BACK", "BAD_BOUNDARYPOINTS_ERR", "BANDPASS", "BLEND", "BLEND_COLOR", "BLEND_DST_ALPHA", "BLEND_DST_RGB", "BLEND_EQUATION", "BLEND_EQUATION_ALPHA", "BLEND_EQUATION_RGB", "BLEND_SRC_ALPHA", "BLEND_SRC_RGB", "BLUE_BITS", "BLUR", "BOOL", "BOOLEAN_TYPE", "BOOL_VEC2", "BOOL_VEC3", "BOOL_VEC4", "BOTH", "BROWSER_DEFAULT_WEBGL", "BUBBLING_PHASE", "BUFFER_SIZE", "BUFFER_USAGE", "BYTE", "BYTES_PER_ELEMENT", "BarProp", "BaseHref", "BatteryManager", "BeforeLoadEvent", "BeforeUnloadEvent", "BiquadFilterNode", "Blob", "BlobEvent", "Boolean", "CAPTURING_PHASE", "CCW", "CDATASection", "CDATA_SECTION_NODE", "CHANGE", "CHARSET_RULE", "CHECKING", "CLAMP_TO_EDGE", "CLICK", "CLOSED", "CLOSING", "COLOR_ATTACHMENT0", "COLOR_BUFFER_BIT", "COLOR_CLEAR_VALUE", "COLOR_WRITEMASK", "COMMENT_NODE", "COMPILE_STATUS", "COMPRESSED_RGBA_S3TC_DXT1_EXT", "COMPRESSED_RGBA_S3TC_DXT3_EXT", "COMPRESSED_RGBA_S3TC_DXT5_EXT", "COMPRESSED_RGB_S3TC_DXT1_EXT", "COMPRESSED_TEXTURE_FORMATS", "CONNECTING", "CONSTANT_ALPHA", "CONSTANT_COLOR", "CONSTRAINT_ERR", "CONTEXT_LOST_WEBGL", "CONTROL_MASK", "COUNTER_STYLE_RULE", "CSS", "CSS2Properties", "CSSCharsetRule", "CSSConditionRule", "CSSCounterStyleRule", "CSSFontFaceRule", "CSSFontFeatureValuesRule", "CSSGroupingRule", "CSSImportRule", "CSSKeyframeRule", "CSSKeyframesRule", "CSSMediaRule", "CSSMozDocumentRule", "CSSNameSpaceRule", "CSSPageRule", "CSSPrimitiveValue", "CSSRule", "CSSRuleList", "CSSStyleDeclaration", "CSSStyleRule", "CSSStyleSheet", "CSSSupportsRule", "CSSUnknownRule", "CSSValue", "CSSValueList", "CSSVariablesDeclaration", "CSSVariablesRule", "CSSViewportRule", "CSS_ATTR", "CSS_CM", "CSS_COUNTER", "CSS_CUSTOM", "CSS_DEG", "CSS_DIMENSION", "CSS_EMS", "CSS_EXS", "CSS_FILTER_BLUR", "CSS_FILTER_BRIGHTNESS", "CSS_FILTER_CONTRAST", "CSS_FILTER_CUSTOM", "CSS_FILTER_DROP_SHADOW", "CSS_FILTER_GRAYSCALE", "CSS_FILTER_HUE_ROTATE", "CSS_FILTER_INVERT", "CSS_FILTER_OPACITY", "CSS_FILTER_REFERENCE", "CSS_FILTER_SATURATE", "CSS_FILTER_SEPIA", "CSS_GRAD", "CSS_HZ", "CSS_IDENT", "CSS_IN", "CSS_INHERIT", "CSS_KHZ", "CSS_MATRIX", "CSS_MATRIX3D", "CSS_MM", "CSS_MS", "CSS_NUMBER", "CSS_PC", "CSS_PERCENTAGE", "CSS_PERSPECTIVE", "CSS_PRIMITIVE_VALUE", "CSS_PT", "CSS_PX", "CSS_RAD", "CSS_RECT", "CSS_RGBCOLOR", "CSS_ROTATE", "CSS_ROTATE3D", "CSS_ROTATEX", "CSS_ROTATEY", "CSS_ROTATEZ", "CSS_S", "CSS_SCALE", "CSS_SCALE3D", "CSS_SCALEX", "CSS_SCALEY", "CSS_SCALEZ", "CSS_SKEW", "CSS_SKEWX", "CSS_SKEWY", "CSS_STRING", "CSS_TRANSLATE", "CSS_TRANSLATE3D", "CSS_TRANSLATEX", "CSS_TRANSLATEY", "CSS_TRANSLATEZ", "CSS_UNKNOWN", "CSS_URI", "CSS_VALUE_LIST", "CSS_VH", "CSS_VMAX", "CSS_VMIN", "CSS_VW", "CULL_FACE", "CULL_FACE_MODE", "CURRENT_PROGRAM", "CURRENT_VERTEX_ATTRIB", "CUSTOM", "CW", "CanvasGradient", "CanvasPattern", "CanvasRenderingContext2D", "CaretPosition", "ChannelMergerNode", "ChannelSplitterNode", "CharacterData", "ClientRect", "ClientRectList", "Clipboard", "ClipboardEvent", "CloseEvent", "Collator", "CommandEvent", "Comment", "CompositionEvent", "Console", "Controllers", "ConvolverNode", "Counter", "Crypto", "CryptoKey", "CustomEvent", "DATABASE_ERR", "DATA_CLONE_ERR", "DATA_ERR", "DBLCLICK", "DECR", "DECR_WRAP", "DELETE_STATUS", "DEPTH_ATTACHMENT", "DEPTH_BITS", "DEPTH_BUFFER_BIT", "DEPTH_CLEAR_VALUE", "DEPTH_COMPONENT", "DEPTH_COMPONENT16", "DEPTH_FUNC", "DEPTH_RANGE", "DEPTH_STENCIL", "DEPTH_STENCIL_ATTACHMENT", "DEPTH_TEST", "DEPTH_WRITEMASK", "DIRECTION_DOWN", "DIRECTION_LEFT", "DIRECTION_RIGHT", "DIRECTION_UP", "DISABLED", "DISPATCH_REQUEST_ERR", "DITHER", "DOCUMENT_FRAGMENT_NODE", "DOCUMENT_NODE", "DOCUMENT_POSITION_CONTAINED_BY", "DOCUMENT_POSITION_CONTAINS", "DOCUMENT_POSITION_DISCONNECTED", "DOCUMENT_POSITION_FOLLOWING", "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC", "DOCUMENT_POSITION_PRECEDING", "DOCUMENT_TYPE_NODE", "DOMCursor", "DOMError", "DOMException", "DOMImplementation", "DOMImplementationLS", "DOMMatrix", "DOMMatrixReadOnly", "DOMParser", "DOMPoint", "DOMPointReadOnly", "DOMQuad", "DOMRect", "DOMRectList", "DOMRectReadOnly", "DOMRequest", "DOMSTRING_SIZE_ERR", "DOMSettableTokenList", "DOMStringList", "DOMStringMap", "DOMTokenList", "DOMTransactionEvent", "DOM_DELTA_LINE", "DOM_DELTA_PAGE", "DOM_DELTA_PIXEL", "DOM_INPUT_METHOD_DROP", "DOM_INPUT_METHOD_HANDWRITING", "DOM_INPUT_METHOD_IME", "DOM_INPUT_METHOD_KEYBOARD", "DOM_INPUT_METHOD_MULTIMODAL", "DOM_INPUT_METHOD_OPTION", "DOM_INPUT_METHOD_PASTE", "DOM_INPUT_METHOD_SCRIPT", "DOM_INPUT_METHOD_UNKNOWN", "DOM_INPUT_METHOD_VOICE", "DOM_KEY_LOCATION_JOYSTICK", "DOM_KEY_LOCATION_LEFT", "DOM_KEY_LOCATION_MOBILE", "DOM_KEY_LOCATION_NUMPAD", "DOM_KEY_LOCATION_RIGHT", "DOM_KEY_LOCATION_STANDARD", "DOM_VK_0", "DOM_VK_1", "DOM_VK_2", "DOM_VK_3", "DOM_VK_4", "DOM_VK_5", "DOM_VK_6", "DOM_VK_7", "DOM_VK_8", "DOM_VK_9", "DOM_VK_A", "DOM_VK_ACCEPT", "DOM_VK_ADD", "DOM_VK_ALT", "DOM_VK_ALTGR", "DOM_VK_AMPERSAND", "DOM_VK_ASTERISK", "DOM_VK_AT", "DOM_VK_ATTN", "DOM_VK_B", "DOM_VK_BACKSPACE", "DOM_VK_BACK_QUOTE", "DOM_VK_BACK_SLASH", "DOM_VK_BACK_SPACE", "DOM_VK_C", "DOM_VK_CANCEL", "DOM_VK_CAPS_LOCK", "DOM_VK_CIRCUMFLEX", "DOM_VK_CLEAR", "DOM_VK_CLOSE_BRACKET", "DOM_VK_CLOSE_CURLY_BRACKET", "DOM_VK_CLOSE_PAREN", "DOM_VK_COLON", "DOM_VK_COMMA", "DOM_VK_CONTEXT_MENU", "DOM_VK_CONTROL", "DOM_VK_CONVERT", "DOM_VK_CRSEL", "DOM_VK_CTRL", "DOM_VK_D", "DOM_VK_DECIMAL", "DOM_VK_DELETE", "DOM_VK_DIVIDE", "DOM_VK_DOLLAR", "DOM_VK_DOUBLE_QUOTE", "DOM_VK_DOWN", "DOM_VK_E", "DOM_VK_EISU", "DOM_VK_END", "DOM_VK_ENTER", "DOM_VK_EQUALS", "DOM_VK_EREOF", "DOM_VK_ESCAPE", "DOM_VK_EXCLAMATION", "DOM_VK_EXECUTE", "DOM_VK_EXSEL", "DOM_VK_F", "DOM_VK_F1", "DOM_VK_F10", "DOM_VK_F11", "DOM_VK_F12", "DOM_VK_F13", "DOM_VK_F14", "DOM_VK_F15", "DOM_VK_F16", "DOM_VK_F17", "DOM_VK_F18", "DOM_VK_F19", "DOM_VK_F2", "DOM_VK_F20", "DOM_VK_F21", "DOM_VK_F22", "DOM_VK_F23", "DOM_VK_F24", "DOM_VK_F25", "DOM_VK_F26", "DOM_VK_F27", "DOM_VK_F28", "DOM_VK_F29", "DOM_VK_F3", "DOM_VK_F30", "DOM_VK_F31", "DOM_VK_F32", "DOM_VK_F33", "DOM_VK_F34", "DOM_VK_F35", "DOM_VK_F36", "DOM_VK_F4", "DOM_VK_F5", "DOM_VK_F6", "DOM_VK_F7", "DOM_VK_F8", "DOM_VK_F9", "DOM_VK_FINAL", "DOM_VK_FRONT", "DOM_VK_G", "DOM_VK_GREATER_THAN", "DOM_VK_H", "DOM_VK_HANGUL", "DOM_VK_HANJA", "DOM_VK_HASH", "DOM_VK_HELP", "DOM_VK_HK_TOGGLE", "DOM_VK_HOME", "DOM_VK_HYPHEN_MINUS", "DOM_VK_I", "DOM_VK_INSERT", "DOM_VK_J", "DOM_VK_JUNJA", "DOM_VK_K", "DOM_VK_KANA", "DOM_VK_KANJI", "DOM_VK_L", "DOM_VK_LEFT", "DOM_VK_LEFT_TAB", "DOM_VK_LESS_THAN", "DOM_VK_M", "DOM_VK_META", "DOM_VK_MODECHANGE", "DOM_VK_MULTIPLY", "DOM_VK_N", "DOM_VK_NONCONVERT", "DOM_VK_NUMPAD0", "DOM_VK_NUMPAD1", "DOM_VK_NUMPAD2", "DOM_VK_NUMPAD3", "DOM_VK_NUMPAD4", "DOM_VK_NUMPAD5", "DOM_VK_NUMPAD6", "DOM_VK_NUMPAD7", "DOM_VK_NUMPAD8", "DOM_VK_NUMPAD9", "DOM_VK_NUM_LOCK", "DOM_VK_O", "DOM_VK_OEM_1", "DOM_VK_OEM_102", "DOM_VK_OEM_2", "DOM_VK_OEM_3", "DOM_VK_OEM_4", "DOM_VK_OEM_5", "DOM_VK_OEM_6", "DOM_VK_OEM_7", "DOM_VK_OEM_8", "DOM_VK_OEM_COMMA", "DOM_VK_OEM_MINUS", "DOM_VK_OEM_PERIOD", "DOM_VK_OEM_PLUS", "DOM_VK_OPEN_BRACKET", "DOM_VK_OPEN_CURLY_BRACKET", "DOM_VK_OPEN_PAREN", "DOM_VK_P", "DOM_VK_PA1", "DOM_VK_PAGEDOWN", "DOM_VK_PAGEUP", "DOM_VK_PAGE_DOWN", "DOM_VK_PAGE_UP", "DOM_VK_PAUSE", "DOM_VK_PERCENT", "DOM_VK_PERIOD", "DOM_VK_PIPE", "DOM_VK_PLAY", "DOM_VK_PLUS", "DOM_VK_PRINT", "DOM_VK_PRINTSCREEN", "DOM_VK_PROCESSKEY", "DOM_VK_PROPERITES", "DOM_VK_Q", "DOM_VK_QUESTION_MARK", "DOM_VK_QUOTE", "DOM_VK_R", "DOM_VK_REDO", "DOM_VK_RETURN", "DOM_VK_RIGHT", "DOM_VK_S", "DOM_VK_SCROLL_LOCK", "DOM_VK_SELECT", "DOM_VK_SEMICOLON", "DOM_VK_SEPARATOR", "DOM_VK_SHIFT", "DOM_VK_SLASH", "DOM_VK_SLEEP", "DOM_VK_SPACE", "DOM_VK_SUBTRACT", "DOM_VK_T", "DOM_VK_TAB", "DOM_VK_TILDE", "DOM_VK_U", "DOM_VK_UNDERSCORE", "DOM_VK_UNDO", "DOM_VK_UNICODE", "DOM_VK_UP", "DOM_VK_V", "DOM_VK_VOLUME_DOWN", "DOM_VK_VOLUME_MUTE", "DOM_VK_VOLUME_UP", "DOM_VK_W", "DOM_VK_WIN", "DOM_VK_WINDOW", "DOM_VK_WIN_ICO_00", "DOM_VK_WIN_ICO_CLEAR", "DOM_VK_WIN_ICO_HELP", "DOM_VK_WIN_OEM_ATTN", "DOM_VK_WIN_OEM_AUTO", "DOM_VK_WIN_OEM_BACKTAB", "DOM_VK_WIN_OEM_CLEAR", "DOM_VK_WIN_OEM_COPY", "DOM_VK_WIN_OEM_CUSEL", "DOM_VK_WIN_OEM_ENLW", "DOM_VK_WIN_OEM_FINISH", "DOM_VK_WIN_OEM_FJ_JISHO", "DOM_VK_WIN_OEM_FJ_LOYA", "DOM_VK_WIN_OEM_FJ_MASSHOU", "DOM_VK_WIN_OEM_FJ_ROYA", "DOM_VK_WIN_OEM_FJ_TOUROKU", "DOM_VK_WIN_OEM_JUMP", "DOM_VK_WIN_OEM_PA1", "DOM_VK_WIN_OEM_PA2", "DOM_VK_WIN_OEM_PA3", "DOM_VK_WIN_OEM_RESET", "DOM_VK_WIN_OEM_WSCTRL", "DOM_VK_X", "DOM_VK_XF86XK_ADD_FAVORITE", "DOM_VK_XF86XK_APPLICATION_LEFT", "DOM_VK_XF86XK_APPLICATION_RIGHT", "DOM_VK_XF86XK_AUDIO_CYCLE_TRACK", "DOM_VK_XF86XK_AUDIO_FORWARD", "DOM_VK_XF86XK_AUDIO_LOWER_VOLUME", "DOM_VK_XF86XK_AUDIO_MEDIA", "DOM_VK_XF86XK_AUDIO_MUTE", "DOM_VK_XF86XK_AUDIO_NEXT", "DOM_VK_XF86XK_AUDIO_PAUSE", "DOM_VK_XF86XK_AUDIO_PLAY", "DOM_VK_XF86XK_AUDIO_PREV", "DOM_VK_XF86XK_AUDIO_RAISE_VOLUME", "DOM_VK_XF86XK_AUDIO_RANDOM_PLAY", "DOM_VK_XF86XK_AUDIO_RECORD", "DOM_VK_XF86XK_AUDIO_REPEAT", "DOM_VK_XF86XK_AUDIO_REWIND", "DOM_VK_XF86XK_AUDIO_STOP", "DOM_VK_XF86XK_AWAY", "DOM_VK_XF86XK_BACK", "DOM_VK_XF86XK_BACK_FORWARD", "DOM_VK_XF86XK_BATTERY", "DOM_VK_XF86XK_BLUE", "DOM_VK_XF86XK_BLUETOOTH", "DOM_VK_XF86XK_BOOK", "DOM_VK_XF86XK_BRIGHTNESS_ADJUST", "DOM_VK_XF86XK_CALCULATOR", "DOM_VK_XF86XK_CALENDAR", "DOM_VK_XF86XK_CD", "DOM_VK_XF86XK_CLOSE", "DOM_VK_XF86XK_COMMUNITY", "DOM_VK_XF86XK_CONTRAST_ADJUST", "DOM_VK_XF86XK_COPY", "DOM_VK_XF86XK_CUT", "DOM_VK_XF86XK_CYCLE_ANGLE", "DOM_VK_XF86XK_DISPLAY", "DOM_VK_XF86XK_DOCUMENTS", "DOM_VK_XF86XK_DOS", "DOM_VK_XF86XK_EJECT", "DOM_VK_XF86XK_EXCEL", "DOM_VK_XF86XK_EXPLORER", "DOM_VK_XF86XK_FAVORITES", "DOM_VK_XF86XK_FINANCE", "DOM_VK_XF86XK_FORWARD", "DOM_VK_XF86XK_FRAME_BACK", "DOM_VK_XF86XK_FRAME_FORWARD", "DOM_VK_XF86XK_GAME", "DOM_VK_XF86XK_GO", "DOM_VK_XF86XK_GREEN", "DOM_VK_XF86XK_HIBERNATE", "DOM_VK_XF86XK_HISTORY", "DOM_VK_XF86XK_HOME_PAGE", "DOM_VK_XF86XK_HOT_LINKS", "DOM_VK_XF86XK_I_TOUCH", "DOM_VK_XF86XK_KBD_BRIGHTNESS_DOWN", "DOM_VK_XF86XK_KBD_BRIGHTNESS_UP", "DOM_VK_XF86XK_KBD_LIGHT_ON_OFF", "DOM_VK_XF86XK_LAUNCH0", "DOM_VK_XF86XK_LAUNCH1", "DOM_VK_XF86XK_LAUNCH2", "DOM_VK_XF86XK_LAUNCH3", "DOM_VK_XF86XK_LAUNCH4", "DOM_VK_XF86XK_LAUNCH5", "DOM_VK_XF86XK_LAUNCH6", "DOM_VK_XF86XK_LAUNCH7", "DOM_VK_XF86XK_LAUNCH8", "DOM_VK_XF86XK_LAUNCH9", "DOM_VK_XF86XK_LAUNCH_A", "DOM_VK_XF86XK_LAUNCH_B", "DOM_VK_XF86XK_LAUNCH_C", "DOM_VK_XF86XK_LAUNCH_D", "DOM_VK_XF86XK_LAUNCH_E", "DOM_VK_XF86XK_LAUNCH_F", "DOM_VK_XF86XK_LIGHT_BULB", "DOM_VK_XF86XK_LOG_OFF", "DOM_VK_XF86XK_MAIL", "DOM_VK_XF86XK_MAIL_FORWARD", "DOM_VK_XF86XK_MARKET", "DOM_VK_XF86XK_MEETING", "DOM_VK_XF86XK_MEMO", "DOM_VK_XF86XK_MENU_KB", "DOM_VK_XF86XK_MENU_PB", "DOM_VK_XF86XK_MESSENGER", "DOM_VK_XF86XK_MON_BRIGHTNESS_DOWN", "DOM_VK_XF86XK_MON_BRIGHTNESS_UP", "DOM_VK_XF86XK_MUSIC", "DOM_VK_XF86XK_MY_COMPUTER", "DOM_VK_XF86XK_MY_SITES", "DOM_VK_XF86XK_NEW", "DOM_VK_XF86XK_NEWS", "DOM_VK_XF86XK_OFFICE_HOME", "DOM_VK_XF86XK_OPEN", "DOM_VK_XF86XK_OPEN_URL", "DOM_VK_XF86XK_OPTION", "DOM_VK_XF86XK_PASTE", "DOM_VK_XF86XK_PHONE", "DOM_VK_XF86XK_PICTURES", "DOM_VK_XF86XK_POWER_DOWN", "DOM_VK_XF86XK_POWER_OFF", "DOM_VK_XF86XK_RED", "DOM_VK_XF86XK_REFRESH", "DOM_VK_XF86XK_RELOAD", "DOM_VK_XF86XK_REPLY", "DOM_VK_XF86XK_ROCKER_DOWN", "DOM_VK_XF86XK_ROCKER_ENTER", "DOM_VK_XF86XK_ROCKER_UP", "DOM_VK_XF86XK_ROTATE_WINDOWS", "DOM_VK_XF86XK_ROTATION_KB", "DOM_VK_XF86XK_ROTATION_PB", "DOM_VK_XF86XK_SAVE", "DOM_VK_XF86XK_SCREEN_SAVER", "DOM_VK_XF86XK_SCROLL_CLICK", "DOM_VK_XF86XK_SCROLL_DOWN", "DOM_VK_XF86XK_SCROLL_UP", "DOM_VK_XF86XK_SEARCH", "DOM_VK_XF86XK_SEND", "DOM_VK_XF86XK_SHOP", "DOM_VK_XF86XK_SPELL", "DOM_VK_XF86XK_SPLIT_SCREEN", "DOM_VK_XF86XK_STANDBY", "DOM_VK_XF86XK_START", "DOM_VK_XF86XK_STOP", "DOM_VK_XF86XK_SUBTITLE", "DOM_VK_XF86XK_SUPPORT", "DOM_VK_XF86XK_SUSPEND", "DOM_VK_XF86XK_TASK_PANE", "DOM_VK_XF86XK_TERMINAL", "DOM_VK_XF86XK_TIME", "DOM_VK_XF86XK_TOOLS", "DOM_VK_XF86XK_TOP_MENU", "DOM_VK_XF86XK_TO_DO_LIST", "DOM_VK_XF86XK_TRAVEL", "DOM_VK_XF86XK_USER1KB", "DOM_VK_XF86XK_USER2KB", "DOM_VK_XF86XK_USER_PB", "DOM_VK_XF86XK_UWB", "DOM_VK_XF86XK_VENDOR_HOME", "DOM_VK_XF86XK_VIDEO", "DOM_VK_XF86XK_VIEW", "DOM_VK_XF86XK_WAKE_UP", "DOM_VK_XF86XK_WEB_CAM", "DOM_VK_XF86XK_WHEEL_BUTTON", "DOM_VK_XF86XK_WLAN", "DOM_VK_XF86XK_WORD", "DOM_VK_XF86XK_WWW", "DOM_VK_XF86XK_XFER", "DOM_VK_XF86XK_YELLOW", "DOM_VK_XF86XK_ZOOM_IN", "DOM_VK_XF86XK_ZOOM_OUT", "DOM_VK_Y", "DOM_VK_Z", "DOM_VK_ZOOM", "DONE", "DONT_CARE", "DOWNLOADING", "DRAGDROP", "DST_ALPHA", "DST_COLOR", "DYNAMIC_DRAW", "DataChannel", "DataTransfer", "DataTransferItem", "DataTransferItemList", "DataView", "Date", "DateTimeFormat", "DelayNode", "DesktopNotification", "DesktopNotificationCenter", "DeviceLightEvent", "DeviceMotionEvent", "DeviceOrientationEvent", "DeviceProximityEvent", "DeviceStorage", "DeviceStorageChangeEvent", "Document", "DocumentFragment", "DocumentType", "DragEvent", "DynamicsCompressorNode", "E", "ELEMENT_ARRAY_BUFFER", "ELEMENT_ARRAY_BUFFER_BINDING", "ELEMENT_NODE", "EMPTY", "ENCODING_ERR", "ENDED", "END_TO_END", "END_TO_START", "ENTITY_NODE", "ENTITY_REFERENCE_NODE", "EPSILON", "EQUAL", "EQUALPOWER", "ERROR", "EXPONENTIAL_DISTANCE", "Element", "ElementQuery", "Entity", "EntityReference", "Error", "ErrorEvent", "EvalError", "Event", "EventException", "EventSource", "EventTarget", "External", "FASTEST", "FIDOSDK", "FILTER_ACCEPT", "FILTER_INTERRUPT", "FILTER_REJECT", "FILTER_SKIP", "FINISHED_STATE", "FIRST_ORDERED_NODE_TYPE", "FLOAT", "FLOAT_MAT2", "FLOAT_MAT3", "FLOAT_MAT4", "FLOAT_VEC2", "FLOAT_VEC3", "FLOAT_VEC4", "FOCUS", "FONT_FACE_RULE", "FONT_FEATURE_VALUES_RULE", "FRAGMENT_SHADER", "FRAGMENT_SHADER_DERIVATIVE_HINT_OES", "FRAMEBUFFER", "FRAMEBUFFER_ATTACHMENT_OBJECT_NAME", "FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE", "FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE", "FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL", "FRAMEBUFFER_BINDING", "FRAMEBUFFER_COMPLETE", "FRAMEBUFFER_INCOMPLETE_ATTACHMENT", "FRAMEBUFFER_INCOMPLETE_DIMENSIONS", "FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT", "FRAMEBUFFER_UNSUPPORTED", "FRONT", "FRONT_AND_BACK", "FRONT_FACE", "FUNC_ADD", "FUNC_REVERSE_SUBTRACT", "FUNC_SUBTRACT", "Feed", "FeedEntry", "File", "FileError", "FileList", "FileReader", "FindInPage", "Float32Array", "Float64Array", "FocusEvent", "FontFace", "FormData", "Function", "GENERATE_MIPMAP_HINT", "GEQUAL", "GREATER", "GREEN_BITS", "GainNode", "Gamepad", "GamepadButton", "GamepadEvent", "GestureEvent", "HAVE_CURRENT_DATA", "HAVE_ENOUGH_DATA", "HAVE_FUTURE_DATA", "HAVE_METADATA", "HAVE_NOTHING", "HEADERS_RECEIVED", "HIDDEN", "HIERARCHY_REQUEST_ERR", "HIGHPASS", "HIGHSHELF", "HIGH_FLOAT", "HIGH_INT", "HORIZONTAL", "HORIZONTAL_AXIS", "HRTF", "HTMLAllCollection", "HTMLAnchorElement", "HTMLAppletElement", "HTMLAreaElement", "HTMLAudioElement", "HTMLBRElement", "HTMLBaseElement", "HTMLBaseFontElement", "HTMLBlockquoteElement", "HTMLBodyElement", "HTMLButtonElement", "HTMLCanvasElement", "HTMLCollection", "HTMLCommandElement", "HTMLContentElement", "HTMLDListElement", "HTMLDataElement", "HTMLDataListElement", "HTMLDetailsElement", "HTMLDialogElement", "HTMLDirectoryElement", "HTMLDivElement", "HTMLDocument", "HTMLElement", "HTMLEmbedElement", "HTMLFieldSetElement", "HTMLFontElement", "HTMLFormControlsCollection", "HTMLFormElement", "HTMLFrameElement", "HTMLFrameSetElement", "HTMLHRElement", "HTMLHeadElement", "HTMLHeadingElement", "HTMLHtmlElement", "HTMLIFrameElement", "HTMLImageElement", "HTMLInputElement", "HTMLIsIndexElement", "HTMLKeygenElement", "HTMLLIElement", "HTMLLabelElement", "HTMLLegendElement", "HTMLLinkElement", "HTMLMapElement", "HTMLMarqueeElement", "HTMLMediaElement", "HTMLMenuElement", "HTMLMenuItemElement", "HTMLMetaElement", "HTMLMeterElement", "HTMLModElement", "HTMLOListElement", "HTMLObjectElement", "HTMLOptGroupElement", "HTMLOptionElement", "HTMLOptionsCollection", "HTMLOutputElement", "HTMLParagraphElement", "HTMLParamElement", "HTMLPictureElement", "HTMLPreElement", "HTMLProgressElement", "HTMLPropertiesCollection", "HTMLQuoteElement", "HTMLScriptElement", "HTMLSelectElement", "HTMLShadowElement", "HTMLSourceElement", "HTMLSpanElement", "HTMLStyleElement", "HTMLTableCaptionElement", "HTMLTableCellElement", "HTMLTableColElement", "HTMLTableElement", "HTMLTableRowElement", "HTMLTableSectionElement", "HTMLTemplateElement", "HTMLTextAreaElement", "HTMLTimeElement", "HTMLTitleElement", "HTMLTrackElement", "HTMLUListElement", "HTMLUnknownElement", "HTMLVideoElement", "HashChangeEvent", "Headers", "History", "ICE_CHECKING", "ICE_CLOSED", "ICE_COMPLETED", "ICE_CONNECTED", "ICE_FAILED", "ICE_GATHERING", "ICE_WAITING", "IDBCursor", "IDBCursorWithValue", "IDBDatabase", "IDBDatabaseException", "IDBFactory", "IDBFileHandle", "IDBFileRequest", "IDBIndex", "IDBKeyRange", "IDBMutableFile", "IDBObjectStore", "IDBOpenDBRequest", "IDBRequest", "IDBTransaction", "IDBVersionChangeEvent", "IDLE", "IMPLEMENTATION_COLOR_READ_FORMAT", "IMPLEMENTATION_COLOR_READ_TYPE", "IMPORT_RULE", "INCR", "INCR_WRAP", "INDEX_SIZE_ERR", "INT", "INT_VEC2", "INT_VEC3", "INT_VEC4", "INUSE_ATTRIBUTE_ERR", "INVALID_ACCESS_ERR", "INVALID_CHARACTER_ERR", "INVALID_ENUM", "INVALID_EXPRESSION_ERR", "INVALID_FRAMEBUFFER_OPERATION", "INVALID_MODIFICATION_ERR", "INVALID_NODE_TYPE_ERR", "INVALID_OPERATION", "INVALID_STATE_ERR", "INVALID_VALUE", "INVERSE_DISTANCE", "INVERT", "IceCandidate", "Image", "ImageBitmap", "ImageData", "Infinity", "InputEvent", "InputMethodContext", "InstallTrigger", "Int16Array", "Int32Array", "Int8Array", "Intent", "InternalError", "Intl", "IsSearchProviderInstalled", "Iterator", "JSON", "KEEP", "KEYDOWN", "KEYFRAMES_RULE", "KEYFRAME_RULE", "KEYPRESS", "KEYUP", "KeyEvent", "KeyboardEvent", "LENGTHADJUST_SPACING", "LENGTHADJUST_SPACINGANDGLYPHS", "LENGTHADJUST_UNKNOWN", "LEQUAL", "LESS", "LINEAR", "LINEAR_DISTANCE", "LINEAR_MIPMAP_LINEAR", "LINEAR_MIPMAP_NEAREST", "LINES", "LINE_LOOP", "LINE_STRIP", "LINE_WIDTH", "LINK_STATUS", "LIVE", "LN10", "LN2", "LOADED", "LOADING", "LOG10E", "LOG2E", "LOWPASS", "LOWSHELF", "LOW_FLOAT", "LOW_INT", "LSException", "LSParserFilter", "LUMINANCE", "LUMINANCE_ALPHA", "LocalMediaStream", "Location", "MAX_COMBINED_TEXTURE_IMAGE_UNITS", "MAX_CUBE_MAP_TEXTURE_SIZE", "MAX_FRAGMENT_UNIFORM_VECTORS", "MAX_RENDERBUFFER_SIZE", "MAX_SAFE_INTEGER", "MAX_TEXTURE_IMAGE_UNITS", "MAX_TEXTURE_MAX_ANISOTROPY_EXT", "MAX_TEXTURE_SIZE", "MAX_VALUE", "MAX_VARYING_VECTORS", "MAX_VERTEX_ATTRIBS", "MAX_VERTEX_TEXTURE_IMAGE_UNITS", "MAX_VERTEX_UNIFORM_VECTORS", "MAX_VIEWPORT_DIMS", "MEDIA_ERR_ABORTED", "MEDIA_ERR_DECODE", "MEDIA_ERR_ENCRYPTED", "MEDIA_ERR_NETWORK", "MEDIA_ERR_SRC_NOT_SUPPORTED", "MEDIA_KEYERR_CLIENT", "MEDIA_KEYERR_DOMAIN", "MEDIA_KEYERR_HARDWARECHANGE", "MEDIA_KEYERR_OUTPUT", "MEDIA_KEYERR_SERVICE", "MEDIA_KEYERR_UNKNOWN", "MEDIA_RULE", "MEDIUM_FLOAT", "MEDIUM_INT", "META_MASK", "MIN_SAFE_INTEGER", "MIN_VALUE", "MIRRORED_REPEAT", "MODE_ASYNCHRONOUS", "MODE_SYNCHRONOUS", "MODIFICATION", "MOUSEDOWN", "MOUSEDRAG", "MOUSEMOVE", "MOUSEOUT", "MOUSEOVER", "MOUSEUP", "MOZ_KEYFRAMES_RULE", "MOZ_KEYFRAME_RULE", "MOZ_SOURCE_CURSOR", "MOZ_SOURCE_ERASER", "MOZ_SOURCE_KEYBOARD", "MOZ_SOURCE_MOUSE", "MOZ_SOURCE_PEN", "MOZ_SOURCE_TOUCH", "MOZ_SOURCE_UNKNOWN", "MSGESTURE_FLAG_BEGIN", "MSGESTURE_FLAG_CANCEL", "MSGESTURE_FLAG_END", "MSGESTURE_FLAG_INERTIA", "MSGESTURE_FLAG_NONE", "MSPOINTER_TYPE_MOUSE", "MSPOINTER_TYPE_PEN", "MSPOINTER_TYPE_TOUCH", "MS_ASYNC_CALLBACK_STATUS_ASSIGN_DELEGATE", "MS_ASYNC_CALLBACK_STATUS_CANCEL", "MS_ASYNC_CALLBACK_STATUS_CHOOSEANY", "MS_ASYNC_CALLBACK_STATUS_ERROR", "MS_ASYNC_CALLBACK_STATUS_JOIN", "MS_ASYNC_OP_STATUS_CANCELED", "MS_ASYNC_OP_STATUS_ERROR", "MS_ASYNC_OP_STATUS_SUCCESS", "MS_MANIPULATION_STATE_ACTIVE", "MS_MANIPULATION_STATE_CANCELLED", "MS_MANIPULATION_STATE_COMMITTED", "MS_MANIPULATION_STATE_DRAGGING", "MS_MANIPULATION_STATE_INERTIA", "MS_MANIPULATION_STATE_PRESELECT", "MS_MANIPULATION_STATE_SELECTING", "MS_MANIPULATION_STATE_STOPPED", "MS_MEDIA_ERR_ENCRYPTED", "MS_MEDIA_KEYERR_CLIENT", "MS_MEDIA_KEYERR_DOMAIN", "MS_MEDIA_KEYERR_HARDWARECHANGE", "MS_MEDIA_KEYERR_OUTPUT", "MS_MEDIA_KEYERR_SERVICE", "MS_MEDIA_KEYERR_UNKNOWN", "Map", "Math", "MediaController", "MediaDevices", "MediaElementAudioSourceNode", "MediaEncryptedEvent", "MediaError", "MediaKeyError", "MediaKeyEvent", "MediaKeyMessageEvent", "MediaKeyNeededEvent", "MediaKeySession", "MediaKeyStatusMap", "MediaKeySystemAccess", "MediaKeys", "MediaList", "MediaQueryList", "MediaQueryListEvent", "MediaRecorder", "MediaSource", "MediaStream", "MediaStreamAudioDestinationNode", "MediaStreamAudioSourceNode", "MediaStreamEvent", "MediaStreamTrack", "MediaStreamTrackEvent", "MessageChannel", "MessageEvent", "MessagePort", "Methods", "MimeType", "MimeTypeArray", "MouseEvent", "MouseScrollEvent", "MozAnimation", "MozAnimationDelay", "MozAnimationDirection", "MozAnimationDuration", "MozAnimationFillMode", "MozAnimationIterationCount", "MozAnimationName", "MozAnimationPlayState", "MozAnimationTimingFunction", "MozAppearance", "MozBackfaceVisibility", "MozBinding", "MozBorderBottomColors", "MozBorderEnd", "MozBorderEndColor", "MozBorderEndStyle", "MozBorderEndWidth", "MozBorderImage", "MozBorderLeftColors", "MozBorderRightColors", "MozBorderStart", "MozBorderStartColor", "MozBorderStartStyle", "MozBorderStartWidth", "MozBorderTopColors", "MozBoxAlign", "MozBoxDirection", "MozBoxFlex", "MozBoxOrdinalGroup", "MozBoxOrient", "MozBoxPack", "MozBoxSizing", "MozCSSKeyframeRule", "MozCSSKeyframesRule", "MozColumnCount", "MozColumnFill", "MozColumnGap", "MozColumnRule", "MozColumnRuleColor", "MozColumnRuleStyle", "MozColumnRuleWidth", "MozColumnWidth", "MozColumns", "MozContactChangeEvent", "MozFloatEdge", "MozFontFeatureSettings", "MozFontLanguageOverride", "MozForceBrokenImageIcon", "MozHyphens", "MozImageRegion", "MozMarginEnd", "MozMarginStart", "MozMmsEvent", "MozMmsMessage", "MozMobileMessageThread", "MozOSXFontSmoothing", "MozOrient", "MozOutlineRadius", "MozOutlineRadiusBottomleft", "MozOutlineRadiusBottomright", "MozOutlineRadiusTopleft", "MozOutlineRadiusTopright", "MozPaddingEnd", "MozPaddingStart", "MozPerspective", "MozPerspectiveOrigin", "MozPowerManager", "MozSettingsEvent", "MozSmsEvent", "MozSmsMessage", "MozStackSizing", "MozTabSize", "MozTextAlignLast", "MozTextDecorationColor", "MozTextDecorationLine", "MozTextDecorationStyle", "MozTextSizeAdjust", "MozTransform", "MozTransformOrigin", "MozTransformStyle", "MozTransition", "MozTransitionDelay", "MozTransitionDuration", "MozTransitionProperty", "MozTransitionTimingFunction", "MozUserFocus", "MozUserInput", "MozUserModify", "MozUserSelect", "MozWindowDragging", "MozWindowShadow", "MutationEvent", "MutationObserver", "MutationRecord", "NAMESPACE_ERR", "NAMESPACE_RULE", "NEAREST", "NEAREST_MIPMAP_LINEAR", "NEAREST_MIPMAP_NEAREST", "NEGATIVE_INFINITY", "NETWORK_EMPTY", "NETWORK_ERR", "NETWORK_IDLE", "NETWORK_LOADED", "NETWORK_LOADING", "NETWORK_NO_SOURCE", "NEVER", "NEW", "NEXT", "NEXT_NO_DUPLICATE", "NICEST", "NODE_AFTER", "NODE_BEFORE", "NODE_BEFORE_AND_AFTER", "NODE_INSIDE", "NONE", "NON_TRANSIENT_ERR", "NOTATION_NODE", "NOTCH", "NOTEQUAL", "NOT_ALLOWED_ERR", "NOT_FOUND_ERR", "NOT_READABLE_ERR", "NOT_SUPPORTED_ERR", "NO_DATA_ALLOWED_ERR", "NO_ERR", "NO_ERROR", "NO_MODIFICATION_ALLOWED_ERR", "NUMBER_TYPE", "NUM_COMPRESSED_TEXTURE_FORMATS", "NaN", "NamedNodeMap", "Navigator", "NearbyLinks", "NetworkInformation", "Node", "NodeFilter", "NodeIterator", "NodeList", "Notation", "Notification", "NotifyPaintEvent", "Number", "NumberFormat", "OBSOLETE", "ONE", "ONE_MINUS_CONSTANT_ALPHA", "ONE_MINUS_CONSTANT_COLOR", "ONE_MINUS_DST_ALPHA", "ONE_MINUS_DST_COLOR", "ONE_MINUS_SRC_ALPHA", "ONE_MINUS_SRC_COLOR", "OPEN", "OPENED", "OPENING", "ORDERED_NODE_ITERATOR_TYPE", "ORDERED_NODE_SNAPSHOT_TYPE", "OUT_OF_MEMORY", "Object", "OfflineAudioCompletionEvent", "OfflineAudioContext", "OfflineResourceList", "Option", "OscillatorNode", "OverflowEvent", "PACK_ALIGNMENT", "PAGE_RULE", "PARSE_ERR", "PATHSEG_ARC_ABS", "PATHSEG_ARC_REL", "PATHSEG_CLOSEPATH", "PATHSEG_CURVETO_CUBIC_ABS", "PATHSEG_CURVETO_CUBIC_REL", "PATHSEG_CURVETO_CUBIC_SMOOTH_ABS", "PATHSEG_CURVETO_CUBIC_SMOOTH_REL", "PATHSEG_CURVETO_QUADRATIC_ABS", "PATHSEG_CURVETO_QUADRATIC_REL", "PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS", "PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL", "PATHSEG_LINETO_ABS", "PATHSEG_LINETO_HORIZONTAL_ABS", "PATHSEG_LINETO_HORIZONTAL_REL", "PATHSEG_LINETO_REL", "PATHSEG_LINETO_VERTICAL_ABS", "PATHSEG_LINETO_VERTICAL_REL", "PATHSEG_MOVETO_ABS", "PATHSEG_MOVETO_REL", "PATHSEG_UNKNOWN", "PATH_EXISTS_ERR", "PEAKING", "PERMISSION_DENIED", "PERSISTENT", "PI", "PLAYING_STATE", "POINTS", "POLYGON_OFFSET_FACTOR", "POLYGON_OFFSET_FILL", "POLYGON_OFFSET_UNITS", "POSITION_UNAVAILABLE", "POSITIVE_INFINITY", "PREV", "PREV_NO_DUPLICATE", "PROCESSING_INSTRUCTION_NODE", "PageChangeEvent", "PageTransitionEvent", "PaintRequest", "PaintRequestList", "PannerNode", "Path2D", "Performance", "PerformanceEntry", "PerformanceMark", "PerformanceMeasure", "PerformanceNavigation", "PerformanceResourceTiming", "PerformanceTiming", "PeriodicWave", "Plugin", "PluginArray", "PopStateEvent", "PopupBlockedEvent", "ProcessingInstruction", "ProgressEvent", "Promise", "PropertyNodeList", "Proxy", "PushManager", "PushSubscription", "Q", "QUOTA_ERR", "QUOTA_EXCEEDED_ERR", "QueryInterface", "READ_ONLY", "READ_ONLY_ERR", "READ_WRITE", "RED_BITS", "REMOVAL", "RENDERBUFFER", "RENDERBUFFER_ALPHA_SIZE", "RENDERBUFFER_BINDING", "RENDERBUFFER_BLUE_SIZE", "RENDERBUFFER_DEPTH_SIZE", "RENDERBUFFER_GREEN_SIZE", "RENDERBUFFER_HEIGHT", "RENDERBUFFER_INTERNAL_FORMAT", "RENDERBUFFER_RED_SIZE", "RENDERBUFFER_STENCIL_SIZE", "RENDERBUFFER_WIDTH", "RENDERER", "RENDERING_INTENT_ABSOLUTE_COLORIMETRIC", "RENDERING_INTENT_AUTO", "RENDERING_INTENT_PERCEPTUAL", "RENDERING_INTENT_RELATIVE_COLORIMETRIC", "RENDERING_INTENT_SATURATION", "RENDERING_INTENT_UNKNOWN", "REPEAT", "REPLACE", "RGB", "RGB565", "RGB5_A1", "RGBA", "RGBA4", "RGBColor", "ROTATION_CLOCKWISE", "ROTATION_COUNTERCLOCKWISE", "RTCDataChannelEvent", "RTCIceCandidate", "RTCPeerConnectionIceEvent", "RTCRtpReceiver", "RTCRtpSender", "RTCSessionDescription", "RTCStatsReport", "RadioNodeList", "Range", "RangeError", "RangeException", "RecordErrorEvent", "Rect", "ReferenceError", "RegExp", "Request", "Response", "SAMPLER_2D", "SAMPLER_CUBE", "SAMPLES", "SAMPLE_ALPHA_TO_COVERAGE", "SAMPLE_BUFFERS", "SAMPLE_COVERAGE", "SAMPLE_COVERAGE_INVERT", "SAMPLE_COVERAGE_VALUE", "SAWTOOTH", "SCHEDULED_STATE", "SCISSOR_BOX", "SCISSOR_TEST", "SCROLL_PAGE_DOWN", "SCROLL_PAGE_UP", "SDP_ANSWER", "SDP_OFFER", "SDP_PRANSWER", "SECURITY_ERR", "SELECT", "SERIALIZE_ERR", "SEVERITY_ERROR", "SEVERITY_FATAL_ERROR", "SEVERITY_WARNING", "SHADER_COMPILER", "SHADER_TYPE", "SHADING_LANGUAGE_VERSION", "SHIFT_MASK", "SHORT", "SHOWING", "SHOW_ALL", "SHOW_ATTRIBUTE", "SHOW_CDATA_SECTION", "SHOW_COMMENT", "SHOW_DOCUMENT", "SHOW_DOCUMENT_FRAGMENT", "SHOW_DOCUMENT_TYPE", "SHOW_ELEMENT", "SHOW_ENTITY", "SHOW_ENTITY_REFERENCE", "SHOW_NOTATION", "SHOW_PROCESSING_INSTRUCTION", "SHOW_TEXT", "SINE", "SOUNDFIELD", "SQLException", "SQRT1_2", "SQRT2", "SQUARE", "SRC_ALPHA", "SRC_ALPHA_SATURATE", "SRC_COLOR", "START_TO_END", "START_TO_START", "STATIC_DRAW", "STENCIL_ATTACHMENT", "STENCIL_BACK_FAIL", "STENCIL_BACK_FUNC", "STENCIL_BACK_PASS_DEPTH_FAIL", "STENCIL_BACK_PASS_DEPTH_PASS", "STENCIL_BACK_REF", "STENCIL_BACK_VALUE_MASK", "STENCIL_BACK_WRITEMASK", "STENCIL_BITS", "STENCIL_BUFFER_BIT", "STENCIL_CLEAR_VALUE", "STENCIL_FAIL", "STENCIL_FUNC", "STENCIL_INDEX", "STENCIL_INDEX8", "STENCIL_PASS_DEPTH_FAIL", "STENCIL_PASS_DEPTH_PASS", "STENCIL_REF", "STENCIL_TEST", "STENCIL_VALUE_MASK", "STENCIL_WRITEMASK", "STREAM_DRAW", "STRING_TYPE", "STYLE_RULE", "SUBPIXEL_BITS", "SUPPORTS_RULE", "SVGAElement", "SVGAltGlyphDefElement", "SVGAltGlyphElement", "SVGAltGlyphItemElement", "SVGAngle", "SVGAnimateColorElement", "SVGAnimateElement", "SVGAnimateMotionElement", "SVGAnimateTransformElement", "SVGAnimatedAngle", "SVGAnimatedBoolean", "SVGAnimatedEnumeration", "SVGAnimatedInteger", "SVGAnimatedLength", "SVGAnimatedLengthList", "SVGAnimatedNumber", "SVGAnimatedNumberList", "SVGAnimatedPreserveAspectRatio", "SVGAnimatedRect", "SVGAnimatedString", "SVGAnimatedTransformList", "SVGAnimationElement", "SVGCircleElement", "SVGClipPathElement", "SVGColor", "SVGComponentTransferFunctionElement", "SVGCursorElement", "SVGDefsElement", "SVGDescElement", "SVGDiscardElement", "SVGDocument", "SVGElement", "SVGElementInstance", "SVGElementInstanceList", "SVGEllipseElement", "SVGException", "SVGFEBlendElement", "SVGFEColorMatrixElement", "SVGFEComponentTransferElement", "SVGFECompositeElement", "SVGFEConvolveMatrixElement", "SVGFEDiffuseLightingElement", "SVGFEDisplacementMapElement", "SVGFEDistantLightElement", "SVGFEDropShadowElement", "SVGFEFloodElement", "SVGFEFuncAElement", "SVGFEFuncBElement", "SVGFEFuncGElement", "SVGFEFuncRElement", "SVGFEGaussianBlurElement", "SVGFEImageElement", "SVGFEMergeElement", "SVGFEMergeNodeElement", "SVGFEMorphologyElement", "SVGFEOffsetElement", "SVGFEPointLightElement", "SVGFESpecularLightingElement", "SVGFESpotLightElement", "SVGFETileElement", "SVGFETurbulenceElement", "SVGFilterElement", "SVGFontElement", "SVGFontFaceElement", "SVGFontFaceFormatElement", "SVGFontFaceNameElement", "SVGFontFaceSrcElement", "SVGFontFaceUriElement", "SVGForeignObjectElement", "SVGGElement", "SVGGeometryElement", "SVGGlyphElement", "SVGGlyphRefElement", "SVGGradientElement", "SVGGraphicsElement", "SVGHKernElement", "SVGImageElement", "SVGLength", "SVGLengthList", "SVGLineElement", "SVGLinearGradientElement", "SVGMPathElement", "SVGMarkerElement", "SVGMaskElement", "SVGMatrix", "SVGMetadataElement", "SVGMissingGlyphElement", "SVGNumber", "SVGNumberList", "SVGPaint", "SVGPathElement", "SVGPathSeg", "SVGPathSegArcAbs", "SVGPathSegArcRel", "SVGPathSegClosePath", "SVGPathSegCurvetoCubicAbs", "SVGPathSegCurvetoCubicRel", "SVGPathSegCurvetoCubicSmoothAbs", "SVGPathSegCurvetoCubicSmoothRel", "SVGPathSegCurvetoQuadraticAbs", "SVGPathSegCurvetoQuadraticRel", "SVGPathSegCurvetoQuadraticSmoothAbs", "SVGPathSegCurvetoQuadraticSmoothRel", "SVGPathSegLinetoAbs", "SVGPathSegLinetoHorizontalAbs", "SVGPathSegLinetoHorizontalRel", "SVGPathSegLinetoRel", "SVGPathSegLinetoVerticalAbs", "SVGPathSegLinetoVerticalRel", "SVGPathSegList", "SVGPathSegMovetoAbs", "SVGPathSegMovetoRel", "SVGPatternElement", "SVGPoint", "SVGPointList", "SVGPolygonElement", "SVGPolylineElement", "SVGPreserveAspectRatio", "SVGRadialGradientElement", "SVGRect", "SVGRectElement", "SVGRenderingIntent", "SVGSVGElement", "SVGScriptElement", "SVGSetElement", "SVGStopElement", "SVGStringList", "SVGStyleElement", "SVGSwitchElement", "SVGSymbolElement", "SVGTRefElement", "SVGTSpanElement", "SVGTextContentElement", "SVGTextElement", "SVGTextPathElement", "SVGTextPositioningElement", "SVGTitleElement", "SVGTransform", "SVGTransformList", "SVGUnitTypes", "SVGUseElement", "SVGVKernElement", "SVGViewElement", "SVGViewSpec", "SVGZoomAndPan", "SVGZoomEvent", "SVG_ANGLETYPE_DEG", "SVG_ANGLETYPE_GRAD", "SVG_ANGLETYPE_RAD", "SVG_ANGLETYPE_UNKNOWN", "SVG_ANGLETYPE_UNSPECIFIED", "SVG_CHANNEL_A", "SVG_CHANNEL_B", "SVG_CHANNEL_G", "SVG_CHANNEL_R", "SVG_CHANNEL_UNKNOWN", "SVG_COLORTYPE_CURRENTCOLOR", "SVG_COLORTYPE_RGBCOLOR", "SVG_COLORTYPE_RGBCOLOR_ICCCOLOR", "SVG_COLORTYPE_UNKNOWN", "SVG_EDGEMODE_DUPLICATE", "SVG_EDGEMODE_NONE", "SVG_EDGEMODE_UNKNOWN", "SVG_EDGEMODE_WRAP", "SVG_FEBLEND_MODE_COLOR", "SVG_FEBLEND_MODE_COLOR_BURN", "SVG_FEBLEND_MODE_COLOR_DODGE", "SVG_FEBLEND_MODE_DARKEN", "SVG_FEBLEND_MODE_DIFFERENCE", "SVG_FEBLEND_MODE_EXCLUSION", "SVG_FEBLEND_MODE_HARD_LIGHT", "SVG_FEBLEND_MODE_HUE", "SVG_FEBLEND_MODE_LIGHTEN", "SVG_FEBLEND_MODE_LUMINOSITY", "SVG_FEBLEND_MODE_MULTIPLY", "SVG_FEBLEND_MODE_NORMAL", "SVG_FEBLEND_MODE_OVERLAY", "SVG_FEBLEND_MODE_SATURATION", "SVG_FEBLEND_MODE_SCREEN", "SVG_FEBLEND_MODE_SOFT_LIGHT", "SVG_FEBLEND_MODE_UNKNOWN", "SVG_FECOLORMATRIX_TYPE_HUEROTATE", "SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA", "SVG_FECOLORMATRIX_TYPE_MATRIX", "SVG_FECOLORMATRIX_TYPE_SATURATE", "SVG_FECOLORMATRIX_TYPE_UNKNOWN", "SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE", "SVG_FECOMPONENTTRANSFER_TYPE_GAMMA", "SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY", "SVG_FECOMPONENTTRANSFER_TYPE_LINEAR", "SVG_FECOMPONENTTRANSFER_TYPE_TABLE", "SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN", "SVG_FECOMPOSITE_OPERATOR_ARITHMETIC", "SVG_FECOMPOSITE_OPERATOR_ATOP", "SVG_FECOMPOSITE_OPERATOR_IN", "SVG_FECOMPOSITE_OPERATOR_OUT", "SVG_FECOMPOSITE_OPERATOR_OVER", "SVG_FECOMPOSITE_OPERATOR_UNKNOWN", "SVG_FECOMPOSITE_OPERATOR_XOR", "SVG_INVALID_VALUE_ERR", "SVG_LENGTHTYPE_CM", "SVG_LENGTHTYPE_EMS", "SVG_LENGTHTYPE_EXS", "SVG_LENGTHTYPE_IN", "SVG_LENGTHTYPE_MM", "SVG_LENGTHTYPE_NUMBER", "SVG_LENGTHTYPE_PC", "SVG_LENGTHTYPE_PERCENTAGE", "SVG_LENGTHTYPE_PT", "SVG_LENGTHTYPE_PX", "SVG_LENGTHTYPE_UNKNOWN", "SVG_MARKERUNITS_STROKEWIDTH", "SVG_MARKERUNITS_UNKNOWN", "SVG_MARKERUNITS_USERSPACEONUSE", "SVG_MARKER_ORIENT_ANGLE", "SVG_MARKER_ORIENT_AUTO", "SVG_MARKER_ORIENT_UNKNOWN", "SVG_MASKTYPE_ALPHA", "SVG_MASKTYPE_LUMINANCE", "SVG_MATRIX_NOT_INVERTABLE", "SVG_MEETORSLICE_MEET", "SVG_MEETORSLICE_SLICE", "SVG_MEETORSLICE_UNKNOWN", "SVG_MORPHOLOGY_OPERATOR_DILATE", "SVG_MORPHOLOGY_OPERATOR_ERODE", "SVG_MORPHOLOGY_OPERATOR_UNKNOWN", "SVG_PAINTTYPE_CURRENTCOLOR", "SVG_PAINTTYPE_NONE", "SVG_PAINTTYPE_RGBCOLOR", "SVG_PAINTTYPE_RGBCOLOR_ICCCOLOR", "SVG_PAINTTYPE_UNKNOWN", "SVG_PAINTTYPE_URI", "SVG_PAINTTYPE_URI_CURRENTCOLOR", "SVG_PAINTTYPE_URI_NONE", "SVG_PAINTTYPE_URI_RGBCOLOR", "SVG_PAINTTYPE_URI_RGBCOLOR_ICCCOLOR", "SVG_PRESERVEASPECTRATIO_NONE", "SVG_PRESERVEASPECTRATIO_UNKNOWN", "SVG_PRESERVEASPECTRATIO_XMAXYMAX", "SVG_PRESERVEASPECTRATIO_XMAXYMID", "SVG_PRESERVEASPECTRATIO_XMAXYMIN", "SVG_PRESERVEASPECTRATIO_XMIDYMAX", "SVG_PRESERVEASPECTRATIO_XMIDYMID", "SVG_PRESERVEASPECTRATIO_XMIDYMIN", "SVG_PRESERVEASPECTRATIO_XMINYMAX", "SVG_PRESERVEASPECTRATIO_XMINYMID", "SVG_PRESERVEASPECTRATIO_XMINYMIN", "SVG_SPREADMETHOD_PAD", "SVG_SPREADMETHOD_REFLECT", "SVG_SPREADMETHOD_REPEAT", "SVG_SPREADMETHOD_UNKNOWN", "SVG_STITCHTYPE_NOSTITCH", "SVG_STITCHTYPE_STITCH", "SVG_STITCHTYPE_UNKNOWN", "SVG_TRANSFORM_MATRIX", "SVG_TRANSFORM_ROTATE", "SVG_TRANSFORM_SCALE", "SVG_TRANSFORM_SKEWX", "SVG_TRANSFORM_SKEWY", "SVG_TRANSFORM_TRANSLATE", "SVG_TRANSFORM_UNKNOWN", "SVG_TURBULENCE_TYPE_FRACTALNOISE", "SVG_TURBULENCE_TYPE_TURBULENCE", "SVG_TURBULENCE_TYPE_UNKNOWN", "SVG_UNIT_TYPE_OBJECTBOUNDINGBOX", "SVG_UNIT_TYPE_UNKNOWN", "SVG_UNIT_TYPE_USERSPACEONUSE", "SVG_WRONG_TYPE_ERR", "SVG_ZOOMANDPAN_DISABLE", "SVG_ZOOMANDPAN_MAGNIFY", "SVG_ZOOMANDPAN_UNKNOWN", "SYNTAX_ERR", "SavedPages", "Screen", "ScreenOrientation", "Script", "ScriptProcessorNode", "ScrollAreaEvent", "SecurityPolicyViolationEvent", "Selection", "ServiceWorker", "ServiceWorkerContainer", "ServiceWorkerRegistration", "SessionDescription", "Set", "ShadowRoot", "SharedWorker", "SimpleGestureEvent", "SpeechSynthesisEvent", "SpeechSynthesisUtterance", "StopIteration", "Storage", "StorageEvent", "String", "StyleSheet", "StyleSheetList", "SubtleCrypto", "Symbol", "SyntaxError", "TEMPORARY", "TEXTPATH_METHODTYPE_ALIGN", "TEXTPATH_METHODTYPE_STRETCH", "TEXTPATH_METHODTYPE_UNKNOWN", "TEXTPATH_SPACINGTYPE_AUTO", "TEXTPATH_SPACINGTYPE_EXACT", "TEXTPATH_SPACINGTYPE_UNKNOWN", "TEXTURE", "TEXTURE0", "TEXTURE1", "TEXTURE10", "TEXTURE11", "TEXTURE12", "TEXTURE13", "TEXTURE14", "TEXTURE15", "TEXTURE16", "TEXTURE17", "TEXTURE18", "TEXTURE19", "TEXTURE2", "TEXTURE20", "TEXTURE21", "TEXTURE22", "TEXTURE23", "TEXTURE24", "TEXTURE25", "TEXTURE26", "TEXTURE27", "TEXTURE28", "TEXTURE29", "TEXTURE3", "TEXTURE30", "TEXTURE31", "TEXTURE4", "TEXTURE5", "TEXTURE6", "TEXTURE7", "TEXTURE8", "TEXTURE9", "TEXTURE_2D", "TEXTURE_BINDING_2D", "TEXTURE_BINDING_CUBE_MAP", "TEXTURE_CUBE_MAP", "TEXTURE_CUBE_MAP_NEGATIVE_X", "TEXTURE_CUBE_MAP_NEGATIVE_Y", "TEXTURE_CUBE_MAP_NEGATIVE_Z", "TEXTURE_CUBE_MAP_POSITIVE_X", "TEXTURE_CUBE_MAP_POSITIVE_Y", "TEXTURE_CUBE_MAP_POSITIVE_Z", "TEXTURE_MAG_FILTER", "TEXTURE_MAX_ANISOTROPY_EXT", "TEXTURE_MIN_FILTER", "TEXTURE_WRAP_S", "TEXTURE_WRAP_T", "TEXT_NODE", "TIMEOUT", "TIMEOUT_ERR", "TOO_LARGE_ERR", "TRANSACTION_INACTIVE_ERR", "TRIANGLE", "TRIANGLES", "TRIANGLE_FAN", "TRIANGLE_STRIP", "TYPE_BACK_FORWARD", "TYPE_ERR", "TYPE_MISMATCH_ERR", "TYPE_NAVIGATE", "TYPE_RELOAD", "TYPE_RESERVED", "Text", "TextDecoder", "TextEncoder", "TextEvent", "TextMetrics", "TextTrack", "TextTrackCue", "TextTrackCueList", "TextTrackList", "TimeEvent", "TimeRanges", "Touch", "TouchEvent", "TouchList", "TrackEvent", "TransitionEvent", "TreeWalker", "TypeError", "UIEvent", "UNCACHED", "UNKNOWN_ERR", "UNKNOWN_RULE", "UNMASKED_RENDERER_WEBGL", "UNMASKED_VENDOR_WEBGL", "UNORDERED_NODE_ITERATOR_TYPE", "UNORDERED_NODE_SNAPSHOT_TYPE", "UNPACK_ALIGNMENT", "UNPACK_COLORSPACE_CONVERSION_WEBGL", "UNPACK_FLIP_Y_WEBGL", "UNPACK_PREMULTIPLY_ALPHA_WEBGL", "UNSCHEDULED_STATE", "UNSENT", "UNSIGNED_BYTE", "UNSIGNED_INT", "UNSIGNED_SHORT", "UNSIGNED_SHORT_4_4_4_4", "UNSIGNED_SHORT_5_5_5_1", "UNSIGNED_SHORT_5_6_5", "UNSPECIFIED_EVENT_TYPE_ERR", "UPDATEREADY", "URIError", "URL", "URLSearchParams", "URLUnencoded", "URL_MISMATCH_ERR", "UTC", "Uint16Array", "Uint32Array", "Uint8Array", "Uint8ClampedArray", "UserMessageHandler", "UserMessageHandlersNamespace", "UserProximityEvent", "VALIDATE_STATUS", "VALIDATION_ERR", "VARIABLES_RULE", "VENDOR", "VERSION", "VERSION_CHANGE", "VERSION_ERR", "VERTEX_ATTRIB_ARRAY_BUFFER_BINDING", "VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE", "VERTEX_ATTRIB_ARRAY_ENABLED", "VERTEX_ATTRIB_ARRAY_NORMALIZED", "VERTEX_ATTRIB_ARRAY_POINTER", "VERTEX_ATTRIB_ARRAY_SIZE", "VERTEX_ATTRIB_ARRAY_STRIDE", "VERTEX_ATTRIB_ARRAY_TYPE", "VERTEX_SHADER", "VERTICAL", "VERTICAL_AXIS", "VER_ERR", "VIEWPORT", "VIEWPORT_RULE", "VTTCue", "VTTRegion", "ValidityState", "VideoStreamTrack", "WEBKIT_FILTER_RULE", "WEBKIT_KEYFRAMES_RULE", "WEBKIT_KEYFRAME_RULE", "WEBKIT_REGION_RULE", "WRONG_DOCUMENT_ERR", "WaveShaperNode", "WeakMap", "WeakSet", "WebGLActiveInfo", "WebGLBuffer", "WebGLContextEvent", "WebGLFramebuffer", "WebGLProgram", "WebGLRenderbuffer", "WebGLRenderingContext", "WebGLShader", "WebGLShaderPrecisionFormat", "WebGLTexture", "WebGLUniformLocation", "WebGLVertexArray", "WebKitAnimationEvent", "WebKitBlobBuilder", "WebKitCSSFilterRule", "WebKitCSSFilterValue", "WebKitCSSKeyframeRule", "WebKitCSSKeyframesRule", "WebKitCSSMatrix", "WebKitCSSRegionRule", "WebKitCSSTransformValue", "WebKitDataCue", "WebKitGamepad", "WebKitMediaKeyError", "WebKitMediaKeyMessageEvent", "WebKitMediaKeySession", "WebKitMediaKeys", "WebKitMediaSource", "WebKitMutationObserver", "WebKitNamespace", "WebKitPlaybackTargetAvailabilityEvent", "WebKitPoint", "WebKitShadowRoot", "WebKitSourceBuffer", "WebKitSourceBufferList", "WebKitTransitionEvent", "WebSocket", "WheelEvent", "Window", "Worker", "XMLDocument", "XMLHttpRequest", "XMLHttpRequestEventTarget", "XMLHttpRequestException", "XMLHttpRequestProgressEvent", "XMLHttpRequestUpload", "XMLSerializer", "XMLStylesheetProcessingInstruction", "XPathEvaluator", "XPathException", "XPathExpression", "XPathNSResolver", "XPathResult", "XSLTProcessor", "ZERO", "_XD0M_", "_YD0M_", "__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__opera", "__proto__", "_browserjsran", "a", "aLink", "abbr", "abort", "abs", "absolute", "acceleration", "accelerationIncludingGravity", "accelerator", "accept", "acceptCharset", "acceptNode", "accessKey", "accessKeyLabel", "accuracy", "acos", "acosh", "action", "actionURL", "active", "activeCues", "activeElement", "activeSourceBuffers", "activeSourceCount", "activeTexture", "add", "addBehavior", "addCandidate", "addColorStop", "addCue", "addElement", "addEventListener", "addFilter", "addFromString", "addFromUri", "addIceCandidate", "addImport", "addListener", "addNamed", "addPageRule", "addPath", "addPointer", "addRange", "addRegion", "addRule", "addSearchEngine", "addSourceBuffer", "addStream", "addTextTrack", "addTrack", "addWakeLockListener", "addedNodes", "additionalName", "additiveSymbols", "addons", "adoptNode", "adr", "advance", "alert", "algorithm", "align", "align-content", "align-items", "align-self", "alignContent", "alignItems", "alignSelf", "alignmentBaseline", "alinkColor", "all", "allSettled", "allowFullscreen", "allowedDirections", "alpha", "alt", "altGraphKey", "altHtml", "altKey", "altLeft", "altitude", "altitudeAccuracy", "amplitude", "ancestorOrigins", "anchor", "anchorNode", "anchorOffset", "anchors", "angle", "animVal", "animate", "animatedInstanceRoot", "animatedNormalizedPathSegList", "animatedPathSegList", "animatedPoints", "animation", "animation-delay", "animation-direction", "animation-duration", "animation-fill-mode", "animation-iteration-count", "animation-name", "animation-play-state", "animation-timing-function", "animationDelay", "animationDirection", "animationDuration", "animationFillMode", "animationIterationCount", "animationName", "animationPlayState", "animationStartTime", "animationTimingFunction", "animationsPaused", "anniversary", "any", "app", "appCodeName", "appMinorVersion", "appName", "appNotifications", "appVersion", "append", "appendBuffer", "appendChild", "appendData", "appendItem", "appendMedium", "appendNamed", "appendRule", "appendStream", "appendWindowEnd", "appendWindowStart", "applets", "applicationCache", "apply", "applyElement", "arc", "arcTo", "archive", "areas", "arguments", "arrayBuffer", "asin", "asinh", "assert", "assign", "async", "atEnd", "atan", "atan2", "atanh", "atob", "attachEvent", "attachShader", "attachShadow", "attachments", "attack", "attrChange", "attrName", "attributeFilter", "attributeName", "attributeNamespace", "attributeOldValue", "attributes", "audioTracks", "autoIncrement", "autobuffer", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "autoplay", "availHeight", "availLeft", "availTop", "availWidth", "availability", "available", "aversion", "axes", "axis", "azimuth", "b", "back", "backface-visibility", "backfaceVisibility", "background", "background-attachment", "background-blend-mode", "background-clip", "background-color", "background-image", "background-origin", "background-position", "background-repeat", "background-size", "backgroundAttachment", "backgroundBlendMode", "backgroundClip", "backgroundColor", "backgroundImage", "backgroundOrigin", "backgroundPosition", "backgroundPositionX", "backgroundPositionY", "backgroundRepeat", "backgroundSize", "badInput", "balance", "baseFrequencyX", "baseFrequencyY", "baseNode", "baseOffset", "baseURI", "baseVal", "baselineShift", "battery", "bday", "beginElement", "beginElementAt", "beginPath", "behavior", "behaviorCookie", "behaviorPart", "behaviorUrns", "beta", "bezierCurveTo", "bgColor", "bgProperties", "bias", "big", "binaryType", "bind", "bindAttribLocation", "bindBuffer", "bindFramebuffer", "bindRenderbuffer", "bindTexture", "blendColor", "blendEquation", "blendEquationSeparate", "blendFunc", "blendFuncSeparate", "blink", "blob", "blockDirection", "blue", "blur", "body", "bodyUsed", "bold", "bookmarks", "booleanValue", "border", "border-bottom", "border-bottom-color", "border-bottom-left-radius", "border-bottom-right-radius", "border-bottom-style", "border-bottom-width", "border-collapse", "border-color", "border-image", "border-image-outset", "border-image-repeat", "border-image-slice", "border-image-source", "border-image-width", "border-left", "border-left-color", "border-left-style", "border-left-width", "border-radius", "border-right", "border-right-color", "border-right-style", "border-right-width", "border-spacing", "border-style", "border-top", "border-top-color", "border-top-left-radius", "border-top-right-radius", "border-top-style", "border-top-width", "border-width", "borderBottom", "borderBottomColor", "borderBottomLeftRadius", "borderBottomRightRadius", "borderBottomStyle", "borderBottomWidth", "borderCollapse", "borderColor", "borderColorDark", "borderColorLight", "borderImage", "borderImageOutset", "borderImageRepeat", "borderImageSlice", "borderImageSource", "borderImageWidth", "borderLeft", "borderLeftColor", "borderLeftStyle", "borderLeftWidth", "borderRadius", "borderRight", "borderRightColor", "borderRightStyle", "borderRightWidth", "borderSpacing", "borderStyle", "borderTop", "borderTopColor", "borderTopLeftRadius", "borderTopRightRadius", "borderTopStyle", "borderTopWidth", "borderWidth", "bottom", "bottomMargin", "bound", "boundElements", "boundingClientRect", "boundingHeight", "boundingLeft", "boundingTop", "boundingWidth", "bounds", "box-decoration-break", "box-shadow", "box-sizing", "boxDecorationBreak", "boxShadow", "boxSizing", "breakAfter", "breakBefore", "breakInside", "browserLanguage", "btoa", "bubbles", "buffer", "bufferData", "bufferDepth", "bufferSize", "bufferSubData", "buffered", "bufferedAmount", "buildID", "buildNumber", "button", "buttonID", "buttons", "byteLength", "byteOffset", "c", "call", "caller", "canBeFormatted", "canBeMounted", "canBeShared", "canHaveChildren", "canHaveHTML", "canPlayType", "cancel", "cancelAnimationFrame", "cancelBubble", "cancelScheduledValues", "cancelable", "candidate", "canvas", "caption", "caption-side", "captionSide", "capture", "captureEvents", "captureStackTrace", "caretPositionFromPoint", "caretRangeFromPoint", "cast", "catch", "category", "cbrt", "cd", "ceil", "cellIndex", "cellPadding", "cellSpacing", "cells", "ch", "chOff", "chain", "challenge", "changedTouches", "channel", "channelCount", "channelCountMode", "channelInterpretation", "char", "charAt", "charCode", "charCodeAt", "charIndex", "characterData", "characterDataOldValue", "characterSet", "charging", "chargingTime", "charset", "checkEnclosure", "checkFramebufferStatus", "checkIntersection", "checkValidity", "checked", "childElementCount", "childList", "childNodes", "children", "chrome", "ciphertext", "cite", "classList", "className", "classid", "clear", "clearAttributes", "clearColor", "clearData", "clearDepth", "clearImmediate", "clearInterval", "clearMarks", "clearMeasures", "clearParameters", "clearRect", "clearResourceTimings", "clearShadow", "clearStencil", "clearTimeout", "clearWatch", "click", "clickCount", "clientHeight", "clientInformation", "clientLeft", "clientRect", "clientRects", "clientTop", "clientWidth", "clientX", "clientY", "clip", "clip-path", "clip-rule", "clipBottom", "clipLeft", "clipPath", "clipPathUnits", "clipRight", "clipRule", "clipTop", "clipboardData", "clone", "cloneContents", "cloneNode", "cloneRange", "close", "closePath", "closed", "closest", "clz", "clz32", "cmp", "code", "codeBase", "codePointAt", "codeType", "colSpan", "collapse", "collapseToEnd", "collapseToStart", "collapsed", "collect", "colno", "color", "color-interpolation", "color-interpolation-filters", "colorDepth", "colorInterpolation", "colorInterpolationFilters", "colorMask", "colorType", "cols", "columnCount", "columnFill", "columnGap", "columnNumber", "columnRule", "columnRuleColor", "columnRuleStyle", "columnRuleWidth", "columnSpan", "columnWidth", "columns", "command", "commitPreferences", "commonAncestorContainer", "compact", "compareBoundaryPoints", "compareDocumentPosition", "compareEndPoints", "compareNode", "comparePoint", "compatMode", "compatible", "compile", "compileShader", "complete", "componentFromPoint", "compositionEndOffset", "compositionStartOffset", "compressedTexImage2D", "compressedTexSubImage2D", "concat", "conditionText", "coneInnerAngle", "coneOuterAngle", "coneOuterGain", "confirm", "confirmComposition", "confirmSiteSpecificTrackingException", "confirmWebWideTrackingException", "connect", "connectEnd", "connectStart", "connected", "connection", "connectionSpeed", "console", "consolidate", "constrictionActive", "constructor", "contactID", "contains", "containsNode", "content", "contentDocument", "contentEditable", "contentOverflow", "contentScriptType", "contentStyleType", "contentType", "contentWindow", "context", "contextMenu", "contextmenu", "continue", "continuous", "control", "controller", "controls", "convertToSpecifiedUnits", "cookie", "cookieEnabled", "coords", "copyFromChannel", "copyTexImage2D", "copyTexSubImage2D", "copyToChannel", "copyWithin", "correspondingElement", "correspondingUseElement", "cos", "cosh", "count", "counter-increment", "counter-reset", "counterIncrement", "counterReset", "cpuClass", "cpuSleepAllowed", "create", "createAnalyser", "createAnswer", "createAttribute", "createAttributeNS", "createBiquadFilter", "createBuffer", "createBufferSource", "createCDATASection", "createCSSStyleSheet", "createCaption", "createChannelMerger", "createChannelSplitter", "createComment", "createContextualFragment", "createControlRange", "createConvolver", "createDTMFSender", "createDataChannel", "createDelay", "createDelayNode", "createDocument", "createDocumentFragment", "createDocumentType", "createDynamicsCompressor", "createElement", "createElementNS", "createEntityReference", "createEvent", "createEventObject", "createExpression", "createFramebuffer", "createFunction", "createGain", "createGainNode", "createHTMLDocument", "createImageBitmap", "createImageData", "createIndex", "createJavaScriptNode", "createLinearGradient", "createMediaElementSource", "createMediaKeys", "createMediaStreamDestination", "createMediaStreamSource", "createMutableFile", "createNSResolver", "createNodeIterator", "createNotification", "createObjectStore", "createObjectURL", "createOffer", "createOscillator", "createPanner", "createPattern", "createPeriodicWave", "createPopup", "createProcessingInstruction", "createProgram", "createRadialGradient", "createRange", "createRangeCollection", "createRenderbuffer", "createSVGAngle", "createSVGLength", "createSVGMatrix", "createSVGNumber", "createSVGPathSegArcAbs", "createSVGPathSegArcRel", "createSVGPathSegClosePath", "createSVGPathSegCurvetoCubicAbs", "createSVGPathSegCurvetoCubicRel", "createSVGPathSegCurvetoCubicSmoothAbs", "createSVGPathSegCurvetoCubicSmoothRel", "createSVGPathSegCurvetoQuadraticAbs", "createSVGPathSegCurvetoQuadraticRel", "createSVGPathSegCurvetoQuadraticSmoothAbs", "createSVGPathSegCurvetoQuadraticSmoothRel", "createSVGPathSegLinetoAbs", "createSVGPathSegLinetoHorizontalAbs", "createSVGPathSegLinetoHorizontalRel", "createSVGPathSegLinetoRel", "createSVGPathSegLinetoVerticalAbs", "createSVGPathSegLinetoVerticalRel", "createSVGPathSegMovetoAbs", "createSVGPathSegMovetoRel", "createSVGPoint", "createSVGRect", "createSVGTransform", "createSVGTransformFromMatrix", "createScriptProcessor", "createSession", "createShader", "createShadowRoot", "createStereoPanner", "createStyleSheet", "createTBody", "createTFoot", "createTHead", "createTextNode", "createTextRange", "createTexture", "createTouch", "createTouchList", "createTreeWalker", "createWaveShaper", "creationTime", "crossOrigin", "crypto", "csi", "cssFloat", "cssRules", "cssText", "cssValueType", "ctrlKey", "ctrlLeft", "cues", "cullFace", "currentNode", "currentPage", "currentScale", "currentScript", "currentSrc", "currentState", "currentStyle", "currentTarget", "currentTime", "currentTranslate", "currentView", "cursor", "curve", "customError", "cx", "cy", "d", "data", "dataFld", "dataFormatAs", "dataPageSize", "dataSrc", "dataTransfer", "database", "dataset", "dateTime", "db", "debug", "debuggerEnabled", "declare", "decode", "decodeAudioData", "decodeURI", "decodeURIComponent", "decodingInfo", "decrypt", "default", "defaultCharset", "defaultChecked", "defaultMuted", "defaultPlaybackRate", "defaultPrevented", "defaultSelected", "defaultStatus", "defaultURL", "defaultValue", "defaultView", "defaultstatus", "defer", "defineMagicFunction", "defineMagicVariable", "defineProperties", "defineProperty", "delayTime", "delete", "deleteBuffer", "deleteCaption", "deleteCell", "deleteContents", "deleteData", "deleteDatabase", "deleteFramebuffer", "deleteFromDocument", "deleteIndex", "deleteMedium", "deleteObjectStore", "deleteProgram", "deleteRenderbuffer", "deleteRow", "deleteRule", "deleteShader", "deleteTFoot", "deleteTHead", "deleteTexture", "deliverChangeRecords", "delivery", "deliveryInfo", "deliveryStatus", "deliveryTimestamp", "delta", "deltaMode", "deltaX", "deltaY", "deltaZ", "depthFunc", "depthMask", "depthRange", "deriveBits", "deriveKey", "description", "deselectAll", "designMode", "destination", "destinationURL", "detach", "detachEvent", "detachShader", "detail", "detune", "devicePixelRatio", "deviceXDPI", "deviceYDPI", "diffuseConstant", "digest", "dimensions", "dir", "dirName", "direction", "dirxml", "disable", "disableVertexAttribArray", "disabled", "dischargingTime", "disconnect", "dispatchEvent", "display", "distanceModel", "divisor", "djsapi", "djsproxy", "doImport", "doNotTrack", "doScroll", "doctype", "document", "documentElement", "documentMode", "documentURI", "dolphin", "dolphinGameCenter", "dolphininfo", "dolphinmeta", "domComplete", "domContentLoadedEventEnd", "domContentLoadedEventStart", "domInteractive", "domLoading", "domain", "domainLookupEnd", "domainLookupStart", "dominant-baseline", "dominantBaseline", "done", "dopplerFactor", "download", "dragDrop", "draggable", "drawArrays", "drawArraysInstancedANGLE", "drawCustomFocusRing", "drawElements", "drawElementsInstancedANGLE", "drawFocusIfNeeded", "drawImage", "drawImageFromRect", "drawSystemFocusRing", "drawingBufferHeight", "drawingBufferWidth", "dropEffect", "droppedVideoFrames", "dropzone", "dump", "duplicate", "duration", "dvname", "dvnum", "dx", "dy", "dynsrc", "e", "edgeMode", "effectAllowed", "elapsedTime", "elementFromPoint", "elements", "elevation", "ellipse", "email", "embeds", "empty", "empty-cells", "emptyCells", "enable", "enableBackground", "enableStyleSheetsForSet", "enableVertexAttribArray", "enabled", "enabledPlugin", "encode", "encodeURI", "encodeURIComponent", "encoding", "encrypt", "enctype", "end", "endContainer", "endElement", "endElementAt", "endOfStream", "endOffset", "endTime", "ended", "endsWith", "entities", "entries", "entryType", "enumerate", "enumerateEditable", "error", "errorCode", "escape", "eval", "evaluate", "event", "eventPhase", "every", "exception", "exec", "execCommand", "execCommandShowHelp", "execScript", "exitFullscreen", "exitPointerLock", "exp", "expand", "expandEntityReferences", "expando", "expansion", "expiryDate", "explicitOriginalTarget", "expm1", "exponent", "exponentialRampToValueAtTime", "exportKey", "extend", "extensions", "extentNode", "extentOffset", "external", "externalResourcesRequired", "extractContents", "extractable", "f", "face", "factoryReset", "fallback", "familyName", "farthestViewportElement", "fastSeek", "fatal", "fetch", "fetchStart", "fftSize", "fgColor", "fileCreatedDate", "fileHandle", "fileModifiedDate", "fileName", "fileSize", "fileUpdatedDate", "filename", "files", "fill", "fill-opacity", "fill-rule", "fillOpacity", "fillRect", "fillRule", "fillStyle", "fillText", "filter", "filterResX", "filterResY", "filterUnits", "filters", "finally", "find", "findIndex", "findRule", "findText", "finish", "fireEvent", "firstChild", "firstElementChild", "firstPage", "fixed", "flex", "flex-basis", "flex-direction", "flex-flow", "flex-grow", "flex-shrink", "flex-wrap", "flexBasis", "flexDirection", "flexFlow", "flexGrow", "flexShrink", "flexWrap", "flipX", "flipY", "float", "flood-color", "flood-opacity", "floodColor", "floodOpacity", "floor", "flush", "focus", "focusNode", "focusOffset", "font", "font-family", "font-feature-settings", "font-kerning", "font-language-override", "font-size", "font-size-adjust", "font-stretch", "font-style", "font-synthesis", "font-variant", "font-variant-alternates", "font-variant-caps", "font-variant-east-asian", "font-variant-ligatures", "font-variant-numeric", "font-variant-position", "font-weight", "fontFamily", "fontFeatureSettings", "fontKerning", "fontLanguageOverride", "fontSize", "fontSizeAdjust", "fontSmoothingEnabled", "fontStretch", "fontStyle", "fontSynthesis", "fontVariant", "fontVariantAlternates", "fontVariantCaps", "fontVariantEastAsian", "fontVariantLigatures", "fontVariantNumeric", "fontVariantPosition", "fontWeight", "fontcolor", "fonts", "fontsize", "for", "forEach", "forceRedraw", "form", "formAction", "formEnctype", "formMethod", "formNoValidate", "formTarget", "format", "formatToParts", "forms", "forward", "fr", "frame", "frameBorder", "frameElement", "frameSpacing", "framebufferRenderbuffer", "framebufferTexture2D", "frames", "freeSpace", "freeze", "frequency", "frequencyBinCount", "from", "fromCharCode", "fromCodePoint", "fromElement", "frontFace", "fround", "fullScreen", "fullscreenElement", "fullscreenEnabled", "fx", "fy", "gain", "gamepad", "gamma", "genderIdentity", "generateKey", "generateMipmap", "generateRequest", "geolocation", "gestureObject", "get", "getActiveAttrib", "getActiveUniform", "getAdjacentText", "getAll", "getAllResponseHeaders", "getAsFile", "getAsString", "getAttachedShaders", "getAttribLocation", "getAttribute", "getAttributeNS", "getAttributeNode", "getAttributeNodeNS", "getAudioTracks", "getBBox", "getBattery", "getBlob", "getBookmark", "getBoundingClientRect", "getBufferParameter", "getByteFrequencyData", "getByteTimeDomainData", "getCSSCanvasContext", "getCTM", "getCandidateWindowClientRect", "getChannelData", "getCharNumAtPosition", "getClientRect", "getClientRects", "getCompositionAlternatives", "getComputedStyle", "getComputedTextLength", "getConfiguration", "getContext", "getContextAttributes", "getCounterValue", "getCueAsHTML", "getCueById", "getCurrentPosition", "getCurrentTime", "getData", "getDatabaseNames", "getDate", "getDay", "getDefaultComputedStyle", "getDestinationInsertionPoints", "getDistributedNodes", "getEditable", "getElementById", "getElementsByClassName", "getElementsByName", "getElementsByTagName", "getElementsByTagNameNS", "getEnclosureList", "getEndPositionOfChar", "getEntries", "getEntriesByName", "getEntriesByType", "getError", "getExtension", "getExtentOfChar", "getFeature", "getFile", "getFloat32", "getFloat64", "getFloatFrequencyData", "getFloatTimeDomainData", "getFloatValue", "getFramebufferAttachmentParameter", "getFrequencyResponse", "getFullYear", "getGamepads", "getHours", "getImageData", "getInt16", "getInt32", "getInt8", "getIntersectionList", "getItem", "getItems", "getKey", "getLineDash", "getLocalStreams", "getMarks", "getMatchedCSSRules", "getMeasures", "getMetadata", "getMilliseconds", "getMinutes", "getModifierState", "getMonth", "getNamedItem", "getNamedItemNS", "getNotifier", "getNumberOfChars", "getOverrideHistoryNavigationMode", "getOverrideStyle", "getOwnPropertyDescriptor", "getOwnPropertyNames", "getOwnPropertySymbols", "getParameter", "getPathSegAtLength", "getPointAtLength", "getPreference", "getPreferenceDefault", "getPresentationAttribute", "getPreventDefault", "getProgramInfoLog", "getProgramParameter", "getPropertyCSSValue", "getPropertyPriority", "getPropertyShorthand", "getPropertyValue", "getPrototypeOf", "getRGBColorValue", "getRandomValues", "getRangeAt", "getReceivers", "getRectValue", "getRegistration", "getRemoteStreams", "getRenderbufferParameter", "getResponseHeader", "getRoot", "getRotationOfChar", "getSVGDocument", "getScreenCTM", "getSeconds", "getSelection", "getSenders", "getShaderInfoLog", "getShaderParameter", "getShaderPrecisionFormat", "getShaderSource", "getSimpleDuration", "getSiteIcons", "getSources", "getSpeculativeParserUrls", "getStartPositionOfChar", "getStartTime", "getStats", "getStorageUpdates", "getStreamById", "getStringValue", "getSubStringLength", "getSubscription", "getSupportedExtensions", "getTexParameter", "getTime", "getTimezoneOffset", "getTotalLength", "getTrackById", "getTracks", "getTransformToElement", "getUTCDate", "getUTCDay", "getUTCFullYear", "getUTCHours", "getUTCMilliseconds", "getUTCMinutes", "getUTCMonth", "getUTCSeconds", "getUint16", "getUint32", "getUint8", "getUniform", "getUniformLocation", "getUserMedia", "getValues", "getVarDate", "getVariableValue", "getVertexAttrib", "getVertexAttribOffset", "getVideoPlaybackQuality", "getVideoTracks", "getWakeLockState", "getYear", "givenName", "global", "globalAlpha", "globalCompositeOperation", "glyphOrientationHorizontal", "glyphOrientationVertical", "glyphRef", "go", "gradientTransform", "gradientUnits", "grammars", "green", "group", "groupCollapsed", "groupEnd", "hardwareConcurrency", "has", "hasAttribute", "hasAttributeNS", "hasAttributes", "hasChildNodes", "hasComposition", "hasExtension", "hasFeature", "hasFocus", "hasLayout", "hasOwnProperty", "hash", "head", "headers", "heading", "height", "hidden", "hide", "hideFocus", "high", "hint", "history", "honorificPrefix", "honorificSuffix", "horizontalOverflow", "host", "hostname", "href", "hreflang", "hspace", "html5TagCheckInerface", "htmlFor", "htmlText", "httpEquiv", "hwTimestamp", "hypot", "iccId", "iceConnectionState", "iceGatheringState", "icon", "id", "identifier", "identity", "ignoreBOM", "ignoreCase", "image-orientation", "image-rendering", "imageOrientation", "imageRendering", "images", "ime-mode", "imeMode", "implementation", "importKey", "importNode", "importStylesheet", "imports", "impp", "imul", "in1", "in2", "inBandMetadataTrackDispatchType", "inRange", "includes", "incremental", "indeterminate", "index", "indexNames", "indexOf", "indexedDB", "inertiaDestinationX", "inertiaDestinationY", "info", "init", "initAnimationEvent", "initBeforeLoadEvent", "initClipboardEvent", "initCloseEvent", "initCommandEvent", "initCompositionEvent", "initCustomEvent", "initData", "initDeviceMotionEvent", "initDeviceOrientationEvent", "initDragEvent", "initErrorEvent", "initEvent", "initFocusEvent", "initGestureEvent", "initHashChangeEvent", "initKeyEvent", "initKeyboardEvent", "initMSManipulationEvent", "initMessageEvent", "initMouseEvent", "initMouseScrollEvent", "initMouseWheelEvent", "initMutationEvent", "initNSMouseEvent", "initOverflowEvent", "initPageEvent", "initPageTransitionEvent", "initPointerEvent", "initPopStateEvent", "initProgressEvent", "initScrollAreaEvent", "initSimpleGestureEvent", "initStorageEvent", "initTextEvent", "initTimeEvent", "initTouchEvent", "initTransitionEvent", "initUIEvent", "initWebKitAnimationEvent", "initWebKitTransitionEvent", "initWebKitWheelEvent", "initWheelEvent", "initialTime", "initialize", "initiatorType", "inner", "innerHTML", "innerHeight", "innerText", "innerWidth", "input", "inputBuffer", "inputEncoding", "inputMethod", "insertAdjacentElement", "insertAdjacentHTML", "insertAdjacentText", "insertBefore", "insertCell", "insertData", "insertItemBefore", "insertNode", "insertRow", "insertRule", "instanceRoot", "intercept", "interimResults", "internalSubset", "intersectsNode", "interval", "invalidIteratorState", "inverse", "invertSelf", "is", "is2D", "isAlternate", "isArray", "isBingCurrentSearchDefault", "isBuffer", "isCandidateWindowVisible", "isChar", "isCollapsed", "isComposing", "isContentEditable", "isContentHandlerRegistered", "isContextLost", "isDefaultNamespace", "isDisabled", "isEnabled", "isEqual", "isEqualNode", "isExtensible", "isFinite", "isFramebuffer", "isFrozen", "isGenerator", "isId", "isInjected", "isInteger", "isMap", "isMultiLine", "isNaN", "isOpen", "isPointInFill", "isPointInPath", "isPointInRange", "isPointInStroke", "isPrefAlternate", "isPrimary", "isProgram", "isPropertyImplicit", "isProtocolHandlerRegistered", "isPrototypeOf", "isRenderbuffer", "isSafeInteger", "isSameNode", "isSealed", "isShader", "isSupported", "isTextEdit", "isTexture", "isTrusted", "isTypeSupported", "isView", "isolation", "italics", "item", "itemId", "itemProp", "itemRef", "itemScope", "itemType", "itemValue", "iterateNext", "iterator", "javaEnabled", "jobTitle", "join", "json", "justify-content", "justifyContent", "k1", "k2", "k3", "k4", "kernelMatrix", "kernelUnitLengthX", "kernelUnitLengthY", "kerning", "key", "keyCode", "keyFor", "keyIdentifier", "keyLightEnabled", "keyLocation", "keyPath", "keySystem", "keyText", "keyUsage", "keys", "keytype", "kind", "knee", "label", "labels", "lang", "language", "languages", "largeArcFlag", "lastChild", "lastElementChild", "lastEventId", "lastIndex", "lastIndexOf", "lastMatch", "lastMessageSubject", "lastMessageType", "lastModified", "lastModifiedDate", "lastPage", "lastParen", "lastState", "lastStyleSheetSet", "latitude", "layerX", "layerY", "layoutFlow", "layoutGrid", "layoutGridChar", "layoutGridLine", "layoutGridMode", "layoutGridType", "lbound", "left", "leftContext", "leftMargin", "length", "lengthAdjust", "lengthComputable", "letter-spacing", "letterSpacing", "level", "lighting-color", "lightingColor", "limitingConeAngle", "line", "line-height", "lineAlign", "lineBreak", "lineCap", "lineDashOffset", "lineHeight", "lineJoin", "lineNumber", "lineTo", "lineWidth", "linearRampToValueAtTime", "lineno", "link", "linkColor", "linkProgram", "links", "list", "list-style", "list-style-image", "list-style-position", "list-style-type", "listStyle", "listStyleImage", "listStylePosition", "listStyleType", "listener", "load", "loadEventEnd", "loadEventStart", "loadTimes", "loaded", "localDescription", "localName", "localStorage", "locale", "localeCompare", "location", "locationbar", "lock", "lockedFile", "log", "log10", "log1p", "log2", "logicalXDPI", "logicalYDPI", "longDesc", "longitude", "lookupNamespaceURI", "lookupPrefix", "loop", "loopEnd", "loopStart", "looping", "low", "lower", "lowerBound", "lowerOpen", "lowsrc", "m11", "m12", "m13", "m14", "m21", "m22", "m23", "m24", "m31", "m32", "m33", "m34", "m41", "m42", "m43", "m44", "manifest", "map", "mapping", "margin", "margin-bottom", "margin-left", "margin-right", "margin-top", "marginBottom", "marginHeight", "marginLeft", "marginRight", "marginTop", "marginWidth", "mark", "marker", "marker-end", "marker-mid", "marker-offset", "marker-start", "markerEnd", "markerHeight", "markerMid", "markerOffset", "markerStart", "markerUnits", "markerWidth", "marks", "mask", "mask-type", "maskContentUnits", "maskType", "maskUnits", "match", "matchMedia", "matchMedium", "matches", "matrix", "matrixTransform", "max", "max-height", "max-width", "maxAlternatives", "maxChannelCount", "maxConnectionsPerServer", "maxDecibels", "maxDistance", "maxHeight", "maxLength", "maxTouchPoints", "maxValue", "maxWidth", "measure", "measureText", "media", "mediaCapabilities", "mediaDevices", "mediaElement", "mediaGroup", "mediaKeys", "mediaText", "meetOrSlice", "memory", "menubar", "mergeAttributes", "message", "messageClass", "messageHandlers", "metaKey", "method", "mimeType", "mimeTypes", "min", "min-height", "min-width", "minDecibels", "minHeight", "minValue", "minWidth", "miterLimit", "mix-blend-mode", "mixBlendMode", "mode", "modify", "mount", "move", "moveBy", "moveEnd", "moveFirst", "moveFocusDown", "moveFocusLeft", "moveFocusRight", "moveFocusUp", "moveNext", "moveRow", "moveStart", "moveTo", "moveToBookmark", "moveToElementText", "moveToPoint", "mozAdd", "mozAnimationStartTime", "mozAnon", "mozApps", "mozAudioCaptured", "mozAudioChannelType", "mozAutoplayEnabled", "mozCancelAnimationFrame", "mozCancelFullScreen", "mozCancelRequestAnimationFrame", "mozCaptureStream", "mozCaptureStreamUntilEnded", "mozClearDataAt", "mozContact", "mozContacts", "mozCreateFileHandle", "mozCurrentTransform", "mozCurrentTransformInverse", "mozCursor", "mozDash", "mozDashOffset", "mozDecodedFrames", "mozExitPointerLock", "mozFillRule", "mozFragmentEnd", "mozFrameDelay", "mozFullScreen", "mozFullScreenElement", "mozFullScreenEnabled", "mozGetAll", "mozGetAllKeys", "mozGetAsFile", "mozGetDataAt", "mozGetMetadata", "mozGetUserMedia", "mozHasAudio", "mozHasItem", "mozHidden", "mozImageSmoothingEnabled", "mozIndexedDB", "mozInnerScreenX", "mozInnerScreenY", "mozInputSource", "mozIsTextField", "mozItem", "mozItemCount", "mozItems", "mozLength", "mozLockOrientation", "mozMatchesSelector", "mozMovementX", "mozMovementY", "mozOpaque", "mozOrientation", "mozPaintCount", "mozPaintedFrames", "mozParsedFrames", "mozPay", "mozPointerLockElement", "mozPresentedFrames", "mozPreservesPitch", "mozPressure", "mozPrintCallback", "mozRTCIceCandidate", "mozRTCPeerConnection", "mozRTCSessionDescription", "mozRemove", "mozRequestAnimationFrame", "mozRequestFullScreen", "mozRequestPointerLock", "mozSetDataAt", "mozSetImageElement", "mozSourceNode", "mozSrcObject", "mozSystem", "mozTCPSocket", "mozTextStyle", "mozTypesAt", "mozUnlockOrientation", "mozUserCancelled", "mozVisibilityState", "msAnimation", "msAnimationDelay", "msAnimationDirection", "msAnimationDuration", "msAnimationFillMode", "msAnimationIterationCount", "msAnimationName", "msAnimationPlayState", "msAnimationStartTime", "msAnimationTimingFunction", "msBackfaceVisibility", "msBlockProgression", "msCSSOMElementFloatMetrics", "msCaching", "msCachingEnabled", "msCancelRequestAnimationFrame", "msCapsLockWarningOff", "msClearImmediate", "msClose", "msContentZoomChaining", "msContentZoomFactor", "msContentZoomLimit", "msContentZoomLimitMax", "msContentZoomLimitMin", "msContentZoomSnap", "msContentZoomSnapPoints", "msContentZoomSnapType", "msContentZooming", "msConvertURL", "msCrypto", "msDoNotTrack", "msElementsFromPoint", "msElementsFromRect", "msExitFullscreen", "msExtendedCode", "msFillRule", "msFirstPaint", "msFlex", "msFlexAlign", "msFlexDirection", "msFlexFlow", "msFlexItemAlign", "msFlexLinePack", "msFlexNegative", "msFlexOrder", "msFlexPack", "msFlexPositive", "msFlexPreferredSize", "msFlexWrap", "msFlowFrom", "msFlowInto", "msFontFeatureSettings", "msFullscreenElement", "msFullscreenEnabled", "msGetInputContext", "msGetRegionContent", "msGetUntransformedBounds", "msGraphicsTrustStatus", "msGridColumn", "msGridColumnAlign", "msGridColumnSpan", "msGridColumns", "msGridRow", "msGridRowAlign", "msGridRowSpan", "msGridRows", "msHidden", "msHighContrastAdjust", "msHyphenateLimitChars", "msHyphenateLimitLines", "msHyphenateLimitZone", "msHyphens", "msImageSmoothingEnabled", "msImeAlign", "msIndexedDB", "msInterpolationMode", "msIsStaticHTML", "msKeySystem", "msKeys", "msLaunchUri", "msLockOrientation", "msManipulationViewsEnabled", "msMatchMedia", "msMatchesSelector", "msMaxTouchPoints", "msOrientation", "msOverflowStyle", "msPerspective", "msPerspectiveOrigin", "msPlayToDisabled", "msPlayToPreferredSourceUri", "msPlayToPrimary", "msPointerEnabled", "msRegionOverflow", "msReleasePointerCapture", "msRequestAnimationFrame", "msRequestFullscreen", "msSaveBlob", "msSaveOrOpenBlob", "msScrollChaining", "msScrollLimit", "msScrollLimitXMax", "msScrollLimitXMin", "msScrollLimitYMax", "msScrollLimitYMin", "msScrollRails", "msScrollSnapPointsX", "msScrollSnapPointsY", "msScrollSnapType", "msScrollSnapX", "msScrollSnapY", "msScrollTranslation", "msSetImmediate", "msSetMediaKeys", "msSetPointerCapture", "msTextCombineHorizontal", "msTextSizeAdjust", "msToBlob", "msTouchAction", "msTouchSelect", "msTraceAsyncCallbackCompleted", "msTraceAsyncCallbackStarting", "msTraceAsyncOperationCompleted", "msTraceAsyncOperationStarting", "msTransform", "msTransformOrigin", "msTransformStyle", "msTransition", "msTransitionDelay", "msTransitionDuration", "msTransitionProperty", "msTransitionTimingFunction", "msUnlockOrientation", "msUpdateAsyncCallbackRelation", "msUserSelect", "msVisibilityState", "msWrapFlow", "msWrapMargin", "msWrapThrough", "msWriteProfilerMark", "msZoom", "msZoomTo", "mt", "multiEntry", "multiSelectionObj", "multiline", "multiple", "multiply", "multiplySelf", "mutableFile", "muted", "n", "name", "nameProp", "namedItem", "namedRecordset", "names", "namespaceURI", "namespaces", "naturalHeight", "naturalWidth", "navigate", "navigation", "navigationMode", "navigationStart", "navigator", "near", "nearestViewportElement", "negative", "netscape", "networkState", "newScale", "newTranslate", "newURL", "newValue", "newValueSpecifiedUnits", "newVersion", "newhome", "next", "nextElementSibling", "nextNode", "nextPage", "nextSibling", "nickname", "noHref", "noResize", "noShade", "noValidate", "noWrap", "nodeName", "nodeType", "nodeValue", "normalize", "normalizedPathSegList", "notationName", "notations", "note", "noteGrainOn", "noteOff", "noteOn", "now", "numOctaves", "number", "numberOfChannels", "numberOfInputs", "numberOfItems", "numberOfOutputs", "numberValue", "oMatchesSelector", "object", "object-fit", "object-position", "objectFit", "objectPosition", "objectStore", "objectStoreNames", "observe", "of", "offscreenBuffering", "offset", "offsetHeight", "offsetLeft", "offsetNode", "offsetParent", "offsetTop", "offsetWidth", "offsetX", "offsetY", "ok", "oldURL", "oldValue", "oldVersion", "olderShadowRoot", "onLine", "onabort", "onactivate", "onactive", "onaddstream", "onaddtrack", "onafterprint", "onafterscriptexecute", "onafterupdate", "onaudioend", "onaudioprocess", "onaudiostart", "onautocomplete", "onautocompleteerror", "onbeforeactivate", "onbeforecopy", "onbeforecut", "onbeforedeactivate", "onbeforeeditfocus", "onbeforepaste", "onbeforeprint", "onbeforescriptexecute", "onbeforeunload", "onbeforeupdate", "onblocked", "onblur", "onbounce", "onboundary", "oncached", "oncancel", "oncandidatewindowhide", "oncandidatewindowshow", "oncandidatewindowupdate", "oncanplay", "oncanplaythrough", "once", "oncellchange", "onchange", "onchargingchange", "onchargingtimechange", "onchecking", "onclick", "onclose", "oncompassneedscalibration", "oncomplete", "oncontextmenu", "oncontrolselect", "oncopy", "oncuechange", "oncut", "ondataavailable", "ondatachannel", "ondatasetchanged", "ondatasetcomplete", "ondblclick", "ondeactivate", "ondevicelight", "ondevicemotion", "ondeviceorientation", "ondeviceproximity", "ondischargingtimechange", "ondisplay", "ondownloading", "ondrag", "ondragend", "ondragenter", "ondragleave", "ondragover", "ondragstart", "ondrop", "ondurationchange", "onemptied", "onencrypted", "onend", "onended", "onenter", "onerror", "onerrorupdate", "onexit", "onfilterchange", "onfinish", "onfocus", "onfocusin", "onfocusout", "onfullscreenchange", "onfullscreenerror", "ongesturechange", "ongestureend", "ongesturestart", "ongotpointercapture", "onhashchange", "onhelp", "onicecandidate", "oniceconnectionstatechange", "oninactive", "oninput", "oninvalid", "onkeydown", "onkeypress", "onkeyup", "onlanguagechange", "onlayoutcomplete", "onlevelchange", "onload", "onloadeddata", "onloadedmetadata", "onloadend", "onloadstart", "onlosecapture", "onlostpointercapture", "only", "onmark", "onmessage", "onmousedown", "onmouseenter", "onmouseleave", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "onmousewheel", "onmove", "onmoveend", "onmovestart", "onmozfullscreenchange", "onmozfullscreenerror", "onmozorientationchange", "onmozpointerlockchange", "onmozpointerlockerror", "onmscontentzoom", "onmsfullscreenchange", "onmsfullscreenerror", "onmsgesturechange", "onmsgesturedoubletap", "onmsgestureend", "onmsgesturehold", "onmsgesturestart", "onmsgesturetap", "onmsgotpointercapture", "onmsinertiastart", "onmslostpointercapture", "onmsmanipulationstatechanged", "onmsneedkey", "onmsorientationchange", "onmspointercancel", "onmspointerdown", "onmspointerenter", "onmspointerhover", "onmspointerleave", "onmspointermove", "onmspointerout", "onmspointerover", "onmspointerup", "onmssitemodejumplistitemremoved", "onmsthumbnailclick", "onnegotiationneeded", "onnomatch", "onnoupdate", "onobsolete", "onoffline", "ononline", "onopen", "onorientationchange", "onpagechange", "onpagehide", "onpageshow", "onpaste", "onpause", "onplay", "onplaying", "onpluginstreamstart", "onpointercancel", "onpointerdown", "onpointerenter", "onpointerleave", "onpointerlockchange", "onpointerlockerror", "onpointermove", "onpointerout", "onpointerover", "onpointerup", "onpopstate", "onprogress", "onpropertychange", "onratechange", "onreadystatechange", "onremovestream", "onremovetrack", "onreset", "onresize", "onresizeend", "onresizestart", "onresourcetimingbufferfull", "onresult", "onresume", "onrowenter", "onrowexit", "onrowsdelete", "onrowsinserted", "onscroll", "onsearch", "onseeked", "onseeking", "onselect", "onselectionchange", "onselectstart", "onshow", "onsignalingstatechange", "onsoundend", "onsoundstart", "onspeechend", "onspeechstart", "onstalled", "onstart", "onstatechange", "onstop", "onstorage", "onstoragecommit", "onsubmit", "onsuccess", "onsuspend", "ontextinput", "ontimeout", "ontimeupdate", "ontoggle", "ontouchcancel", "ontouchend", "ontouchmove", "ontouchstart", "ontransitionend", "onunload", "onupdateready", "onupgradeneeded", "onuserproximity", "onversionchange", "onvoiceschanged", "onvolumechange", "onwaiting", "onwarning", "onwebkitanimationend", "onwebkitanimationiteration", "onwebkitanimationstart", "onwebkitcurrentplaybacktargetiswirelesschanged", "onwebkitfullscreenchange", "onwebkitfullscreenerror", "onwebkitkeyadded", "onwebkitkeyerror", "onwebkitkeymessage", "onwebkitneedkey", "onwebkitorientationchange", "onwebkitplaybacktargetavailabilitychanged", "onwebkitpointerlockchange", "onwebkitpointerlockerror", "onwebkitresourcetimingbufferfull", "onwebkittransitionend", "onwheel", "onzoom", "opacity", "open", "openCursor", "openDatabase", "openKeyCursor", "opener", "opera", "operationType", "operator", "opr", "optimum", "options", "order", "orderX", "orderY", "ordered", "org", "orient", "orientAngle", "orientType", "orientation", "origin", "originalTarget", "orphans", "oscpu", "outerHTML", "outerHeight", "outerText", "outerWidth", "outline", "outline-color", "outline-offset", "outline-style", "outline-width", "outlineColor", "outlineOffset", "outlineStyle", "outlineWidth", "outputBuffer", "overflow", "overflow-x", "overflow-y", "overflowX", "overflowY", "overrideMimeType", "oversample", "ownerDocument", "ownerElement", "ownerNode", "ownerRule", "ownerSVGElement", "owningElement", "p1", "p2", "p3", "p4", "pad", "padding", "padding-bottom", "padding-left", "padding-right", "padding-top", "paddingBottom", "paddingLeft", "paddingRight", "paddingTop", "page", "page-break-after", "page-break-before", "page-break-inside", "pageBreakAfter", "pageBreakBefore", "pageBreakInside", "pageCount", "pageX", "pageXOffset", "pageY", "pageYOffset", "pages", "paint-order", "paintOrder", "paintRequests", "paintType", "palette", "panningModel", "parent", "parentElement", "parentNode", "parentRule", "parentStyleSheet", "parentTextEdit", "parentWindow", "parse", "parseFloat", "parseFromString", "parseInt", "participants", "passive", "password", "pasteHTML", "path", "pathLength", "pathSegList", "pathSegType", "pathSegTypeAsLetter", "pathname", "pattern", "patternContentUnits", "patternMismatch", "patternTransform", "patternUnits", "pause", "pauseAnimations", "pauseOnExit", "paused", "pending", "performance", "permission", "persisted", "personalbar", "perspective", "perspective-origin", "perspectiveOrigin", "phoneticFamilyName", "phoneticGivenName", "photo", "ping", "pitch", "pixelBottom", "pixelDepth", "pixelHeight", "pixelLeft", "pixelRight", "pixelStorei", "pixelTop", "pixelUnitToMillimeterX", "pixelUnitToMillimeterY", "pixelWidth", "placeholder", "platform", "play", "playbackRate", "playbackState", "playbackTime", "played", "plugins", "pluginspage", "pname", "pointer-events", "pointerBeforeReferenceNode", "pointerEnabled", "pointerEvents", "pointerId", "pointerLockElement", "pointerType", "points", "pointsAtX", "pointsAtY", "pointsAtZ", "polygonOffset", "pop", "popupWindowFeatures", "popupWindowName", "popupWindowURI", "port", "port1", "port2", "ports", "posBottom", "posHeight", "posLeft", "posRight", "posTop", "posWidth", "position", "positionAlign", "postError", "postMessage", "poster", "pow", "powerOff", "preMultiplySelf", "precision", "preferredStyleSheetSet", "preferredStylesheetSet", "prefix", "preload", "prepend", "preserveAlpha", "preserveAspectRatio", "preserveAspectRatioString", "pressed", "pressure", "prevValue", "preventDefault", "preventExtensions", "previousElementSibling", "previousNode", "previousPage", "previousScale", "previousSibling", "previousTranslate", "primaryKey", "primitiveType", "primitiveUnits", "principals", "print", "privateKey", "probablySupportsContext", "process", "processIceMessage", "product", "productSub", "profile", "profileEnd", "profiles", "prompt", "properties", "propertyIsEnumerable", "propertyName", "protocol", "protocolLong", "prototype", "pseudoClass", "pseudoElement", "publicId", "publicKey", "published", "push", "pushNotification", "pushState", "put", "putImageData", "quadraticCurveTo", "qualifier", "queryCommandEnabled", "queryCommandIndeterm", "queryCommandState", "queryCommandSupported", "queryCommandText", "queryCommandValue", "querySelector", "querySelectorAll", "quote", "quotes", "r", "r1", "r2", "race", "radiogroup", "radiusX", "radiusY", "random", "range", "rangeCount", "rangeMax", "rangeMin", "rangeOffset", "rangeOverflow", "rangeParent", "rangeUnderflow", "rate", "ratio", "raw", "read", "readAsArrayBuffer", "readAsBinaryString", "readAsBlob", "readAsDataURL", "readAsText", "readOnly", "readPixels", "readReportRequested", "readyState", "reason", "reboot", "receiver", "receivers", "recordNumber", "recordset", "rect", "red", "redirectCount", "redirectEnd", "redirectStart", "reduce", "reduceRight", "reduction", "refDistance", "refX", "refY", "referenceNode", "referrer", "refresh", "region", "regionAnchorX", "regionAnchorY", "regionId", "regions", "register", "registerContentHandler", "registerElement", "registerProtocolHandler", "reject", "rel", "relList", "relatedNode", "relatedTarget", "release", "releaseCapture", "releaseEvents", "releasePointerCapture", "releaseShaderCompiler", "reliable", "reload", "remainingSpace", "remoteDescription", "remove", "removeAllRanges", "removeAttribute", "removeAttributeNS", "removeAttributeNode", "removeBehavior", "removeChild", "removeCue", "removeEventListener", "removeFilter", "removeImport", "removeItem", "removeListener", "removeNamedItem", "removeNamedItemNS", "removeNode", "removeParameter", "removeProperty", "removeRange", "removeRegion", "removeRule", "removeSiteSpecificTrackingException", "removeSourceBuffer", "removeStream", "removeTrack", "removeVariable", "removeWakeLockListener", "removeWebWideTrackingException", "removedNodes", "renderbufferStorage", "renderedBuffer", "renderingMode", "repeat", "replace", "replaceAdjacentText", "replaceChild", "replaceData", "replaceId", "replaceItem", "replaceNode", "replaceState", "replaceTrack", "replaceWholeText", "reportValidity", "requestAnimationFrame", "requestAutocomplete", "requestData", "requestFullscreen", "requestMediaKeySystemAccess", "requestPermission", "requestPointerLock", "requestStart", "requestingWindow", "required", "requiredExtensions", "requiredFeatures", "reset", "resetTransform", "resize", "resizeBy", "resizeTo", "resolve", "response", "responseBody", "responseEnd", "responseStart", "responseText", "responseType", "responseURL", "responseXML", "restore", "result", "resultType", "resume", "returnValue", "rev", "reverse", "reversed", "revocable", "revokeObjectURL", "rgbColor", "right", "rightContext", "rightMargin", "rolloffFactor", "root", "rootElement", "rotate", "rotateAxisAngle", "rotateAxisAngleSelf", "rotateFromVector", "rotateFromVectorSelf", "rotateSelf", "rotation", "rotationRate", "round", "rowIndex", "rowSpan", "rows", "rubyAlign", "rubyOverhang", "rubyPosition", "rules", "runtime", "runtimeStyle", "rx", "ry", "safari", "sampleCoverage", "sampleRate", "sandbox", "save", "scale", "scale3d", "scale3dSelf", "scaleNonUniform", "scaleNonUniformSelf", "scaleSelf", "scheme", "scissor", "scope", "scopeName", "scoped", "screen", "screenBrightness", "screenEnabled", "screenLeft", "screenPixelToMillimeterX", "screenPixelToMillimeterY", "screenTop", "screenX", "screenY", "scripts", "scroll", "scroll-behavior", "scrollAmount", "scrollBehavior", "scrollBy", "scrollByLines", "scrollByPages", "scrollDelay", "scrollHeight", "scrollIntoView", "scrollIntoViewIfNeeded", "scrollLeft", "scrollLeftMax", "scrollMaxX", "scrollMaxY", "scrollTo", "scrollTop", "scrollTopMax", "scrollWidth", "scrollX", "scrollY", "scrollbar3dLightColor", "scrollbarArrowColor", "scrollbarBaseColor", "scrollbarDarkShadowColor", "scrollbarFaceColor", "scrollbarHighlightColor", "scrollbarShadowColor", "scrollbarTrackColor", "scrollbars", "scrolling", "sdp", "sdpMLineIndex", "sdpMid", "seal", "search", "searchBox", "searchBoxJavaBridge_", "searchParams", "sectionRowIndex", "secureConnectionStart", "security", "seed", "seekable", "seeking", "select", "selectAllChildren", "selectNode", "selectNodeContents", "selectNodes", "selectSingleNode", "selectSubString", "selected", "selectedIndex", "selectedOptions", "selectedStyleSheetSet", "selectedStylesheetSet", "selection", "selectionDirection", "selectionEnd", "selectionStart", "selector", "selectorText", "self", "send", "sendAsBinary", "sendBeacon", "sender", "sentTimestamp", "separator", "serializeToString", "serviceWorker", "sessionId", "sessionStorage", "set", "setActive", "setAlpha", "setAttribute", "setAttributeNS", "setAttributeNode", "setAttributeNodeNS", "setBaseAndExtent", "setBingCurrentSearchDefault", "setCapture", "setColor", "setCompositeOperation", "setCurrentTime", "setCustomValidity", "setData", "setDate", "setDragImage", "setEnd", "setEndAfter", "setEndBefore", "setEndPoint", "setFillColor", "setFilterRes", "setFloat32", "setFloat64", "setFloatValue", "setFullYear", "setHours", "setImmediate", "setInt16", "setInt32", "setInt8", "setInterval", "setItem", "setLineCap", "setLineDash", "setLineJoin", "setLineWidth", "setLocalDescription", "setMatrix", "setMatrixValue", "setMediaKeys", "setMilliseconds", "setMinutes", "setMiterLimit", "setMonth", "setNamedItem", "setNamedItemNS", "setNonUserCodeExceptions", "setOrientToAngle", "setOrientToAuto", "setOrientation", "setOverrideHistoryNavigationMode", "setPaint", "setParameter", "setPeriodicWave", "setPointerCapture", "setPosition", "setPreference", "setProperty", "setPrototypeOf", "setRGBColor", "setRGBColorICCColor", "setRadius", "setRangeText", "setRemoteDescription", "setRequestHeader", "setResizable", "setResourceTimingBufferSize", "setRotate", "setScale", "setSeconds", "setSelectionRange", "setServerCertificate", "setShadow", "setSkewX", "setSkewY", "setStart", "setStartAfter", "setStartBefore", "setStdDeviation", "setStringValue", "setStrokeColor", "setSuggestResult", "setTargetAtTime", "setTargetValueAtTime", "setTime", "setTimeout", "setTransform", "setTranslate", "setUTCDate", "setUTCFullYear", "setUTCHours", "setUTCMilliseconds", "setUTCMinutes", "setUTCMonth", "setUTCSeconds", "setUint16", "setUint32", "setUint8", "setUri", "setValueAtTime", "setValueCurveAtTime", "setVariable", "setVelocity", "setVersion", "setYear", "settingName", "settingValue", "sex", "shaderSource", "shadowBlur", "shadowColor", "shadowOffsetX", "shadowOffsetY", "shadowRoot", "shape", "shape-rendering", "shapeRendering", "sheet", "shift", "shiftKey", "shiftLeft", "show", "showHelp", "showModal", "showModalDialog", "showModelessDialog", "showNotification", "sidebar", "sign", "signalingState", "sin", "singleNodeValue", "sinh", "size", "sizeToContent", "sizes", "skewX", "skewXSelf", "skewY", "skewYSelf", "slice", "slope", "small", "smil", "smooth", "smoothingTimeConstant", "snapToLines", "snapshotItem", "snapshotLength", "some", "sort", "source", "sourceBuffer", "sourceBuffers", "sourceIndex", "spacing", "span", "speakAs", "speaking", "specified", "specularConstant", "specularExponent", "speechSynthesis", "speed", "speedOfSound", "spellcheck", "splice", "split", "splitText", "spreadMethod", "sqrt", "src", "srcElement", "srcFilter", "srcUrn", "srcdoc", "srclang", "srcset", "stack", "stackTraceLimit", "stacktrace", "standalone", "standby", "start", "startContainer", "startIce", "startOffset", "startRendering", "startTime", "startsWith", "state", "status", "statusMessage", "statusText", "statusbar", "stdDeviationX", "stdDeviationY", "stencilFunc", "stencilFuncSeparate", "stencilMask", "stencilMaskSeparate", "stencilOp", "stencilOpSeparate", "step", "stepDown", "stepMismatch", "stepUp", "sticky", "stitchTiles", "stop", "stop-color", "stop-opacity", "stopColor", "stopImmediatePropagation", "stopOpacity", "stopPropagation", "storageArea", "storageName", "storageStatus", "storeSiteSpecificTrackingException", "storeWebWideTrackingException", "stpVersion", "stream", "strike", "stringValue", "stringify", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "strokeDasharray", "strokeDashoffset", "strokeLinecap", "strokeLinejoin", "strokeMiterlimit", "strokeOpacity", "strokeRect", "strokeStyle", "strokeText", "strokeWidth", "style", "styleFloat", "styleMedia", "styleSheet", "styleSheetSets", "styleSheets", "sub", "subarray", "subject", "submit", "subscribe", "substr", "substring", "substringData", "subtle", "subtree", "suffix", "suffixes", "summary", "sup", "supports", "surfaceScale", "surroundContents", "suspend", "suspendRedraw", "swapCache", "swapNode", "sweepFlag", "symbols", "system", "systemCode", "systemId", "systemLanguage", "systemXDPI", "systemYDPI", "tBodies", "tFoot", "tHead", "tabIndex", "table", "table-layout", "tableLayout", "tableValues", "tag", "tagName", "tagUrn", "tags", "taintEnabled", "takeRecords", "tan", "tanh", "target", "targetElement", "targetTouches", "targetX", "targetY", "tel", "terminate", "test", "texImage2D", "texParameterf", "texParameteri", "texSubImage2D", "text", "text-align", "text-anchor", "text-decoration", "text-decoration-color", "text-decoration-line", "text-decoration-style", "text-indent", "text-overflow", "text-rendering", "text-shadow", "text-transform", "textAlign", "textAlignLast", "textAnchor", "textAutospace", "textBaseline", "textContent", "textDecoration", "textDecorationBlink", "textDecorationColor", "textDecorationLine", "textDecorationLineThrough", "textDecorationNone", "textDecorationOverline", "textDecorationStyle", "textDecorationUnderline", "textIndent", "textJustify", "textJustifyTrim", "textKashida", "textKashidaSpace", "textLength", "textOverflow", "textRendering", "textShadow", "textTracks", "textTransform", "textUnderlinePosition", "then", "threadId", "threshold", "tiltX", "tiltY", "time", "timeEnd", "timeStamp", "timeout", "timestamp", "timestampOffset", "timing", "title", "toArray", "toBlob", "toDataURL", "toDateString", "toElement", "toExponential", "toFixed", "toFloat32Array", "toFloat64Array", "toGMTString", "toISOString", "toJSON", "toLocaleDateString", "toLocaleFormat", "toLocaleLowerCase", "toLocaleString", "toLocaleTimeString", "toLocaleUpperCase", "toLowerCase", "toMethod", "toPrecision", "toSdp", "toSource", "toStaticHTML", "toString", "toStringTag", "toTimeString", "toUTCString", "toUpperCase", "toggle", "toggleLongPressEnabled", "tooLong", "toolbar", "top", "topMargin", "total", "totalFrameDelay", "totalVideoFrames", "touchAction", "touches", "trace", "track", "transaction", "transactions", "transform", "transform-origin", "transform-style", "transformOrigin", "transformPoint", "transformString", "transformStyle", "transformToDocument", "transformToFragment", "transition", "transition-delay", "transition-duration", "transition-property", "transition-timing-function", "transitionDelay", "transitionDuration", "transitionProperty", "transitionTimingFunction", "translate", "translateSelf", "translationX", "translationY", "trim", "trimLeft", "trimRight", "trueSpeed", "trunc", "truncate", "type", "typeDetail", "typeMismatch", "typeMustMatch", "types", "ubound", "undefined", "unescape", "uneval", "unicode-bidi", "unicodeBidi", "uniform1f", "uniform1fv", "uniform1i", "uniform1iv", "uniform2f", "uniform2fv", "uniform2i", "uniform2iv", "uniform3f", "uniform3fv", "uniform3i", "uniform3iv", "uniform4f", "uniform4fv", "uniform4i", "uniform4iv", "uniformMatrix2fv", "uniformMatrix3fv", "uniformMatrix4fv", "unique", "uniqueID", "uniqueNumber", "unitType", "units", "unloadEventEnd", "unloadEventStart", "unlock", "unmount", "unobserve", "unpause", "unpauseAnimations", "unreadCount", "unregister", "unregisterContentHandler", "unregisterProtocolHandler", "unscopables", "unselectable", "unshift", "unsubscribe", "unsuspendRedraw", "unsuspendRedrawAll", "unwatch", "unwrapKey", "update", "updateCommands", "updateIce", "updateInterval", "updateSettings", "updated", "updating", "upload", "upper", "upperBound", "upperOpen", "uri", "url", "urn", "urns", "usages", "useCurrentView", "useMap", "useProgram", "usedSpace", "userAgent", "userLanguage", "username", "v8BreakIterator", "vAlign", "vLink", "valid", "validateProgram", "validationMessage", "validity", "value", "valueAsDate", "valueAsNumber", "valueAsString", "valueInSpecifiedUnits", "valueMissing", "valueOf", "valueText", "valueType", "values", "vector-effect", "vectorEffect", "velocityAngular", "velocityExpansion", "velocityX", "velocityY", "vendor", "vendorSub", "verify", "version", "vertexAttrib1f", "vertexAttrib1fv", "vertexAttrib2f", "vertexAttrib2fv", "vertexAttrib3f", "vertexAttrib3fv", "vertexAttrib4f", "vertexAttrib4fv", "vertexAttribDivisorANGLE", "vertexAttribPointer", "vertical", "vertical-align", "verticalAlign", "verticalOverflow", "vibrate", "videoHeight", "videoTracks", "videoWidth", "view", "viewBox", "viewBoxString", "viewTarget", "viewTargetString", "viewport", "viewportAnchorX", "viewportAnchorY", "viewportElement", "visibility", "visibilityState", "visible", "vlinkColor", "voice", "volume", "vrml", "vspace", "w", "wand", "warn", "wasClean", "watch", "watchPosition", "webdriver", "webkitAddKey", "webkitAnimation", "webkitAnimationDelay", "webkitAnimationDirection", "webkitAnimationDuration", "webkitAnimationFillMode", "webkitAnimationIterationCount", "webkitAnimationName", "webkitAnimationPlayState", "webkitAnimationTimingFunction", "webkitAppearance", "webkitAudioContext", "webkitAudioDecodedByteCount", "webkitAudioPannerNode", "webkitBackfaceVisibility", "webkitBackground", "webkitBackgroundAttachment", "webkitBackgroundClip", "webkitBackgroundColor", "webkitBackgroundImage", "webkitBackgroundOrigin", "webkitBackgroundPosition", "webkitBackgroundPositionX", "webkitBackgroundPositionY", "webkitBackgroundRepeat", "webkitBackgroundSize", "webkitBackingStorePixelRatio", "webkitBorderImage", "webkitBorderImageOutset", "webkitBorderImageRepeat", "webkitBorderImageSlice", "webkitBorderImageSource", "webkitBorderImageWidth", "webkitBoxAlign", "webkitBoxDirection", "webkitBoxFlex", "webkitBoxOrdinalGroup", "webkitBoxOrient", "webkitBoxPack", "webkitBoxSizing", "webkitCancelAnimationFrame", "webkitCancelFullScreen", "webkitCancelKeyRequest", "webkitCancelRequestAnimationFrame", "webkitClearResourceTimings", "webkitClosedCaptionsVisible", "webkitConvertPointFromNodeToPage", "webkitConvertPointFromPageToNode", "webkitCreateShadowRoot", "webkitCurrentFullScreenElement", "webkitCurrentPlaybackTargetIsWireless", "webkitDirectionInvertedFromDevice", "webkitDisplayingFullscreen", "webkitEnterFullScreen", "webkitEnterFullscreen", "webkitExitFullScreen", "webkitExitFullscreen", "webkitExitPointerLock", "webkitFullScreenKeyboardInputAllowed", "webkitFullscreenElement", "webkitFullscreenEnabled", "webkitGenerateKeyRequest", "webkitGetAsEntry", "webkitGetDatabaseNames", "webkitGetEntries", "webkitGetEntriesByName", "webkitGetEntriesByType", "webkitGetFlowByName", "webkitGetGamepads", "webkitGetImageDataHD", "webkitGetNamedFlows", "webkitGetRegionFlowRanges", "webkitGetUserMedia", "webkitHasClosedCaptions", "webkitHidden", "webkitIDBCursor", "webkitIDBDatabase", "webkitIDBDatabaseError", "webkitIDBDatabaseException", "webkitIDBFactory", "webkitIDBIndex", "webkitIDBKeyRange", "webkitIDBObjectStore", "webkitIDBRequest", "webkitIDBTransaction", "webkitImageSmoothingEnabled", "webkitIndexedDB", "webkitInitMessageEvent", "webkitIsFullScreen", "webkitKeys", "webkitLineDashOffset", "webkitLockOrientation", "webkitMatchesSelector", "webkitMediaStream", "webkitNotifications", "webkitOfflineAudioContext", "webkitOrientation", "webkitPeerConnection00", "webkitPersistentStorage", "webkitPointerLockElement", "webkitPostMessage", "webkitPreservesPitch", "webkitPutImageDataHD", "webkitRTCPeerConnection", "webkitRegionOverset", "webkitRequestAnimationFrame", "webkitRequestFileSystem", "webkitRequestFullScreen", "webkitRequestFullscreen", "webkitRequestPointerLock", "webkitResolveLocalFileSystemURL", "webkitSetMediaKeys", "webkitSetResourceTimingBufferSize", "webkitShadowRoot", "webkitShowPlaybackTargetPicker", "webkitSlice", "webkitSpeechGrammar", "webkitSpeechGrammarList", "webkitSpeechRecognition", "webkitSpeechRecognitionError", "webkitSpeechRecognitionEvent", "webkitStorageInfo", "webkitSupportsFullscreen", "webkitTemporaryStorage", "webkitTextSizeAdjust", "webkitTransform", "webkitTransformOrigin", "webkitTransition", "webkitTransitionDelay", "webkitTransitionDuration", "webkitTransitionProperty", "webkitTransitionTimingFunction", "webkitURL", "webkitUnlockOrientation", "webkitUserSelect", "webkitVideoDecodedByteCount", "webkitVisibilityState", "webkitWirelessVideoPlaybackDisabled", "webkitdropzone", "webstore", "weight", "whatToShow", "wheelDelta", "wheelDeltaX", "wheelDeltaY", "which", "white-space", "whiteSpace", "wholeText", "widows", "width", "will-change", "willChange", "willValidate", "window", "withCredentials", "word-break", "word-spacing", "word-wrap", "wordBreak", "wordSpacing", "wordWrap", "wrap", "wrapKey", "write", "writeln", "writingMode", "x", "x1", "x2", "xChannelSelector", "xmlEncoding", "xmlStandalone", "xmlVersion", "xmlbase", "xmllang", "xmlspace", "y", "y1", "y2", "yChannelSelector", "yandex", "z", "z-index", "zIndex", "zoom", "zoomAndPan", "zoomRectScreen" ]; node_modules/terser/tools/node.js000066600000000676150425117220013164 0ustar00import { minify } from "../lib/minify"; export function default_options() { const defs = {}; Object.keys(infer_options({ 0: 0 })).forEach((component) => { const options = infer_options({ [component]: {0: 0} }); if (options) defs[component] = options; }); return defs; } function infer_options(options) { var result = minify("", options); return result.error && result.error.defs; } node_modules/terser/tools/props.html000066600000002700150425117220013720 0ustar00 node_modules/terser/tools/terser.d.ts000066600000045500150425117220013772 0ustar00/// import { RawSourceMap } from 'source-map'; /** @deprecated since this versions basically do not exist */ type ECMA_UNOFFICIAL = 6 | 7 | 8 | 9 | 10 | 11; export type ECMA = 5 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | ECMA_UNOFFICIAL; export interface ParseOptions { bare_returns?: boolean; ecma?: ECMA; html5_comments?: boolean; shebang?: boolean; } export interface CompressOptions { arguments?: boolean; arrows?: boolean; booleans_as_integers?: boolean; booleans?: boolean; collapse_vars?: boolean; comparisons?: boolean; computed_props?: boolean; conditionals?: boolean; dead_code?: boolean; defaults?: boolean; directives?: boolean; drop_console?: boolean; drop_debugger?: boolean; ecma?: ECMA; evaluate?: boolean; expression?: boolean; global_defs?: object; hoist_funs?: boolean; hoist_props?: boolean; hoist_vars?: boolean; ie8?: boolean; if_return?: boolean; inline?: boolean | InlineFunctions; join_vars?: boolean; keep_classnames?: boolean | RegExp; keep_fargs?: boolean; keep_fnames?: boolean | RegExp; keep_infinity?: boolean; loops?: boolean; module?: boolean; negate_iife?: boolean; passes?: number; properties?: boolean; pure_funcs?: string[]; pure_getters?: boolean | 'strict'; reduce_funcs?: boolean; reduce_vars?: boolean; sequences?: boolean | number; side_effects?: boolean; switches?: boolean; toplevel?: boolean; top_retain?: null | string | string[] | RegExp; typeofs?: boolean; unsafe_arrows?: boolean; unsafe?: boolean; unsafe_comps?: boolean; unsafe_Function?: boolean; unsafe_math?: boolean; unsafe_symbols?: boolean; unsafe_methods?: boolean; unsafe_proto?: boolean; unsafe_regexp?: boolean; unsafe_undefined?: boolean; unused?: boolean; warnings?: boolean; } export enum InlineFunctions { Disabled = 0, SimpleFunctions = 1, WithArguments = 2, WithArgumentsAndVariables = 3 } export interface MangleOptions { eval?: boolean; keep_classnames?: boolean | RegExp; keep_fnames?: boolean | RegExp; module?: boolean; properties?: boolean | ManglePropertiesOptions; reserved?: string[]; safari10?: boolean; toplevel?: boolean; } export interface ManglePropertiesOptions { builtins?: boolean; debug?: boolean; keep_quoted?: boolean | 'strict'; regex?: RegExp | string; reserved?: string[]; } export interface OutputOptions { ascii_only?: boolean; beautify?: boolean; braces?: boolean; comments?: boolean | 'all' | 'some' | RegExp | ( (node: AST_Node, comment: { value: string, type: 'comment1' | 'comment2' | 'comment3' | 'comment4', pos: number, line: number, col: number, }) => boolean ); ecma?: ECMA; ie8?: boolean; indent_level?: number; indent_start?: number; inline_script?: boolean; keep_quoted_props?: boolean; max_line_len?: number | false; preamble?: string; preserve_annotations?: boolean; quote_keys?: boolean; quote_style?: OutputQuoteStyle; safari10?: boolean; semicolons?: boolean; shebang?: boolean; shorthand?: boolean; source_map?: SourceMapOptions; webkit?: boolean; width?: number; wrap_iife?: boolean; wrap_func_args?: boolean; } export enum OutputQuoteStyle { PreferDouble = 0, AlwaysSingle = 1, AlwaysDouble = 2, AlwaysOriginal = 3 } export interface MinifyOptions { compress?: boolean | CompressOptions; ecma?: ECMA; ie8?: boolean; keep_classnames?: boolean | RegExp; keep_fnames?: boolean | RegExp; mangle?: boolean | MangleOptions; module?: boolean; nameCache?: object; output?: OutputOptions; parse?: ParseOptions; safari10?: boolean; sourceMap?: boolean | SourceMapOptions; toplevel?: boolean; warnings?: boolean | 'verbose'; } export interface MinifyOutput { ast?: AST_Node; code?: string; error?: Error; map?: RawSourceMap | string; warnings?: string[]; } export interface SourceMapOptions { /** Source map object, 'inline' or source map file content */ content?: RawSourceMap | string; includeSources?: boolean; filename?: string; root?: string; url?: string | 'inline'; } declare function parse(text: string, options?: ParseOptions): AST_Node; export class TreeWalker { constructor(callback: (node: AST_Node, descend?: (node: AST_Node) => void) => boolean | undefined); directives: object; find_parent(type: AST_Node): AST_Node | undefined; has_directive(type: string): boolean; loopcontrol_target(node: AST_Node): AST_Node | undefined; parent(n: number): AST_Node | undefined; pop(): void; push(node: AST_Node): void; self(): AST_Node | undefined; stack: AST_Node[]; visit: (node: AST_Node, descend: boolean) => any; } export class TreeTransformer extends TreeWalker { constructor( before: (node: AST_Node, descend?: (node: AST_Node, tw: TreeWalker) => void, in_list?: boolean) => AST_Node | undefined, after?: (node: AST_Node, in_list?: boolean) => AST_Node | undefined ); before: (node: AST_Node) => AST_Node; after?: (node: AST_Node) => AST_Node; } export function push_uniq(array: T[], el: T): void; export function minify(files: string | string[] | { [file: string]: string } | AST_Node, options?: MinifyOptions): MinifyOutput; export class AST_Node { constructor(props?: object); static BASE?: AST_Node; static PROPS: string[]; static SELF_PROPS: string[]; static SUBCLASSES: AST_Node[]; static documentation: string; static propdoc?: Record; static expressions?: AST_Node[]; static warn?: (text: string, props: any) => void; static from_mozilla_ast?: (node: AST_Node) => any; walk: (visitor: TreeWalker) => void; print_to_string: (options?: OutputOptions) => string; transform: (tt: TreeTransformer, in_list?: boolean) => AST_Node; TYPE: string; CTOR: typeof AST_Node; } declare class SymbolDef { constructor(scope?: AST_Scope, orig?: object, init?: object); name: string; orig: AST_SymbolRef[]; init: AST_SymbolRef; eliminated: number; scope: AST_Scope; references: AST_SymbolRef[]; replaced: number; global: boolean; export: boolean; mangled_name: null | string; undeclared: boolean; id: number; } type ArgType = AST_SymbolFunarg | AST_DefaultAssign | AST_Destructuring | AST_Expansion; declare class AST_Statement extends AST_Node { constructor(props?: object); } declare class AST_Debugger extends AST_Statement { constructor(props?: object); } declare class AST_Directive extends AST_Statement { constructor(props?: object); value: string; quote: string; } declare class AST_SimpleStatement extends AST_Statement { constructor(props?: object); body: AST_Node[]; } declare class AST_Block extends AST_Statement { constructor(props?: object); body: AST_Node[]; block_scope: AST_Scope | null; } declare class AST_BlockStatement extends AST_Block { constructor(props?: object); } declare class AST_Scope extends AST_Block { constructor(props?: object); variables: any; functions: any; uses_with: boolean; uses_eval: boolean; parent_scope: AST_Scope | null; enclosed: any; cname: any; } declare class AST_Toplevel extends AST_Scope { constructor(props?: object); globals: any; } declare class AST_Lambda extends AST_Scope { constructor(props?: object); name: AST_SymbolDeclaration | null; argnames: ArgType[]; uses_arguments: boolean; is_generator: boolean; async: boolean; } declare class AST_Accessor extends AST_Lambda { constructor(props?: object); } declare class AST_Function extends AST_Lambda { constructor(props?: object); } declare class AST_Arrow extends AST_Lambda { constructor(props?: object); } declare class AST_Defun extends AST_Lambda { constructor(props?: object); } declare class AST_Class extends AST_Scope { constructor(props?: object); name: AST_SymbolClass | AST_SymbolDefClass | null; extends: AST_Node | null; properties: AST_ObjectProperty[]; } declare class AST_DefClass extends AST_Class { constructor(props?: object); } declare class AST_ClassExpression extends AST_Class { constructor(props?: object); } declare class AST_Switch extends AST_Block { constructor(props?: object); expression: AST_Node; } declare class AST_SwitchBranch extends AST_Block { constructor(props?: object); } declare class AST_Default extends AST_SwitchBranch { constructor(props?: object); } declare class AST_Case extends AST_SwitchBranch { constructor(props?: object); expression: AST_Node; } declare class AST_Try extends AST_Block { constructor(props?: object); bcatch: AST_Catch; bfinally: null | AST_Finally; } declare class AST_Catch extends AST_Block { constructor(props?: object); argname: ArgType; } declare class AST_Finally extends AST_Block { constructor(props?: object); } declare class AST_EmptyStatement extends AST_Statement { constructor(props?: object); } declare class AST_StatementWithBody extends AST_Statement { constructor(props?: object); body: AST_Node[]; } declare class AST_LabeledStatement extends AST_StatementWithBody { constructor(props?: object); label: AST_Label; } declare class AST_IterationStatement extends AST_StatementWithBody { constructor(props?: object); block_scope: AST_Scope | null; } declare class AST_DWLoop extends AST_IterationStatement { constructor(props?: object); condition: AST_Node; } declare class AST_Do extends AST_DWLoop { constructor(props?: object); } declare class AST_While extends AST_DWLoop { constructor(props?: object); } declare class AST_For extends AST_IterationStatement { constructor(props?: object); init: AST_Node | null; condition: AST_Node | null; step: AST_Node | null; } declare class AST_ForIn extends AST_IterationStatement { constructor(props?: object); init: AST_Node | null; object: AST_Node; } declare class AST_ForOf extends AST_ForIn { constructor(props?: object); await: boolean; } declare class AST_With extends AST_StatementWithBody { constructor(props?: object); expression: AST_Node; } declare class AST_If extends AST_StatementWithBody { constructor(props?: object); condition: AST_Node; alternative: AST_Node | null; } declare class AST_Jump extends AST_Statement { constructor(props?: object); } declare class AST_Exit extends AST_Jump { constructor(props?: object); value: AST_Node | null; } declare class AST_Return extends AST_Exit { constructor(props?: object); } declare class AST_Throw extends AST_Exit { constructor(props?: object); } declare class AST_LoopControl extends AST_Jump { constructor(props?: object); label: null | AST_LabelRef; } declare class AST_Break extends AST_LoopControl { constructor(props?: object); } declare class AST_Continue extends AST_LoopControl { constructor(props?: object); } declare class AST_Definitions extends AST_Statement { constructor(props?: object); definitions: AST_VarDef[]; } declare class AST_Var extends AST_Definitions { constructor(props?: object); } declare class AST_Let extends AST_Definitions { constructor(props?: object); } declare class AST_Const extends AST_Definitions { constructor(props?: object); } declare class AST_Export extends AST_Statement { constructor(props?: object); exported_definition: AST_Definitions | AST_Lambda | AST_DefClass | null; exported_value: AST_Node | null; is_default: boolean; exported_names: AST_NameMapping[]; module_name: AST_String; } declare class AST_Expansion extends AST_Node { constructor(props?: object); expression: AST_Node; } declare class AST_Destructuring extends AST_Node { constructor(props?: object); names: AST_Node[]; is_array: boolean; } declare class AST_PrefixedTemplateString extends AST_Node { constructor(props?: object); template_string: AST_TemplateString; prefix: AST_Node; } declare class AST_TemplateString extends AST_Node { constructor(props?: object); segments: AST_Node[]; } declare class AST_TemplateSegment extends AST_Node { constructor(props?: object); value: string; raw: string; } declare class AST_NameMapping extends AST_Node { constructor(props?: object); foreign_name: AST_Symbol; name: AST_SymbolExport | AST_SymbolImport; } declare class AST_Import extends AST_Node { constructor(props?: object); imported_name: null | AST_SymbolImport; imported_names: AST_NameMapping[]; module_name: AST_String; } declare class AST_VarDef extends AST_Node { constructor(props?: object); name: AST_Destructuring | AST_SymbolConst | AST_SymbolLet | AST_SymbolVar; value: AST_Node | null; } declare class AST_Call extends AST_Node { constructor(props?: object); expression: AST_Node; args: AST_Node[]; } declare class AST_New extends AST_Call { constructor(props?: object); } declare class AST_Sequence extends AST_Node { constructor(props?: object); expressions: AST_Node[]; } declare class AST_PropAccess extends AST_Node { constructor(props?: object); expression: AST_Node; property: AST_Node | string; } declare class AST_Dot extends AST_PropAccess { constructor(props?: object); } declare class AST_Sub extends AST_PropAccess { constructor(props?: object); } declare class AST_Unary extends AST_Node { constructor(props?: object); operator: string; expression: AST_Node; } declare class AST_UnaryPrefix extends AST_Unary { constructor(props?: object); } declare class AST_UnaryPostfix extends AST_Unary { constructor(props?: object); } declare class AST_Binary extends AST_Node { constructor(props?: object); operator: string; left: AST_Node; right: AST_Node; } declare class AST_Assign extends AST_Binary { constructor(props?: object); } declare class AST_DefaultAssign extends AST_Binary { constructor(props?: object); } declare class AST_Conditional extends AST_Node { constructor(props?: object); condition: AST_Node; consequent: AST_Node; alternative: AST_Node; } declare class AST_Array extends AST_Node { constructor(props?: object); elements: AST_Node[]; } declare class AST_Object extends AST_Node { constructor(props?: object); properties: AST_ObjectProperty[]; } declare class AST_ObjectProperty extends AST_Node { constructor(props?: object); key: string | number | AST_Node; value: AST_Node; } declare class AST_ObjectKeyVal extends AST_ObjectProperty { constructor(props?: object); quote: string; } declare class AST_ObjectSetter extends AST_ObjectProperty { constructor(props?: object); quote: string; static: boolean; } declare class AST_ObjectGetter extends AST_ObjectProperty { constructor(props?: object); quote: string; static: boolean; } declare class AST_ConciseMethod extends AST_ObjectProperty { constructor(props?: object); quote: string; static: boolean; is_generator: boolean; async: boolean; } declare class AST_Symbol extends AST_Node { constructor(props?: object); scope: AST_Scope; name: string; thedef: SymbolDef; } declare class AST_SymbolDeclaration extends AST_Symbol { constructor(props?: object); init: AST_Node | null; } declare class AST_SymbolVar extends AST_SymbolDeclaration { constructor(props?: object); } declare class AST_SymbolFunarg extends AST_SymbolVar { constructor(props?: object); } declare class AST_SymbolBlockDeclaration extends AST_SymbolDeclaration { constructor(props?: object); } declare class AST_SymbolConst extends AST_SymbolBlockDeclaration { constructor(props?: object); } declare class AST_SymbolLet extends AST_SymbolBlockDeclaration { constructor(props?: object); } declare class AST_SymbolDefClass extends AST_SymbolBlockDeclaration { constructor(props?: object); } declare class AST_SymbolCatch extends AST_SymbolBlockDeclaration { constructor(props?: object); } declare class AST_SymbolImport extends AST_SymbolBlockDeclaration { constructor(props?: object); } declare class AST_SymbolDefun extends AST_SymbolDeclaration { constructor(props?: object); } declare class AST_SymbolLambda extends AST_SymbolDeclaration { constructor(props?: object); } declare class AST_SymbolClass extends AST_SymbolDeclaration { constructor(props?: object); } declare class AST_SymbolMethod extends AST_Symbol { constructor(props?: object); } declare class AST_SymbolImportForeign extends AST_Symbol { constructor(props?: object); } declare class AST_Label extends AST_Symbol { constructor(props?: object); references: AST_LoopControl | null; } declare class AST_SymbolRef extends AST_Symbol { constructor(props?: object); } declare class AST_SymbolExport extends AST_SymbolRef { constructor(props?: object); } declare class AST_SymbolExportForeign extends AST_Symbol { constructor(props?: object); } declare class AST_LabelRef extends AST_Symbol { constructor(props?: object); } declare class AST_This extends AST_Symbol { constructor(props?: object); } declare class AST_Super extends AST_This { constructor(props?: object); } declare class AST_NewTarget extends AST_Node { constructor(props?: object); } declare class AST_Constant extends AST_Node { constructor(props?: object); } declare class AST_String extends AST_Constant { constructor(props?: object); value: string; quote: string; } declare class AST_Number extends AST_Constant { constructor(props?: object); value: number; literal: string; } declare class AST_RegExp extends AST_Constant { constructor(props?: object); value: { source: string, flags: string }; } declare class AST_Atom extends AST_Constant { constructor(props?: object); } declare class AST_Null extends AST_Atom { constructor(props?: object); } declare class AST_NaN extends AST_Atom { constructor(props?: object); } declare class AST_Undefined extends AST_Atom { constructor(props?: object); } declare class AST_Hole extends AST_Atom { constructor(props?: object); } declare class AST_Infinity extends AST_Atom { constructor(props?: object); } declare class AST_Boolean extends AST_Atom { constructor(props?: object); } declare class AST_False extends AST_Boolean { constructor(props?: object); } declare class AST_True extends AST_Boolean { constructor(props?: object); } declare class AST_Await extends AST_Node { constructor(props?: object); expression: AST_Node; } declare class AST_Yield extends AST_Node { constructor(props?: object); expression: AST_Node; is_star: boolean; } node_modules/terser/tools/colorless-console.js000066600000000406150425117220015673 0ustar00"use strict" if (Number((/([0-9]+)\./.exec(process.version) || [])[1]) >= 10) { var Console = require("console").Console; global.console = new Console({ stdout: process.stdout, stderr: process.stderr, colorMode: false }); } node_modules/terser/LICENSE000066600000002504150425117220011536 0ustar00UglifyJS is released under the BSD license: Copyright 2012-2018 (c) Mihai Bazon Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. node_modules/terser/PATRONS.md000066600000000562150425117220012203 0ustar00# Our patrons These are the first-tier patrons from [Patreon](https://www.patreon.com/fabiosantoscode). My appreciation goes to everyone on this list for supporting the project! * 38elements * Alan Orozco * Aria Buckles * CKEditor * Mariusz Nowak * Nakshatra Mukhopadhyay * Philippe Léger * Piotrek Koszuliński * Serhiy Shyyko * Viktor Hubert * 龙腾道 node_modules/terser/package.json000066600000005273150425117220013025 0ustar00{ "name": "terser", "description": "JavaScript parser, mangler/compressor and beautifier toolkit for ES6+", "homepage": "https://terser.org", "author": "Mihai Bazon (http://lisperator.net/)", "license": "BSD-2-Clause", "version": "4.8.1", "engines": { "node": ">=6.0.0" }, "maintainers": [ "Fábio Santos " ], "repository": "https://github.com/terser/terser", "main": "dist/bundle.min.js", "types": "tools/terser.d.ts", "bin": { "terser": "bin/terser" }, "files": [ "bin", "dist", "tools", "LICENSE", "README.md", "CHANGELOG.md", "PATRONS.md" ], "dependencies": { "commander": "^2.20.0", "source-map": "~0.6.1", "source-map-support": "~0.5.12" }, "devDependencies": { "acorn": "^7.1.1", "astring": "^1.4.1", "eslint": "^6.3.0", "eslump": "^2.0.0", "mocha": "^7.1.2", "mochallel": "^2.0.0", "pre-commit": "^1.2.2", "rimraf": "^3.0.0", "rollup": "2.0.6", "rollup-plugin-terser": "5.3.0", "semver": "^7.1.3" }, "scripts": { "test": "npm run build -- --configTest && node test/run-tests.js", "test:compress": "npm run build -- --configTest && node test/compress.js", "test:mocha": "npm run build -- --configTest && node test/mocha.js", "lint": "eslint lib", "lint-fix": "eslint --fix lib", "build": "rimraf dist/* && rollup --config --silent", "prepare": "npm run build", "postversion": "echo 'Remember to update the changelog!'" }, "keywords": [ "uglify", "terser", "uglify-es", "uglify-js", "minify", "minifier", "javascript", "ecmascript", "es5", "es6", "es7", "es8", "es2015", "es2016", "es2017", "async", "await" ], "eslintConfig": { "parserOptions": { "sourceType": "module" }, "env": { "es6": true }, "globals": { "describe": false, "it": false, "require": false, "global": false, "process": false }, "rules": { "brace-style": [ "error", "1tbs", { "allowSingleLine": true } ], "quotes": [ "error", "double", "avoid-escape" ], "no-debugger": "error", "no-undef": "error", "no-unused-vars": [ "error", { "varsIgnorePattern": "^_$" } ], "no-tabs": "error", "semi": [ "error", "always" ], "no-extra-semi": "error", "no-irregular-whitespace": "error", "space-before-blocks": [ "error", "always" ] } }, "pre-commit": [ "lint-fix", "test" ] } node_modules/commander/index.js000066600000124146150425117220012646 0ustar00/** * Module dependencies. */ var EventEmitter = require('events').EventEmitter; var spawn = require('child_process').spawn; var path = require('path'); var dirname = path.dirname; var basename = path.basename; var fs = require('fs'); /** * Inherit `Command` from `EventEmitter.prototype`. */ require('util').inherits(Command, EventEmitter); /** * Expose the root command. */ exports = module.exports = new Command(); /** * Expose `Command`. */ exports.Command = Command; /** * Expose `Option`. */ exports.Option = Option; /** * Initialize a new `Option` with the given `flags` and `description`. * * @param {String} flags * @param {String} description * @api public */ function Option(flags, description) { this.flags = flags; this.required = flags.indexOf('<') >= 0; // A value must be supplied when the option is specified. this.optional = flags.indexOf('[') >= 0; // A value is optional when the option is specified. this.mandatory = false; // The option must have a value after parsing, which usually means it must be specified on command line. this.negate = flags.indexOf('-no-') !== -1; flags = flags.split(/[ ,|]+/); if (flags.length > 1 && !/^[[<]/.test(flags[1])) this.short = flags.shift(); this.long = flags.shift(); this.description = description || ''; } /** * Return option name. * * @return {String} * @api private */ Option.prototype.name = function() { return this.long.replace(/^--/, ''); }; /** * Return option name, in a camelcase format that can be used * as a object attribute key. * * @return {String} * @api private */ Option.prototype.attributeName = function() { return camelcase(this.name().replace(/^no-/, '')); }; /** * Check if `arg` matches the short or long flag. * * @param {String} arg * @return {Boolean} * @api private */ Option.prototype.is = function(arg) { return this.short === arg || this.long === arg; }; /** * CommanderError class * @class */ class CommanderError extends Error { /** * Constructs the CommanderError class * @param {Number} exitCode suggested exit code which could be used with process.exit * @param {String} code an id string representing the error * @param {String} message human-readable description of the error * @constructor */ constructor(exitCode, code, message) { super(message); // properly capture stack trace in Node.js Error.captureStackTrace(this, this.constructor); this.name = this.constructor.name; this.code = code; this.exitCode = exitCode; } } exports.CommanderError = CommanderError; /** * Initialize a new `Command`. * * @param {String} [name] * @api public */ function Command(name) { this.commands = []; this.options = []; this._execs = new Set(); this._allowUnknownOption = false; this._args = []; this._name = name || ''; this._optionValues = {}; this._storeOptionsAsProperties = true; // backwards compatible by default this._passCommandToAction = true; // backwards compatible by default this._actionResults = []; this._helpFlags = '-h, --help'; this._helpDescription = 'output usage information'; this._helpShortFlag = '-h'; this._helpLongFlag = '--help'; } /** * Define a command. * * There are two styles of command: pay attention to where to put the description. * * Examples: * * // Command implemented using action handler (description is supplied separately to `.command`) * program * .command('clone [destination]') * .description('clone a repository into a newly created directory') * .action((source, destination) => { * console.log('clone command called'); * }); * * // Command implemented using separate executable file (description is second parameter to `.command`) * program * .command('start ', 'start named service') * .command('stop [service]', 'stop named service, or all if no name supplied'); * * @param {string} nameAndArgs - command name and arguments, args are `` or `[optional]` and last may also be `variadic...` * @param {Object|string} [actionOptsOrExecDesc] - configuration options (for action), or description (for executable) * @param {Object} [execOpts] - configuration options (for executable) * @return {Command} returns new command for action handler, or top-level command for executable command * @api public */ Command.prototype.command = function(nameAndArgs, actionOptsOrExecDesc, execOpts) { var desc = actionOptsOrExecDesc; var opts = execOpts; if (typeof desc === 'object' && desc !== null) { opts = desc; desc = null; } opts = opts || {}; var args = nameAndArgs.split(/ +/); var cmd = new Command(args.shift()); if (desc) { cmd.description(desc); this.executables = true; this._execs.add(cmd._name); if (opts.isDefault) this.defaultExecutable = cmd._name; } cmd._noHelp = !!opts.noHelp; cmd._helpFlags = this._helpFlags; cmd._helpDescription = this._helpDescription; cmd._helpShortFlag = this._helpShortFlag; cmd._helpLongFlag = this._helpLongFlag; cmd._exitCallback = this._exitCallback; cmd._storeOptionsAsProperties = this._storeOptionsAsProperties; cmd._passCommandToAction = this._passCommandToAction; cmd._executableFile = opts.executableFile; // Custom name for executable file this.commands.push(cmd); cmd.parseExpectedArgs(args); cmd.parent = this; if (desc) return this; return cmd; }; /** * Define argument syntax for the top-level command. * * @api public */ Command.prototype.arguments = function(desc) { return this.parseExpectedArgs(desc.split(/ +/)); }; /** * Add an implicit `help [cmd]` subcommand * which invokes `--help` for the given command. * * @api private */ Command.prototype.addImplicitHelpCommand = function() { this.command('help [cmd]', 'display help for [cmd]'); }; /** * Parse expected `args`. * * For example `["[type]"]` becomes `[{ required: false, name: 'type' }]`. * * @param {Array} args * @return {Command} for chaining * @api public */ Command.prototype.parseExpectedArgs = function(args) { if (!args.length) return; var self = this; args.forEach(function(arg) { var argDetails = { required: false, name: '', variadic: false }; switch (arg[0]) { case '<': argDetails.required = true; argDetails.name = arg.slice(1, -1); break; case '[': argDetails.name = arg.slice(1, -1); break; } if (argDetails.name.length > 3 && argDetails.name.slice(-3) === '...') { argDetails.variadic = true; argDetails.name = argDetails.name.slice(0, -3); } if (argDetails.name) { self._args.push(argDetails); } }); return this; }; /** * Register callback to use as replacement for calling process.exit. * * @param {Function} [fn] optional callback which will be passed a CommanderError, defaults to throwing * @return {Command} for chaining * @api public */ Command.prototype.exitOverride = function(fn) { if (fn) { this._exitCallback = fn; } else { this._exitCallback = function(err) { if (err.code !== 'commander.executeSubCommandAsync') { throw err; } else { // Async callback from spawn events, not useful to throw. } }; } return this; }; /** * Call process.exit, and _exitCallback if defined. * * @param {Number} exitCode exit code for using with process.exit * @param {String} code an id string representing the error * @param {String} message human-readable description of the error * @return never * @api private */ Command.prototype._exit = function(exitCode, code, message) { if (this._exitCallback) { this._exitCallback(new CommanderError(exitCode, code, message)); // Expecting this line is not reached. } process.exit(exitCode); }; /** * Register callback `fn` for the command. * * Examples: * * program * .command('help') * .description('display verbose help') * .action(function() { * // output help here * }); * * @param {Function} fn * @return {Command} for chaining * @api public */ Command.prototype.action = function(fn) { var self = this; var listener = function(args, unknown) { // Parse any so-far unknown options args = args || []; unknown = unknown || []; var parsed = self.parseOptions(unknown); // Output help if necessary outputHelpIfRequested(self, parsed.unknown); self._checkForMissingMandatoryOptions(); // If there are still any unknown options, then we simply // die, unless someone asked for help, in which case we give it // to them, and then we die. if (parsed.unknown.length > 0) { self.unknownOption(parsed.unknown[0]); } // Leftover arguments need to be pushed back. Fixes issue #56 if (parsed.args.length) args = parsed.args.concat(args); self._args.forEach(function(arg, i) { if (arg.required && args[i] == null) { self.missingArgument(arg.name); } else if (arg.variadic) { if (i !== self._args.length - 1) { self.variadicArgNotLast(arg.name); } args[i] = args.splice(i); } }); // The .action callback takes an extra parameter which is the command itself. var expectedArgsCount = self._args.length; var actionArgs = args.slice(0, expectedArgsCount); if (self._passCommandToAction) { actionArgs[expectedArgsCount] = self; } else { actionArgs[expectedArgsCount] = self.opts(); } // Add the extra arguments so available too. if (args.length > expectedArgsCount) { actionArgs.push(args.slice(expectedArgsCount)); } const actionResult = fn.apply(self, actionArgs); // Remember result in case it is async. Assume parseAsync getting called on root. let rootCommand = self; while (rootCommand.parent) { rootCommand = rootCommand.parent; } rootCommand._actionResults.push(actionResult); }; var parent = this.parent || this; var name = parent === this ? '*' : this._name; parent.on('command:' + name, listener); if (this._alias) parent.on('command:' + this._alias, listener); return this; }; /** * Internal implementation shared by .option() and .requiredOption() * * @param {Object} config * @param {String} flags * @param {String} description * @param {Function|*} [fn] - custom option processing function or default vaue * @param {*} [defaultValue] * @return {Command} for chaining * @api private */ Command.prototype._optionEx = function(config, flags, description, fn, defaultValue) { var self = this, option = new Option(flags, description), oname = option.name(), name = option.attributeName(); option.mandatory = !!config.mandatory; // default as 3rd arg if (typeof fn !== 'function') { if (fn instanceof RegExp) { // This is a bit simplistic (especially no error messages), and probably better handled by caller using custom option processing. // No longer documented in README, but still present for backwards compatibility. var regex = fn; fn = function(val, def) { var m = regex.exec(val); return m ? m[0] : def; }; } else { defaultValue = fn; fn = null; } } // preassign default value for --no-*, [optional], , or plain flag if boolean value if (option.negate || option.optional || option.required || typeof defaultValue === 'boolean') { // when --no-foo we make sure default is true, unless a --foo option is already defined if (option.negate) { const positiveLongFlag = option.long.replace(/^--no-/, '--'); defaultValue = self.optionFor(positiveLongFlag) ? self._getOptionValue(name) : true; } // preassign only if we have a default if (defaultValue !== undefined) { self._setOptionValue(name, defaultValue); option.defaultValue = defaultValue; } } // register the option this.options.push(option); // when it's passed assign the value // and conditionally invoke the callback this.on('option:' + oname, function(val) { // coercion if (val !== null && fn) { val = fn(val, self._getOptionValue(name) === undefined ? defaultValue : self._getOptionValue(name)); } // unassigned or boolean value if (typeof self._getOptionValue(name) === 'boolean' || typeof self._getOptionValue(name) === 'undefined') { // if no value, negate false, and we have a default, then use it! if (val == null) { self._setOptionValue(name, option.negate ? false : defaultValue || true); } else { self._setOptionValue(name, val); } } else if (val !== null) { // reassign self._setOptionValue(name, option.negate ? false : val); } }); return this; }; /** * Define option with `flags`, `description` and optional * coercion `fn`. * * The `flags` string should contain both the short and long flags, * separated by comma, a pipe or space. The following are all valid * all will output this way when `--help` is used. * * "-p, --pepper" * "-p|--pepper" * "-p --pepper" * * Examples: * * // simple boolean defaulting to undefined * program.option('-p, --pepper', 'add pepper'); * * program.pepper * // => undefined * * --pepper * program.pepper * // => true * * // simple boolean defaulting to true (unless non-negated option is also defined) * program.option('-C, --no-cheese', 'remove cheese'); * * program.cheese * // => true * * --no-cheese * program.cheese * // => false * * // required argument * program.option('-C, --chdir ', 'change the working directory'); * * --chdir /tmp * program.chdir * // => "/tmp" * * // optional argument * program.option('-c, --cheese [type]', 'add cheese [marble]'); * * @param {String} flags * @param {String} description * @param {Function|*} [fn] - custom option processing function or default vaue * @param {*} [defaultValue] * @return {Command} for chaining * @api public */ Command.prototype.option = function(flags, description, fn, defaultValue) { return this._optionEx({}, flags, description, fn, defaultValue); }; /* * Add a required option which must have a value after parsing. This usually means * the option must be specified on the command line. (Otherwise the same as .option().) * * The `flags` string should contain both the short and long flags, separated by comma, a pipe or space. * * @param {String} flags * @param {String} description * @param {Function|*} [fn] - custom option processing function or default vaue * @param {*} [defaultValue] * @return {Command} for chaining * @api public */ Command.prototype.requiredOption = function(flags, description, fn, defaultValue) { return this._optionEx({ mandatory: true }, flags, description, fn, defaultValue); }; /** * Allow unknown options on the command line. * * @param {Boolean} arg if `true` or omitted, no error will be thrown * for unknown options. * @api public */ Command.prototype.allowUnknownOption = function(arg) { this._allowUnknownOption = arguments.length === 0 || arg; return this; }; /** * Whether to store option values as properties on command object, * or store separately (specify false). In both cases the option values can be accessed using .opts(). * * @param {boolean} value * @return {Command} Command for chaining * @api public */ Command.prototype.storeOptionsAsProperties = function(value) { this._storeOptionsAsProperties = (value === undefined) || value; if (this.options.length) { // This is for programmer, not end user. console.error('Commander usage error: call storeOptionsAsProperties before adding options'); } return this; }; /** * Whether to pass command to action handler, * or just the options (specify false). * * @param {boolean} value * @return {Command} Command for chaining * @api public */ Command.prototype.passCommandToAction = function(value) { this._passCommandToAction = (value === undefined) || value; return this; }; /** * Store option value * * @param {String} key * @param {Object} value * @api private */ Command.prototype._setOptionValue = function(key, value) { if (this._storeOptionsAsProperties) { this[key] = value; } else { this._optionValues[key] = value; } }; /** * Retrieve option value * * @param {String} key * @return {Object} value * @api private */ Command.prototype._getOptionValue = function(key) { if (this._storeOptionsAsProperties) { return this[key]; } return this._optionValues[key]; }; /** * Parse `argv`, setting options and invoking commands when defined. * * @param {Array} argv * @return {Command} for chaining * @api public */ Command.prototype.parse = function(argv) { // implicit help if (this.executables) this.addImplicitHelpCommand(); // store raw args this.rawArgs = argv; // guess name this._name = this._name || basename(argv[1], '.js'); // github-style sub-commands with no sub-command if (this.executables && argv.length < 3 && !this.defaultExecutable) { // this user needs help argv.push(this._helpLongFlag); } // process argv var normalized = this.normalize(argv.slice(2)); var parsed = this.parseOptions(normalized); var args = this.args = parsed.args; var result = this.parseArgs(this.args, parsed.unknown); if (args[0] === 'help' && args.length === 1) this.help(); // Note for future: we could return early if we found an action handler in parseArgs, as none of following code needed? // --help if (args[0] === 'help') { args[0] = args[1]; args[1] = this._helpLongFlag; } else { // If calling through to executable subcommand we could check for help flags before failing, // but a somewhat unlikely case since program options not passed to executable subcommands. // Wait for reports to see if check needed and what usage pattern is. this._checkForMissingMandatoryOptions(); } // executable sub-commands // (Debugging note for future: args[0] is not right if an action has been called) var name = result.args[0]; var subCommand = null; // Look for subcommand if (name) { subCommand = this.commands.find(function(command) { return command._name === name; }); } // Look for alias if (!subCommand && name) { subCommand = this.commands.find(function(command) { return command.alias() === name; }); if (subCommand) { name = subCommand._name; args[0] = name; } } // Look for default subcommand if (!subCommand && this.defaultExecutable) { name = this.defaultExecutable; args.unshift(name); subCommand = this.commands.find(function(command) { return command._name === name; }); } if (this._execs.has(name)) { return this.executeSubCommand(argv, args, parsed.unknown, subCommand ? subCommand._executableFile : undefined); } return result; }; /** * Parse `argv`, setting options and invoking commands when defined. * * Use parseAsync instead of parse if any of your action handlers are async. Returns a Promise. * * @param {Array} argv * @return {Promise} * @api public */ Command.prototype.parseAsync = function(argv) { this.parse(argv); return Promise.all(this._actionResults); }; /** * Execute a sub-command executable. * * @param {Array} argv * @param {Array} args * @param {Array} unknown * @param {String} executableFile * @api private */ Command.prototype.executeSubCommand = function(argv, args, unknown, executableFile) { args = args.concat(unknown); if (!args.length) this.help(); var isExplicitJS = false; // Whether to use node to launch "executable" // executable var pm = argv[1]; // name of the subcommand, like `pm-install` var bin = basename(pm, path.extname(pm)) + '-' + args[0]; if (executableFile != null) { bin = executableFile; // Check for same extensions as we scan for below so get consistent launch behaviour. var executableExt = path.extname(executableFile); isExplicitJS = executableExt === '.js' || executableExt === '.ts' || executableExt === '.mjs'; } // In case of globally installed, get the base dir where executable // subcommand file should be located at var baseDir; var resolvedLink = fs.realpathSync(pm); baseDir = dirname(resolvedLink); // prefer local `./` to bin in the $PATH var localBin = path.join(baseDir, bin); // whether bin file is a js script with explicit `.js` or `.ts` extension if (exists(localBin + '.js')) { bin = localBin + '.js'; isExplicitJS = true; } else if (exists(localBin + '.ts')) { bin = localBin + '.ts'; isExplicitJS = true; } else if (exists(localBin + '.mjs')) { bin = localBin + '.mjs'; isExplicitJS = true; } else if (exists(localBin)) { bin = localBin; } args = args.slice(1); var proc; if (process.platform !== 'win32') { if (isExplicitJS) { args.unshift(bin); // add executable arguments to spawn args = incrementNodeInspectorPort(process.execArgv).concat(args); proc = spawn(process.argv[0], args, { stdio: 'inherit' }); } else { proc = spawn(bin, args, { stdio: 'inherit' }); } } else { args.unshift(bin); // add executable arguments to spawn args = incrementNodeInspectorPort(process.execArgv).concat(args); proc = spawn(process.execPath, args, { stdio: 'inherit' }); } var signals = ['SIGUSR1', 'SIGUSR2', 'SIGTERM', 'SIGINT', 'SIGHUP']; signals.forEach(function(signal) { process.on(signal, function() { if (proc.killed === false && proc.exitCode === null) { proc.kill(signal); } }); }); // By default terminate process when spawned process terminates. // Suppressing the exit if exitCallback defined is a bit messy and of limited use, but does allow process to stay running! const exitCallback = this._exitCallback; if (!exitCallback) { proc.on('close', process.exit.bind(process)); } else { proc.on('close', () => { exitCallback(new CommanderError(process.exitCode || 0, 'commander.executeSubCommandAsync', '(close)')); }); } proc.on('error', function(err) { if (err.code === 'ENOENT') { console.error('error: %s(1) does not exist, try --help', bin); } else if (err.code === 'EACCES') { console.error('error: %s(1) not executable. try chmod or run with root', bin); } if (!exitCallback) { process.exit(1); } else { const wrappedError = new CommanderError(1, 'commander.executeSubCommandAsync', '(error)'); wrappedError.nestedError = err; exitCallback(wrappedError); } }); // Store the reference to the child process this.runningCommand = proc; }; /** * Normalize `args`, splitting joined short flags. For example * the arg "-abc" is equivalent to "-a -b -c". * This also normalizes equal sign and splits "--abc=def" into "--abc def". * * @param {Array} args * @return {Array} * @api private */ Command.prototype.normalize = function(args) { var ret = [], arg, lastOpt, index, short, opt; for (var i = 0, len = args.length; i < len; ++i) { arg = args[i]; if (i > 0) { lastOpt = this.optionFor(args[i - 1]); } if (arg === '--') { // Honor option terminator ret = ret.concat(args.slice(i)); break; } else if (lastOpt && lastOpt.required) { ret.push(arg); } else if (arg.length > 2 && arg[0] === '-' && arg[1] !== '-') { short = arg.slice(0, 2); opt = this.optionFor(short); if (opt && (opt.required || opt.optional)) { ret.push(short); ret.push(arg.slice(2)); } else { arg.slice(1).split('').forEach(function(c) { ret.push('-' + c); }); } } else if (/^--/.test(arg) && ~(index = arg.indexOf('='))) { ret.push(arg.slice(0, index), arg.slice(index + 1)); } else { ret.push(arg); } } return ret; }; /** * Parse command `args`. * * When listener(s) are available those * callbacks are invoked, otherwise the "*" * event is emitted and those actions are invoked. * * @param {Array} args * @return {Command} for chaining * @api private */ Command.prototype.parseArgs = function(args, unknown) { var name; if (args.length) { name = args[0]; if (this.listeners('command:' + name).length) { this.emit('command:' + args.shift(), args, unknown); } else { this.emit('command:*', args, unknown); } } else { outputHelpIfRequested(this, unknown); // If there were no args and we have unknown options, // then they are extraneous and we need to error. if (unknown.length > 0 && !this.defaultExecutable) { this.unknownOption(unknown[0]); } if (this.commands.length === 0 && this._args.filter(function(a) { return a.required; }).length === 0) { this.emit('command:*'); } } return this; }; /** * Return an option matching `arg` if any. * * @param {String} arg * @return {Option} * @api private */ Command.prototype.optionFor = function(arg) { for (var i = 0, len = this.options.length; i < len; ++i) { if (this.options[i].is(arg)) { return this.options[i]; } } }; /** * Display an error message if a mandatory option does not have a value. * * @api private */ Command.prototype._checkForMissingMandatoryOptions = function() { // Walk up hierarchy so can call from action handler after checking for displaying help. for (var cmd = this; cmd; cmd = cmd.parent) { cmd.options.forEach((anOption) => { if (anOption.mandatory && (cmd._getOptionValue(anOption.attributeName()) === undefined)) { cmd.missingMandatoryOptionValue(anOption); } }); } }; /** * Parse options from `argv` returning `argv` * void of these options. * * @param {Array} argv * @return {{args: Array, unknown: Array}} * @api public */ Command.prototype.parseOptions = function(argv) { var args = [], len = argv.length, literal, option, arg; var unknownOptions = []; // parse options for (var i = 0; i < len; ++i) { arg = argv[i]; // literal args after -- if (literal) { args.push(arg); continue; } if (arg === '--') { literal = true; continue; } // find matching Option option = this.optionFor(arg); // option is defined if (option) { // requires arg if (option.required) { arg = argv[++i]; if (arg == null) return this.optionMissingArgument(option); this.emit('option:' + option.name(), arg); // optional arg } else if (option.optional) { arg = argv[i + 1]; if (arg == null || (arg[0] === '-' && arg !== '-')) { arg = null; } else { ++i; } this.emit('option:' + option.name(), arg); // flag } else { this.emit('option:' + option.name()); } continue; } // looks like an option if (arg.length > 1 && arg[0] === '-') { unknownOptions.push(arg); // If the next argument looks like it might be // an argument for this option, we pass it on. // If it isn't, then it'll simply be ignored if ((i + 1) < argv.length && (argv[i + 1][0] !== '-' || argv[i + 1] === '-')) { unknownOptions.push(argv[++i]); } continue; } // arg args.push(arg); } return { args: args, unknown: unknownOptions }; }; /** * Return an object containing options as key-value pairs * * @return {Object} * @api public */ Command.prototype.opts = function() { if (this._storeOptionsAsProperties) { // Preserve original behaviour so backwards compatible when still using properties var result = {}, len = this.options.length; for (var i = 0; i < len; i++) { var key = this.options[i].attributeName(); result[key] = key === this._versionOptionName ? this._version : this[key]; } return result; } return this._optionValues; }; /** * Argument `name` is missing. * * @param {String} name * @api private */ Command.prototype.missingArgument = function(name) { const message = `error: missing required argument '${name}'`; console.error(message); this._exit(1, 'commander.missingArgument', message); }; /** * `Option` is missing an argument, but received `flag` or nothing. * * @param {Option} option * @param {String} [flag] * @api private */ Command.prototype.optionMissingArgument = function(option, flag) { let message; if (flag) { message = `error: option '${option.flags}' argument missing, got '${flag}'`; } else { message = `error: option '${option.flags}' argument missing`; } console.error(message); this._exit(1, 'commander.optionMissingArgument', message); }; /** * `Option` does not have a value, and is a mandatory option. * * @param {Option} option * @api private */ Command.prototype.missingMandatoryOptionValue = function(option) { const message = `error: required option '${option.flags}' not specified`; console.error(message); this._exit(1, 'commander.missingMandatoryOptionValue', message); }; /** * Unknown option `flag`. * * @param {String} flag * @api private */ Command.prototype.unknownOption = function(flag) { if (this._allowUnknownOption) return; const message = `error: unknown option '${flag}'`; console.error(message); this._exit(1, 'commander.unknownOption', message); }; /** * Variadic argument with `name` is not the last argument as required. * * @param {String} name * @api private */ Command.prototype.variadicArgNotLast = function(name) { const message = `error: variadic arguments must be last '${name}'`; console.error(message); this._exit(1, 'commander.variadicArgNotLast', message); }; /** * Set the program version to `str`. * * This method auto-registers the "-V, --version" flag * which will print the version number when passed. * * You can optionally supply the flags and description to override the defaults. * * @param {String} str * @param {String} [flags] * @param {String} [description] * @return {Command} for chaining * @api public */ Command.prototype.version = function(str, flags, description) { if (arguments.length === 0) return this._version; this._version = str; flags = flags || '-V, --version'; description = description || 'output the version number'; var versionOption = new Option(flags, description); this._versionOptionName = versionOption.long.substr(2) || 'version'; this.options.push(versionOption); var self = this; this.on('option:' + this._versionOptionName, function() { process.stdout.write(str + '\n'); self._exit(0, 'commander.version', str); }); return this; }; /** * Set the description to `str`. * * @param {String} str * @param {Object} [argsDescription] * @return {String|Command} * @api public */ Command.prototype.description = function(str, argsDescription) { if (arguments.length === 0) return this._description; this._description = str; this._argsDescription = argsDescription; return this; }; /** * Set an alias for the command * * @param {String} alias * @return {String|Command} * @api public */ Command.prototype.alias = function(alias) { var command = this; if (this.commands.length !== 0) { command = this.commands[this.commands.length - 1]; } if (arguments.length === 0) return command._alias; if (alias === command._name) throw new Error('Command alias can\'t be the same as its name'); command._alias = alias; return this; }; /** * Set / get the command usage `str`. * * @param {String} [str] * @return {String|Command} * @api public */ Command.prototype.usage = function(str) { var args = this._args.map(function(arg) { return humanReadableArgName(arg); }); var usage = '[options]' + (this.commands.length ? ' [command]' : '') + (this._args.length ? ' ' + args.join(' ') : ''); if (arguments.length === 0) return this._usage || usage; this._usage = str; return this; }; /** * Get or set the name of the command * * @param {String} [str] * @return {String|Command} * @api public */ Command.prototype.name = function(str) { if (arguments.length === 0) return this._name; this._name = str; return this; }; /** * Return prepared commands. * * @return {Array} * @api private */ Command.prototype.prepareCommands = function() { return this.commands.filter(function(cmd) { return !cmd._noHelp; }).map(function(cmd) { var args = cmd._args.map(function(arg) { return humanReadableArgName(arg); }).join(' '); return [ cmd._name + (cmd._alias ? '|' + cmd._alias : '') + (cmd.options.length ? ' [options]' : '') + (args ? ' ' + args : ''), cmd._description ]; }); }; /** * Return the largest command length. * * @return {Number} * @api private */ Command.prototype.largestCommandLength = function() { var commands = this.prepareCommands(); return commands.reduce(function(max, command) { return Math.max(max, command[0].length); }, 0); }; /** * Return the largest option length. * * @return {Number} * @api private */ Command.prototype.largestOptionLength = function() { var options = [].slice.call(this.options); options.push({ flags: this._helpFlags }); return options.reduce(function(max, option) { return Math.max(max, option.flags.length); }, 0); }; /** * Return the largest arg length. * * @return {Number} * @api private */ Command.prototype.largestArgLength = function() { return this._args.reduce(function(max, arg) { return Math.max(max, arg.name.length); }, 0); }; /** * Return the pad width. * * @return {Number} * @api private */ Command.prototype.padWidth = function() { var width = this.largestOptionLength(); if (this._argsDescription && this._args.length) { if (this.largestArgLength() > width) { width = this.largestArgLength(); } } if (this.commands && this.commands.length) { if (this.largestCommandLength() > width) { width = this.largestCommandLength(); } } return width; }; /** * Return help for options. * * @return {String} * @api private */ Command.prototype.optionHelp = function() { var width = this.padWidth(); var columns = process.stdout.columns || 80; var descriptionWidth = columns - width - 4; // Append the help information return this.options.map(function(option) { const fullDesc = option.description + ((!option.negate && option.defaultValue !== undefined) ? ' (default: ' + JSON.stringify(option.defaultValue) + ')' : ''); return pad(option.flags, width) + ' ' + optionalWrap(fullDesc, descriptionWidth, width + 2); }).concat([pad(this._helpFlags, width) + ' ' + optionalWrap(this._helpDescription, descriptionWidth, width + 2)]) .join('\n'); }; /** * Return command help documentation. * * @return {String} * @api private */ Command.prototype.commandHelp = function() { if (!this.commands.length) return ''; var commands = this.prepareCommands(); var width = this.padWidth(); var columns = process.stdout.columns || 80; var descriptionWidth = columns - width - 4; return [ 'Commands:', commands.map(function(cmd) { var desc = cmd[1] ? ' ' + cmd[1] : ''; return (desc ? pad(cmd[0], width) : cmd[0]) + optionalWrap(desc, descriptionWidth, width + 2); }).join('\n').replace(/^/gm, ' '), '' ].join('\n'); }; /** * Return program help documentation. * * @return {String} * @api private */ Command.prototype.helpInformation = function() { var desc = []; if (this._description) { desc = [ this._description, '' ]; var argsDescription = this._argsDescription; if (argsDescription && this._args.length) { var width = this.padWidth(); var columns = process.stdout.columns || 80; var descriptionWidth = columns - width - 5; desc.push('Arguments:'); desc.push(''); this._args.forEach(function(arg) { desc.push(' ' + pad(arg.name, width) + ' ' + wrap(argsDescription[arg.name], descriptionWidth, width + 4)); }); desc.push(''); } } var cmdName = this._name; if (this._alias) { cmdName = cmdName + '|' + this._alias; } var parentCmdNames = ''; for (var parentCmd = this.parent; parentCmd; parentCmd = parentCmd.parent) { parentCmdNames = parentCmd.name() + ' ' + parentCmdNames; } var usage = [ 'Usage: ' + parentCmdNames + cmdName + ' ' + this.usage(), '' ]; var cmds = []; var commandHelp = this.commandHelp(); if (commandHelp) cmds = [commandHelp]; var options = [ 'Options:', '' + this.optionHelp().replace(/^/gm, ' '), '' ]; return usage .concat(desc) .concat(options) .concat(cmds) .join('\n'); }; /** * Output help information for this command. * * When listener(s) are available for the helpLongFlag * those callbacks are invoked. * * @api public */ Command.prototype.outputHelp = function(cb) { if (!cb) { cb = function(passthru) { return passthru; }; } const cbOutput = cb(this.helpInformation()); if (typeof cbOutput !== 'string' && !Buffer.isBuffer(cbOutput)) { throw new Error('outputHelp callback must return a string or a Buffer'); } process.stdout.write(cbOutput); this.emit(this._helpLongFlag); }; /** * You can pass in flags and a description to override the help * flags and help description for your command. * * @param {String} [flags] * @param {String} [description] * @return {Command} * @api public */ Command.prototype.helpOption = function(flags, description) { this._helpFlags = flags || this._helpFlags; this._helpDescription = description || this._helpDescription; var splitFlags = this._helpFlags.split(/[ ,|]+/); if (splitFlags.length > 1) this._helpShortFlag = splitFlags.shift(); this._helpLongFlag = splitFlags.shift(); return this; }; /** * Output help information and exit. * * @param {Function} [cb] * @api public */ Command.prototype.help = function(cb) { this.outputHelp(cb); // exitCode: preserving original behaviour which was calling process.exit() // message: do not have all displayed text available so only passing placeholder. this._exit(process.exitCode || 0, 'commander.help', '(outputHelp)'); }; /** * Camel-case the given `flag` * * @param {String} flag * @return {String} * @api private */ function camelcase(flag) { return flag.split('-').reduce(function(str, word) { return str + word[0].toUpperCase() + word.slice(1); }); } /** * Pad `str` to `width`. * * @param {String} str * @param {Number} width * @return {String} * @api private */ function pad(str, width) { var len = Math.max(0, width - str.length); return str + Array(len + 1).join(' '); } /** * Wraps the given string with line breaks at the specified width while breaking * words and indenting every but the first line on the left. * * @param {String} str * @param {Number} width * @param {Number} indent * @return {String} * @api private */ function wrap(str, width, indent) { var regex = new RegExp('.{1,' + (width - 1) + '}([\\s\u200B]|$)|[^\\s\u200B]+?([\\s\u200B]|$)', 'g'); var lines = str.match(regex) || []; return lines.map(function(line, i) { if (line.slice(-1) === '\n') { line = line.slice(0, line.length - 1); } return ((i > 0 && indent) ? Array(indent + 1).join(' ') : '') + line.trimRight(); }).join('\n'); } /** * Optionally wrap the given str to a max width of width characters per line * while indenting with indent spaces. Do not wrap if insufficient width or * string is manually formatted. * * @param {String} str * @param {Number} width * @param {Number} indent * @return {String} * @api private */ function optionalWrap(str, width, indent) { // Detect manually wrapped and indented strings by searching for line breaks // followed by multiple spaces/tabs. if (str.match(/[\n]\s+/)) return str; // Do not wrap to narrow columns (or can end up with a word per line). const minWidth = 40; if (width < minWidth) return str; return wrap(str, width, indent); } /** * Output help information if help flags specified * * @param {Command} cmd - command to output help for * @param {Array} options - array of options to search for -h or --help * @api private */ function outputHelpIfRequested(cmd, options) { options = options || []; for (var i = 0; i < options.length; i++) { if (options[i] === cmd._helpLongFlag || options[i] === cmd._helpShortFlag) { cmd.outputHelp(); // (Do not have all displayed text available so only passing placeholder.) cmd._exit(0, 'commander.helpDisplayed', '(outputHelp)'); } } } /** * Takes an argument and returns its human readable equivalent for help usage. * * @param {Object} arg * @return {String} * @api private */ function humanReadableArgName(arg) { var nameOutput = arg.name + (arg.variadic === true ? '...' : ''); return arg.required ? '<' + nameOutput + '>' : '[' + nameOutput + ']'; } // for versions before node v0.8 when there weren't `fs.existsSync` function exists(file) { try { if (fs.statSync(file).isFile()) { return true; } } catch (e) { return false; } } /** * Scan arguments and increment port number for inspect calls (to avoid conflicts when spawning new command). * * @param {string[]} args - array of arguments from node.execArgv * @returns {string[]} * @api private */ function incrementNodeInspectorPort(args) { // Testing for these options: // --inspect[=[host:]port] // --inspect-brk[=[host:]port] // --inspect-port=[host:]port return args.map((arg) => { var result = arg; if (arg.indexOf('--inspect') === 0) { var debugOption; var debugHost = '127.0.0.1'; var debugPort = '9229'; var match; if ((match = arg.match(/^(--inspect(-brk)?)$/)) !== null) { // e.g. --inspect debugOption = match[1]; } else if ((match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+)$/)) !== null) { debugOption = match[1]; if (/^\d+$/.test(match[3])) { // e.g. --inspect=1234 debugPort = match[3]; } else { // e.g. --inspect=localhost debugHost = match[3]; } } else if ((match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/)) !== null) { // e.g. --inspect=localhost:1234 debugOption = match[1]; debugHost = match[3]; debugPort = match[4]; } if (debugOption && debugPort !== '0') { result = `${debugOption}=${debugHost}:${parseInt(debugPort) + 1}`; } } return result; }); } node_modules/commander/typings/index.d.ts000066600000022204150425117220014567 0ustar00// Type definitions for commander // Original definitions by: Alan Agius , Marcelo Dezem , vvakame , Jules Randolph /// declare namespace commander { interface CommanderError extends Error { code: string; exitCode: number; message: string; nestedError?: string; } type CommanderErrorConstructor = { new (exitCode: number, code: string, message: string): CommanderError }; interface Option { flags: string; required: boolean; // A value must be supplied when the option is specified. optional: boolean; // A value is optional when the option is specified. mandatory: boolean; // The option must have a value after parsing, which usually means it must be specified on command line. bool: boolean; short?: string; long: string; description: string; } type OptionConstructor = { new (flags: string, description?: string): Option }; interface Command extends NodeJS.EventEmitter { [key: string]: any; // options as properties args: string[]; /** * Set the program version to `str`. * * This method auto-registers the "-V, --version" flag * which will print the version number when passed. * * You can optionally supply the flags and description to override the defaults. */ version(str: string, flags?: string, description?: string): Command; /** * Define a command, implemented using an action handler. * * @remarks * The command description is supplied using `.description`, not as a parameter to `.command`. * * @example * ```ts * program * .command('clone [destination]') * .description('clone a repository into a newly created directory') * .action((source, destination) => { * console.log('clone command called'); * }); * ``` * * @param nameAndArgs - command name and arguments, args are `` or `[optional]` and last may also be `variadic...` * @param opts - configuration options * @returns new command */ command(nameAndArgs: string, opts?: CommandOptions): Command; /** * Define a command, implemented in a separate executable file. * * @remarks * The command description is supplied as the second parameter to `.command`. * * @example * ```ts * program * .command('start ', 'start named service') * .command('stop [service]', 'stop named serice, or all if no name supplied'); * ``` * * @param nameAndArgs - command name and arguments, args are `` or `[optional]` and last may also be `variadic...` * @param description - description of executable command * @param opts - configuration options * @returns top level command for chaining more command definitions */ command(nameAndArgs: string, description: string, opts?: commander.CommandOptions): Command; /** * Define argument syntax for the top-level command. * * @returns Command for chaining */ arguments(desc: string): Command; /** * Parse expected `args`. * * For example `["[type]"]` becomes `[{ required: false, name: 'type' }]`. * * @returns Command for chaining */ parseExpectedArgs(args: string[]): Command; /** * Register callback to use as replacement for calling process.exit. */ exitOverride(callback?: (err: CommanderError) => never|void): Command; /** * Register callback `fn` for the command. * * @example * program * .command('help') * .description('display verbose help') * .action(function() { * // output help here * }); * * @returns Command for chaining */ action(fn: (...args: any[]) => void | Promise): Command; /** * Define option with `flags`, `description` and optional * coercion `fn`. * * The `flags` string should contain both the short and long flags, * separated by comma, a pipe or space. The following are all valid * all will output this way when `--help` is used. * * "-p, --pepper" * "-p|--pepper" * "-p --pepper" * * @example * // simple boolean defaulting to false * program.option('-p, --pepper', 'add pepper'); * * --pepper * program.pepper * // => Boolean * * // simple boolean defaulting to true * program.option('-C, --no-cheese', 'remove cheese'); * * program.cheese * // => true * * --no-cheese * program.cheese * // => false * * // required argument * program.option('-C, --chdir ', 'change the working directory'); * * --chdir /tmp * program.chdir * // => "/tmp" * * // optional argument * program.option('-c, --cheese [type]', 'add cheese [marble]'); * * @returns Command for chaining */ option(flags: string, description?: string, fn?: ((arg1: any, arg2: any) => void) | RegExp, defaultValue?: any): Command; option(flags: string, description?: string, defaultValue?: any): Command; /** * Define a required option, which must have a value after parsing. This usually means * the option must be specified on the command line. (Otherwise the same as .option().) * * The `flags` string should contain both the short and long flags, separated by comma, a pipe or space. */ requiredOption(flags: string, description?: string, fn?: ((arg1: any, arg2: any) => void) | RegExp, defaultValue?: any): Command; requiredOption(flags: string, description?: string, defaultValue?: any): Command; /** * Whether to store option values as properties on command object, * or store separately (specify false). In both cases the option values can be accessed using .opts(). * * @return Command for chaining */ storeOptionsAsProperties(value?: boolean): Command; /** * Whether to pass command to action handler, * or just the options (specify false). * * @return Command for chaining */ passCommandToAction(value?: boolean): Command; /** * Allow unknown options on the command line. * * @param [arg] if `true` or omitted, no error will be thrown for unknown options. * @returns Command for chaining */ allowUnknownOption(arg?: boolean): Command; /** * Parse `argv`, setting options and invoking commands when defined. * * @returns Command for chaining */ parse(argv: string[]): Command; /** * Parse `argv`, setting options and invoking commands when defined. * * Use parseAsync instead of parse if any of your action handlers are async. Returns a Promise. * * @returns Promise */ parseAsync(argv: string[]): Promise; /** * Parse options from `argv` returning `argv` void of these options. */ parseOptions(argv: string[]): commander.ParseOptionsResult; /** * Return an object containing options as key-value pairs */ opts(): { [key: string]: any }; /** * Set the description. * * @returns Command for chaining */ description(str: string, argsDescription?: {[argName: string]: string}): Command; /** * Get the description. */ description(): string; /** * Set an alias for the command. * * @returns Command for chaining */ alias(alias: string): Command; /** * Get alias for the command. */ alias(): string; /** * Set the command usage. * * @returns Command for chaining */ usage(str: string): Command; /** * Get the command usage. */ usage(): string; /** * Set the name of the command. * * @returns Command for chaining */ name(str: string): Command; /** * Get the name of the command. */ name(): string; /** * Output help information for this command. * * When listener(s) are available for the helpLongFlag * those callbacks are invoked. */ outputHelp(cb?: (str: string) => string): void; /** * You can pass in flags and a description to override the help * flags and help description for your command. */ helpOption(flags?: string, description?: string): Command; /** * Output help information and exit. */ help(cb?: (str: string) => string): never; } type CommandConstructor = { new (name?: string): Command }; interface CommandOptions { noHelp?: boolean; isDefault?: boolean; executableFile?: string; } interface ParseOptionsResult { args: string[]; unknown: string[]; } interface CommanderStatic extends Command { Command: CommandConstructor; Option: OptionConstructor; CommanderError:CommanderErrorConstructor; } } declare const commander: commander.CommanderStatic; export = commander; node_modules/commander/Readme.md000066600000055662150425117220012726 0ustar00# Commander.js [![Build Status](https://api.travis-ci.org/tj/commander.js.svg?branch=master)](http://travis-ci.org/tj/commander.js) [![NPM Version](http://img.shields.io/npm/v/commander.svg?style=flat)](https://www.npmjs.org/package/commander) [![NPM Downloads](https://img.shields.io/npm/dm/commander.svg?style=flat)](https://npmcharts.com/compare/commander?minimal=true) [![Install Size](https://packagephobia.now.sh/badge?p=commander)](https://packagephobia.now.sh/result?p=commander) The complete solution for [node.js](http://nodejs.org) command-line interfaces, inspired by Ruby's [commander](https://github.com/commander-rb/commander). Read this in other languages: English | [简体中文](./Readme_zh-CN.md) - [Commander.js](#commanderjs) - [Installation](#installation) - [Declaring program variable](#declaring-program-variable) - [Options](#options) - [Common option types, boolean and value](#common-option-types-boolean-and-value) - [Default option value](#default-option-value) - [Other option types, negatable boolean and flag|value](#other-option-types-negatable-boolean-and-flagvalue) - [Custom option processing](#custom-option-processing) - [Required option](#required-option) - [Version option](#version-option) - [Commands](#commands) - [Specify the argument syntax](#specify-the-argument-syntax) - [Action handler (sub)commands](#action-handler-subcommands) - [Git-style executable (sub)commands](#git-style-executable-subcommands) - [Automated --help](#automated---help) - [Custom help](#custom-help) - [.usage and .name](#usage-and-name) - [.outputHelp(cb)](#outputhelpcb) - [.helpOption(flags, description)](#helpoptionflags-description) - [.help(cb)](#helpcb) - [Custom event listeners](#custom-event-listeners) - [Bits and pieces](#bits-and-pieces) - [Avoiding option name clashes](#avoiding-option-name-clashes) - [TypeScript](#typescript) - [Node options such as --harmony](#node-options-such-as---harmony) - [Node debugging](#node-debugging) - [Override exit handling](#override-exit-handling) - [Examples](#examples) - [License](#license) - [Support](#support) - [Commander for enterprise](#commander-for-enterprise) ## Installation ```bash npm install commander ``` ## Declaring _program_ variable Commander exports a global object which is convenient for quick programs. This is used in the examples in this README for brevity. ```js const program = require('commander'); program.version('0.0.1'); ``` For larger programs which may use commander in multiple ways, including unit testing, it is better to create a local Command object to use. ```js const commander = require('commander'); const program = new commander.Command(); program.version('0.0.1'); ``` ## Options Options are defined with the `.option()` method, also serving as documentation for the options. Each option can have a short flag (single character) and a long name, separated by a comma or space. The options can be accessed as properties on the Command object. Multi-word options such as "--template-engine" are camel-cased, becoming `program.templateEngine` etc. Multiple short flags may be combined as a single arg, for example `-abc` is equivalent to `-a -b -c`. See also optional new behaviour to [avoid name clashes](#avoiding-option-name-clashes). ### Common option types, boolean and value The two most used option types are a boolean flag, and an option which takes a value (declared using angle brackets). Both are `undefined` unless specified on command line. ```js const program = require('commander'); program .option('-d, --debug', 'output extra debugging') .option('-s, --small', 'small pizza size') .option('-p, --pizza-type ', 'flavour of pizza'); program.parse(process.argv); if (program.debug) console.log(program.opts()); console.log('pizza details:'); if (program.small) console.log('- small pizza size'); if (program.pizzaType) console.log(`- ${program.pizzaType}`); ``` ```bash $ pizza-options -d { debug: true, small: undefined, pizzaType: undefined } pizza details: $ pizza-options -p error: option '-p, --pizza-type ' argument missing $ pizza-options -ds -p vegetarian { debug: true, small: true, pizzaType: 'vegetarian' } pizza details: - small pizza size - vegetarian $ pizza-options --pizza-type=cheese pizza details: - cheese ``` `program.parse(arguments)` processes the arguments, leaving any args not consumed by the options as the `program.args` array. ### Default option value You can specify a default value for an option which takes a value. ```js const program = require('commander'); program .option('-c, --cheese ', 'add the specified type of cheese', 'blue'); program.parse(process.argv); console.log(`cheese: ${program.cheese}`); ``` ```bash $ pizza-options cheese: blue $ pizza-options --cheese stilton cheese: stilton ``` ### Other option types, negatable boolean and flag|value You can specify a boolean option long name with a leading `no-` to set the option value to false when used. Defined alone this also makes the option true by default. If you define `--foo` first, adding `--no-foo` does not change the default value from what it would otherwise be. You can specify a default boolean value for a boolean flag and it can be overridden on command line. ```js const program = require('commander'); program .option('--no-sauce', 'Remove sauce') .option('--cheese ', 'cheese flavour', 'mozzarella') .option('--no-cheese', 'plain with no cheese') .parse(process.argv); const sauceStr = program.sauce ? 'sauce' : 'no sauce'; const cheeseStr = (program.cheese === false) ? 'no cheese' : `${program.cheese} cheese`; console.log(`You ordered a pizza with ${sauceStr} and ${cheeseStr}`); ``` ```bash $ pizza-options You ordered a pizza with sauce and mozzarella cheese $ pizza-options --sauce error: unknown option '--sauce' $ pizza-options --cheese=blue You ordered a pizza with sauce and blue cheese $ pizza-options --no-sauce --no-cheese You ordered a pizza with no sauce and no cheese ``` You can specify an option which functions as a flag but may also take a value (declared using square brackets). ```js const program = require('commander'); program .option('-c, --cheese [type]', 'Add cheese with optional type'); program.parse(process.argv); if (program.cheese === undefined) console.log('no cheese'); else if (program.cheese === true) console.log('add cheese'); else console.log(`add cheese type ${program.cheese}`); ``` ```bash $ pizza-options no cheese $ pizza-options --cheese add cheese $ pizza-options --cheese mozzarella add cheese type mozzarella ``` ### Custom option processing You may specify a function to do custom processing of option values. The callback function receives two parameters, the user specified value and the previous value for the option. It returns the new value for the option. This allows you to coerce the option value to the desired type, or accumulate values, or do entirely custom processing. You can optionally specify the default/starting value for the option after the function. ```js const program = require('commander'); function myParseInt(value, dummyPrevious) { // parseInt takes a string and an optional radix return parseInt(value); } function increaseVerbosity(dummyValue, previous) { return previous + 1; } function collect(value, previous) { return previous.concat([value]); } function commaSeparatedList(value, dummyPrevious) { return value.split(','); } program .option('-f, --float ', 'float argument', parseFloat) .option('-i, --integer ', 'integer argument', myParseInt) .option('-v, --verbose', 'verbosity that can be increased', increaseVerbosity, 0) .option('-c, --collect ', 'repeatable value', collect, []) .option('-l, --list ', 'comma separated list', commaSeparatedList) ; program.parse(process.argv); if (program.float !== undefined) console.log(`float: ${program.float}`); if (program.integer !== undefined) console.log(`integer: ${program.integer}`); if (program.verbose > 0) console.log(`verbosity: ${program.verbose}`); if (program.collect.length > 0) console.log(program.collect); if (program.list !== undefined) console.log(program.list); ``` ```bash $ custom -f 1e2 float: 100 $ custom --integer 2 integer: 2 $ custom -v -v -v verbose: 3 $ custom -c a -c b -c c [ 'a', 'b', 'c' ] $ custom --list x,y,z [ 'x', 'y', 'z' ] ``` ### Required option You may specify a required (mandatory) option using `.requiredOption`. The option must be specified on the command line, or by having a default value. The method is otherwise the same as `.option` in format, taking flags and description, and optional default value or custom processing. ```js const program = require('commander'); program .requiredOption('-c, --cheese ', 'pizza must have cheese'); program.parse(process.argv); ``` ``` $ pizza error: required option '-c, --cheese ' not specified ``` ### Version option The optional `version` method adds handling for displaying the command version. The default option flags are `-V` and `--version`, and when present the command prints the version number and exits. ```js program.version('0.0.1'); ``` ```bash $ ./examples/pizza -V 0.0.1 ``` You may change the flags and description by passing additional parameters to the `version` method, using the same syntax for flags as the `option` method. The version flags can be named anything, but a long name is required. ```js program.version('0.0.1', '-v, --vers', 'output the current version'); ``` ## Commands You can specify (sub)commands for your top-level command using `.command`. There are two ways these can be implemented: using an action handler attached to the command, or as a separate executable file (described in more detail later). In the first parameter to `.command` you specify the command name and any command arguments. The arguments may be `` or `[optional]`, and the last argument may also be `variadic...`. For example: ```js // Command implemented using action handler (description is supplied separately to `.command`) // Returns new command for configuring. program .command('clone [destination]') .description('clone a repository into a newly created directory') .action((source, destination) => { console.log('clone command called'); }); // Command implemented using separate executable file (description is second parameter to `.command`) // Returns top-level command for adding more commands. program .command('start ', 'start named service') .command('stop [service]', 'stop named service, or all if no name supplied'); ``` ### Specify the argument syntax You use `.arguments` to specify the arguments for the top-level command, and for subcommands they are included in the `.command` call. Angled brackets (e.g. ``) indicate required input. Square brackets (e.g. `[optional]`) indicate optional input. ```js const program = require('commander'); program .version('0.1.0') .arguments(' [env]') .action(function (cmd, env) { cmdValue = cmd; envValue = env; }); program.parse(process.argv); if (typeof cmdValue === 'undefined') { console.error('no command given!'); process.exit(1); } console.log('command:', cmdValue); console.log('environment:', envValue || "no environment given"); ``` The last argument of a command can be variadic, and only the last argument. To make an argument variadic you append `...` to the argument name. For example: ```js const program = require('commander'); program .version('0.1.0') .command('rmdir [otherDirs...]') .action(function (dir, otherDirs) { console.log('rmdir %s', dir); if (otherDirs) { otherDirs.forEach(function (oDir) { console.log('rmdir %s', oDir); }); } }); program.parse(process.argv); ``` The variadic argument is passed to the action handler as an array. (And this also applies to `program.args`.) ### Action handler (sub)commands You can add options to a command that uses an action handler. The action handler gets passed a parameter for each argument you declared, and one additional argument which is the command object itself. This command argument has the values for the command-specific options added as properties. ```js const program = require('commander'); program .command('rm ') .option('-r, --recursive', 'Remove recursively') .action(function (dir, cmdObj) { console.log('remove ' + dir + (cmdObj.recursive ? ' recursively' : '')) }) program.parse(process.argv) ``` You may supply an `async` action handler, in which case you call `.parseAsync` rather than `.parse`. ```js async function run() { /* code goes here */ } async function main() { program .command('run') .action(run); await program.parseAsync(process.argv); } ``` A command's options on the command line are validated when the command is used. Any unknown options will be reported as an error. However, if an action-based command does not define an action, then the options are not validated. Configuration options can be passed with the call to `.command()`. Specifying `true` for `opts.noHelp` will remove the command from the generated help output. ### Git-style executable (sub)commands When `.command()` is invoked with a description argument, this tells commander that you're going to use separate executables for sub-commands, much like `git(1)` and other popular tools. Commander will search the executables in the directory of the entry script (like `./examples/pm`) with the name `program-subcommand`, like `pm-install`, `pm-search`. You can specify a custom name with the `executableFile` configuration option. You handle the options for an executable (sub)command in the executable, and don't declare them at the top-level. ```js // file: ./examples/pm const program = require('commander'); program .version('0.1.0') .command('install [name]', 'install one or more packages') .command('search [query]', 'search with optional query') .command('update', 'update installed packages', {executableFile: 'myUpdateSubCommand'}) .command('list', 'list packages installed', {isDefault: true}) .parse(process.argv); ``` Configuration options can be passed with the call to `.command()`. Specifying `true` for `opts.noHelp` will remove the command from the generated help output. Specifying `true` for `opts.isDefault` will run the subcommand if no other subcommand is specified. Specifying a name with `executableFile` will override the default constructed name. If the program is designed to be installed globally, make sure the executables have proper modes, like `755`. ## Automated --help The help information is auto-generated based on the information commander already knows about your program, so the following `--help` info is for free: ```bash $ ./examples/pizza --help Usage: pizza [options] An application for pizzas ordering Options: -V, --version output the version number -p, --peppers Add peppers -P, --pineapple Add pineapple -b, --bbq Add bbq sauce -c, --cheese Add the specified type of cheese (default: "marble") -C, --no-cheese You do not want any cheese -h, --help output usage information ``` ### Custom help You can display arbitrary `-h, --help` information by listening for "--help". Commander will automatically exit once you are done so that the remainder of your program does not execute causing undesired behaviors, for example in the following executable "stuff" will not output when `--help` is used. ```js #!/usr/bin/env node const program = require('commander'); program .version('0.1.0') .option('-f, --foo', 'enable some foo') .option('-b, --bar', 'enable some bar') .option('-B, --baz', 'enable some baz'); // must be before .parse() since // node's emit() is immediate program.on('--help', function(){ console.log('') console.log('Examples:'); console.log(' $ custom-help --help'); console.log(' $ custom-help -h'); }); program.parse(process.argv); console.log('stuff'); ``` Yields the following help output when `node script-name.js -h` or `node script-name.js --help` are run: ```Text Usage: custom-help [options] Options: -h, --help output usage information -V, --version output the version number -f, --foo enable some foo -b, --bar enable some bar -B, --baz enable some baz Examples: $ custom-help --help $ custom-help -h ``` ### .usage and .name These allow you to customise the usage description in the first line of the help. The name is otherwise deduced from the (full) program arguments. Given: ```js program .name("my-command") .usage("[global options] command") ``` The help will start with: ```Text Usage: my-command [global options] command ``` ### .outputHelp(cb) Output help information without exiting. Optional callback cb allows post-processing of help text before it is displayed. If you want to display help by default (e.g. if no command was provided), you can use something like: ```js const program = require('commander'); const colors = require('colors'); program .version('0.1.0') .command('getstream [url]', 'get stream URL') .parse(process.argv); if (!process.argv.slice(2).length) { program.outputHelp(make_red); } function make_red(txt) { return colors.red(txt); //display the help text in red on the console } ``` ### .helpOption(flags, description) Override the default help flags and description. ```js program .helpOption('-e, --HELP', 'read more information'); ``` ### .help(cb) Output help information and exit immediately. Optional callback cb allows post-processing of help text before it is displayed. ## Custom event listeners You can execute custom actions by listening to command and option events. ```js program.on('option:verbose', function () { process.env.VERBOSE = this.verbose; }); // error on unknown commands program.on('command:*', function () { console.error('Invalid command: %s\nSee --help for a list of available commands.', program.args.join(' ')); process.exit(1); }); ``` ## Bits and pieces ### Avoiding option name clashes The original and default behaviour is that the option values are stored as properties on the program, and the action handler is passed a command object with the options values stored as properties. This is very convenient to code, but the downside is possible clashes with existing properties of Command. There are two new routines to change the behaviour, and the default behaviour may change in the future: - `storeOptionsAsProperties`: whether to store option values as properties on command object, or store separately (specify false) and access using `.opts()` - `passCommandToAction`: whether to pass command to action handler, or just the options (specify false) ```js // file: ./examples/storeOptionsAsProperties.action.js program .storeOptionsAsProperties(false) .passCommandToAction(false); program .name('my-program-name') .option('-n,--name '); program .command('show') .option('-a,--action ') .action((options) => { console.log(options.action); }); program.parse(process.argv); const programOptions = program.opts(); console.log(programOptions.name); ``` ### TypeScript The Commander package includes its TypeScript Definition file, but also requires the node types which you need to install yourself. e.g. ```bash npm install commander npm install --save-dev @types/node ``` If you use `ts-node` and git-style sub-commands written as `.ts` files, you need to call your program through node to get the sub-commands called correctly. e.g. ```bash node -r ts-node/register pm.ts ``` ### Node options such as `--harmony` You can enable `--harmony` option in two ways: - Use `#! /usr/bin/env node --harmony` in the sub-commands scripts. (Note Windows does not support this pattern.) - Use the `--harmony` option when call the command, like `node --harmony examples/pm publish`. The `--harmony` option will be preserved when spawning sub-command process. ### Node debugging If you are using the node inspector for [debugging](https://nodejs.org/en/docs/guides/debugging-getting-started/) git-style executable (sub)commands using `node --inspect` et al, the inspector port is incremented by 1 for the spawned subcommand. ### Override exit handling By default Commander calls `process.exit` when it detects errors, or after displaying the help or version. You can override this behaviour and optionally supply a callback. The default override throws a `CommanderError`. The override callback is passed a `CommanderError` with properties `exitCode` number, `code` string, and `message`. The default override behaviour is to throw the error, except for async handling of executable subcommand completion which carries on. The normal display of error messages or version or help is not affected by the override which is called after the display. ``` js program.exitOverride(); try { program.parse(process.argv); } catch (err) { // custom processing... } ``` ## Examples ```js const program = require('commander'); program .version('0.1.0') .option('-C, --chdir ', 'change the working directory') .option('-c, --config ', 'set config path. defaults to ./deploy.conf') .option('-T, --no-tests', 'ignore test hook'); program .command('setup [env]') .description('run setup commands for all envs') .option("-s, --setup_mode [mode]", "Which setup mode to use") .action(function(env, options){ const mode = options.setup_mode || "normal"; env = env || 'all'; console.log('setup for %s env(s) with %s mode', env, mode); }); program .command('exec ') .alias('ex') .description('execute the given remote cmd') .option("-e, --exec_mode ", "Which exec mode to use") .action(function(cmd, options){ console.log('exec "%s" using %s mode', cmd, options.exec_mode); }).on('--help', function() { console.log(''); console.log('Examples:'); console.log(''); console.log(' $ deploy exec sequential'); console.log(' $ deploy exec async'); }); program .command('*') .action(function(env){ console.log('deploying "%s"', env); }); program.parse(process.argv); ``` More Demos can be found in the [examples](https://github.com/tj/commander.js/tree/master/examples) directory. ## License [MIT](https://github.com/tj/commander.js/blob/master/LICENSE) ## Support Commander 4.x is supported on Node 8 and above, and is likely to work with Node 6 but not tested. (For versions of Node below Node 6, use Commander 3.x or 2.x.) The main forum for free and community support is the project [Issues](https://github.com/tj/commander.js/issues) on GitHub. ### Commander for enterprise Available as part of the Tidelift Subscription The maintainers of Commander and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-commander?utm_source=npm-commander&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) node_modules/commander/CHANGELOG.md000066600000035650150425117220013013 0ustar00# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). (Format adopted after v3.0.0.) ## [4.1.1] (2020-02-02) ### Fixed * TypeScript definition for `.action()` should include Promise for async ([#1157]) ## [4.1.0] (2020-01-06) ### Added * two routines to change how option values are handled, and eliminate name clashes with command properties ([#933] [#1102]) * see storeOptionsAsProperties and passCommandToAction in README * `.parseAsync` to use instead of `.parse` if supply async action handlers ([#806] [#1118]) ### Fixed * Remove trailing blanks from wrapped help text ([#1096]) ### Changed * update dependencies * extend security coverage for Commander 2.x to 2020-02-03 * improvements to README * improvements to TypeScript definition documentation * move old versions out of main CHANGELOG * removed explicit use of `ts-node` in tests ## [4.0.1] (2019-11-12) ### Fixed * display help when requested, even if there are missing required options ([#1091]) ## [4.0.0] (2019-11-02) ### Added * automatically wrap and indent help descriptions for options and commands ([#1051]) * `.exitOverride()` allows override of calls to `process.exit` for additional error handling and to keep program running ([#1040]) * support for declaring required options with `.requiredOptions()` ([#1071]) * GitHub Actions support ([#1027]) * translation links in README ### Changed * dev: switch tests from Sinon+Should to Jest with major rewrite of tests ([#1035]) * call default subcommand even when there are unknown options ([#1047]) * *Breaking* Commander is only officially supported on Node 8 and above, and requires Node 6 ([#1053]) ### Fixed * *Breaking* keep command object out of program.args when action handler called ([#1048]) * also, action handler now passed array of unknown arguments * complain about unknown options when program argument supplied and action handler ([#1049]) * this changes parameters to `command:*` event to include unknown arguments * removed deprecated `customFds` option from call to `child_process.spawn` ([#1052]) * rework TypeScript declarations to bring all types into imported namespace ([#1081]) ### Migration Tips #### Testing for no arguments If you were previously using code like: ```js if (!program.args.length) ... ``` a partial replacement is: ```js if (program.rawArgs.length < 3) ... ``` ## [4.0.0-1] Prerelease (2019-10-08) (Released in 4.0.0) ## [4.0.0-0] Prerelease (2019-10-01) (Released in 4.0.0) ## [2.20.1] (2019-09-29) ### Fixed * Improve tracking of executable subcommands. ### Changed * update development dependencies ## [3.0.2] (2019-09-27) ### Fixed * Improve tracking of executable subcommands. ### Changed * update development dependencies ## [3.0.1] (2019-08-30) ### Added * .name and .usage to README ([#1010]) * Table of Contents to README ([#1010]) * TypeScript definition for `executableFile` in CommandOptions ([#1028]) ### Changed * consistently use `const` rather than `var` in README ([#1026]) ### Fixed * help for sub commands with custom executableFile ([#1018]) ## [3.0.0] / 2019-08-08 * Add option to specify executable file name ([#999]) * e.g. `.command('clone', 'clone description', { executableFile: 'myClone' })` * Change docs for `.command` to contrast action handler vs git-style executable. ([#938] [#990]) * **Breaking** Change TypeScript to use overloaded function for `.command`. ([#938] [#990]) * Change to use straight quotes around strings in error messages (like 'this' instead of `this') ([#915]) * Add TypeScript "reference types" for node ([#974]) * Add support for hyphen as an option argument in subcommands ([#697]) * Add support for a short option flag and its value to be concatenated for action handler subcommands ([#599]) * e.g. `-p 80` can also be supplied as `-p80` * Add executable arguments to spawn in win32, for git-style executables ([#611]) * e.g. `node --harmony myCommand.js clone` * Add parent command as prefix of subcommand in help ([#980]) * Add optional custom description to `.version` ([#963]) * e.g. `program.version('0.0.1', '-v, --vers', 'output the current version')` * Add `.helpOption(flags, description)` routine to customise help flags and description ([#963]) * e.g. `.helpOption('-e, --HELP', 'read more information')` * Fix behavior of --no-* options ([#795]) * can now define both `--foo` and `--no-foo` * **Breaking** custom event listeners: `--no-foo` on cli now emits `option:no-foo` (previously `option:foo`) * **Breaking** default value: defining `--no-foo` after defining `--foo` leaves the default value unchanged (previously set it to false) * allow boolean default value, such as from environment ([#987]) * Increment inspector port for spawned subcommands ([#991]) * e.g. `node --inspect myCommand.js clone` ### Migration Tips The custom event for a negated option like `--no-foo` is `option:no-foo` (previously `option:foo`). ```js program .option('--no-foo') .on('option:no-foo', () => { console.log('removing foo'); }); ``` When using TypeScript, adding a command does not allow an explicit `undefined` for an unwanted executable description (e.g for a command with an action handler). ```js program .command('action1', undefined, { noHelp: true }) // No longer valid .command('action2', { noHelp: true }) // Correct ``` ## 3.0.0-0 Prerelease / 2019-07-28 (Released as 3.0.0) ## 2.20.0 / 2019-04-02 * fix: resolve symbolic links completely when hunting for subcommands (#935) * Update index.d.ts (#930) * Update Readme.md (#924) * Remove --save option as it isn't required anymore (#918) * Add link to the license file (#900) * Added example of receiving args from options (#858) * Added missing semicolon (#882) * Add extension to .eslintrc (#876) ## 2.19.0 / 2018-10-02 * Removed newline after Options and Commands headers (#864) * Bugfix - Error output (#862) * Fix to change default value to string (#856) ## 2.18.0 / 2018-09-07 * Standardize help output (#853) * chmod 644 travis.yml (#851) * add support for execute typescript subcommand via ts-node (#849) ## 2.17.1 / 2018-08-07 * Fix bug in command emit (#844) ## 2.17.0 / 2018-08-03 * fixed newline output after help information (#833) * Fix to emit the action even without command (#778) * npm update (#823) ## 2.16.0 / 2018-06-29 * Remove Makefile and `test/run` (#821) * Make 'npm test' run on Windows (#820) * Add badge to display install size (#807) * chore: cache node_modules (#814) * chore: remove Node.js 4 (EOL), add Node.js 10 (#813) * fixed typo in readme (#812) * Fix types (#804) * Update eslint to resolve vulnerabilities in lodash (#799) * updated readme with custom event listeners. (#791) * fix tests (#794) ## 2.15.0 / 2018-03-07 * Update downloads badge to point to graph of downloads over time instead of duplicating link to npm * Arguments description ## 2.14.1 / 2018-02-07 * Fix typing of help function ## 2.14.0 / 2018-02-05 * only register the option:version event once * Fixes issue #727: Passing empty string for option on command is set to undefined * enable eqeqeq rule * resolves #754 add linter configuration to project * resolves #560 respect custom name for version option * document how to override the version flag * document using options per command ## 2.13.0 / 2018-01-09 * Do not print default for --no- * remove trailing spaces in command help * Update CI's Node.js to LTS and latest version * typedefs: Command and Option types added to commander namespace ## 2.12.2 / 2017-11-28 * fix: typings are not shipped ## 2.12.1 / 2017-11-23 * Move @types/node to dev dependency ## 2.12.0 / 2017-11-22 * add attributeName() method to Option objects * Documentation updated for options with --no prefix * typings: `outputHelp` takes a string as the first parameter * typings: use overloads * feat(typings): update to match js api * Print default value in option help * Fix translation error * Fail when using same command and alias (#491) * feat(typings): add help callback * fix bug when description is add after command with options (#662) * Format js code * Rename History.md to CHANGELOG.md (#668) * feat(typings): add typings to support TypeScript (#646) * use current node ## 2.11.0 / 2017-07-03 * Fix help section order and padding (#652) * feature: support for signals to subcommands (#632) * Fixed #37, --help should not display first (#447) * Fix translation errors. (#570) * Add package-lock.json * Remove engines * Upgrade package version * Prefix events to prevent conflicts between commands and options (#494) * Removing dependency on graceful-readlink * Support setting name in #name function and make it chainable * Add .vscode directory to .gitignore (Visual Studio Code metadata) * Updated link to ruby commander in readme files ## 2.10.0 / 2017-06-19 * Update .travis.yml. drop support for older node.js versions. * Fix require arguments in README.md * On SemVer you do not start from 0.0.1 * Add missing semi colon in readme * Add save param to npm install * node v6 travis test * Update Readme_zh-CN.md * Allow literal '--' to be passed-through as an argument * Test subcommand alias help * link build badge to master branch * Support the alias of Git style sub-command * added keyword commander for better search result on npm * Fix Sub-Subcommands * test node.js stable * Fixes TypeError when a command has an option called `--description` * Update README.md to make it beginner friendly and elaborate on the difference between angled and square brackets. * Add chinese Readme file ## 2.9.0 / 2015-10-13 * Add option `isDefault` to set default subcommand #415 @Qix- * Add callback to allow filtering or post-processing of help text #434 @djulien * Fix `undefined` text in help information close #414 #416 @zhiyelee ## 2.8.1 / 2015-04-22 * Back out `support multiline description` Close #396 #397 ## 2.8.0 / 2015-04-07 * Add `process.execArg` support, execution args like `--harmony` will be passed to sub-commands #387 @DigitalIO @zhiyelee * Fix bug in Git-style sub-commands #372 @zhiyelee * Allow commands to be hidden from help #383 @tonylukasavage * When git-style sub-commands are in use, yet none are called, display help #382 @claylo * Add ability to specify arguments syntax for top-level command #258 @rrthomas * Support multiline descriptions #208 @zxqfox ## 2.7.1 / 2015-03-11 * Revert #347 (fix collisions when option and first arg have same name) which causes a bug in #367. ## 2.7.0 / 2015-03-09 * Fix git-style bug when installed globally. Close #335 #349 @zhiyelee * Fix collisions when option and first arg have same name. Close #346 #347 @tonylukasavage * Add support for camelCase on `opts()`. Close #353 @nkzawa * Add node.js 0.12 and io.js to travis.yml * Allow RegEx options. #337 @palanik * Fixes exit code when sub-command failing. Close #260 #332 @pirelenito * git-style `bin` files in $PATH make sense. Close #196 #327 @zhiyelee ## 2.6.0 / 2014-12-30 * added `Command#allowUnknownOption` method. Close #138 #318 @doozr @zhiyelee * Add application description to the help msg. Close #112 @dalssoft ## 2.5.1 / 2014-12-15 * fixed two bugs incurred by variadic arguments. Close #291 @Quentin01 #302 @zhiyelee ## 2.5.0 / 2014-10-24 * add support for variadic arguments. Closes #277 @whitlockjc ## 2.4.0 / 2014-10-17 * fixed a bug on executing the coercion function of subcommands option. Closes #270 * added `Command.prototype.name` to retrieve command name. Closes #264 #266 @tonylukasavage * added `Command.prototype.opts` to retrieve all the options as a simple object of key-value pairs. Closes #262 @tonylukasavage * fixed a bug on subcommand name. Closes #248 @jonathandelgado * fixed function normalize doesn’t honor option terminator. Closes #216 @abbr ## 2.3.0 / 2014-07-16 * add command alias'. Closes PR #210 * fix: Typos. Closes #99 * fix: Unused fs module. Closes #217 ## 2.2.0 / 2014-03-29 * add passing of previous option value * fix: support subcommands on windows. Closes #142 * Now the defaultValue passed as the second argument of the coercion function. ## 2.1.0 / 2013-11-21 * add: allow cflag style option params, unit test, fixes #174 ## 2.0.0 / 2013-07-18 * remove input methods (.prompt, .confirm, etc) ## Older versions * [1.x](./changelogs/CHANGELOG-1.md) * [0.x](./changelogs/CHANGELOG-0.md) [#599]: https://github.com/tj/commander.js/issues/599 [#611]: https://github.com/tj/commander.js/issues/611 [#697]: https://github.com/tj/commander.js/issues/697 [#795]: https://github.com/tj/commander.js/issues/795 [#806]: https://github.com/tj/commander.js/issues/806 [#915]: https://github.com/tj/commander.js/issues/915 [#938]: https://github.com/tj/commander.js/issues/938 [#963]: https://github.com/tj/commander.js/issues/963 [#974]: https://github.com/tj/commander.js/issues/974 [#980]: https://github.com/tj/commander.js/issues/980 [#987]: https://github.com/tj/commander.js/issues/987 [#990]: https://github.com/tj/commander.js/issues/990 [#991]: https://github.com/tj/commander.js/issues/991 [#993]: https://github.com/tj/commander.js/issues/993 [#999]: https://github.com/tj/commander.js/issues/999 [#1010]: https://github.com/tj/commander.js/pull/1010 [#1018]: https://github.com/tj/commander.js/pull/1018 [#1026]: https://github.com/tj/commander.js/pull/1026 [#1027]: https://github.com/tj/commander.js/pull/1027 [#1028]: https://github.com/tj/commander.js/pull/1028 [#1035]: https://github.com/tj/commander.js/pull/1035 [#1040]: https://github.com/tj/commander.js/pull/1040 [#1047]: https://github.com/tj/commander.js/pull/1047 [#1048]: https://github.com/tj/commander.js/pull/1048 [#1049]: https://github.com/tj/commander.js/pull/1049 [#1051]: https://github.com/tj/commander.js/pull/1051 [#1052]: https://github.com/tj/commander.js/pull/1052 [#1053]: https://github.com/tj/commander.js/pull/1053 [#1071]: https://github.com/tj/commander.js/pull/1071 [#1081]: https://github.com/tj/commander.js/pull/1081 [#1091]: https://github.com/tj/commander.js/pull/1091 [#1096]: https://github.com/tj/commander.js/pull/1096 [#1102]: https://github.com/tj/commander.js/pull/1102 [#1118]: https://github.com/tj/commander.js/pull/1118 [#1157]: https://github.com/tj/commander.js/pull/1157 [Unreleased]: https://github.com/tj/commander.js/compare/master...develop [4.1.1]: https://github.com/tj/commander.js/compare/v4.0.0..v4.1.1 [4.1.0]: https://github.com/tj/commander.js/compare/v4.0.1..v4.1.0 [4.0.1]: https://github.com/tj/commander.js/compare/v4.0.0..v4.0.1 [4.0.0]: https://github.com/tj/commander.js/compare/v3.0.2..v4.0.0 [4.0.0-1]: https://github.com/tj/commander.js/compare/v4.0.0-0..v4.0.0-1 [4.0.0-0]: https://github.com/tj/commander.js/compare/v3.0.2...v4.0.0-0 [3.0.2]: https://github.com/tj/commander.js/compare/v3.0.1...v3.0.2 [3.0.1]: https://github.com/tj/commander.js/compare/v3.0.0...v3.0.1 [3.0.0]: https://github.com/tj/commander.js/compare/v2.20.1...v3.0.0 [2.20.1]: https://github.com/tj/commander.js/compare/v2.20.0...v2.20.1 node_modules/commander/LICENSE000066600000002112150425117220012172 0ustar00(The MIT License) Copyright (c) 2011 TJ Holowaychuk Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. node_modules/commander/package.json000066600000001641150425117220013461 0ustar00{ "name": "commander", "version": "4.1.1", "description": "the complete solution for node.js command-line programs", "keywords": [ "commander", "command", "option", "parser" ], "author": "TJ Holowaychuk ", "license": "MIT", "repository": { "type": "git", "url": "https://github.com/tj/commander.js.git" }, "scripts": { "lint": "eslint index.js \"tests/**/*.js\"", "test": "jest && npm run test-typings", "test-typings": "tsc -p tsconfig.json" }, "main": "index", "files": [ "index.js", "typings/index.d.ts" ], "dependencies": {}, "devDependencies": { "@types/jest": "^24.0.23", "@types/node": "^12.12.11", "eslint": "^6.7.0", "eslint-plugin-jest": "^22.21.0", "jest": "^24.8.0", "standard": "^14.3.1", "typescript": "^3.7.2" }, "typings": "typings/index.d.ts", "engines": { "node": ">= 6" } } node_modules/.bin/terser000066600000000456150425117220011306 0ustar00#!/bin/sh basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") case `uname` in *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; esac if [ -x "$basedir/node" ]; then exec "$basedir/node" "$basedir/../terser/bin/terser" "$@" else exec node "$basedir/../terser/bin/terser" "$@" fi node_modules/.bin/terser.cmd000077700000000502150425117220012043 0ustar00@ECHO off GOTO start :find_dp0 SET dp0=%~dp0 EXIT /b :start SETLOCAL CALL :find_dp0 IF EXIST "%dp0%\node.exe" ( SET "_prog=%dp0%\node.exe" ) ELSE ( SET "_prog=node" SET PATHEXT=%PATHEXT:;.JS;=;% ) endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\terser\bin\terser" %* node_modules/.bin/terser.ps1000066600000001431150425117220012002 0ustar00#!/usr/bin/env pwsh $basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent $exe="" if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { # Fix case when both the Windows and Linux builds of Node # are installed in the same directory $exe=".exe" } $ret=0 if (Test-Path "$basedir/node$exe") { # Support pipeline input if ($MyInvocation.ExpectingInput) { $input | & "$basedir/node$exe" "$basedir/../terser/bin/terser" $args } else { & "$basedir/node$exe" "$basedir/../terser/bin/terser" $args } $ret=$LASTEXITCODE } else { # Support pipeline input if ($MyInvocation.ExpectingInput) { $input | & "node$exe" "$basedir/../terser/bin/terser" $args } else { & "node$exe" "$basedir/../terser/bin/terser" $args } $ret=$LASTEXITCODE } exit $ret node_modules/clean-css/index.js000066600000000051150425117220012535 0ustar00module.exports = require('./lib/clean'); node_modules/clean-css/README.md000066600000104035150425117220012356 0ustar00


clean-css logo

[![NPM version](https://img.shields.io/npm/v/clean-css.svg?style=flat)](https://www.npmjs.com/package/clean-css) [![Linux Build Status](https://img.shields.io/travis/jakubpawlowicz/clean-css/master.svg?style=flat&label=Linux%20build)](https://travis-ci.org/jakubpawlowicz/clean-css) [![Windows Build status](https://img.shields.io/appveyor/ci/jakubpawlowicz/clean-css/master.svg?style=flat&label=Windows%20build)](https://ci.appveyor.com/project/jakubpawlowicz/clean-css/branch/master) [![Dependency Status](https://img.shields.io/david/jakubpawlowicz/clean-css.svg?style=flat)](https://david-dm.org/jakubpawlowicz/clean-css) [![NPM Downloads](https://img.shields.io/npm/dm/clean-css.svg)](https://npmcharts.com/compare/clean-css?minimal=true) [![Twitter](https://img.shields.io/badge/Twitter-@cleancss-blue.svg)](https://twitter.com/cleancss) clean-css is a fast and efficient CSS optimizer for [Node.js](http://nodejs.org/) platform and [any modern browser](https://jakubpawlowicz.github.io/clean-css). According to [tests](http://goalsmashers.github.io/css-minification-benchmark/) it is one of the best available. **Table of Contents** - [Node.js version support](#nodejs-version-support) - [Install](#install) - [Use](#use) * [Important: 4.0 breaking changes](#important-40-breaking-changes) * [What's new in version 4.1](#whats-new-in-version-41) * [What's new in version 4.2](#whats-new-in-version-42) * [Constructor options](#constructor-options) * [Compatibility modes](#compatibility-modes) * [Fetch option](#fetch-option) * [Formatting options](#formatting-options) * [Inlining options](#inlining-options) * [Optimization levels](#optimization-levels) + [Level 0 optimizations](#level-0-optimizations) + [Level 1 optimizations](#level-1-optimizations) + [Level 2 optimizations](#level-2-optimizations) * [Minify method](#minify-method) * [Promise interface](#promise-interface) * [CLI utility](#cli-utility) - [FAQ](#faq) * [How to optimize multiple files?](#how-to-optimize-multiple-files) * [How to process remote `@import`s correctly?](#how-to-process-remote-imports-correctly) * [How to apply arbitrary transformations to CSS properties?](#how-to-apply-arbitrary-transformations-to-css-properties) * [How to specify a custom rounding precision?](#how-to-specify-a-custom-rounding-precision) * [How to keep a CSS fragment intact?](#how-to-keep-a-css-fragment-intact) * [How to preserve a comment block?](#how-to-preserve-a-comment-block) * [How to rebase relative image URLs?](#how-to-rebase-relative-image-urls) * [How to work with source maps?](#how-to-work-with-source-maps) * [How to apply level 1 & 2 optimizations at the same time?](#how-to-apply-level-1--2-optimizations-at-the-same-time) * [What level 2 optimizations do?](#what-level-2-optimizations-do) * [How to use clean-css with build tools?](#how-to-use-clean-css-with-build-tools) * [How to use clean-css from web browser?](#how-to-use-clean-css-from-web-browser) - [Contributing](#contributing) * [How to get started?](#how-to-get-started) - [Acknowledgments](#acknowledgments) - [License](#license) # Node.js version support clean-css requires Node.js 4.0+ (tested on Linux, OS X, and Windows) # Install ``` npm install --save-dev clean-css ``` # Use ```js var CleanCSS = require('clean-css'); var input = 'a{font-weight:bold;}'; var options = { /* options */ }; var output = new CleanCSS(options).minify(input); ``` ## Important: 4.0 breaking changes clean-css 4.0 introduces some breaking changes: * API and CLI interfaces are split, so API stays in this repository while CLI moves to [clean-css-cli](https://github.com/jakubpawlowicz/clean-css-cli); * `root`, `relativeTo`, and `target` options are replaced by a single `rebaseTo` option - this means that rebasing URLs and import inlining is much simpler but may not be (YMMV) as powerful as in 3.x; * `debug` option is gone as stats are always provided in output object under `stats` property; * `roundingPrecision` is disabled by default; * `roundingPrecision` applies to **all** units now, not only `px` as in 3.x; * `processImport` and `processImportFrom` are merged into `inline` option which defaults to `local`. Remote `@import` rules are **NOT** inlined by default anymore; * splits `inliner: { request: ..., timeout: ... }` option into `inlineRequest` and `inlineTimeout` options; * remote resources without a protocol, e.g. `//fonts.googleapis.com/css?family=Domine:700`, are not inlined anymore; * changes default Internet Explorer compatibility from 9+ to 10+, to revert the old default use `{ compatibility: 'ie9' }` flag; * renames `keepSpecialComments` to `specialComments`; * moves `roundingPrecision` and `specialComments` to level 1 optimizations options, see examples; * moves `mediaMerging`, `restructuring`, `semanticMerging`, and `shorthandCompacting` to level 2 optimizations options, see examples below; * renames `shorthandCompacting` option to `mergeIntoShorthands`; * level 1 optimizations are the new default, up to 3.x it was level 2; * `keepBreaks` option is replaced with `{ format: 'keep-breaks' }` to ease transition; * `sourceMap` option has to be a boolean from now on - to specify an input source map pass it a 2nd argument to `minify` method or via a hash instead; * `aggressiveMerging` option is removed as aggressive merging is replaced by smarter override merging. ## What's new in version 4.1 clean-css 4.1 introduces the following changes / features: * `inline: false` as an alias to `inline: ['none']`; * `multiplePseudoMerging` compatibility flag controlling merging of rules with multiple pseudo classes / elements; * `removeEmpty` flag in level 1 optimizations controlling removal of rules and nested blocks; * `removeEmpty` flag in level 2 optimizations controlling removal of rules and nested blocks; * `compatibility: { selectors: { mergeLimit: } }` flag in compatibility settings controlling maximum number of selectors in a single rule; * `minify` method improved signature accepting a list of hashes for a predictable traversal; * `selectorsSortingMethod` level 1 optimization allows `false` or `'none'` for disabling selector sorting; * `fetch` option controlling a function for handling remote requests; * new `font` shorthand and `font-*` longhand optimizers; * removal of `optimizeFont` flag in level 1 optimizations due to new `font` shorthand optimizer; * `skipProperties` flag in level 2 optimizations controlling which properties won't be optimized; * new `animation` shorthand and `animation-*` longhand optimizers; * `removeUnusedAtRules` level 2 optimization controlling removal of unused `@counter-style`, `@font-face`, `@keyframes`, and `@namespace` at rules; * the [web interface](https://jakubpawlowicz.github.io/clean-css) gets an improved settings panel with "reset to defaults", instant option changes, and settings being persisted across sessions. ## What's new in version 4.2 clean-css 4.2 introduces the following changes / features: * Adds `process` method for compatibility with optimize-css-assets-webpack-plugin; * new `transition` property optimizer; * preserves any CSS content between `/* clean-css ignore:start */` and `/* clean-css ignore:end */` comments; * allows filtering based on selector in `transform` callback, see [example](#how-to-apply-arbitrary-transformations-to-css-properties); * adds configurable line breaks via `format: { breakWith: 'lf' }` option. ## Constructor options clean-css constructor accepts a hash as a parameter with the following options available: * `compatibility` - controls compatibility mode used; defaults to `ie10+`; see [compatibility modes](#compatibility-modes) for examples; * `fetch` - controls a function for handling remote requests; see [fetch option](#fetch-option) for examples (since 4.1.0); * `format` - controls output CSS formatting; defaults to `false`; see [formatting options](#formatting-options) for examples; * `inline` - controls `@import` inlining rules; defaults to `'local'`; see [inlining options](#inlining-options) for examples; * `inlineRequest` - controls extra options for inlining remote `@import` rules, can be any of [HTTP(S) request options](https://nodejs.org/api/http.html#http_http_request_options_callback); * `inlineTimeout` - controls number of milliseconds after which inlining a remote `@import` fails; defaults to 5000; * `level` - controls optimization level used; defaults to `1`; see [optimization levels](#optimization-levels) for examples; * `rebase` - controls URL rebasing; defaults to `true`; * `rebaseTo` - controls a directory to which all URLs are rebased, most likely the directory under which the output file will live; defaults to the current directory; * `returnPromise` - controls whether `minify` method returns a Promise object or not; defaults to `false`; see [promise interface](#promise-interface) for examples; * `sourceMap` - controls whether an output source map is built; defaults to `false`; * `sourceMapInlineSources` - controls embedding sources inside a source map's `sourcesContent` field; defaults to false. ## Compatibility modes There is a certain number of compatibility mode shortcuts, namely: * `new CleanCSS({ compatibility: '*' })` (default) - Internet Explorer 10+ compatibility mode * `new CleanCSS({ compatibility: 'ie9' })` - Internet Explorer 9+ compatibility mode * `new CleanCSS({ compatibility: 'ie8' })` - Internet Explorer 8+ compatibility mode * `new CleanCSS({ compatibility: 'ie7' })` - Internet Explorer 7+ compatibility mode Each of these modes is an alias to a [fine grained configuration](https://github.com/jakubpawlowicz/clean-css/blob/master/lib/options/compatibility.js), with the following options available: ```js new CleanCSS({ compatibility: { colors: { opacity: true // controls `rgba()` / `hsla()` color support }, properties: { backgroundClipMerging: true, // controls background-clip merging into shorthand backgroundOriginMerging: true, // controls background-origin merging into shorthand backgroundSizeMerging: true, // controls background-size merging into shorthand colors: true, // controls color optimizations ieBangHack: false, // controls keeping IE bang hack ieFilters: false, // controls keeping IE `filter` / `-ms-filter` iePrefixHack: false, // controls keeping IE prefix hack ieSuffixHack: false, // controls keeping IE suffix hack merging: true, // controls property merging based on understandability shorterLengthUnits: false, // controls shortening pixel units into `pc`, `pt`, or `in` units spaceAfterClosingBrace: true, // controls keeping space after closing brace - `url() no-repeat` into `url()no-repeat` urlQuotes: false, // controls keeping quoting inside `url()` zeroUnits: true // controls removal of units `0` value }, selectors: { adjacentSpace: false, // controls extra space before `nav` element ie7Hack: true, // controls removal of IE7 selector hacks, e.g. `*+html...` mergeablePseudoClasses: [':active', ...], // controls a whitelist of mergeable pseudo classes mergeablePseudoElements: ['::after', ...], // controls a whitelist of mergeable pseudo elements mergeLimit: 8191, // controls maximum number of selectors in a single rule (since 4.1.0) multiplePseudoMerging: true // controls merging of rules with multiple pseudo classes / elements (since 4.1.0) }, units: { ch: true, // controls treating `ch` as a supported unit in: true, // controls treating `in` as a supported unit pc: true, // controls treating `pc` as a supported unit pt: true, // controls treating `pt` as a supported unit rem: true, // controls treating `rem` as a supported unit vh: true, // controls treating `vh` as a supported unit vm: true, // controls treating `vm` as a supported unit vmax: true, // controls treating `vmax` as a supported unit vmin: true // controls treating `vmin` as a supported unit } } }) ``` You can also use a string when setting a compatibility mode, e.g. ```js new CleanCSS({ compatibility: 'ie9,-properties.merging' // sets compatibility to IE9 mode with disabled property merging }) ``` ## Fetch option The `fetch` option accepts a function which handles remote resource fetching, e.g. ```js var request = require('request'); var source = '@import url(http://example.com/path/to/stylesheet.css);'; new CleanCSS({ fetch: function (uri, inlineRequest, inlineTimeout, callback) { request(uri, function (error, response, body) { if (error) { callback(error, null); } else if (response && response.statusCode != 200) { callback(response.statusCode, null); } else { callback(null, body); } }); } }).minify(source); ``` This option provides a convenient way of overriding the default fetching logic if it doesn't support a particular feature, say CONNECT proxies. Unless given, the default [loadRemoteResource](https://github.com/jakubpawlowicz/clean-css/blob/master/lib/reader/load-remote-resource.js) logic is used. ## Formatting options By default output CSS is formatted without any whitespace unless a `format` option is given. First of all there are two shorthands: ```js new CleanCSS({ format: 'beautify' // formats output in a really nice way }) ``` and ```js new CleanCSS({ format: 'keep-breaks' // formats output the default way but adds line breaks for improved readability }) ``` however `format` option also accept a fine-grained set of options: ```js new CleanCSS({ format: { breaks: { // controls where to insert breaks afterAtRule: false, // controls if a line break comes after an at-rule; e.g. `@charset`; defaults to `false` afterBlockBegins: false, // controls if a line break comes after a block begins; e.g. `@media`; defaults to `false` afterBlockEnds: false, // controls if a line break comes after a block ends, defaults to `false` afterComment: false, // controls if a line break comes after a comment; defaults to `false` afterProperty: false, // controls if a line break comes after a property; defaults to `false` afterRuleBegins: false, // controls if a line break comes after a rule begins; defaults to `false` afterRuleEnds: false, // controls if a line break comes after a rule ends; defaults to `false` beforeBlockEnds: false, // controls if a line break comes before a block ends; defaults to `false` betweenSelectors: false // controls if a line break comes between selectors; defaults to `false` }, breakWith: '\n', // controls the new line character, can be `'\r\n'` or `'\n'` (aliased as `'windows'` and `'unix'` or `'crlf'` and `'lf'`); defaults to system one, so former on Windows and latter on Unix indentBy: 0, // controls number of characters to indent with; defaults to `0` indentWith: 'space', // controls a character to indent with, can be `'space'` or `'tab'`; defaults to `'space'` spaces: { // controls where to insert spaces aroundSelectorRelation: false, // controls if spaces come around selector relations; e.g. `div > a`; defaults to `false` beforeBlockBegins: false, // controls if a space comes before a block begins; e.g. `.block {`; defaults to `false` beforeValue: false // controls if a space comes before a value; e.g. `width: 1rem`; defaults to `false` }, wrapAt: false // controls maximum line length; defaults to `false` } }) ``` ## Inlining options `inline` option whitelists which `@import` rules will be processed, e.g. ```js new CleanCSS({ inline: ['local'] // default; enables local inlining only }) ``` ```js new CleanCSS({ inline: ['none'] // disables all inlining }) ``` ```js // introduced in clean-css 4.1.0 new CleanCSS({ inline: false // disables all inlining (alias to `['none']`) }) ``` ```js new CleanCSS({ inline: ['all'] // enables all inlining, same as ['local', 'remote'] }) ``` ```js new CleanCSS({ inline: ['local', 'mydomain.example.com'] // enables local inlining plus given remote source }) ``` ```js new CleanCSS({ inline: ['local', 'remote', '!fonts.googleapis.com'] // enables all inlining but from given remote source }) ``` ## Optimization levels The `level` option can be either `0`, `1` (default), or `2`, e.g. ```js new CleanCSS({ level: 2 }) ``` or a fine-grained configuration given via a hash. Please note that level 1 optimization options are generally safe while level 2 optimizations should be safe for most users. ### Level 0 optimizations Level 0 optimizations simply means "no optimizations". Use it when you'd like to inline imports and / or rebase URLs but skip everything else. ### Level 1 optimizations Level 1 optimizations (default) operate on single properties only, e.g. can remove units when not required, turn rgb colors to a shorter hex representation, remove comments, etc Here is a full list of available options: ```js new CleanCSS({ level: { 1: { cleanupCharsets: true, // controls `@charset` moving to the front of a stylesheet; defaults to `true` normalizeUrls: true, // controls URL normalization; defaults to `true` optimizeBackground: true, // controls `background` property optimizations; defaults to `true` optimizeBorderRadius: true, // controls `border-radius` property optimizations; defaults to `true` optimizeFilter: true, // controls `filter` property optimizations; defaults to `true` optimizeFont: true, // controls `font` property optimizations; defaults to `true` optimizeFontWeight: true, // controls `font-weight` property optimizations; defaults to `true` optimizeOutline: true, // controls `outline` property optimizations; defaults to `true` removeEmpty: true, // controls removing empty rules and nested blocks; defaults to `true` removeNegativePaddings: true, // controls removing negative paddings; defaults to `true` removeQuotes: true, // controls removing quotes when unnecessary; defaults to `true` removeWhitespace: true, // controls removing unused whitespace; defaults to `true` replaceMultipleZeros: true, // contols removing redundant zeros; defaults to `true` replaceTimeUnits: true, // controls replacing time units with shorter values; defaults to `true` replaceZeroUnits: true, // controls replacing zero values with units; defaults to `true` roundingPrecision: false, // rounds pixel values to `N` decimal places; `false` disables rounding; defaults to `false` selectorsSortingMethod: 'standard', // denotes selector sorting method; can be `'natural'` or `'standard'`, `'none'`, or false (the last two since 4.1.0); defaults to `'standard'` specialComments: 'all', // denotes a number of /*! ... */ comments preserved; defaults to `all` tidyAtRules: true, // controls at-rules (e.g. `@charset`, `@import`) optimizing; defaults to `true` tidyBlockScopes: true, // controls block scopes (e.g. `@media`) optimizing; defaults to `true` tidySelectors: true, // controls selectors optimizing; defaults to `true`, semicolonAfterLastProperty: false, // controls removing trailing semicolons in rule; defaults to `false` - means remove transform: function () {} // defines a callback for fine-grained property optimization; defaults to no-op } } }); ``` There is an `all` shortcut for toggling all options at the same time, e.g. ```js new CleanCSS({ level: { 1: { all: false, // set all values to `false` tidySelectors: true // turns on optimizing selectors } } }); ``` ### Level 2 optimizations Level 2 optimizations operate at rules or multiple properties level, e.g. can remove duplicate rules, remove properties redefined further down a stylesheet, or restructure rules by moving them around. Please note that if level 2 optimizations are turned on then, unless explicitely disabled, level 1 optimizations are applied as well. Here is a full list of available options: ```js new CleanCSS({ level: { 2: { mergeAdjacentRules: true, // controls adjacent rules merging; defaults to true mergeIntoShorthands: true, // controls merging properties into shorthands; defaults to true mergeMedia: true, // controls `@media` merging; defaults to true mergeNonAdjacentRules: true, // controls non-adjacent rule merging; defaults to true mergeSemantically: false, // controls semantic merging; defaults to false overrideProperties: true, // controls property overriding based on understandability; defaults to true removeEmpty: true, // controls removing empty rules and nested blocks; defaults to `true` reduceNonAdjacentRules: true, // controls non-adjacent rule reducing; defaults to true removeDuplicateFontRules: true, // controls duplicate `@font-face` removing; defaults to true removeDuplicateMediaBlocks: true, // controls duplicate `@media` removing; defaults to true removeDuplicateRules: true, // controls duplicate rules removing; defaults to true removeUnusedAtRules: false, // controls unused at rule removing; defaults to false (available since 4.1.0) restructureRules: false, // controls rule restructuring; defaults to false skipProperties: [] // controls which properties won't be optimized, defaults to `[]` which means all will be optimized (since 4.1.0) } } }); ``` There is an `all` shortcut for toggling all options at the same time, e.g. ```js new CleanCSS({ level: { 2: { all: false, // sets all values to `false` removeDuplicateRules: true // turns on removing duplicate rules } } }); ``` ## Minify method Once configured clean-css provides a `minify` method to optimize a given CSS, e.g. ```js var output = new CleanCSS(options).minify(source); ``` The output of the `minify` method is a hash with following fields: ```js console.log(output.styles); // optimized output CSS as a string console.log(output.sourceMap); // output source map if requested with `sourceMap` option console.log(output.errors); // a list of errors raised console.log(output.warnings); // a list of warnings raised console.log(output.stats.originalSize); // original content size after import inlining console.log(output.stats.minifiedSize); // optimized content size console.log(output.stats.timeSpent); // time spent on optimizations in milliseconds console.log(output.stats.efficiency); // `(originalSize - minifiedSize) / originalSize`, e.g. 0.25 if size is reduced from 100 bytes to 75 bytes ``` The `minify` method also accepts an input source map, e.g. ```js var output = new CleanCSS(options).minify(source, inputSourceMap); ``` or a callback invoked when optimizations are finished, e.g. ```js new CleanCSS(options).minify(source, function (error, output) { // `output` is the same as in the synchronous call above }); ``` ## Promise interface If you prefer clean-css to return a Promise object then you need to explicitely ask for it, e.g. ```js new CleanCSS({ returnPromise: true }) .minify(source) .then(function (output) { console.log(output.styles); }) .catch(function (error) { // deal with errors }); ``` ## CLI utility Clean-css has an associated command line utility that can be installed separately using `npm install clean-css-cli`. For more detailed information, please visit https://github.com/jakubpawlowicz/clean-css-cli. # FAQ ## How to optimize multiple files? It can be done either by passing an array of paths, or, when sources are already available, a hash or an array of hashes: ```js new CleanCSS().minify(['path/to/file/one', 'path/to/file/two']); ``` ```js new CleanCSS().minify({ 'path/to/file/one': { styles: 'contents of file one' }, 'path/to/file/two': { styles: 'contents of file two' } }); ``` ```js new CleanCSS().minify([ {'path/to/file/one': {styles: 'contents of file one'}}, {'path/to/file/two': {styles: 'contents of file two'}} ]); ``` Passing an array of hashes allows you to explicitly specify the order in which the input files are concatenated. Whereas when you use a single hash the order is determined by the [traversal order of object properties](http://2ality.com/2015/10/property-traversal-order-es6.html) - available since 4.1.0. Important note - any `@import` rules already present in the hash will be resolved in memory. ## How to process remote `@import`s correctly? In order to inline remote `@import` statements you need to provide a callback to minify method as fetching remote assets is an asynchronous operation, e.g.: ```js var source = '@import url(http://example.com/path/to/remote/styles);'; new CleanCSS({ inline: ['remote'] }).minify(source, function (error, output) { // output.styles }); ``` If you don't provide a callback, then remote `@import`s will be left as is. ## How to apply arbitrary transformations to CSS properties? If clean-css doesn't perform a particular property optimization, you can use `transform` callback to apply it: ```js var source = '.block{background-image:url(/path/to/image.png)}'; var output = new CleanCSS({ level: { 1: { transform: function (propertyName, propertyValue, selector /* `selector` available since 4.2.0-pre */) { if (propertyName == 'background-image' && propertyValue.indexOf('/path/to') > -1) { return propertyValue.replace('/path/to', '../valid/path/to'); } } } } }).minify(source); console.log(output.styles); # => .block{background-image:url(../valid/path/to/image.png)} ``` Note: returning `false` from `transform` callback will drop a property. ## How to specify a custom rounding precision? The level 1 `roundingPrecision` optimization option accept a string with per-unit rounding precision settings, e.g. ```js new CleanCSS({ level: { 1: { roundingPrecision: 'all=3,px=5' } } }).minify(source) ``` which sets all units rounding precision to 3 digits except `px` unit precision of 5 digits. ## How to keep a CSS fragment intact? Note: available in the current master, to be released in 4.2.0. Wrap the CSS fragment in special comments which instruct clean-css to preserve it, e.g. ```css .block-1 { color: red } /* clean-css ignore:start */ .block-special { color: transparent } /* clean-css ignore:end */ .block-2 { margin: 0 } ``` Optimizing this CSS will result in the following output: ```css .block-1{color:red} .block-special { color: transparent } .block-2{margin:0} ``` ## How to preserve a comment block? Use the `/*!` notation instead of the standard one `/*`: ```css /*! Important comments included in optimized output. */ ``` ## How to rebase relative image URLs? clean-css will handle it automatically for you in the following cases: * when full paths to input files are passed in as options; * when correct paths are passed in via a hash; * when `rebaseTo` is used with any of above two. ## How to work with source maps? To generate a source map, use `sourceMap: true` option, e.g.: ```js new CleanCSS({ sourceMap: true, rebaseTo: pathToOutputDirectory }) .minify(source, function (error, output) { // access output.sourceMap for SourceMapGenerator object // see https://github.com/mozilla/source-map/#sourcemapgenerator for more details }); ``` You can also pass an input source map directly as a 2nd argument to `minify` method: ```js new CleanCSS({ sourceMap: true, rebaseTo: pathToOutputDirectory }) .minify(source, inputSourceMap, function (error, output) { // access output.sourceMap to access SourceMapGenerator object // see https://github.com/mozilla/source-map/#sourcemapgenerator for more details }); ``` or even multiple input source maps at once: ```js new CleanCSS({ sourceMap: true, rebaseTo: pathToOutputDirectory }).minify({ 'path/to/source/1': { styles: '...styles...', sourceMap: '...source-map...' }, 'path/to/source/2': { styles: '...styles...', sourceMap: '...source-map...' } }, function (error, output) { // access output.sourceMap as above }); ``` ## How to apply level 1 & 2 optimizations at the same time? Using the hash configuration specifying both optimization levels, e.g. ```js new CleanCSS({ level: { 1: { all: true, normalizeUrls: false }, 2: { restructureRules: true } } }) ``` will apply level 1 optimizations, except url normalization, and default level 2 optimizations with rule restructuring. ## What level 2 optimizations do? All level 2 optimizations are dispatched [here](https://github.com/jakubpawlowicz/clean-css/blob/master/lib/optimizer/level-2/optimize.js#L67), and this is what they do: * `recursivelyOptimizeBlocks` - does all the following operations on a nested block, like `@media` or `@keyframe`; * `recursivelyOptimizeProperties` - optimizes properties in rulesets and flat at-rules, like @font-face, by splitting them into components (e.g. `margin` into `margin-(bottom|left|right|top)`), optimizing, and restoring them back. You may want to use `mergeIntoShorthands` option to control whether you want to turn multiple components into shorthands; * `removeDuplicates` - gets rid of duplicate rulesets with exactly the same set of properties, e.g. when including a Sass / Less partial twice for no good reason; * `mergeAdjacent` - merges adjacent rulesets with the same selector or rules; * `reduceNonAdjacent` - identifies which properties are overridden in same-selector non-adjacent rulesets, and removes them; * `mergeNonAdjacentBySelector` - identifies same-selector non-adjacent rulesets which can be moved (!) to be merged, requires all intermediate rulesets to not redefine the moved properties, or if redefined to have the same value; * `mergeNonAdjacentByBody` - same as the one above but for same-selector non-adjacent rulesets; * `restructure` - tries to reorganize different-selector different-rules rulesets so they take less space, e.g. `.one{padding:0}.two{margin:0}.one{margin-bottom:3px}` into `.two{margin:0}.one{padding:0;margin-bottom:3px}`; * `removeDuplicateFontAtRules` - removes duplicated `@font-face` rules; * `removeDuplicateMediaQueries` - removes duplicated `@media` nested blocks; * `mergeMediaQueries` - merges non-adjacent `@media` at-rules by the same rules as `mergeNonAdjacentBy*` above; ## How to use clean-css with build tools? There is a number of 3rd party plugins to popular build tools: * [Broccoli](https://github.com/broccolijs/broccoli#broccoli): [broccoli-clean-css](https://github.com/shinnn/broccoli-clean-css) * [Brunch](http://brunch.io/): [clean-css-brunch](https://github.com/brunch/clean-css-brunch) * [Grunt](http://gruntjs.com): [grunt-contrib-cssmin](https://github.com/gruntjs/grunt-contrib-cssmin) * [Gulp](http://gulpjs.com/): [gulp-clean-css](https://github.com/scniro/gulp-clean-css) * [Gulp](http://gulpjs.com/): [using vinyl-map as a wrapper - courtesy of @sogko](https://github.com/jakubpawlowicz/clean-css/issues/342) * [component-builder2](https://github.com/component/builder2.js): [builder-clean-css](https://github.com/poying/builder-clean-css) * [Metalsmith](http://metalsmith.io): [metalsmith-clean-css](https://github.com/aymericbeaumet/metalsmith-clean-css) * [Lasso](https://github.com/lasso-js/lasso): [lasso-clean-css](https://github.com/yomed/lasso-clean-css) * [Start](https://github.com/start-runner/start): [start-clean-css](https://github.com/start-runner/clean-css) ## How to use clean-css from web browser? * https://jakubpawlowicz.github.io/clean-css/ (official web interface) * http://refresh-sf.com/ * http://adamburgess.github.io/clean-css-online/ # Contributing See [CONTRIBUTING.md](https://github.com/jakubpawlowicz/clean-css/blob/master/CONTRIBUTING.md). ## How to get started? First clone the sources: ```bash git clone git@github.com:jakubpawlowicz/clean-css.git ``` then install dependencies: ```bash cd clean-css npm install ``` then use any of the following commands to verify your copy: ```bash npm run bench # for clean-css benchmarks (see [test/bench.js](https://github.com/jakubpawlowicz/clean-css/blob/master/test/bench.js) for details) npm run browserify # to create the browser-ready clean-css version npm run check # to lint JS sources with [JSHint](https://github.com/jshint/jshint/) npm test # to run all tests ``` # Acknowledgments Sorted alphabetically by GitHub handle: * [@abarre](https://github.com/abarre) (Anthony Barre) for improvements to `@import` processing; * [@alexlamsl](https://github.com/alexlamsl) (Alex Lam S.L.) for testing early clean-css 4 versions, reporting bugs, and suggesting numerous improvements. * [@altschuler](https://github.com/altschuler) (Simon Altschuler) for fixing `@import` processing inside comments; * [@ben-eb](https://github.com/ben-eb) (Ben Briggs) for sharing ideas about CSS optimizations; * [@davisjam](https://github.com/davisjam) (Jamie Davis) for disclosing ReDOS vulnerabilities; * [@facelessuser](https://github.com/facelessuser) (Isaac) for pointing out a flaw in clean-css' stateless mode; * [@grandrath](https://github.com/grandrath) (Martin Grandrath) for improving `minify` method source traversal in ES6; * [@jmalonzo](https://github.com/jmalonzo) (Jan Michael Alonzo) for a patch removing node.js' old `sys` package; * [@lukeapage](https://github.com/lukeapage) (Luke Page) for suggestions and testing the source maps feature; Plus everyone else involved in [#125](https://github.com/jakubpawlowicz/clean-css/issues/125) for pushing it forward; * [@madwizard-thomas](https://github.com/madwizard-thomas) for sharing ideas about `@import` inlining and URL rebasing. * [@ngyikp](https://github.com/ngyikp) (Ng Yik Phang) for testing early clean-css 4 versions, reporting bugs, and suggesting numerous improvements. * [@wagenet](https://github.com/wagenet) (Peter Wagenet) for suggesting improvements to `@import` inlining behavior; * [@venemo](https://github.com/venemo) (Timur Kristóf) for an outstanding contribution of advanced property optimizer for 2.2 release; * [@vvo](https://github.com/vvo) (Vincent Voyer) for a patch with better empty element regex and for inspiring us to do many performance improvements in 0.4 release; * [@xhmikosr](https://github.com/xhmikosr) for suggesting new features, like option to remove special comments and strip out URLs quotation, and pointing out numerous improvements like JSHint, media queries, etc. # License clean-css is released under the [MIT License](https://github.com/jakubpawlowicz/clean-css/blob/master/LICENSE). node_modules/clean-css/History.md000066600000233405150425117220013066 0ustar00[4.2.4 / 2021-10-21](https://github.com/jakubpawlowicz/clean-css/compare/v4.2.3...v4.2.4) ================== * Backports prototype pollution fix from 5.x branch. * Backports correct decimal point regex from 5.x branch. [4.2.3 / 2020-01-28](https://github.com/jakubpawlowicz/clean-css/compare/v4.2.2...v4.2.3) ================== * Fixed issue [#1106](https://github.com/jakubpawlowicz/clean-css/issues/1106) - regression in handling RGBA/HSLA colors. [4.2.2 / 2020-01-25](https://github.com/jakubpawlowicz/clean-css/compare/v4.2.1...v4.2.2) ================== * Fixed error when property block has no value. * Fixed issue [#1077](https://github.com/jakubpawlowicz/clean-css/issues/1077) - local fonts with color in name. * Fixed issue [#1082](https://github.com/jakubpawlowicz/clean-css/issues/1082) - correctly convert colors if alpha >= 1. * Fixed issue [#1085](https://github.com/jakubpawlowicz/clean-css/issues/1085) - prevent unquoting of grid elements. [4.2.1 / 2018-08-07](https://github.com/jakubpawlowicz/clean-css/compare/v4.2.0...v4.2.1) ================== * Fixes giving `breakWith` option via a string. [4.2.0 / 2018-08-02](https://github.com/jakubpawlowicz/clean-css/compare/4.1...4.2.0) ================== * Adds `process` method for compatibility with optimize-css-assets-webpack-plugin. * Fixed issue [#861](https://github.com/jakubpawlowicz/clean-css/issues/861) - new `transition` property optimizer. * Fixed issue [#895](https://github.com/jakubpawlowicz/clean-css/issues/895) - ignoring specific styles. * Fixed issue [#947](https://github.com/jakubpawlowicz/clean-css/issues/947) - selector based filtering. * Fixed issue [#964](https://github.com/jakubpawlowicz/clean-css/issues/964) - adds configurable line breaks. * Fixed issue [#986](https://github.com/jakubpawlowicz/clean-css/issues/986) - level 2 optimizations and CSS 4 colors. * Fixed issue [#1000](https://github.com/jakubpawlowicz/clean-css/issues/1000) - carriage return handling in tokenizer. * Fixed issue [#1038](https://github.com/jakubpawlowicz/clean-css/issues/1038) - `font-variation-settings` quoting. * Fixes ReDOS vulnerabilities in validator code. [4.1.11 / 2018-03-06](https://github.com/jakubpawlowicz/clean-css/compare/v4.1.10...v4.1.11) ================== * Backports fixes to ReDOS vulnerabilities in validator code. [4.1.10 / 2018-03-05](https://github.com/jakubpawlowicz/clean-css/compare/v4.1.9...v4.1.10) ================== * Fixed issue [#988](https://github.com/jakubpawlowicz/clean-css/issues/988) - edge case in dropping default animation-duration. * Fixed issue [#989](https://github.com/jakubpawlowicz/clean-css/issues/989) - edge case in removing unused at rules. * Fixed issue [#1001](https://github.com/jakubpawlowicz/clean-css/issues/1001) - corrupted tokenizer state. * Fixed issue [#1006](https://github.com/jakubpawlowicz/clean-css/issues/1006) - edge case in handling invalid source maps. * Fixed issue [#1008](https://github.com/jakubpawlowicz/clean-css/issues/1008) - edge case in breaking up `font` shorthand. [4.1.9 / 2017-09-19](https://github.com/jakubpawlowicz/clean-css/compare/v4.1.8...v4.1.9) ================== * Fixed issue [#971](https://github.com/jakubpawlowicz/clean-css/issues/971) - edge case in removing unused at rules. [4.1.8 / 2017-09-02](https://github.com/jakubpawlowicz/clean-css/compare/v4.1.7...v4.1.8) ================== * Fixed issue [#959](https://github.com/jakubpawlowicz/clean-css/issues/959) - regression in shortening long hex values. * Fixed issue [#960](https://github.com/jakubpawlowicz/clean-css/issues/960) - better explanation of `efficiency` stat. * Fixed issue [#965](https://github.com/jakubpawlowicz/clean-css/issues/965) - edge case in parsing comment endings. * Fixed issue [#966](https://github.com/jakubpawlowicz/clean-css/issues/966) - remote `@import`s referenced from local ones. [4.1.7 / 2017-07-14](https://github.com/jakubpawlowicz/clean-css/compare/v4.1.6...v4.1.7) ================== * Fixed issue [#957](https://github.com/jakubpawlowicz/clean-css/issues/957) - `0%` minification of `width` property. [4.1.6 / 2017-07-08](https://github.com/jakubpawlowicz/clean-css/compare/v4.1.5...v4.1.6) ================== * Fixed issue [#887](https://github.com/jakubpawlowicz/clean-css/issues/887) - edge case in serializing comments. * Fixed issue [#953](https://github.com/jakubpawlowicz/clean-css/issues/953) - beautify breaks attribute selectors. [4.1.5 / 2017-06-29](https://github.com/jakubpawlowicz/clean-css/compare/v4.1.4...v4.1.5) ================== * Fixed issue [#945](https://github.com/jakubpawlowicz/clean-css/issues/945) - hex RGBA colors in IE filters. * Fixed issue [#952](https://github.com/jakubpawlowicz/clean-css/issues/952) - parsing `@page` according to CSS3 spec. [4.1.4 / 2017-06-14](https://github.com/jakubpawlowicz/clean-css/compare/v4.1.3...v4.1.4) ================== * Fixed issue [#950](https://github.com/jakubpawlowicz/clean-css/issues/950) - bug in removing unused `@font-face` rules. [4.1.3 / 2017-05-18](https://github.com/jakubpawlowicz/clean-css/compare/v4.1.2...v4.1.3) ================== * Fixed issue [#946](https://github.com/jakubpawlowicz/clean-css/issues/946) - tokenizing `-ms-grid-columns` repeat syntax. [4.1.2 / 2017-05-10](https://github.com/jakubpawlowicz/clean-css/compare/v4.1.1...v4.1.2) ================== * Fixed issue [#939](https://github.com/jakubpawlowicz/clean-css/issues/939) - semicolon after `@apply` at rule. * Fixed issue [#940](https://github.com/jakubpawlowicz/clean-css/issues/940) - handling more `font` keywords. * Fixed issue [#941](https://github.com/jakubpawlowicz/clean-css/issues/941) - breaking up vendor prefixed `animation`. [4.1.1 / 2017-05-08](https://github.com/jakubpawlowicz/clean-css/compare/v4.1.0...v4.1.1) ================== * Fixed issue [#938](https://github.com/jakubpawlowicz/clean-css/issues/938) - removing unused at-rules with `!important`. [4.1.0 / 2017-05-07](https://github.com/jakubpawlowicz/clean-css/compare/4.0...v4.1.0) ================== * Improves longhand-into-shorthand merging mechanism in complex cases as with `border-*` shorthands. * Fixed issue [#254](https://github.com/jakubpawlowicz/clean-css/issues/254) - adds `font` property optimizer. * Fixed issue [#525](https://github.com/jakubpawlowicz/clean-css/issues/525) - restores `inherit`-based merging. * Fixed issue [#755](https://github.com/jakubpawlowicz/clean-css/issues/755) - adds custom handling of remote requests. * Fixed issue [#860](https://github.com/jakubpawlowicz/clean-css/issues/860) - adds `animation` property optimizer. * Fixed issue [#862](https://github.com/jakubpawlowicz/clean-css/issues/862) - allows removing unused at rules. * Fixed issue [#886](https://github.com/jakubpawlowicz/clean-css/issues/886) - better multi pseudo class / element merging. * Fixed issue [#890](https://github.com/jakubpawlowicz/clean-css/issues/890) - adds toggle to disable empty tokens removal. * Fixed issue [#893](https://github.com/jakubpawlowicz/clean-css/issues/893) - `inline: false` as alias to `inline: 'none'`. * Fixed issue [#905](https://github.com/jakubpawlowicz/clean-css/issues/905) - allows disabling selector sorting. * Fixed issue [#906](https://github.com/jakubpawlowicz/clean-css/issues/906) - improves usability of web UI settings. * Fixed issue [#908](https://github.com/jakubpawlowicz/clean-css/issues/908) - improved `minify` method signature. * Fixed issue [#916](https://github.com/jakubpawlowicz/clean-css/issues/916) - maximum number of merged selectors. * Fixed issue [#920](https://github.com/jakubpawlowicz/clean-css/issues/920) - allows skipping certain properties in level 2 optimizations. * Fixed issue [#934](https://github.com/jakubpawlowicz/clean-css/issues/934) - smarter longhand into shorthand merging. [4.0.13 / 2017-05-10](https://github.com/jakubpawlowicz/clean-css/compare/v4.0.12...v4.0.13) ================== * Backports [#939](https://github.com/jakubpawlowicz/clean-css/issues/939) - semicolon after `@apply` at rule. [4.0.12 / 2017-04-12](https://github.com/jakubpawlowicz/clean-css/compare/v4.0.11...v4.0.12) ================== * Fixed issue [#930](https://github.com/jakubpawlowicz/clean-css/issues/930) - regression in tidying selectors. [4.0.11 / 2017-04-04](https://github.com/jakubpawlowicz/clean-css/compare/v4.0.10...v4.0.11) ================== * Fixed issue [#924](https://github.com/jakubpawlowicz/clean-css/issues/924) - `hsl` zero percent eager optimization. [4.0.10 / 2017-03-22](https://github.com/jakubpawlowicz/clean-css/compare/v4.0.9...v4.0.10) ================== * Fixed issue [#917](https://github.com/jakubpawlowicz/clean-css/issues/917) - prevents grid area unquoting. * Backported [#916](https://github.com/jakubpawlowicz/clean-css/issues/916) - maximum number of merged selectors. * Refixed issue [#556](https://github.com/jakubpawlowicz/clean-css/issues/556) - IE backslash hacks. [4.0.9 / 2017-03-15](https://github.com/jakubpawlowicz/clean-css/compare/v4.0.8...v4.0.9) ================== * Fixed issue [#902](https://github.com/jakubpawlowicz/clean-css/issues/902) - case insensitive attribute matchers. * Fixed issue [#903](https://github.com/jakubpawlowicz/clean-css/issues/903) - web UI and source maps. * Fixed issue [#907](https://github.com/jakubpawlowicz/clean-css/issues/907) - space after closing brace in `@supports`. * Fixed issue [#910](https://github.com/jakubpawlowicz/clean-css/issues/910) - too aggressive precision optimizations. [4.0.8 / 2017-02-22](https://github.com/jakubpawlowicz/clean-css/compare/v4.0.7...v4.0.8) ================== * Fixes edge case in remote stylesheet fetching. * Fixed issue [#899](https://github.com/jakubpawlowicz/clean-css/issues/899) - regression in optimizing pseudo class arguments. [4.0.7 / 2017-02-14](https://github.com/jakubpawlowicz/clean-css/compare/v4.0.6...v4.0.7) ================== * Fixed issue [#891](https://github.com/jakubpawlowicz/clean-css/issues/891) - merging vendor-prefixed pseudo-classes. [4.0.6 / 2017-02-10](https://github.com/jakubpawlowicz/clean-css/compare/v4.0.5...v4.0.6) ================== * Fixed issue [#885](https://github.com/jakubpawlowicz/clean-css/issues/885) - unquoting `font-feature-settings`. [4.0.5 / 2017-02-07](https://github.com/jakubpawlowicz/clean-css/compare/v4.0.4...v4.0.5) ================== * Fixed issue [#884](https://github.com/jakubpawlowicz/clean-css/issues/884) - handling absolute paths on Windows. * Fixed issue [#881](https://github.com/jakubpawlowicz/clean-css/issues/881) - incorrect `require` arity. * Fixed issue [#880](https://github.com/jakubpawlowicz/clean-css/issues/880) - incorrect token type identification. [4.0.4 / 2017-02-04](https://github.com/jakubpawlowicz/clean-css/compare/v4.0.3...v4.0.4) ================== * Fixed issue [#879](https://github.com/jakubpawlowicz/clean-css/issues/879) - incorrect handling of spaces in paths. * Fixed issue [#878](https://github.com/jakubpawlowicz/clean-css/issues/878) - invalid double backslash tokenization. [4.0.3 / 2017-01-30](https://github.com/jakubpawlowicz/clean-css/compare/v4.0.2...v4.0.3) ================== * Fixed issue [#875](https://github.com/jakubpawlowicz/clean-css/issues/875) - invalid traversing in semantic merging. [4.0.2 / 2017-01-26](https://github.com/jakubpawlowicz/clean-css/compare/v4.0.1...v4.0.2) ================== * Fixed issue [#874](https://github.com/jakubpawlowicz/clean-css/issues/874) - regression in at-rule tokenization. [4.0.1 / 2017-01-25](https://github.com/jakubpawlowicz/clean-css/compare/v4.0.0...v4.0.1) ================== * Fixed issue [#866](https://github.com/jakubpawlowicz/clean-css/issues/866) - edge case in `inline` option. * Fixed issue [#867](https://github.com/jakubpawlowicz/clean-css/issues/867) - skip optimizing variable values. * Fixed issue [#868](https://github.com/jakubpawlowicz/clean-css/issues/868) - accept absolute paths in input hash. * Fixed issue [#872](https://github.com/jakubpawlowicz/clean-css/issues/872) - edge case in CSS tokenization. [4.0.0 / 2017-01-23](https://github.com/jakubpawlowicz/clean-css/compare/v3.4.24...v4.0.0) ================== * Adds more detailed error & warning messages on top of the new tokenizer. * Disables restructuring optimizations by default until optimized in #533. * Fixes a bug ignoring incorrect properties in complex restructuring. * Requires Node.js 4.0+ to run. * Removes `benchmark` API option as total time is always reported under `stats` property. * Removes `debug` API switch as stats are always gathered and available under `stats` property. * Replaces the old tokenizer with a new one which doesn't use any escaping. * Replaces the old `@import` inlining with one on top of the new tokenizer. * Re-enables `background-(clip|origin|size)` merging with `background` shorthand. * Simplifies URL rebasing with a single `rebaseTo` option in API or inferred from `--output` in CLI. * Splits `inliner` option into `inlineRequest` and `inlineTimeout`. * Fixed issue [#209](https://github.com/jakubpawlowicz/clean-css/issues/209) - adds output formatting via `format` flag. * Fixed issue [#290](https://github.com/jakubpawlowicz/clean-css/issues/290) - removes aggressive merging. * Fixed issue [#432](https://github.com/jakubpawlowicz/clean-css/issues/432) - adds URLs normalization. * Fixed issue [#460](https://github.com/jakubpawlowicz/clean-css/issues/460) - unescaped semicolon in selector. * Fixed issue [#657](https://github.com/jakubpawlowicz/clean-css/issues/657) - adds property name validation. * Fixed issue [#685](https://github.com/jakubpawlowicz/clean-css/issues/685) - adds lowercasing hex colors optimization. * Fixed issue [#686](https://github.com/jakubpawlowicz/clean-css/issues/686) - adds rounding precision for all units. * Fixed issue [#703](https://github.com/jakubpawlowicz/clean-css/issues/703) - changes default IE compatibility to 10+. * Fixed issue [#731](https://github.com/jakubpawlowicz/clean-css/issues/731) - adds granular control over level 2 optimizations. * Fixed issue [#739](https://github.com/jakubpawlowicz/clean-css/issues/739) - error when a closing brace is missing. * Fixed issue [#750](https://github.com/jakubpawlowicz/clean-css/issues/750) - allows `width` overriding. * Fixed issue [#756](https://github.com/jakubpawlowicz/clean-css/issues/756) - adds disabling font-weight optimizations. * Fixed issue [#758](https://github.com/jakubpawlowicz/clean-css/issues/758) - ignores rules with empty selector. * Fixed issue [#767](https://github.com/jakubpawlowicz/clean-css/issues/767) - disables remote `@import` inlining by default. * Fixed issue [#773](https://github.com/jakubpawlowicz/clean-css/issues/773) - adds reordering based on selector specificity. * Fixed issue [#785](https://github.com/jakubpawlowicz/clean-css/issues/785) - adds `@font-face` de-duplication. * Fixed issue [#791](https://github.com/jakubpawlowicz/clean-css/issues/791) - resolves imports in-memory if possible. * Fixed issue [#796](https://github.com/jakubpawlowicz/clean-css/issues/796) - semantic merging for `@media` blocks. * Fixed issue [#801](https://github.com/jakubpawlowicz/clean-css/issues/801) - smarter `@import` inlining. * Fixed issue [#806](https://github.com/jakubpawlowicz/clean-css/issues/806) - skip optimizing variable properties. * Fixed issue [#817](https://github.com/jakubpawlowicz/clean-css/issues/817) - makes `off` disable rounding. * Fixed issue [#818](https://github.com/jakubpawlowicz/clean-css/issues/818) - disables `px` rounding by default. * Fixed issue [#828](https://github.com/jakubpawlowicz/clean-css/issues/828) - `-chrome-` hack support. * Fixed issue [#829](https://github.com/jakubpawlowicz/clean-css/issues/829) - adds more strict selector merging rules. * Fixed issue [#834](https://github.com/jakubpawlowicz/clean-css/issues/834) - adds extra line break in nested blocks. * Fixed issue [#836](https://github.com/jakubpawlowicz/clean-css/issues/836) - enables level `0` optimizations. * Fixed issue [#839](https://github.com/jakubpawlowicz/clean-css/issues/839) - allows URIs in import inlining rules. * Fixed issue [#840](https://github.com/jakubpawlowicz/clean-css/issues/840) - allows input source map as map object. * Fixed issue [#843](https://github.com/jakubpawlowicz/clean-css/issues/843) - regression in selector handling. * Fixed issue [#845](https://github.com/jakubpawlowicz/clean-css/issues/845) - web compatibility of 4.0 branch. * Fixed issue [#847](https://github.com/jakubpawlowicz/clean-css/issues/847) - regression in handling invalid selectors. * Fixed issue [#849](https://github.com/jakubpawlowicz/clean-css/issues/849) - disables inlining protocol-less resources. * Fixed issue [#856](https://github.com/jakubpawlowicz/clean-css/issues/856) - allows `minify` to return a promise. * Fixed issue [#857](https://github.com/jakubpawlowicz/clean-css/issues/857) - normalizes CleanCSS API interface. * Fixed issue [#863](https://github.com/jakubpawlowicz/clean-css/issues/863) - adds `transform` callback for custom optimizations. [3.4.26 / 2017-05-10](https://github.com/jakubpawlowicz/clean-css/compare/v3.4.25...v3.4.26) ================== * Backports [#939](https://github.com/jakubpawlowicz/clean-css/issues/939) - semicolon after `@apply` at-rule. [3.4.25 / 2017-02-22](https://github.com/jakubpawlowicz/clean-css/compare/v3.4.24...v3.4.25) ================== * Fixed issue [#897](https://github.com/jakubpawlowicz/clean-css/issues/897) - tokenization with escaped markers. [3.4.24 / 2017-01-20](https://github.com/jakubpawlowicz/clean-css/compare/v3.4.23...v3.4.24) ================== * Fixed issue [#859](https://github.com/jakubpawlowicz/clean-css/issues/859) - avoid `-webkit-border-radius` optimizations. [3.4.23 / 2016-12-17](https://github.com/jakubpawlowicz/clean-css/compare/v3.4.22...v3.4.23) ================== * Fixed issue [#844](https://github.com/jakubpawlowicz/clean-css/issues/844) - regression in property values extraction. [3.4.22 / 2016-12-12](https://github.com/jakubpawlowicz/clean-css/compare/v3.4.21...v3.4.22) ================== * Fixed issue [#841](https://github.com/jakubpawlowicz/clean-css/issues/841) - disabled importing and files passed as array. * Ignores `@import` at-rules if appearing after any non-`@import` rules. [3.4.21 / 2016-11-16](https://github.com/jakubpawlowicz/clean-css/compare/v3.4.20...v3.4.21) ================== * Fixed issue [#821](https://github.com/jakubpawlowicz/clean-css/issues/821) - reducing non-adjacent rules. * Fixed issue [#830](https://github.com/jakubpawlowicz/clean-css/issues/830) - reordering border-* properties. * Fixed issue [#833](https://github.com/jakubpawlowicz/clean-css/issues/833) - moving `@media` queries. [3.4.20 / 2016-09-26](https://github.com/jakubpawlowicz/clean-css/compare/v3.4.19...v3.4.20) ================== * Fixed issue [#814](https://github.com/jakubpawlowicz/clean-css/issues/814) - `:selection` rule merging. [3.4.19 / 2016-07-25](https://github.com/jakubpawlowicz/clean-css/compare/v3.4.18...v3.4.19) ================== * Fixed issue [#795](https://github.com/jakubpawlowicz/clean-css/issues/795) - `!important` and override compacting. [3.4.18 / 2016-06-15](https://github.com/jakubpawlowicz/clean-css/compare/v3.4.17...v3.4.18) ================== * Fixed issue [#787](https://github.com/jakubpawlowicz/clean-css/issues/787) - regression in processing data URIs. [3.4.17 / 2016-06-04](https://github.com/jakubpawlowicz/clean-css/compare/v3.4.16...v3.4.17) ================== * Fixed issue [#783](https://github.com/jakubpawlowicz/clean-css/issues/783) - regression in processing data URIs. [3.4.16 / 2016-06-02](https://github.com/jakubpawlowicz/clean-css/compare/v3.4.15...v3.4.16) ================== * Fixed issue [#781](https://github.com/jakubpawlowicz/clean-css/issues/781) - regression in override compacting. * Fixed issue [#782](https://github.com/jakubpawlowicz/clean-css/issues/782) - regression in processing data URIs. [3.4.15 / 2016-06-01](https://github.com/jakubpawlowicz/clean-css/compare/v3.4.14...v3.4.15) ================== * Fixed issue [#776](https://github.com/jakubpawlowicz/clean-css/issues/776) - edge case in quoted data URIs. * Fixed issue [#779](https://github.com/jakubpawlowicz/clean-css/issues/779) - merging `background-(position|size)`. * Fixed issue [#780](https://github.com/jakubpawlowicz/clean-css/issues/780) - space after inlined variables. [3.4.14 / 2016-05-31](https://github.com/jakubpawlowicz/clean-css/compare/v3.4.13...v3.4.14) ================== * Fixed issue [#751](https://github.com/jakubpawlowicz/clean-css/issues/751) - stringifying CSS variables. * Fixed issue [#763](https://github.com/jakubpawlowicz/clean-css/issues/763) - data URI SVG and quoting. * Fixed issue [#765](https://github.com/jakubpawlowicz/clean-css/issues/765) - two values of border-radius. * Fixed issue [#768](https://github.com/jakubpawlowicz/clean-css/issues/768) - invalid border-radius property. [3.4.13 / 2016-05-23](https://github.com/jakubpawlowicz/clean-css/compare/v3.4.12...v3.4.13) ================== * Fixed issue [#734](https://github.com/jakubpawlowicz/clean-css/issues/769) - Node.js 6.x support. [3.4.12 / 2016-04-09](https://github.com/jakubpawlowicz/clean-css/compare/v3.4.11...v3.4.12) ================== * Fixed issue [#734](https://github.com/jakubpawlowicz/clean-css/issues/734) - `--root` option edge case. * Fixed issue [#758](https://github.com/jakubpawlowicz/clean-css/issues/758) - treats empty rule as unmergeable. [3.4.11 / 2016-04-01](https://github.com/jakubpawlowicz/clean-css/compare/v3.4.10...v3.4.11) ================== * Fixed issue [#738](https://github.com/jakubpawlowicz/clean-css/issues/738) - edge case in comment processing. * Fixed issue [#741](https://github.com/jakubpawlowicz/clean-css/issues/741) - HTTP proxy with HTTPS inlining. * Fixed issue [#743](https://github.com/jakubpawlowicz/clean-css/issues/743) - background shorthand and source maps. * Fixed issue [#745](https://github.com/jakubpawlowicz/clean-css/issues/745) - matching mixed case `!important`. [3.4.10 / 2016-02-29](https://github.com/jakubpawlowicz/clean-css/compare/v3.4.9...v3.4.10) ================== * Fixed issue [#735](https://github.com/jakubpawlowicz/clean-css/issues/735) - whitespace removal with escaped chars. [3.4.9 / 2016-01-03](https://github.com/jakubpawlowicz/clean-css/compare/v3.4.8...v3.4.9) ================== * Sped up merging by body advanced optimization. * Fixed issue [#693](https://github.com/jakubpawlowicz/clean-css/issues/693) - restructuring edge case. * Fixed issue [#711](https://github.com/jakubpawlowicz/clean-css/issues/711) - border fuzzy matching. * Fixed issue [#714](https://github.com/jakubpawlowicz/clean-css/issues/714) - stringifying property level at rules. * Fixed issue [#715](https://github.com/jakubpawlowicz/clean-css/issues/715) - stack too deep in comment scan. [3.4.8 / 2015-11-13](https://github.com/jakubpawlowicz/clean-css/compare/v3.4.7...v3.4.8) ================== * Fixed issue [#676](https://github.com/jakubpawlowicz/clean-css/issues/676) - fuzzy matching unqoted data URIs. [3.4.7 / 2015-11-10](https://github.com/jakubpawlowicz/clean-css/compare/v3.4.6...v3.4.7) ================== * Fixed issue [#692](https://github.com/jakubpawlowicz/clean-css/issues/692) - edge case in URL quoting. * Fixed issue [#695](https://github.com/jakubpawlowicz/clean-css/issues/695) - shorthand overriding edge case. * Fixed issue [#699](https://github.com/jakubpawlowicz/clean-css/issues/699) - IE9 transparent hack. * Fixed issue [#701](https://github.com/jakubpawlowicz/clean-css/issues/701) - `url` quoting with hash arguments. [3.4.6 / 2015-10-14](https://github.com/jakubpawlowicz/clean-css/compare/v3.4.5...v3.4.6) ================== * Fixed issue [#679](https://github.com/jakubpawlowicz/clean-css/issues/679) - wrong rebasing of remote URLs. [3.4.5 / 2015-09-28](https://github.com/jakubpawlowicz/clean-css/compare/v3.4.4...v3.4.5) ================== * Fixed issue [#681](https://github.com/jakubpawlowicz/clean-css/issues/681) - property inheritance & restructuring. * Fixed issue [#675](https://github.com/jakubpawlowicz/clean-css/issues/675) - overriding with `!important`. [3.4.4 / 2015-09-21](https://github.com/jakubpawlowicz/clean-css/compare/v3.4.3...v3.4.4) ================== * Fixed issue [#626](https://github.com/jakubpawlowicz/clean-css/issues/626) - edge case in import rebasing. * Fixed issue [#674](https://github.com/jakubpawlowicz/clean-css/issues/674) - adjacent merging order. [3.4.3 / 2015-09-15](https://github.com/jakubpawlowicz/clean-css/compare/v3.4.2...v3.4.3) ================== * Fixed issue [#668](https://github.com/jakubpawlowicz/clean-css/issues/668) - node v4 path.join. * Fixed issue [#669](https://github.com/jakubpawlowicz/clean-css/issues/669) - adjacent overriding with `!important`. [3.4.2 / 2015-09-14](https://github.com/jakubpawlowicz/clean-css/compare/v3.4.1...v3.4.2) ================== * Fixed issue [#598](https://github.com/jakubpawlowicz/clean-css/issues/598) - restructuring border properties. * Fixed issue [#654](https://github.com/jakubpawlowicz/clean-css/issues/654) - disables length optimizations. * Fixed issue [#655](https://github.com/jakubpawlowicz/clean-css/issues/655) - shorthands override merging. * Fixed issue [#660](https://github.com/jakubpawlowicz/clean-css/issues/660) - !important token overriding. * Fixed issue [#662](https://github.com/jakubpawlowicz/clean-css/issues/662) - !important selector reducing. * Fixed issue [#667](https://github.com/jakubpawlowicz/clean-css/issues/667) - rebasing remote URLs. [3.4.1 / 2015-08-27](https://github.com/jakubpawlowicz/clean-css/compare/v3.4.0...v3.4.1) ================== * Fixed issue [#652](https://github.com/jakubpawlowicz/clean-css/issues/652) - order of restoring and removing tokens. [3.4.0 / 2015-08-27](https://github.com/jakubpawlowicz/clean-css/compare/v3.3.10...v3.4.0) ================== * Adds an option for a fine-grained `@import` control. * Adds unit compatibility switches to disable length optimizations. * Adds inferring proxy settings from HTTP_PROXY environment variable. * Adds support for Polymer / Web Components special selectors. * Adds support for Polymer mixins. * Adds testing source maps in batch mode. * Unifies wrappers for simple & advanced optimizations. * Fixed issue [#596](https://github.com/jakubpawlowicz/clean-css/issues/596) - support for !ie IE<8 hack. * Fixed issue [#599](https://github.com/jakubpawlowicz/clean-css/issues/599) - support for inlined source maps. * Fixed issue [#607](https://github.com/jakubpawlowicz/clean-css/issues/607) - adds better rule reordering. * Fixed issue [#612](https://github.com/jakubpawlowicz/clean-css/issues/612) - adds HTTP proxy support. * Fixed issue [#618](https://github.com/jakubpawlowicz/clean-css/issues/618) - adds safer function validation. * Fixed issue [#625](https://github.com/jakubpawlowicz/clean-css/issues/625) - adds length unit optimizations. * Fixed issue [#632](https://github.com/jakubpawlowicz/clean-css/issues/632) - adds disabling remote `import`s. * Fixed issue [#635](https://github.com/jakubpawlowicz/clean-css/issues/635) - adds safer `0%` optimizations. * Fixed issue [#644](https://github.com/jakubpawlowicz/clean-css/issues/644) - adds time unit optimizations. * Fixed issue [#645](https://github.com/jakubpawlowicz/clean-css/issues/645) - adds bottom to top `media` merging. * Fixed issue [#648](https://github.com/jakubpawlowicz/clean-css/issues/648) - adds property level at-rule support. [3.3.10 / 2015-08-27](https://github.com/jakubpawlowicz/clean-css/compare/v3.3.9...v3.3.10) ================== * Adds better comments + keepBreaks handling. * Adds better text normalizing in source maps mode. * Fixes non-adjacent optimizations for source maps. * Fixes removing unused items. * Improves `outline` break up with source maps. * Refixed issue [#629](https://github.com/jakubpawlowicz/clean-css/issues/629) - source maps & background shorthands. [3.3.9 / 2015-08-09](https://github.com/jakubpawlowicz/clean-css/compare/v3.3.8...v3.3.9) ================== * Fixed issue [#640](https://github.com/jakubpawlowicz/clean-css/issues/640) - URI processing regression. [3.3.8 / 2015-08-06](https://github.com/jakubpawlowicz/clean-css/compare/v3.3.7...v3.3.8) ================== * Fixed issue [#629](https://github.com/jakubpawlowicz/clean-css/issues/629) - source maps & background shorthands. * Fixed issue [#630](https://github.com/jakubpawlowicz/clean-css/issues/630) - vendor prefixed flex optimizations. * Fixed issue [#633](https://github.com/jakubpawlowicz/clean-css/issues/633) - handling data URI with brackets. * Fixed issue [#634](https://github.com/jakubpawlowicz/clean-css/issues/634) - merging :placeholder selectors. [3.3.7 / 2015-07-29](https://github.com/jakubpawlowicz/clean-css/compare/v3.3.6...v3.3.7) ================== * Fixed issue [#616](https://github.com/jakubpawlowicz/clean-css/issues/616) - ordering in restructuring. [3.3.6 / 2015-07-14](https://github.com/jakubpawlowicz/clean-css/compare/v3.3.5...v3.3.6) ================== * Fixed issue [#620](https://github.com/jakubpawlowicz/clean-css/issues/620) - `bold` style in font shorthands. [3.3.5 / 2015-07-01](https://github.com/jakubpawlowicz/clean-css/compare/v3.3.4...v3.3.5) ================== * Fixed issue [#608](https://github.com/jakubpawlowicz/clean-css/issues/608) - custom URI protocols handling. [3.3.4 / 2015-06-24](https://github.com/jakubpawlowicz/clean-css/compare/v3.3.3...v3.3.4) ================== * Fixed issue [#610](https://github.com/jakubpawlowicz/clean-css/issues/610) - `border:inherit` restoring. * Fixed issue [#611](https://github.com/jakubpawlowicz/clean-css/issues/611) - edge case in quote stripping. [3.3.3 / 2015-06-16](https://github.com/jakubpawlowicz/clean-css/compare/v3.3.2...v3.3.3) ================== * Fixed issue [#603](https://github.com/jakubpawlowicz/clean-css/issues/603) - IE suffix hack defaults to on. [3.3.2 / 2015-06-14](https://github.com/jakubpawlowicz/clean-css/compare/v3.3.1...v3.3.2) ================== * Fixed issue [#595](https://github.com/jakubpawlowicz/clean-css/issues/595) - more relaxed block matching. * Fixed issue [#601](https://github.com/jakubpawlowicz/clean-css/issues/601) - percentage minifying inside `flex`. * Fixed issue [#602](https://github.com/jakubpawlowicz/clean-css/issues/602) - backslash IE hacks after a space. [3.3.1 / 2015-06-02](https://github.com/jakubpawlowicz/clean-css/compare/v3.3.0...v3.3.1) ================== * Fixed issue [#590](https://github.com/jakubpawlowicz/clean-css/issues/590) - edge case in `@import` processing. [3.3.0 / 2015-05-31](https://github.com/jakubpawlowicz/clean-css/compare/v3.2.11...v3.3.0) ================== * Cleans up url rebase code getting rid of unnecessary state. * Cleans up tokenizer code getting rid of unnecessary state. * Moves source maps tracker into lib/source-maps/track. * Moves tokenizer code into lib/tokenizer. * Moves URL scanner into lib/urls/reduce (was named incorrectly before). * Moves URL rebasing & rewriting into lib/urls. * Fixed issue [#375](https://github.com/jakubpawlowicz/clean-css/issues/375) - unit compatibility switches. * Fixed issue [#436](https://github.com/jakubpawlowicz/clean-css/issues/436) - refactors URI rewriting. * Fixed issue [#448](https://github.com/jakubpawlowicz/clean-css/issues/448) - rebasing no protocol URIs. * Fixed issue [#517](https://github.com/jakubpawlowicz/clean-css/issues/517) - turning off color optimizations. * Fixed issue [#542](https://github.com/jakubpawlowicz/clean-css/issues/542) - space after closing brace in IE. * Fixed issue [#562](https://github.com/jakubpawlowicz/clean-css/issues/562) - optimizing invalid color values. * Fixed issue [#563](https://github.com/jakubpawlowicz/clean-css/issues/563) - `background:inherit` restoring. * Fixed issue [#570](https://github.com/jakubpawlowicz/clean-css/issues/570) - rebasing "no-url()" imports. * Fixed issue [#574](https://github.com/jakubpawlowicz/clean-css/issues/574) - rewriting internal URLs. * Fixed issue [#575](https://github.com/jakubpawlowicz/clean-css/issues/575) - missing directory as a `target`. * Fixed issue [#577](https://github.com/jakubpawlowicz/clean-css/issues/577) - `background-clip` into shorthand. * Fixed issue [#579](https://github.com/jakubpawlowicz/clean-css/issues/579) - `background-origin` into shorthand. * Fixed issue [#580](https://github.com/jakubpawlowicz/clean-css/issues/580) - mixed `@import` processing. * Fixed issue [#582](https://github.com/jakubpawlowicz/clean-css/issues/582) - overriding with prefixed values. * Fixed issue [#583](https://github.com/jakubpawlowicz/clean-css/issues/583) - URL quoting for SVG data. * Fixed issue [#587](https://github.com/jakubpawlowicz/clean-css/issues/587) - too aggressive `border` reordering. [3.2.11 / 2015-05-31](https://github.com/jakubpawlowicz/clean-css/compare/v3.2.10...v3.2.11) ================== * Fixed issue [#563](https://github.com/jakubpawlowicz/clean-css/issues/563) - `background:inherit` restoring. * Fixed issue [#582](https://github.com/jakubpawlowicz/clean-css/issues/582) - overriding with prefixed values. * Fixed issue [#583](https://github.com/jakubpawlowicz/clean-css/issues/583) - URL quoting for SVG data. * Fixed issue [#587](https://github.com/jakubpawlowicz/clean-css/issues/587) - too aggressive `border` reordering. [3.2.10 / 2015-05-14](https://github.com/jakubpawlowicz/clean-css/compare/v3.2.9...v3.2.10) ================== * Fixed issue [#572](https://github.com/jakubpawlowicz/clean-css/issues/572) - empty elements removal. [3.2.9 / 2015-05-08](https://github.com/jakubpawlowicz/clean-css/compare/v3.2.8...v3.2.9) ================== * Fixed issue [#567](https://github.com/jakubpawlowicz/clean-css/issues/567) - merging colors as functions. [3.2.8 / 2015-05-04](https://github.com/jakubpawlowicz/clean-css/compare/v3.2.7...v3.2.8) ================== * Fixed issue [#561](https://github.com/jakubpawlowicz/clean-css/issues/561) - restructuring special selectors. [3.2.7 / 2015-05-03](https://github.com/jakubpawlowicz/clean-css/compare/v3.2.6...v3.2.7) ================== * Fixed issue [#551](https://github.com/jakubpawlowicz/clean-css/issues/551) - edge case in restructuring. * Fixed issue [#553](https://github.com/jakubpawlowicz/clean-css/issues/553) - another style of SVG fallback. * Fixed issue [#558](https://github.com/jakubpawlowicz/clean-css/issues/558) - units in same selector merging. [3.2.6 / 2015-04-28](https://github.com/jakubpawlowicz/clean-css/compare/v3.2.5...v3.2.6) ================== * Fixed issue [#550](https://github.com/jakubpawlowicz/clean-css/issues/550) - proper `contentSources` tracking. * Fixed issue [#556](https://github.com/jakubpawlowicz/clean-css/issues/556) - regression in IE backslash hacks. [3.2.5 / 2015-04-25](https://github.com/jakubpawlowicz/clean-css/compare/v3.2.4...v3.2.5) ================== * Fixed issue [#543](https://github.com/jakubpawlowicz/clean-css/issues/543) - better "comment in body" handling. * Fixed issue [#548](https://github.com/jakubpawlowicz/clean-css/issues/548) - regression in font minifying. * Fixed issue [#549](https://github.com/jakubpawlowicz/clean-css/issues/549) - special comments in source maps. [3.2.4 / 2015-04-24](https://github.com/jakubpawlowicz/clean-css/compare/v3.2.3...v3.2.4) ================== * Fixed issue [#544](https://github.com/jakubpawlowicz/clean-css/issues/544) - regression in same value merging. * Fixed issue [#546](https://github.com/jakubpawlowicz/clean-css/issues/546) - IE<11 `calc()` issue. [3.2.3 / 2015-04-22](https://github.com/jakubpawlowicz/clean-css/compare/v3.2.2...v3.2.3) ================== * Fixed issue [#541](https://github.com/jakubpawlowicz/clean-css/issues/541) - `outline-style:auto` in shorthand. [3.2.2 / 2015-04-21](https://github.com/jakubpawlowicz/clean-css/compare/v3.2.1...v3.2.2) ================== * Fixed issue [#537](https://github.com/jakubpawlowicz/clean-css/issues/537) - regression in simple optimizer. [3.2.1 / 2015-04-20](https://github.com/jakubpawlowicz/clean-css/compare/v3.2.0...v3.2.1) ================== * Fixed issue [#534](https://github.com/jakubpawlowicz/clean-css/issues/534) - wrong `@font-face` stringifying. [3.2.0 / 2015-04-19](https://github.com/jakubpawlowicz/clean-css/compare/v3.1.9...v3.2.0) ================== * Bumps commander to 2.8.x. * Fixes remote asset rebasing when passing data as a hash. * Improves path resolution inside source maps. * Makes `root` option implicitely default to `process.cwd()`. * Fixed issue [#371](https://github.com/jakubpawlowicz/clean-css/issues/371) - `background` fallback with `none`. * Fixed issue [#376](https://github.com/jakubpawlowicz/clean-css/issues/376) - option to disable `0[unit]` -> `0`. * Fixed issue [#396](https://github.com/jakubpawlowicz/clean-css/issues/396) - better input source maps tracking. * Fixed issue [#397](https://github.com/jakubpawlowicz/clean-css/issues/397) - support for source map sources. * Fixed issue [#399](https://github.com/jakubpawlowicz/clean-css/issues/399) - support compacting with source maps. * Fixed issue [#429](https://github.com/jakubpawlowicz/clean-css/issues/429) - unifies data tokenization. * Fixed issue [#446](https://github.com/jakubpawlowicz/clean-css/issues/446) - `list-style` fuzzy matching. * Fixed issue [#468](https://github.com/jakubpawlowicz/clean-css/issues/468) - bumps `source-map` to 0.4.x. * Fixed issue [#480](https://github.com/jakubpawlowicz/clean-css/issues/480) - extracting uppercase property names. * Fixed issue [#487](https://github.com/jakubpawlowicz/clean-css/issues/487) - source map paths under Windows. * Fixed issue [#490](https://github.com/jakubpawlowicz/clean-css/issues/490) - vendor prefixed multivalue `background`. * Fixed issue [#500](https://github.com/jakubpawlowicz/clean-css/issues/500) - merging duplicate adjacent properties. * Fixed issue [#504](https://github.com/jakubpawlowicz/clean-css/issues/504) - keeping `url()` quotes. * Fixed issue [#507](https://github.com/jakubpawlowicz/clean-css/issues/507) - merging longhands into many shorthands. * Fixed issue [#508](https://github.com/jakubpawlowicz/clean-css/issues/508) - removing duplicate media queries. * Fixed issue [#521](https://github.com/jakubpawlowicz/clean-css/issues/521) - unit optimizations inside `calc()`. * Fixed issue [#524](https://github.com/jakubpawlowicz/clean-css/issues/524) - timeouts in `@import` inlining. * Fixed issue [#526](https://github.com/jakubpawlowicz/clean-css/issues/526) - shorthand overriding into a function. * Fixed issue [#528](https://github.com/jakubpawlowicz/clean-css/issues/528) - better support for IE<9 hacks. * Fixed issue [#529](https://github.com/jakubpawlowicz/clean-css/issues/529) - wrong font weight minification. [3.1.9 / 2015-04-04](https://github.com/jakubpawlowicz/clean-css/compare/v3.1.8...v3.1.9) ================== * Fixes issue [#511](https://github.com/jakubpawlowicz/clean-css/issues/511) - `)` advanced processing. [3.1.8 / 2015-03-17](https://github.com/jakubpawlowicz/clean-css/compare/v3.1.7...v3.1.8) ================== * Fixes issue [#498](https://github.com/jakubpawlowicz/clean-css/issues/498) - reordering and flexbox. * Fixes issue [#499](https://github.com/jakubpawlowicz/clean-css/issues/499) - too aggressive `-` removal. [3.1.7 / 2015-03-16](https://github.com/jakubpawlowicz/clean-css/compare/v3.1.6...v3.1.7) ================== * Backports fix to [#480](https://github.com/jakubpawlowicz/clean-css/issues/480) - reordering and uppercase properties. * Fixes issue [#496](https://github.com/jakubpawlowicz/clean-css/issues/496) - space after bracket removal. [3.1.6 / 2015-03-12](https://github.com/jakubpawlowicz/clean-css/compare/v3.1.5...v3.1.6) ================== * Fixes issue [#489](https://github.com/jakubpawlowicz/clean-css/issues/489) - `AlphaImageLoader` IE filter. [3.1.5 / 2015-03-06](https://github.com/jakubpawlowicz/clean-css/compare/v3.1.4...v3.1.5) ================== * Fixes issue [#483](https://github.com/jakubpawlowicz/clean-css/issues/483) - property order in restructuring. [3.1.4 / 2015-03-04](https://github.com/jakubpawlowicz/clean-css/compare/v3.1.3...v3.1.4) ================== * Fixes issue [#472](https://github.com/jakubpawlowicz/clean-css/issues/472) - broken function minification. * Fixes issue [#477](https://github.com/jakubpawlowicz/clean-css/issues/477) - `@import`s order in restructuring. * Fixes issue [#478](https://github.com/jakubpawlowicz/clean-css/issues/478) - ultimate fix to brace whitespace. [3.1.3 / 2015-03-03](https://github.com/jakubpawlowicz/clean-css/compare/v3.1.2...v3.1.3) ================== * Fixes issue [#464](https://github.com/jakubpawlowicz/clean-css/issues/464) - data URI with quoted braces. * Fixes issue [#475](https://github.com/jakubpawlowicz/clean-css/issues/475) - whitespace after closing brace. [3.1.2 / 2015-03-01](https://github.com/jakubpawlowicz/clean-css/compare/v3.1.1...v3.1.2) ================== * Refixed issue [#471](https://github.com/jakubpawlowicz/clean-css/issues/471) - correct order after restructuring. * Fixes issue [#466](https://github.com/jakubpawlowicz/clean-css/issues/466) - rebuilding background shorthand. * Fixes issue [#462](https://github.com/jakubpawlowicz/clean-css/issues/462) - escaped apostrophes in selectors. [3.1.1 / 2015-02-27](https://github.com/jakubpawlowicz/clean-css/compare/v3.1.0...v3.1.1) ================== * Fixed issue [#469](https://github.com/jakubpawlowicz/clean-css/issues/469) - extracting broken property. * Fixed issue [#470](https://github.com/jakubpawlowicz/clean-css/issues/470) - negative padding removal. * Fixed issue [#471](https://github.com/jakubpawlowicz/clean-css/issues/471) - correct order after restructuring. [3.1.0 / 2015-02-26](https://github.com/jakubpawlowicz/clean-css/compare/v3.0.10...v3.1.0) ================== * Adds `0deg` to `0` minification where possible. * Adds better non-adjacent selector merging when body is the same. * Adds official support for node.js 0.12. * Adds official support for io.js 1.0. * Adds restructuring optimizations to reorganize selectors, which vastly improves minification. * Fixed issue [#158](https://github.com/jakubpawlowicz/clean-css/issues/158) - adds body-based selectors reduction. * Fixed issue [#182](https://github.com/jakubpawlowicz/clean-css/issues/182) - removing space after closing brace. * Fixed issue [#204](https://github.com/jakubpawlowicz/clean-css/issues/204) - `@media` merging. * Fixed issue [#351](https://github.com/jakubpawlowicz/clean-css/issues/351) - remote `@import`s after content. * Fixed issue [#357](https://github.com/jakubpawlowicz/clean-css/issues/357) - non-standard but valid URLs. * Fixed issue [#416](https://github.com/jakubpawlowicz/clean-css/issues/416) - accepts hash as `minify` argument. * Fixed issue [#419](https://github.com/jakubpawlowicz/clean-css/issues/419) - multiple input source maps. * Fixed issue [#435](https://github.com/jakubpawlowicz/clean-css/issues/435) - `background-clip` in shorthand. * Fixed issue [#439](https://github.com/jakubpawlowicz/clean-css/issues/439) - `background-origin` in shorthand. * Fixed issue [#442](https://github.com/jakubpawlowicz/clean-css/issues/442) - space before adjacent `nav`. * Fixed issue [#445](https://github.com/jakubpawlowicz/clean-css/issues/445) - regression issue in url processor. * Fixed issue [#449](https://github.com/jakubpawlowicz/clean-css/issues/449) - warns of missing close braces. * Fixed issue [#463](https://github.com/jakubpawlowicz/clean-css/issues/463) - relative remote `@import` URLs. [3.0.10 / 2015-02-07](https://github.com/jakubpawlowicz/clean-css/compare/v3.0.9...v3.0.10) ================== * Fixed issue [#453](https://github.com/jakubpawlowicz/clean-css/issues/453) - double `background-repeat`. * Fixed issue [#455](https://github.com/jakubpawlowicz/clean-css/issues/455) - property extracting regression. [3.0.9 / 2015-02-04](https://github.com/jakubpawlowicz/clean-css/compare/v3.0.8...v3.0.9) ================== * Fixed issue [#452](https://github.com/jakubpawlowicz/clean-css/issues/452) - regression in advanced merging. [3.0.8 / 2015-01-31](https://github.com/jakubpawlowicz/clean-css/compare/v3.0.7...v3.0.8) ================== * Fixed issue [#447](https://github.com/jakubpawlowicz/clean-css/issues/447) - `background-color` in shorthands. * Fixed issue [#450](https://github.com/jakubpawlowicz/clean-css/issues/450) - name to hex color converting. [3.0.7 / 2015-01-22](https://github.com/jakubpawlowicz/clean-css/compare/v3.0.6...v3.0.7) ================== * Fixed issue [#441](https://github.com/jakubpawlowicz/clean-css/issues/441) - hex to name color converting. [3.0.6 / 2015-01-20](https://github.com/jakubpawlowicz/clean-css/compare/v3.0.5...v3.0.6) ================== * Refixed issue [#414](https://github.com/jakubpawlowicz/clean-css/issues/414) - source maps position fallback. [3.0.5 / 2015-01-18](https://github.com/jakubpawlowicz/clean-css/compare/v3.0.4...v3.0.5) ================== * Fixed issue [#414](https://github.com/jakubpawlowicz/clean-css/issues/414) - source maps position fallback. * Fixed issue [#433](https://github.com/jakubpawlowicz/clean-css/issues/433) - meging `!important` in shorthands. [3.0.4 / 2015-01-11](https://github.com/jakubpawlowicz/clean-css/compare/v3.0.3...v3.0.4) ================== * Fixed issue [#314](https://github.com/jakubpawlowicz/clean-css/issues/314) - spaces inside `calc`. [3.0.3 / 2015-01-07](https://github.com/jakubpawlowicz/clean-css/compare/v3.0.2...v3.0.3) ================== * Just a version bump as npm incorrectly things 2.2.23 is the latest one. [3.0.2 / 2015-01-04](https://github.com/jakubpawlowicz/clean-css/compare/v3.0.1...v3.0.2) ================== * Fixed issue [#422](https://github.com/jakubpawlowicz/clean-css/issues/422) - handling `calc` as a unit. [3.0.1 / 2014-12-19](https://github.com/jakubpawlowicz/clean-css/compare/v3.0.0...v3.0.1) ================== * Fixed issue [#410](https://github.com/jakubpawlowicz/clean-css/issues/410) - advanced merging and comments. * Fixed issue [#411](https://github.com/jakubpawlowicz/clean-css/issues/411) - properties and important comments. [3.0.0 / 2014-12-18](https://github.com/jakubpawlowicz/clean-css/compare/v2.2.22...v3.0.0) ================== * Adds more granular control over compatibility settings. * Adds support for @counter-style at-rule. * Adds `--source-map`/`sourceMap` switch for building input's source map. * Adds `--skip-shorthand-compacting`/`shorthandComacting` option for disabling shorthand compacting. * Allows `target` option to be a path to a folder instead of a file. * Allows disabling rounding precision. By [@superlukas](https://github.com/superlukas). * Breaks 2.x compatibility for using CleanCSS as a function. * Changes `minify` method output to handle multiple outputs. * Reworks minification to tokenize first then minify. See [changes](https://github.com/jakubpawlowicz/clean-css/compare/b06f37d...dd8c14a). * Removes support for node.js 0.8.x. * Renames `noAdvanced` option into `advanced`. * Renames `noAggressiveMerging` option into `aggressiveMerging`. * Renames `noRebase` option into `rebase`. * Speeds up advanced processing by shortening optimize loop. * Fixed issue [#125](https://github.com/jakubpawlowicz/clean-css/issues/125) - source maps! * Fixed issue [#344](https://github.com/jakubpawlowicz/clean-css/issues/344) - merging `background-size` into shorthand. * Fixed issue [#352](https://github.com/jakubpawlowicz/clean-css/issues/352) - honors rebasing in imported stylesheets. * Fixed issue [#360](https://github.com/jakubpawlowicz/clean-css/issues/360) - adds 7 extra CSS colors. * Fixed issue [#363](https://github.com/jakubpawlowicz/clean-css/issues/363) - `rem` units overriding `px`. * Fixed issue [#373](https://github.com/jakubpawlowicz/clean-css/issues/373) - proper `background` shorthand merging. * Fixed issue [#395](https://github.com/jakubpawlowicz/clean-css/issues/395) - unescaped brackets in data URIs. * Fixed issue [#398](https://github.com/jakubpawlowicz/clean-css/issues/398) - restoring important comments. * Fixed issue [#400](https://github.com/jakubpawlowicz/clean-css/issues/400) - API to accept an array of filenames. * Fixed issue [#403](https://github.com/jakubpawlowicz/clean-css/issues/403) - tracking input files in source maps. * Fixed issue [#404](https://github.com/jakubpawlowicz/clean-css/issues/404) - no state sharing in API. * Fixed issue [#405](https://github.com/jakubpawlowicz/clean-css/issues/405) - disables default `background-size` merging. * Refixed issue [#304](https://github.com/jakubpawlowicz/clean-css/issues/304) - `background-position` merging. [2.2.22 / 2014-12-13](https://github.com/jakubpawlowicz/clean-css/compare/v2.2.21...v2.2.22) ================== * Backports fix to issue [#304](https://github.com/jakubpawlowicz/clean-css/issues/304) - `background-position` merging. [2.2.21 / 2014-12-10](https://github.com/jakubpawlowicz/clean-css/compare/v2.2.20...v2.2.21) ================== * Backports fix to issue [#373](https://github.com/jakubpawlowicz/clean-css/issues/373) - `background` shorthand merging. [2.2.20 / 2014-12-02](https://github.com/jakubpawlowicz/clean-css/compare/v2.2.19...v2.2.20) ================== * Backports fix to issue [#390](https://github.com/jakubpawlowicz/clean-css/issues/390) - pseudo-class merging. [2.2.19 / 2014-11-20](https://github.com/jakubpawlowicz/clean-css/compare/v2.2.18...v2.2.19) ================== * Fixed issue [#385](https://github.com/jakubpawlowicz/clean-css/issues/385) - edge cases in processing cut off data. [2.2.18 / 2014-11-17](https://github.com/jakubpawlowicz/clean-css/compare/v2.2.17...v2.2.18) ================== * Fixed issue [#383](https://github.com/jakubpawlowicz/clean-css/issues/383) - rounding fractions once again. [2.2.17 / 2014-11-09](https://github.com/jakubpawlowicz/clean-css/compare/v2.2.16...v2.2.17) ================== * Fixed issue [#380](https://github.com/jakubpawlowicz/clean-css/issues/380) - rounding fractions to a whole number. [2.2.16 / 2014-09-16](https://github.com/jakubpawlowicz/clean-css/compare/v2.2.15...v2.2.16) ================== * Fixed issue [#359](https://github.com/jakubpawlowicz/clean-css/issues/359) - handling escaped double backslash. * Fixed issue [#358](https://github.com/jakubpawlowicz/clean-css/issues/358) - property merging in compatibility mode. * Fixed issue [#356](https://github.com/jakubpawlowicz/clean-css/issues/356) - preserving `*+html` hack. * Fixed issue [#354](https://github.com/jakubpawlowicz/clean-css/issues/354) - `!important` overriding in shorthands. [2.2.15 / 2014-09-01](https://github.com/jakubpawlowicz/clean-css/compare/v2.2.14...v2.2.15) ================== * Fixed issue [#343](https://github.com/jakubpawlowicz/clean-css/issues/343) - too aggressive `rgba`/`hsla` minification. * Fixed issue [#345](https://github.com/jakubpawlowicz/clean-css/issues/345) - URL rebasing for document relative ones. * Fixed issue [#346](https://github.com/jakubpawlowicz/clean-css/issues/346) - overriding `!important` by `!important`. * Fixed issue [#350](https://github.com/jakubpawlowicz/clean-css/issues/350) - edge cases in `@import` processing. [2.2.14 / 2014-08-25](https://github.com/jakubpawlowicz/clean-css/compare/v2.2.13...v2.2.14) ================== * Makes multival operations idempotent. * Fixed issue [#339](https://github.com/jakubpawlowicz/clean-css/issues/339) - skips invalid properties. * Fixed issue [#341](https://github.com/jakubpawlowicz/clean-css/issues/341) - ensure output is shorter than input. [2.2.13 / 2014-08-12](https://github.com/jakubpawlowicz/clean-css/compare/v2.2.12...v2.2.13) ================== * Fixed issue [#337](https://github.com/jakubpawlowicz/clean-css/issues/337) - handling component importance. [2.2.12 / 2014-08-02](https://github.com/jakubpawlowicz/clean-css/compare/v2.2.11...v2.2.12) ================== * Fixed issue with tokenizer removing first selector after an unknown @ rule. * Fixed issue [#329](https://github.com/jakubpawlowicz/clean-css/issues/329) - `font` shorthands incorrectly processed. * Fixed issue [#332](https://github.com/jakubpawlowicz/clean-css/issues/332) - `background` shorthand with colors. * Refixed issue [#325](https://github.com/jakubpawlowicz/clean-css/issues/325) - invalid charset declarations. [2.2.11 / 2014-07-28](https://github.com/jakubpawlowicz/clean-css/compare/v2.2.10...v2.2.11) ================== * Fixed issue [#326](https://github.com/jakubpawlowicz/clean-css/issues/326) - `background-size` regression. [2.2.10 / 2014-07-27](https://github.com/jakubpawlowicz/clean-css/compare/v2.2.9...v2.2.10) ================== * Improved performance of advanced mode validators. * Fixed issue [#307](https://github.com/jakubpawlowicz/clean-css/issues/307) - `background-color` in multiple backgrounds. * Fixed issue [#322](https://github.com/jakubpawlowicz/clean-css/issues/322) - adds `background-size` support. * Fixed issue [#323](https://github.com/jakubpawlowicz/clean-css/issues/323) - stripping variable references. * Fixed issue [#325](https://github.com/jakubpawlowicz/clean-css/issues/325) - removing invalid `@charset` declarations. [2.2.9 / 2014-07-23](https://github.com/jakubpawlowicz/clean-css/compare/v2.2.8...v2.2.9) ================== * Adds `background` normalization according to W3C spec. * Fixed issue [#316](https://github.com/jakubpawlowicz/clean-css/issues/316) - incorrect `background` processing. [2.2.8 / 2014-07-14](https://github.com/jakubpawlowicz/clean-css/compare/v2.2.7...v2.2.8) ================== * Fixed issue [#313](https://github.com/jakubpawlowicz/clean-css/issues/313) - processing comment marks in URLs. * Fixed issue [#315](https://github.com/jakubpawlowicz/clean-css/issues/315) - `rgba`/`hsla` -> `transparent` in gradients. [2.2.7 / 2014-07-10](https://github.com/jakubpawlowicz/clean-css/compare/v2.2.6...v2.2.7) ================== * Fixed issue [#304](https://github.com/jakubpawlowicz/clean-css/issues/304) - merging multiple backgrounds. * Fixed issue [#312](https://github.com/jakubpawlowicz/clean-css/issues/312) - merging with mixed repeat. [2.2.6 / 2014-07-05](https://github.com/jakubpawlowicz/clean-css/compare/v2.2.5...v2.2.6) ================== * Adds faster quote matching in QuoteScanner. * Improves QuoteScanner to handle comments correctly. * Fixed issue [#308](https://github.com/jakubpawlowicz/clean-css/issues/308) - parsing comments in quoted URLs. * Fixed issue [#311](https://github.com/jakubpawlowicz/clean-css/issues/311) - leading/trailing decimal points. [2.2.5 / 2014-06-29](https://github.com/jakubpawlowicz/clean-css/compare/v2.2.4...v2.2.5) ================== * Adds removing extra spaces around / in border-radius. * Adds replacing same horizontal & vertical value in border-radius. * Fixed issue [#305](https://github.com/jakubpawlowicz/clean-css/issues/305) - allows width keywords in `border-width`. [2.2.4 / 2014-06-27](https://github.com/jakubpawlowicz/clean-css/compare/v2.2.3...v2.2.4) ================== * Fixed issue [#301](https://github.com/jakubpawlowicz/clean-css/issues/301) - proper `border-radius` processing. * Fixed issue [#303](https://github.com/jakubpawlowicz/clean-css/issues/303) - correctly preserves viewport units. [2.2.3 / 2014-06-24](https://github.com/jakubpawlowicz/clean-css/compare/v2.2.2...v2.2.3) ================== * Fixed issue [#302](https://github.com/jakubpawlowicz/clean-css/issues/302) - handling of `outline-style: auto`. [2.2.2 / 2014-06-18](https://github.com/jakubpawlowicz/clean-css/compare/v2.2.1...v2.2.2) ================== * Fixed issue [#297](https://github.com/jakubpawlowicz/clean-css/issues/297) - `box-shadow` zeros minification. [2.2.1 / 2014-06-14](https://github.com/jakubpawlowicz/clean-css/compare/v2.2.0...v2.2.1) ================== * Fixes new property optimizer for 'none' values. * Fixed issue [#294](https://github.com/jakubpawlowicz/clean-css/issues/294) - space after `rgba`/`hsla` in IE<=11. [2.2.0 / 2014-06-11](https://github.com/jakubpawlowicz/clean-css/compare/v2.1.8...v2.2.0) ================== * Adds a better algorithm for quotation marks' removal. * Adds a better non-adjacent optimizer compatible with the upcoming new property optimizer. * Adds minifying remote files directly from CLI. * Adds `--rounding-precision` to control rounding precision. * Moves quotation matching into a `QuoteScanner` class. * Adds `npm run browserify` for creating embeddable version of clean-css. * Fixed list-style-* advanced processing. * Fixed issue [#134](https://github.com/jakubpawlowicz/clean-css/issues/134) - merges properties into shorthand form. * Fixed issue [#164](https://github.com/jakubpawlowicz/clean-css/issues/164) - removes default values if not needed. * Fixed issue [#168](https://github.com/jakubpawlowicz/clean-css/issues/168) - adds better property merging algorithm. * Fixed issue [#173](https://github.com/jakubpawlowicz/clean-css/issues/173) - merges same properties if grouped. * Fixed issue [#184](https://github.com/jakubpawlowicz/clean-css/issues/184) - uses `!important` for optimization opportunities. * Fixed issue [#190](https://github.com/jakubpawlowicz/clean-css/issues/190) - uses shorthand to override another shorthand. * Fixed issue [#197](https://github.com/jakubpawlowicz/clean-css/issues/197) - adds borders merging by understandability. * Fixed issue [#210](https://github.com/jakubpawlowicz/clean-css/issues/210) - adds temporary workaround for aggressive merging. * Fixed issue [#246](https://github.com/jakubpawlowicz/clean-css/issues/246) - removes IE hacks when not in compatibility mode. * Fixed issue [#247](https://github.com/jakubpawlowicz/clean-css/issues/247) - removes deprecated `selectorsMergeMode` switch. * Refixed issue [#250](https://github.com/jakubpawlowicz/clean-css/issues/250) - based on new quotation marks removal. * Fixed issue [#257](https://github.com/jakubpawlowicz/clean-css/issues/257) - turns `rgba`/`hsla` to `transparent` if possible. * Fixed issue [#265](https://github.com/jakubpawlowicz/clean-css/issues/265) - adds support for multiple input files. * Fixed issue [#275](https://github.com/jakubpawlowicz/clean-css/issues/275) - handling transform properties. * Fixed issue [#276](https://github.com/jakubpawlowicz/clean-css/issues/276) - corrects unicode handling. * Fixed issue [#288](https://github.com/jakubpawlowicz/clean-css/issues/288) - adds smarter expression parsing. * Fixed issue [#293](https://github.com/jakubpawlowicz/clean-css/issues/293) - handles escaped `@` symbols in class names and IDs. [2.1.8 / 2014-03-28](https://github.com/jakubpawlowicz/clean-css/compare/v2.1.7...v2.1.8) ================== * Fixed issue [#267](https://github.com/jakubpawlowicz/clean-css/issues/267) - incorrect non-adjacent selector merging. [2.1.7 / 2014-03-24](https://github.com/jakubpawlowicz/clean-css/compare/v2.1.6...v2.1.7) ================== * Fixed issue [#264](https://github.com/jakubpawlowicz/clean-css/issues/264) - `@import` statements inside comments. [2.1.6 / 2014-03-10](https://github.com/jakubpawlowicz/clean-css/compare/v2.1.5...v2.1.6) ================== * Fixed issue [#258](https://github.com/jakubpawlowicz/clean-css/issues/258) - wrong `@import` handling in `EmptyRemoval`. [2.1.5 / 2014-03-07](https://github.com/jakubpawlowicz/clean-css/compare/v2.1.4...v2.1.5) ================== * Fixed issue [#255](https://github.com/jakubpawlowicz/clean-css/issues/255) - incorrect processing of a trailing `-0`. [2.1.4 / 2014-03-01](https://github.com/jakubpawlowicz/clean-css/compare/v2.1.3...v2.1.4) ================== * Fixed issue [#250](https://github.com/jakubpawlowicz/clean-css/issues/250) - correctly handle JSON data in quotations. [2.1.3 / 2014-02-26](https://github.com/jakubpawlowicz/clean-css/compare/v2.1.2...v2.1.3) ================== * Fixed issue [#248](https://github.com/jakubpawlowicz/clean-css/issues/248) - incorrect merging for vendor selectors. [2.1.2 / 2014-02-25](https://github.com/jakubpawlowicz/clean-css/compare/v2.1.1...v2.1.2) ================== * Fixed issue [#245](https://github.com/jakubpawlowicz/clean-css/issues/245) - incorrect handling of backslash IE hack. [2.1.1 / 2014-02-18](https://github.com/jakubpawlowicz/clean-css/compare/v2.1.0...v2.1.1) ================== * Adds faster selectors processing in advanced optimizer. * Fixed issue [#241](https://github.com/jakubpawlowicz/clean-css/issues/241) - incorrect handling of `:not()` selectors. [2.1.0 / 2014-02-13](https://github.com/jakubpawlowicz/clean-css/compare/v2.0.8...v2.1.0) ================== * Adds an optional callback to minify method. * Deprecates `--selectors-merge-mode` / `selectorsMergeMode` in favor to `--compatibility` / `compatibility`. * Fixes debug mode stats for stylesheets using `@import` statements. * Skips empty removal if advanced processing is enabled. * Fixed issue [#85](https://github.com/jakubpawlowicz/clean-css/issues/85) - resolving protocol `@import`s. * Fixed issue [#160](https://github.com/jakubpawlowicz/clean-css/issues/160) - re-runs optimizer until a clean pass. * Fixed issue [#161](https://github.com/jakubpawlowicz/clean-css/issues/161) - improves tokenizer performance. * Fixed issue [#163](https://github.com/jakubpawlowicz/clean-css/issues/163) - round pixels to 2nd decimal place. * Fixed issue [#165](https://github.com/jakubpawlowicz/clean-css/issues/165) - extra space after trailing parenthesis. * Fixed issue [#186](https://github.com/jakubpawlowicz/clean-css/issues/186) - strip unit from `0rem`. * Fixed issue [#207](https://github.com/jakubpawlowicz/clean-css/issues/207) - bug in parsing protocol `@import`s. * Fixed issue [#213](https://github.com/jakubpawlowicz/clean-css/issues/213) - faster `rgb` to `hex` transforms. * Fixed issue [#215](https://github.com/jakubpawlowicz/clean-css/issues/215) - leading zeros in numerical values. * Fixed issue [#217](https://github.com/jakubpawlowicz/clean-css/issues/217) - whitespace inside attribute selectors and URLs. * Fixed issue [#218](https://github.com/jakubpawlowicz/clean-css/issues/218) - `@import` statements cleanup. * Fixed issue [#220](https://github.com/jakubpawlowicz/clean-css/issues/220) - selector between comments. * Fixed issue [#223](https://github.com/jakubpawlowicz/clean-css/issues/223) - two-pass adjacent selectors merging. * Fixed issue [#226](https://github.com/jakubpawlowicz/clean-css/issues/226) - don't minify `border:none` to `border:0`. * Fixed issue [#229](https://github.com/jakubpawlowicz/clean-css/issues/229) - improved processing of fraction numbers. * Fixed issue [#230](https://github.com/jakubpawlowicz/clean-css/issues/230) - better handling of zero values. * Fixed issue [#235](https://github.com/jakubpawlowicz/clean-css/issues/235) - IE7 compatibility mode. * Fixed issue [#236](https://github.com/jakubpawlowicz/clean-css/issues/236) - incorrect rebasing with nested `import`s. [2.0.8 / 2014-02-07](https://github.com/jakubpawlowicz/clean-css/compare/v2.0.7...v2.0.8) ================== * Fixed issue [#232](https://github.com/jakubpawlowicz/clean-css/issues/232) - edge case in non-adjacent selectors merging. [2.0.7 / 2014-01-16](https://github.com/jakubpawlowicz/clean-css/compare/v2.0.6...v2.0.7) ================== * Fixed issue [#208](https://github.com/jakubpawlowicz/clean-css/issues/208) - don't swallow `@page` and `@viewport`. [2.0.6 / 2014-01-04](https://github.com/jakubpawlowicz/clean-css/compare/v2.0.5...v2.0.6) ================== * Fixed issue [#198](https://github.com/jakubpawlowicz/clean-css/issues/198) - process comments and `@import`s correctly. * Fixed issue [#205](https://github.com/jakubpawlowicz/clean-css/issues/205) - freeze on broken `@import` declaration. [2.0.5 / 2014-01-03](https://github.com/jakubpawlowicz/clean-css/compare/v2.0.4...v2.0.5) ================== * Fixed issue [#199](https://github.com/jakubpawlowicz/clean-css/issues/199) - keep line breaks with no advanced optimizations. * Fixed issue [#203](https://github.com/jakubpawlowicz/clean-css/issues/203) - Buffer as a first argument to minify method. [2.0.4 / 2013-12-19](https://github.com/jakubpawlowicz/clean-css/compare/v2.0.3...v2.0.4) ================== * Fixed issue [#193](https://github.com/jakubpawlowicz/clean-css/issues/193) - HSL color space normalization. [2.0.3 / 2013-12-18](https://github.com/jakubpawlowicz/clean-css/compare/v2.0.2...v2.0.3) ================== * Fixed issue [#191](https://github.com/jakubpawlowicz/clean-css/issues/191) - leading numbers in `font`/`animation` names. * Fixed issue [#192](https://github.com/jakubpawlowicz/clean-css/issues/192) - many `@import`s inside a comment. [2.0.2 / 2013-11-18](https://github.com/jakubpawlowicz/clean-css/compare/v2.0.1...v2.0.2) ================== * Fixed issue [#177](https://github.com/jakubpawlowicz/clean-css/issues/177) - process broken content correctly. [2.0.1 / 2013-11-14](https://github.com/jakubpawlowicz/clean-css/compare/v2.0.0...v2.0.1) ================== * Fixed issue [#176](https://github.com/jakubpawlowicz/clean-css/issues/176) - hangs on `undefined` keyword. [2.0.0 / 2013-11-04](https://github.com/jakubpawlowicz/clean-css/compare/v1.1.7...v2.0.0) ================== * Adds simplified and more advanced text escaping / restoring via `EscapeStore` class. * Adds simplified and much faster empty elements removal. * Adds missing `@import` processing to our benchmark (run via `npm run bench`). * Adds CSS tokenizer which will make it possible to optimize content by reordering and/or merging selectors. * Adds basic optimizer removing duplicate selectors from a list. * Adds merging duplicate properties within a single selector's body. * Adds merging adjacent selectors within a scope (single and multiple ones). * Changes behavior of `--keep-line-breaks`/`keepBreaks` option to keep breaks after trailing braces only. * Makes all multiple selectors ordered alphabetically (aids merging). * Adds property overriding so more coarse properties override more granular ones. * Adds reducing non-adjacent selectors. * Adds `--skip-advanced`/`noAdvanced` switch to disable advanced optimizations. * Adds reducing non-adjacent selectors when overridden by more complex selectors. * Fixed issue [#138](https://github.com/jakubpawlowicz/clean-css/issues/138) - makes CleanCSS interface OO. * Fixed issue [#139](https://github.com/jakubpawlowicz/clean-css/issues/138) - consistent error & warning handling. * Fixed issue [#145](https://github.com/jakubpawlowicz/clean-css/issues/145) - debug mode in library too. * Fixed issue [#157](https://github.com/jakubpawlowicz/clean-css/issues/157) - gets rid of `removeEmpty` option. * Fixed issue [#159](https://github.com/jakubpawlowicz/clean-css/issues/159) - escaped quotes inside content. * Fixed issue [#162](https://github.com/jakubpawlowicz/clean-css/issues/162) - strip quotes from Base64 encoded URLs. * Fixed issue [#166](https://github.com/jakubpawlowicz/clean-css/issues/166) - `debug` formatting in CLI * Fixed issue [#167](https://github.com/jakubpawlowicz/clean-css/issues/167) - `background:transparent` minification. [1.1.7 / 2013-10-28](https://github.com/jakubpawlowicz/clean-css/compare/v1.1.6...v1.1.7) ================== * Fixed issue [#156](https://github.com/jakubpawlowicz/clean-css/issues/156) - `@import`s inside comments. [1.1.6 / 2013-10-26](https://github.com/jakubpawlowicz/clean-css/compare/v1.1.5...v1.1.6) ================== * Fixed issue [#155](https://github.com/jakubpawlowicz/clean-css/issues/155) - broken irregular CSS content. [1.1.5 / 2013-10-24](https://github.com/jakubpawlowicz/clean-css/compare/v1.1.4...v1.1.5) ================== * Fixed issue [#153](https://github.com/jakubpawlowicz/clean-css/issues/153) - `keepSpecialComments` `0`/`1` as a string. [1.1.4 / 2013-10-23](https://github.com/jakubpawlowicz/clean-css/compare/v1.1.3...v1.1.4) ================== * Fixed issue [#152](https://github.com/jakubpawlowicz/clean-css/issues/152) - adds an option to disable rebasing. [1.1.3 / 2013-10-04](https://github.com/jakubpawlowicz/clean-css/compare/v1.1.2...v1.1.3) ================== * Fixed issue [#150](https://github.com/jakubpawlowicz/clean-css/issues/150) - minifying `background:none`. [1.1.2 / 2013-09-29](https://github.com/jakubpawlowicz/clean-css/compare/v1.1.1...v1.1.2) ================== * Fixed issue [#149](https://github.com/jakubpawlowicz/clean-css/issues/149) - shorthand `font` property. [1.1.1 / 2013-09-07](https://github.com/jakubpawlowicz/clean-css/compare/v1.1.0...v1.1.1) ================== * Fixed issue [#144](https://github.com/jakubpawlowicz/clean-css/issues/144) - skip URLs rebasing by default. [1.1.0 / 2013-09-06](https://github.com/jakubpawlowicz/clean-css/compare/v1.0.12...v1.1.0) ================== * Renamed lib's `debug` option to `benchmark` when doing per-minification benchmarking. * Added simplified comments processing & imports. * Fixed issue [#43](https://github.com/jakubpawlowicz/clean-css/issues/43) - `--debug` switch for minification stats. * Fixed issue [#65](https://github.com/jakubpawlowicz/clean-css/issues/65) - full color name / hex shortening. * Fixed issue [#84](https://github.com/jakubpawlowicz/clean-css/issues/84) - support for `@import` with media queries. * Fixed issue [#124](https://github.com/jakubpawlowicz/clean-css/issues/124) - raise error on broken imports. * Fixed issue [#126](https://github.com/jakubpawlowicz/clean-css/issues/126) - proper CSS expressions handling. * Fixed issue [#129](https://github.com/jakubpawlowicz/clean-css/issues/129) - rebasing imported URLs. * Fixed issue [#130](https://github.com/jakubpawlowicz/clean-css/issues/130) - better code modularity. * Fixed issue [#135](https://github.com/jakubpawlowicz/clean-css/issues/135) - require node.js 0.8+. [1.0.12 / 2013-07-19](https://github.com/jakubpawlowicz/clean-css/compare/v1.0.11...v1.0.12) =================== * Fixed issue [#121](https://github.com/jakubpawlowicz/clean-css/issues/121) - ability to skip `@import` processing. [1.0.11 / 2013-07-08](https://github.com/jakubpawlowicz/clean-css/compare/v1.0.10...v1.0.11) =================== * Fixed issue [#117](https://github.com/jakubpawlowicz/clean-css/issues/117) - line break escaping in comments. [1.0.10 / 2013-06-13](https://github.com/jakubpawlowicz/clean-css/compare/v1.0.9...v1.0.10) =================== * Fixed issue [#114](https://github.com/jakubpawlowicz/clean-css/issues/114) - comments in imported stylesheets. [1.0.9 / 2013-06-11](https://github.com/jakubpawlowicz/clean-css/compare/v1.0.8...v1.0.9) ================== * Fixed issue [#113](https://github.com/jakubpawlowicz/clean-css/issues/113) - `@import` in comments. [1.0.8 / 2013-06-10](https://github.com/jakubpawlowicz/clean-css/compare/v1.0.7...v1.0.8) ================== * Fixed issue [#112](https://github.com/jakubpawlowicz/clean-css/issues/112) - reducing `box-shadow` zeros. [1.0.7 / 2013-06-05](https://github.com/jakubpawlowicz/clean-css/compare/v1.0.6...v1.0.7) ================== * Support for `@import` URLs starting with `//`. By [@petetak](https://github.com/petetak). [1.0.6 / 2013-06-04](https://github.com/jakubpawlowicz/clean-css/compare/v1.0.5...v1.0.6) ================== * Fixed issue [#110](https://github.com/jakubpawlowicz/clean-css/issues/110) - data URIs in URLs. [1.0.5 / 2013-05-26](https://github.com/jakubpawlowicz/clean-css/compare/v1.0.4...v1.0.5) ================== * Fixed issue [#107](https://github.com/jakubpawlowicz/clean-css/issues/107) - data URIs in imported stylesheets. 1.0.4 / 2013-05-23 ================== * Rewrite relative URLs in imported stylesheets. By [@bluej100](https://github.com/bluej100). 1.0.3 / 2013-05-20 ================== * Support alternative `@import` syntax with file name not wrapped inside `url()` statement. By [@bluej100](https://github.com/bluej100). 1.0.2 / 2013-04-29 ================== * Fixed issue [#97](https://github.com/jakubpawlowicz/clean-css/issues/97) - `--remove-empty` & FontAwesome. 1.0.1 / 2013-04-08 ================== * Do not pick up `bench` and `test` while building `npm` package. By [@sindresorhus](https://https://github.com/sindresorhus). 1.0.0 / 2013-03-30 ================== * Fixed issue [#2](https://github.com/jakubpawlowicz/clean-css/issues/2) - resolving `@import` rules. * Fixed issue [#44](https://github.com/jakubpawlowicz/clean-css/issues/44) - examples in `--help`. * Fixed issue [#46](https://github.com/jakubpawlowicz/clean-css/issues/46) - preserving special characters in URLs and attributes. * Fixed issue [#80](https://github.com/jakubpawlowicz/clean-css/issues/80) - quotation in multi line strings. * Fixed issue [#83](https://github.com/jakubpawlowicz/clean-css/issues/83) - HSL to hex color conversions. * Fixed issue [#86](https://github.com/jakubpawlowicz/clean-css/issues/86) - broken `@charset` replacing. * Fixed issue [#88](https://github.com/jakubpawlowicz/clean-css/issues/88) - removes space in `! important`. * Fixed issue [#92](https://github.com/jakubpawlowicz/clean-css/issues/92) - uppercase hex to short versions. 0.10.2 / 2013-03-19 =================== * Fixed issue [#79](https://github.com/jakubpawlowicz/clean-css/issues/79) - node.js 0.10.x compatibility. 0.10.1 / 2013-02-14 =================== * Fixed issue [#66](https://github.com/jakubpawlowicz/clean-css/issues/66) - line breaks without extra spaces should be handled correctly. 0.10.0 / 2013-02-09 =================== * Switched from [optimist](https://github.com/substack/node-optimist) to [commander](https://github.com/visionmedia/commander.js) for CLI processing. * Changed long options from `--removeempty` to `--remove-empty` and from `--keeplinebreaks` to `--keep-line-breaks`. * Fixed performance issue with replacing multiple `@charset` declarations and issue with line break after `@charset` when using `keepLineBreaks` option. By [@rrjaime](https://github.com/rrjamie). * Removed Makefile in favor to `npm run` commands (e.g. `make check` -> `npm run check`). * Fixed issue [#47](https://github.com/jakubpawlowicz/clean-css/issues/47) - commandline issues on Windows. * Fixed issue [#49](https://github.com/jakubpawlowicz/clean-css/issues/49) - remove empty selectors from media query. * Fixed issue [#52](https://github.com/jakubpawlowicz/clean-css/issues/52) - strip fraction zeros if not needed. * Fixed issue [#58](https://github.com/jakubpawlowicz/clean-css/issues/58) - remove colon where possible. * Fixed issue [#59](https://github.com/jakubpawlowicz/clean-css/issues/59) - content property handling. 0.9.1 / 2012-12-19 ================== * Fixed issue [#37](https://github.com/jakubpawlowicz/clean-css/issues/37) - converting `white` and other colors in class names (reported by [@malgorithms](https://github.com/malgorithms)). 0.9.0 / 2012-12-15 ================== * Added stripping quotation from font names (if possible). * Added stripping quotation from `@keyframes` declaration, `animation` and `animation-name` property. * Added stripping quotations from attributes' value (e.g. `[data-target='x']`). * Added better hex->name and name->hex color shortening. * Added `font: normal` and `font: bold` shortening the same way as `font-weight` is. * Refactored shorthand selectors and added `border-radius`, `border-style` and `border-color` shortening. * Added `margin`, `padding` and `border-width` shortening. * Added removing line break after commas. * Fixed removing whitespace inside media query definition. * Added removing line breaks after a comma, so all declarations are one-liners now. * Speed optimizations (~10% despite many new features). * Added [JSHint](https://github.com/jshint/jshint/) validation rules via `make check`. 0.8.3 / 2012-11-29 ================== * Fixed HSL/HSLA colors processing. 0.8.2 / 2012-10-31 ================== * Fixed shortening hex colors and their relation to hashes in URLs. * Cleanup by [@XhmikosR](https://github.com/XhmikosR). 0.8.1 / 2012-10-28 ================== * Added better zeros processing for `rect(...)` syntax (clip property). 0.8.0 / 2012-10-21 ================== * Added removing URLs quotation if possible. * Rewrote breaks processing. * Added `keepBreaks`/`-b` option to keep line breaks in the minimized file. * Reformatted [lib/clean.js](/lib/clean.js) so it's easier to follow the rules. * Minimized test data is now minimized with line breaks so it's easier to compare the changes line by line. 0.7.0 / 2012-10-14 ================== * Added stripping special comments to CLI (`--s0` and `--s1` options). * Added stripping special comments to programmatic interface (`keepSpecialComments` option). 0.6.0 / 2012-08-05 ================== * Full Windows support with tests (./test.bat). 0.5.0 / 2012-08-02 ================== * Made path to vows local. * Explicit node.js 0.6 requirement. 0.4.2 / 2012-06-28 ================== * Updated binary `-v` option (version). * Updated binary to output help when no options given (but not in piped mode). * Added binary tests. 0.4.1 / 2012-06-10 ================== * Fixed stateless mode where calling `CleanCSS#process` directly was giving errors (reported by [@facelessuser](https://github.com/facelessuser)). 0.4.0 / 2012-06-04 ================== * Speed improvements up to 4x thanks to the rewrite of comments and CSS' content processing. * Stripping empty CSS tags is now optional (see [bin/cleancss](/bin/cleancss) for details). * Improved debugging mode (see [test/bench.js](/test/bench.js)) * Added `make bench` for a one-pass benchmark. 0.3.3 / 2012-05-27 ================== * Fixed tests, [package.json](/package.json) for development, and regex for removing empty declarations (thanks to [@vvo](https://github.com/vvo)). 0.3.2 / 2012-01-17 ================== * Fixed output method under node.js 0.6 which incorrectly tried to close `process.stdout`. 0.3.1 / 2011-12-16 ================== * Fixed cleaning up `0 0 0 0` expressions. 0.3.0 / 2011-11-29 ================== * Clean-css requires node.js 0.4.0+ to run. * Removed node.js's 0.2.x 'sys' package dependency (thanks to [@jmalonzo](https://github.com/jmalonzo) for a patch). 0.2.6 / 2011-11-27 ================== * Fixed expanding `+` signs in `calc()` when mixed up with adjacent `+` selector. 0.2.5 / 2011-11-27 ================== * Fixed issue with cleaning up spaces inside `calc`/`-moz-calc` declarations (thanks to [@cvan](https://github.com/cvan) for reporting it). * Fixed converting `#f00` to `red` in borders and gradients. 0.2.4 / 2011-05-25 ================== * Fixed problem with expanding `none` to `0` in partial/full background declarations. * Fixed including clean-css library from binary (global to local). 0.2.3 / 2011-04-18 ================== * Fixed problem with optimizing IE filters. 0.2.2 / 2011-04-17 ================== * Fixed problem with space before color in `border` property. 0.2.1 / 2011-03-19 ================== * Added stripping space before `!important` keyword. * Updated repository location and author information in [package.json](/package.json). 0.2.0 / 2011-03-02 ================== * Added options parsing via optimist. * Changed code inclusion (thus the version bump). 0.1.0 / 2011-02-27 ================== * First version of clean-css library. * Implemented all basic CSS transformations. node_modules/clean-css/lib/utils/is-https-resource.js000066600000000235150425117220016740 0ustar00var HTTPS_RESOURCE_PATTERN = /^https:\/\//; function isHttpsResource(uri) { return HTTPS_RESOURCE_PATTERN.test(uri); } module.exports = isHttpsResource; node_modules/clean-css/lib/utils/split.js000066600000002131150425117220014470 0ustar00var Marker = require('../tokenizer/marker'); function split(value, separator) { var openLevel = Marker.OPEN_ROUND_BRACKET; var closeLevel = Marker.CLOSE_ROUND_BRACKET; var level = 0; var cursor = 0; var lastStart = 0; var lastValue; var lastCharacter; var len = value.length; var parts = []; if (value.indexOf(separator) == -1) { return [value]; } if (value.indexOf(openLevel) == -1) { return value.split(separator); } while (cursor < len) { if (value[cursor] == openLevel) { level++; } else if (value[cursor] == closeLevel) { level--; } if (level === 0 && cursor > 0 && cursor + 1 < len && value[cursor] == separator) { parts.push(value.substring(lastStart, cursor)); lastStart = cursor + 1; } cursor++; } if (lastStart < cursor + 1) { lastValue = value.substring(lastStart); lastCharacter = lastValue[lastValue.length - 1]; if (lastCharacter == separator) { lastValue = lastValue.substring(0, lastValue.length - 1); } parts.push(lastValue); } return parts; } module.exports = split; node_modules/clean-css/lib/utils/is-remote-resource.js000066600000000246150425117220017073 0ustar00var REMOTE_RESOURCE_PATTERN = /^(\w+:\/\/|\/\/)/; function isRemoteResource(uri) { return REMOTE_RESOURCE_PATTERN.test(uri); } module.exports = isRemoteResource; node_modules/clean-css/lib/utils/has-protocol.js000066600000000234150425117220015751 0ustar00var NO_PROTOCOL_RESOURCE_PATTERN = /^\/\//; function hasProtocol(uri) { return !NO_PROTOCOL_RESOURCE_PATTERN.test(uri); } module.exports = hasProtocol; node_modules/clean-css/lib/utils/override.js000066600000001331150425117220015155 0ustar00function override(source1, source2) { var target = {}; var key1; var key2; var item; for (key1 in source1) { item = source1[key1]; if (Array.isArray(item)) { target[key1] = item.slice(0); } else if (typeof item == 'object' && item !== null) { target[key1] = override(item, {}); } else { target[key1] = item; } } for (key2 in source2) { item = source2[key2]; if (key2 in target && Array.isArray(item)) { target[key2] = item.slice(0); } else if (key2 in target && typeof item == 'object' && item !== null) { target[key2] = override(target[key2], item); } else { target[key2] = item; } } return target; } module.exports = override; node_modules/clean-css/lib/utils/clone-array.js000066600000000361150425117220015554 0ustar00function cloneArray(array) { var cloned = array.slice(0); for (var i = 0, l = cloned.length; i < l; i++) { if (Array.isArray(cloned[i])) cloned[i] = cloneArray(cloned[i]); } return cloned; } module.exports = cloneArray; node_modules/clean-css/lib/utils/format-position.js000066600000000357150425117220016477 0ustar00function formatPosition(metadata) { var line = metadata[0]; var column = metadata[1]; var source = metadata[2]; return source ? source + ':' + line + ':' + column : line + ':' + column; } module.exports = formatPosition; node_modules/clean-css/lib/utils/is-import.js000066600000000217150425117220015263 0ustar00var IMPORT_PREFIX_PATTERN = /^@import/i; function isImport(value) { return IMPORT_PREFIX_PATTERN.test(value); } module.exports = isImport; node_modules/clean-css/lib/utils/natural-compare.js000066600000001404150425117220016431 0ustar00// adapted from http://nedbatchelder.com/blog/200712.html#e20071211T054956 var NUMBER_PATTERN = /([0-9]+)/; function naturalCompare(value1, value2) { var keys1 = ('' + value1).split(NUMBER_PATTERN).map(tryParseInt); var keys2 = ('' + value2).split(NUMBER_PATTERN).map(tryParseInt); var key1; var key2; var compareFirst = Math.min(keys1.length, keys2.length); var i, l; for (i = 0, l = compareFirst; i < l; i++) { key1 = keys1[i]; key2 = keys2[i]; if (key1 != key2) { return key1 > key2 ? 1 : -1; } } return keys1.length > keys2.length ? 1 : (keys1.length == keys2.length ? 0 : -1); } function tryParseInt(value) { return ('' + parseInt(value)) == value ? parseInt(value) : value; } module.exports = naturalCompare; node_modules/clean-css/lib/utils/is-http-resource.js000066600000000230150425117220016550 0ustar00var HTTP_RESOURCE_PATTERN = /^http:\/\//; function isHttpResource(uri) { return HTTP_RESOURCE_PATTERN.test(uri); } module.exports = isHttpResource; node_modules/clean-css/lib/utils/is-data-uri-resource.js000066600000000267150425117220017311 0ustar00var DATA_URI_PATTERN = /^data:(\S*?)?(;charset=[^;]+)?(;[^,]+?)?,(.+)/; function isDataUriResource(uri) { return DATA_URI_PATTERN.test(uri); } module.exports = isDataUriResource; node_modules/clean-css/lib/clean.js000066600000012347150425117220013271 0ustar00/** * Clean-css - https://github.com/jakubpawlowicz/clean-css * Released under the terms of MIT license * * Copyright (C) 2017 JakubPawlowicz.com */ var level0Optimize = require('./optimizer/level-0/optimize'); var level1Optimize = require('./optimizer/level-1/optimize'); var level2Optimize = require('./optimizer/level-2/optimize'); var validator = require('./optimizer/validator'); var compatibilityFrom = require('./options/compatibility'); var fetchFrom = require('./options/fetch'); var formatFrom = require('./options/format').formatFrom; var inlineFrom = require('./options/inline'); var inlineRequestFrom = require('./options/inline-request'); var inlineTimeoutFrom = require('./options/inline-timeout'); var OptimizationLevel = require('./options/optimization-level').OptimizationLevel; var optimizationLevelFrom = require('./options/optimization-level').optimizationLevelFrom; var rebaseFrom = require('./options/rebase'); var rebaseToFrom = require('./options/rebase-to'); var inputSourceMapTracker = require('./reader/input-source-map-tracker'); var readSources = require('./reader/read-sources'); var serializeStyles = require('./writer/simple'); var serializeStylesAndSourceMap = require('./writer/source-maps'); var CleanCSS = module.exports = function CleanCSS(options) { options = options || {}; this.options = { compatibility: compatibilityFrom(options.compatibility), fetch: fetchFrom(options.fetch), format: formatFrom(options.format), inline: inlineFrom(options.inline), inlineRequest: inlineRequestFrom(options.inlineRequest), inlineTimeout: inlineTimeoutFrom(options.inlineTimeout), level: optimizationLevelFrom(options.level), rebase: rebaseFrom(options.rebase), rebaseTo: rebaseToFrom(options.rebaseTo), returnPromise: !!options.returnPromise, sourceMap: !!options.sourceMap, sourceMapInlineSources: !!options.sourceMapInlineSources }; }; // for compatibility with optimize-css-assets-webpack-plugin CleanCSS.process = function (input, opts) { var cleanCss; var optsTo = opts.to; delete opts.to; cleanCss = new CleanCSS(Object.assign({ returnPromise: true, rebaseTo: optsTo }, opts)); return cleanCss.minify(input) .then(function(output) { return { css: output.styles }; }); }; CleanCSS.prototype.minify = function (input, maybeSourceMap, maybeCallback) { var options = this.options; if (options.returnPromise) { return new Promise(function (resolve, reject) { minify(input, options, maybeSourceMap, function (errors, output) { return errors ? reject(errors) : resolve(output); }); }); } else { return minify(input, options, maybeSourceMap, maybeCallback); } }; function minify(input, options, maybeSourceMap, maybeCallback) { var sourceMap = typeof maybeSourceMap != 'function' ? maybeSourceMap : null; var callback = typeof maybeCallback == 'function' ? maybeCallback : (typeof maybeSourceMap == 'function' ? maybeSourceMap : null); var context = { stats: { efficiency: 0, minifiedSize: 0, originalSize: 0, startedAt: Date.now(), timeSpent: 0 }, cache: { specificity: {} }, errors: [], inlinedStylesheets: [], inputSourceMapTracker: inputSourceMapTracker(), localOnly: !callback, options: options, source: null, sourcesContent: {}, validator: validator(options.compatibility), warnings: [] }; if (sourceMap) { context.inputSourceMapTracker.track(undefined, sourceMap); } return runner(context.localOnly)(function () { return readSources(input, context, function (tokens) { var serialize = context.options.sourceMap ? serializeStylesAndSourceMap : serializeStyles; var optimizedTokens = optimize(tokens, context); var optimizedStyles = serialize(optimizedTokens, context); var output = withMetadata(optimizedStyles, context); return callback ? callback(context.errors.length > 0 ? context.errors : null, output) : output; }); }); } function runner(localOnly) { // to always execute code asynchronously when a callback is given // more at blog.izs.me/post/59142742143/designing-apis-for-asynchrony return localOnly ? function (callback) { return callback(); } : process.nextTick; } function optimize(tokens, context) { var optimized; optimized = level0Optimize(tokens, context); optimized = OptimizationLevel.One in context.options.level ? level1Optimize(tokens, context) : tokens; optimized = OptimizationLevel.Two in context.options.level ? level2Optimize(tokens, context, true) : optimized; return optimized; } function withMetadata(output, context) { output.stats = calculateStatsFrom(output.styles, context); output.errors = context.errors; output.inlinedStylesheets = context.inlinedStylesheets; output.warnings = context.warnings; return output; } function calculateStatsFrom(styles, context) { var finishedAt = Date.now(); var timeSpent = finishedAt - context.stats.startedAt; delete context.stats.startedAt; context.stats.timeSpent = timeSpent; context.stats.efficiency = 1 - styles.length / context.stats.originalSize; context.stats.minifiedSize = styles.length; return context.stats; } node_modules/clean-css/lib/tokenizer/token.js000066600000001477150425117220015343 0ustar00var Token = { AT_RULE: 'at-rule', // e.g. `@import`, `@charset` AT_RULE_BLOCK: 'at-rule-block', // e.g. `@font-face{...}` AT_RULE_BLOCK_SCOPE: 'at-rule-block-scope', // e.g. `@font-face` COMMENT: 'comment', // e.g. `/* comment */` NESTED_BLOCK: 'nested-block', // e.g. `@media screen{...}`, `@keyframes animation {...}` NESTED_BLOCK_SCOPE: 'nested-block-scope', // e.g. `@media`, `@keyframes` PROPERTY: 'property', // e.g. `color:red` PROPERTY_BLOCK: 'property-block', // e.g. `--var:{color:red}` PROPERTY_NAME: 'property-name', // e.g. `color` PROPERTY_VALUE: 'property-value', // e.g. `red` RAW: 'raw', // e.g. anything between /* clean-css ignore:start */ and /* clean-css ignore:end */ comments RULE: 'rule', // e.g `div > a{...}` RULE_SCOPE: 'rule-scope' // e.g `div > a` }; module.exports = Token; node_modules/clean-css/lib/tokenizer/tokenize.js000066600000061037150425117220016051 0ustar00var Marker = require('./marker'); var Token = require('./token'); var formatPosition = require('../utils/format-position'); var Level = { BLOCK: 'block', COMMENT: 'comment', DOUBLE_QUOTE: 'double-quote', RULE: 'rule', SINGLE_QUOTE: 'single-quote' }; var AT_RULES = [ '@charset', '@import' ]; var BLOCK_RULES = [ '@-moz-document', '@document', '@-moz-keyframes', '@-ms-keyframes', '@-o-keyframes', '@-webkit-keyframes', '@keyframes', '@media', '@supports' ]; var IGNORE_END_COMMENT_PATTERN = /\/\* clean\-css ignore:end \*\/$/; var IGNORE_START_COMMENT_PATTERN = /^\/\* clean\-css ignore:start \*\//; var PAGE_MARGIN_BOXES = [ '@bottom-center', '@bottom-left', '@bottom-left-corner', '@bottom-right', '@bottom-right-corner', '@left-bottom', '@left-middle', '@left-top', '@right-bottom', '@right-middle', '@right-top', '@top-center', '@top-left', '@top-left-corner', '@top-right', '@top-right-corner' ]; var EXTRA_PAGE_BOXES = [ '@footnote', '@footnotes', '@left', '@page-float-bottom', '@page-float-top', '@right' ]; var REPEAT_PATTERN = /^\[\s{0,31}\d+\s{0,31}\]$/; var RULE_WORD_SEPARATOR_PATTERN = /[\s\(]/; var TAIL_BROKEN_VALUE_PATTERN = /[\s|\}]*$/; function tokenize(source, externalContext) { var internalContext = { level: Level.BLOCK, position: { source: externalContext.source || undefined, line: 1, column: 0, index: 0 } }; return intoTokens(source, externalContext, internalContext, false); } function intoTokens(source, externalContext, internalContext, isNested) { var allTokens = []; var newTokens = allTokens; var lastToken; var ruleToken; var ruleTokens = []; var propertyToken; var metadata; var metadatas = []; var level = internalContext.level; var levels = []; var buffer = []; var buffers = []; var serializedBuffer; var serializedBufferPart; var roundBracketLevel = 0; var isQuoted; var isSpace; var isNewLineNix; var isNewLineWin; var isCarriageReturn; var isCommentStart; var wasCommentStart = false; var isCommentEnd; var wasCommentEnd = false; var isCommentEndMarker; var isEscaped; var wasEscaped = false; var isRaw = false; var seekingValue = false; var seekingPropertyBlockClosing = false; var position = internalContext.position; var lastCommentStartAt; for (; position.index < source.length; position.index++) { var character = source[position.index]; isQuoted = level == Level.SINGLE_QUOTE || level == Level.DOUBLE_QUOTE; isSpace = character == Marker.SPACE || character == Marker.TAB; isNewLineNix = character == Marker.NEW_LINE_NIX; isNewLineWin = character == Marker.NEW_LINE_NIX && source[position.index - 1] == Marker.CARRIAGE_RETURN; isCarriageReturn = character == Marker.CARRIAGE_RETURN && source[position.index + 1] && source[position.index + 1] != Marker.NEW_LINE_NIX; isCommentStart = !wasCommentEnd && level != Level.COMMENT && !isQuoted && character == Marker.ASTERISK && source[position.index - 1] == Marker.FORWARD_SLASH; isCommentEndMarker = !wasCommentStart && !isQuoted && character == Marker.FORWARD_SLASH && source[position.index - 1] == Marker.ASTERISK; isCommentEnd = level == Level.COMMENT && isCommentEndMarker; roundBracketLevel = Math.max(roundBracketLevel, 0); metadata = buffer.length === 0 ? [position.line, position.column, position.source] : metadata; if (isEscaped) { // previous character was a backslash buffer.push(character); } else if (!isCommentEnd && level == Level.COMMENT) { buffer.push(character); } else if (!isCommentStart && !isCommentEnd && isRaw) { buffer.push(character); } else if (isCommentStart && (level == Level.BLOCK || level == Level.RULE) && buffer.length > 1) { // comment start within block preceded by some content, e.g. div/*<-- metadatas.push(metadata); buffer.push(character); buffers.push(buffer.slice(0, buffer.length - 2)); buffer = buffer.slice(buffer.length - 2); metadata = [position.line, position.column - 1, position.source]; levels.push(level); level = Level.COMMENT; } else if (isCommentStart) { // comment start, e.g. /*<-- levels.push(level); level = Level.COMMENT; buffer.push(character); } else if (isCommentEnd && isIgnoreStartComment(buffer)) { // ignore:start comment end, e.g. /* clean-css ignore:start */<-- serializedBuffer = buffer.join('').trim() + character; lastToken = [Token.COMMENT, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]; newTokens.push(lastToken); isRaw = true; metadata = metadatas.pop() || null; buffer = buffers.pop() || []; } else if (isCommentEnd && isIgnoreEndComment(buffer)) { // ignore:start comment end, e.g. /* clean-css ignore:end */<-- serializedBuffer = buffer.join('') + character; lastCommentStartAt = serializedBuffer.lastIndexOf(Marker.FORWARD_SLASH + Marker.ASTERISK); serializedBufferPart = serializedBuffer.substring(0, lastCommentStartAt); lastToken = [Token.RAW, serializedBufferPart, [originalMetadata(metadata, serializedBufferPart, externalContext)]]; newTokens.push(lastToken); serializedBufferPart = serializedBuffer.substring(lastCommentStartAt); metadata = [position.line, position.column - serializedBufferPart.length + 1, position.source]; lastToken = [Token.COMMENT, serializedBufferPart, [originalMetadata(metadata, serializedBufferPart, externalContext)]]; newTokens.push(lastToken); isRaw = false; level = levels.pop(); metadata = metadatas.pop() || null; buffer = buffers.pop() || []; } else if (isCommentEnd) { // comment end, e.g. /* comment */<-- serializedBuffer = buffer.join('').trim() + character; lastToken = [Token.COMMENT, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]; newTokens.push(lastToken); level = levels.pop(); metadata = metadatas.pop() || null; buffer = buffers.pop() || []; } else if (isCommentEndMarker && source[position.index + 1] != Marker.ASTERISK) { externalContext.warnings.push('Unexpected \'*/\' at ' + formatPosition([position.line, position.column, position.source]) + '.'); buffer = []; } else if (character == Marker.SINGLE_QUOTE && !isQuoted) { // single quotation start, e.g. a[href^='https<-- levels.push(level); level = Level.SINGLE_QUOTE; buffer.push(character); } else if (character == Marker.SINGLE_QUOTE && level == Level.SINGLE_QUOTE) { // single quotation end, e.g. a[href^='https'<-- level = levels.pop(); buffer.push(character); } else if (character == Marker.DOUBLE_QUOTE && !isQuoted) { // double quotation start, e.g. a[href^="<-- levels.push(level); level = Level.DOUBLE_QUOTE; buffer.push(character); } else if (character == Marker.DOUBLE_QUOTE && level == Level.DOUBLE_QUOTE) { // double quotation end, e.g. a[href^="https"<-- level = levels.pop(); buffer.push(character); } else if (!isCommentStart && !isCommentEnd && character != Marker.CLOSE_ROUND_BRACKET && character != Marker.OPEN_ROUND_BRACKET && level != Level.COMMENT && !isQuoted && roundBracketLevel > 0) { // character inside any function, e.g. hsla(.<-- buffer.push(character); } else if (character == Marker.OPEN_ROUND_BRACKET && !isQuoted && level != Level.COMMENT && !seekingValue) { // round open bracket, e.g. @import url(<-- buffer.push(character); roundBracketLevel++; } else if (character == Marker.CLOSE_ROUND_BRACKET && !isQuoted && level != Level.COMMENT && !seekingValue) { // round open bracket, e.g. @import url(test.css)<-- buffer.push(character); roundBracketLevel--; } else if (character == Marker.SEMICOLON && level == Level.BLOCK && buffer[0] == Marker.AT) { // semicolon ending rule at block level, e.g. @import '...';<-- serializedBuffer = buffer.join('').trim(); allTokens.push([Token.AT_RULE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]); buffer = []; } else if (character == Marker.COMMA && level == Level.BLOCK && ruleToken) { // comma separator at block level, e.g. a,div,<-- serializedBuffer = buffer.join('').trim(); ruleToken[1].push([tokenScopeFrom(ruleToken[0]), serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext, ruleToken[1].length)]]); buffer = []; } else if (character == Marker.COMMA && level == Level.BLOCK && tokenTypeFrom(buffer) == Token.AT_RULE) { // comma separator at block level, e.g. @import url(...) screen,<-- // keep iterating as end semicolon will create the token buffer.push(character); } else if (character == Marker.COMMA && level == Level.BLOCK) { // comma separator at block level, e.g. a,<-- ruleToken = [tokenTypeFrom(buffer), [], []]; serializedBuffer = buffer.join('').trim(); ruleToken[1].push([tokenScopeFrom(ruleToken[0]), serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext, 0)]]); buffer = []; } else if (character == Marker.OPEN_CURLY_BRACKET && level == Level.BLOCK && ruleToken && ruleToken[0] == Token.NESTED_BLOCK) { // open brace opening at-rule at block level, e.g. @media{<-- serializedBuffer = buffer.join('').trim(); ruleToken[1].push([Token.NESTED_BLOCK_SCOPE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]); allTokens.push(ruleToken); levels.push(level); position.column++; position.index++; buffer = []; ruleToken[2] = intoTokens(source, externalContext, internalContext, true); ruleToken = null; } else if (character == Marker.OPEN_CURLY_BRACKET && level == Level.BLOCK && tokenTypeFrom(buffer) == Token.NESTED_BLOCK) { // open brace opening at-rule at block level, e.g. @media{<-- serializedBuffer = buffer.join('').trim(); ruleToken = ruleToken || [Token.NESTED_BLOCK, [], []]; ruleToken[1].push([Token.NESTED_BLOCK_SCOPE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]); allTokens.push(ruleToken); levels.push(level); position.column++; position.index++; buffer = []; ruleToken[2] = intoTokens(source, externalContext, internalContext, true); ruleToken = null; } else if (character == Marker.OPEN_CURLY_BRACKET && level == Level.BLOCK) { // open brace opening rule at block level, e.g. div{<-- serializedBuffer = buffer.join('').trim(); ruleToken = ruleToken || [tokenTypeFrom(buffer), [], []]; ruleToken[1].push([tokenScopeFrom(ruleToken[0]), serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext, ruleToken[1].length)]]); newTokens = ruleToken[2]; allTokens.push(ruleToken); levels.push(level); level = Level.RULE; buffer = []; } else if (character == Marker.OPEN_CURLY_BRACKET && level == Level.RULE && seekingValue) { // open brace opening rule at rule level, e.g. div{--variable:{<-- ruleTokens.push(ruleToken); ruleToken = [Token.PROPERTY_BLOCK, []]; propertyToken.push(ruleToken); newTokens = ruleToken[1]; levels.push(level); level = Level.RULE; seekingValue = false; } else if (character == Marker.OPEN_CURLY_BRACKET && level == Level.RULE && isPageMarginBox(buffer)) { // open brace opening page-margin box at rule level, e.g. @page{@top-center{<-- serializedBuffer = buffer.join('').trim(); ruleTokens.push(ruleToken); ruleToken = [Token.AT_RULE_BLOCK, [], []]; ruleToken[1].push([Token.AT_RULE_BLOCK_SCOPE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]); newTokens.push(ruleToken); newTokens = ruleToken[2]; levels.push(level); level = Level.RULE; buffer = []; } else if (character == Marker.COLON && level == Level.RULE && !seekingValue) { // colon at rule level, e.g. a{color:<-- serializedBuffer = buffer.join('').trim(); propertyToken = [Token.PROPERTY, [Token.PROPERTY_NAME, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]]; newTokens.push(propertyToken); seekingValue = true; buffer = []; } else if (character == Marker.SEMICOLON && level == Level.RULE && propertyToken && ruleTokens.length > 0 && buffer.length > 0 && buffer[0] == Marker.AT) { // semicolon at rule level for at-rule, e.g. a{--color:{@apply(--other-color);<-- serializedBuffer = buffer.join('').trim(); ruleToken[1].push([Token.AT_RULE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]); buffer = []; } else if (character == Marker.SEMICOLON && level == Level.RULE && propertyToken && buffer.length > 0) { // semicolon at rule level, e.g. a{color:red;<-- serializedBuffer = buffer.join('').trim(); propertyToken.push([Token.PROPERTY_VALUE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]); propertyToken = null; seekingValue = false; buffer = []; } else if (character == Marker.SEMICOLON && level == Level.RULE && propertyToken && buffer.length === 0) { // semicolon after bracketed value at rule level, e.g. a{color:rgb(...);<-- propertyToken = null; seekingValue = false; } else if (character == Marker.SEMICOLON && level == Level.RULE && buffer.length > 0 && buffer[0] == Marker.AT) { // semicolon for at-rule at rule level, e.g. a{@apply(--variable);<-- serializedBuffer = buffer.join(''); newTokens.push([Token.AT_RULE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]); seekingValue = false; buffer = []; } else if (character == Marker.SEMICOLON && level == Level.RULE && seekingPropertyBlockClosing) { // close brace after a property block at rule level, e.g. a{--custom:{color:red;};<-- seekingPropertyBlockClosing = false; buffer = []; } else if (character == Marker.SEMICOLON && level == Level.RULE && buffer.length === 0) { // stray semicolon at rule level, e.g. a{;<-- // noop } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE && propertyToken && seekingValue && buffer.length > 0 && ruleTokens.length > 0) { // close brace at rule level, e.g. a{--color:{color:red}<-- serializedBuffer = buffer.join(''); propertyToken.push([Token.PROPERTY_VALUE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]); propertyToken = null; ruleToken = ruleTokens.pop(); newTokens = ruleToken[2]; level = levels.pop(); seekingValue = false; buffer = []; } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE && propertyToken && buffer.length > 0 && buffer[0] == Marker.AT && ruleTokens.length > 0) { // close brace at rule level for at-rule, e.g. a{--color:{@apply(--other-color)}<-- serializedBuffer = buffer.join(''); ruleToken[1].push([Token.AT_RULE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]); propertyToken = null; ruleToken = ruleTokens.pop(); newTokens = ruleToken[2]; level = levels.pop(); seekingValue = false; buffer = []; } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE && propertyToken && ruleTokens.length > 0) { // close brace at rule level after space, e.g. a{--color:{color:red }<-- propertyToken = null; ruleToken = ruleTokens.pop(); newTokens = ruleToken[2]; level = levels.pop(); seekingValue = false; } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE && propertyToken && buffer.length > 0) { // close brace at rule level, e.g. a{color:red}<-- serializedBuffer = buffer.join(''); propertyToken.push([Token.PROPERTY_VALUE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]); propertyToken = null; ruleToken = ruleTokens.pop(); newTokens = allTokens; level = levels.pop(); seekingValue = false; buffer = []; } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE && buffer.length > 0 && buffer[0] == Marker.AT) { // close brace after at-rule at rule level, e.g. a{@apply(--variable)}<-- propertyToken = null; ruleToken = null; serializedBuffer = buffer.join('').trim(); newTokens.push([Token.AT_RULE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]); newTokens = allTokens; level = levels.pop(); seekingValue = false; buffer = []; } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE && levels[levels.length - 1] == Level.RULE) { // close brace after a property block at rule level, e.g. a{--custom:{color:red;}<-- propertyToken = null; ruleToken = ruleTokens.pop(); newTokens = ruleToken[2]; level = levels.pop(); seekingValue = false; seekingPropertyBlockClosing = true; buffer = []; } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE) { // close brace after a rule, e.g. a{color:red;}<-- propertyToken = null; ruleToken = null; newTokens = allTokens; level = levels.pop(); seekingValue = false; } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.BLOCK && !isNested && position.index <= source.length - 1) { // stray close brace at block level, e.g. a{color:red}color:blue}<-- externalContext.warnings.push('Unexpected \'}\' at ' + formatPosition([position.line, position.column, position.source]) + '.'); buffer.push(character); } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.BLOCK) { // close brace at block level, e.g. @media screen {...}<-- break; } else if (character == Marker.OPEN_ROUND_BRACKET && level == Level.RULE && seekingValue) { // round open bracket, e.g. a{color:hsla(<-- buffer.push(character); roundBracketLevel++; } else if (character == Marker.CLOSE_ROUND_BRACKET && level == Level.RULE && seekingValue && roundBracketLevel == 1) { // round close bracket, e.g. a{color:hsla(0,0%,0%)<-- buffer.push(character); serializedBuffer = buffer.join('').trim(); propertyToken.push([Token.PROPERTY_VALUE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]); roundBracketLevel--; buffer = []; } else if (character == Marker.CLOSE_ROUND_BRACKET && level == Level.RULE && seekingValue) { // round close bracket within other brackets, e.g. a{width:calc((10rem / 2)<-- buffer.push(character); roundBracketLevel--; } else if (character == Marker.FORWARD_SLASH && source[position.index + 1] != Marker.ASTERISK && level == Level.RULE && seekingValue && buffer.length > 0) { // forward slash within a property, e.g. a{background:url(image.png) 0 0/<-- serializedBuffer = buffer.join('').trim(); propertyToken.push([Token.PROPERTY_VALUE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]); propertyToken.push([Token.PROPERTY_VALUE, character, [[position.line, position.column, position.source]]]); buffer = []; } else if (character == Marker.FORWARD_SLASH && source[position.index + 1] != Marker.ASTERISK && level == Level.RULE && seekingValue) { // forward slash within a property after space, e.g. a{background:url(image.png) 0 0 /<-- propertyToken.push([Token.PROPERTY_VALUE, character, [[position.line, position.column, position.source]]]); buffer = []; } else if (character == Marker.COMMA && level == Level.RULE && seekingValue && buffer.length > 0) { // comma within a property, e.g. a{background:url(image.png),<-- serializedBuffer = buffer.join('').trim(); propertyToken.push([Token.PROPERTY_VALUE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]); propertyToken.push([Token.PROPERTY_VALUE, character, [[position.line, position.column, position.source]]]); buffer = []; } else if (character == Marker.COMMA && level == Level.RULE && seekingValue) { // comma within a property after space, e.g. a{background:url(image.png) ,<-- propertyToken.push([Token.PROPERTY_VALUE, character, [[position.line, position.column, position.source]]]); buffer = []; } else if (character == Marker.CLOSE_SQUARE_BRACKET && propertyToken && propertyToken.length > 1 && buffer.length > 0 && isRepeatToken(buffer)) { buffer.push(character); serializedBuffer = buffer.join('').trim(); propertyToken[propertyToken.length - 1][1] += serializedBuffer; buffer = []; } else if ((isSpace || (isNewLineNix && !isNewLineWin)) && level == Level.RULE && seekingValue && propertyToken && buffer.length > 0) { // space or *nix newline within property, e.g. a{margin:0 <-- serializedBuffer = buffer.join('').trim(); propertyToken.push([Token.PROPERTY_VALUE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]); buffer = []; } else if (isNewLineWin && level == Level.RULE && seekingValue && propertyToken && buffer.length > 1) { // win newline within property, e.g. a{margin:0\r\n<-- serializedBuffer = buffer.join('').trim(); propertyToken.push([Token.PROPERTY_VALUE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]); buffer = []; } else if (isNewLineWin && level == Level.RULE && seekingValue) { // win newline buffer = []; } else if (buffer.length == 1 && isNewLineWin) { // ignore windows newline which is composed of two characters buffer.pop(); } else if (buffer.length > 0 || !isSpace && !isNewLineNix && !isNewLineWin && !isCarriageReturn) { // any character buffer.push(character); } wasEscaped = isEscaped; isEscaped = !wasEscaped && character == Marker.BACK_SLASH; wasCommentStart = isCommentStart; wasCommentEnd = isCommentEnd; position.line = (isNewLineWin || isNewLineNix || isCarriageReturn) ? position.line + 1 : position.line; position.column = (isNewLineWin || isNewLineNix || isCarriageReturn) ? 0 : position.column + 1; } if (seekingValue) { externalContext.warnings.push('Missing \'}\' at ' + formatPosition([position.line, position.column, position.source]) + '.'); } if (seekingValue && buffer.length > 0) { serializedBuffer = buffer.join('').replace(TAIL_BROKEN_VALUE_PATTERN, ''); propertyToken.push([Token.PROPERTY_VALUE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]); buffer = []; } if (buffer.length > 0) { externalContext.warnings.push('Invalid character(s) \'' + buffer.join('') + '\' at ' + formatPosition(metadata) + '. Ignoring.'); } return allTokens; } function isIgnoreStartComment(buffer) { return IGNORE_START_COMMENT_PATTERN.test(buffer.join('') + Marker.FORWARD_SLASH); } function isIgnoreEndComment(buffer) { return IGNORE_END_COMMENT_PATTERN.test(buffer.join('') + Marker.FORWARD_SLASH); } function originalMetadata(metadata, value, externalContext, selectorFallbacks) { var source = metadata[2]; return externalContext.inputSourceMapTracker.isTracking(source) ? externalContext.inputSourceMapTracker.originalPositionFor(metadata, value.length, selectorFallbacks) : metadata; } function tokenTypeFrom(buffer) { var isAtRule = buffer[0] == Marker.AT || buffer[0] == Marker.UNDERSCORE; var ruleWord = buffer.join('').split(RULE_WORD_SEPARATOR_PATTERN)[0]; if (isAtRule && BLOCK_RULES.indexOf(ruleWord) > -1) { return Token.NESTED_BLOCK; } else if (isAtRule && AT_RULES.indexOf(ruleWord) > -1) { return Token.AT_RULE; } else if (isAtRule) { return Token.AT_RULE_BLOCK; } else { return Token.RULE; } } function tokenScopeFrom(tokenType) { if (tokenType == Token.RULE) { return Token.RULE_SCOPE; } else if (tokenType == Token.NESTED_BLOCK) { return Token.NESTED_BLOCK_SCOPE; } else if (tokenType == Token.AT_RULE_BLOCK) { return Token.AT_RULE_BLOCK_SCOPE; } } function isPageMarginBox(buffer) { var serializedBuffer = buffer.join('').trim(); return PAGE_MARGIN_BOXES.indexOf(serializedBuffer) > -1 || EXTRA_PAGE_BOXES.indexOf(serializedBuffer) > -1; } function isRepeatToken(buffer) { return REPEAT_PATTERN.test(buffer.join('') + Marker.CLOSE_SQUARE_BRACKET); } module.exports = tokenize; node_modules/clean-css/lib/tokenizer/marker.js000066600000000775150425117220015504 0ustar00var Marker = { ASTERISK: '*', AT: '@', BACK_SLASH: '\\', CARRIAGE_RETURN: '\r', CLOSE_CURLY_BRACKET: '}', CLOSE_ROUND_BRACKET: ')', CLOSE_SQUARE_BRACKET: ']', COLON: ':', COMMA: ',', DOUBLE_QUOTE: '"', EXCLAMATION: '!', FORWARD_SLASH: '/', INTERNAL: '-clean-css-', NEW_LINE_NIX: '\n', OPEN_CURLY_BRACKET: '{', OPEN_ROUND_BRACKET: '(', OPEN_SQUARE_BRACKET: '[', SEMICOLON: ';', SINGLE_QUOTE: '\'', SPACE: ' ', TAB: '\t', UNDERSCORE: '_' }; module.exports = Marker; node_modules/clean-css/lib/options/inline.js000066600000000370150425117220015151 0ustar00function inlineOptionsFrom(rules) { if (Array.isArray(rules)) { return rules; } if (rules === false) { return ['none']; } return undefined === rules ? ['local'] : rules.split(','); } module.exports = inlineOptionsFrom; node_modules/clean-css/lib/options/rebase-to.js000066600000000227150425117220015555 0ustar00var path = require('path'); function rebaseToFrom(option) { return option ? path.resolve(option) : process.cwd(); } module.exports = rebaseToFrom; node_modules/clean-css/lib/options/optimization-level.js000066600000012673150425117220017537 0ustar00var roundingPrecisionFrom = require('./rounding-precision').roundingPrecisionFrom; var override = require('../utils/override'); var OptimizationLevel = { Zero: '0', One: '1', Two: '2' }; var DEFAULTS = {}; DEFAULTS[OptimizationLevel.Zero] = {}; DEFAULTS[OptimizationLevel.One] = { cleanupCharsets: true, normalizeUrls: true, optimizeBackground: true, optimizeBorderRadius: true, optimizeFilter: true, optimizeFontWeight: true, optimizeOutline: true, removeEmpty: true, removeNegativePaddings: true, removeQuotes: true, removeWhitespace: true, replaceMultipleZeros: true, replaceTimeUnits: true, replaceZeroUnits: true, roundingPrecision: roundingPrecisionFrom(undefined), selectorsSortingMethod: 'standard', specialComments: 'all', tidyAtRules: true, tidyBlockScopes: true, tidySelectors: true, transform: noop }; DEFAULTS[OptimizationLevel.Two] = { mergeAdjacentRules: true, mergeIntoShorthands: true, mergeMedia: true, mergeNonAdjacentRules: true, mergeSemantically: false, overrideProperties: true, removeEmpty: true, reduceNonAdjacentRules: true, removeDuplicateFontRules: true, removeDuplicateMediaBlocks: true, removeDuplicateRules: true, removeUnusedAtRules: false, restructureRules: false, skipProperties: [] }; var ALL_KEYWORD_1 = '*'; var ALL_KEYWORD_2 = 'all'; var FALSE_KEYWORD_1 = 'false'; var FALSE_KEYWORD_2 = 'off'; var TRUE_KEYWORD_1 = 'true'; var TRUE_KEYWORD_2 = 'on'; var LIST_VALUE_SEPARATOR = ','; var OPTION_SEPARATOR = ';'; var OPTION_VALUE_SEPARATOR = ':'; function noop() {} function optimizationLevelFrom(source) { var level = override(DEFAULTS, {}); var Zero = OptimizationLevel.Zero; var One = OptimizationLevel.One; var Two = OptimizationLevel.Two; if (undefined === source) { delete level[Two]; return level; } if (typeof source == 'string') { source = parseInt(source); } if (typeof source == 'number' && source === parseInt(Two)) { return level; } if (typeof source == 'number' && source === parseInt(One)) { delete level[Two]; return level; } if (typeof source == 'number' && source === parseInt(Zero)) { delete level[Two]; delete level[One]; return level; } if (typeof source == 'object') { source = covertValuesToHashes(source); } if (One in source && 'roundingPrecision' in source[One]) { source[One].roundingPrecision = roundingPrecisionFrom(source[One].roundingPrecision); } if (Two in source && 'skipProperties' in source[Two] && typeof(source[Two].skipProperties) == 'string') { source[Two].skipProperties = source[Two].skipProperties.split(LIST_VALUE_SEPARATOR); } if (Zero in source || One in source || Two in source) { level[Zero] = override(level[Zero], source[Zero]); } if (One in source && ALL_KEYWORD_1 in source[One]) { level[One] = override(level[One], defaults(One, normalizeValue(source[One][ALL_KEYWORD_1]))); delete source[One][ALL_KEYWORD_1]; } if (One in source && ALL_KEYWORD_2 in source[One]) { level[One] = override(level[One], defaults(One, normalizeValue(source[One][ALL_KEYWORD_2]))); delete source[One][ALL_KEYWORD_2]; } if (One in source || Two in source) { level[One] = override(level[One], source[One]); } else { delete level[One]; } if (Two in source && ALL_KEYWORD_1 in source[Two]) { level[Two] = override(level[Two], defaults(Two, normalizeValue(source[Two][ALL_KEYWORD_1]))); delete source[Two][ALL_KEYWORD_1]; } if (Two in source && ALL_KEYWORD_2 in source[Two]) { level[Two] = override(level[Two], defaults(Two, normalizeValue(source[Two][ALL_KEYWORD_2]))); delete source[Two][ALL_KEYWORD_2]; } if (Two in source) { level[Two] = override(level[Two], source[Two]); } else { delete level[Two]; } return level; } function defaults(level, value) { var options = override(DEFAULTS[level], {}); var key; for (key in options) { if (typeof options[key] == 'boolean') { options[key] = value; } } return options; } function normalizeValue(value) { switch (value) { case FALSE_KEYWORD_1: case FALSE_KEYWORD_2: return false; case TRUE_KEYWORD_1: case TRUE_KEYWORD_2: return true; default: return value; } } function covertValuesToHashes(source) { var clonedSource = override(source, {}); var level; var i; for (i = 0; i <= 2; i++) { level = '' + i; if (level in clonedSource && (clonedSource[level] === undefined || clonedSource[level] === false)) { delete clonedSource[level]; } if (level in clonedSource && clonedSource[level] === true) { clonedSource[level] = {}; } if (level in clonedSource && typeof clonedSource[level] == 'string') { clonedSource[level] = covertToHash(clonedSource[level], level); } } return clonedSource; } function covertToHash(asString, level) { return asString .split(OPTION_SEPARATOR) .reduce(function (accumulator, directive) { var parts = directive.split(OPTION_VALUE_SEPARATOR); var name = parts[0]; var value = parts[1]; var normalizedValue = normalizeValue(value); if (ALL_KEYWORD_1 == name || ALL_KEYWORD_2 == name) { accumulator = override(accumulator, defaults(level, normalizedValue)); } else { accumulator[name] = normalizedValue; } return accumulator; }, {}); } module.exports = { OptimizationLevel: OptimizationLevel, optimizationLevelFrom: optimizationLevelFrom, }; node_modules/clean-css/lib/options/compatibility.js000066600000011007150425117220016543 0ustar00var DEFAULTS = { '*': { colors: { opacity: true // rgba / hsla }, properties: { backgroundClipMerging: true, // background-clip to shorthand backgroundOriginMerging: true, // background-origin to shorthand backgroundSizeMerging: true, // background-size to shorthand colors: true, // any kind of color transformations, like `#ff00ff` to `#f0f` or `#fff` into `red` ieBangHack: false, // !ie suffix hacks on IE<8 ieFilters: false, // whether to preserve `filter` and `-ms-filter` properties iePrefixHack: false, // underscore / asterisk prefix hacks on IE ieSuffixHack: false, // \9 suffix hacks on IE6-9 merging: true, // merging properties into one shorterLengthUnits: false, // optimize pixel units into `pt`, `pc` or `in` units spaceAfterClosingBrace: true, // 'url() no-repeat' to 'url()no-repeat' urlQuotes: false, // whether to wrap content of `url()` into quotes or not zeroUnits: true // 0[unit] -> 0 }, selectors: { adjacentSpace: false, // div+ nav Android stock browser hack ie7Hack: false, // *+html hack mergeablePseudoClasses: [ ':active', ':after', ':before', ':empty', ':checked', ':disabled', ':empty', ':enabled', ':first-child', ':first-letter', ':first-line', ':first-of-type', ':focus', ':hover', ':lang', ':last-child', ':last-of-type', ':link', ':not', ':nth-child', ':nth-last-child', ':nth-last-of-type', ':nth-of-type', ':only-child', ':only-of-type', ':root', ':target', ':visited' ], // selectors with these pseudo-classes can be merged as these are universally supported mergeablePseudoElements: [ '::after', '::before', '::first-letter', '::first-line' ], // selectors with these pseudo-elements can be merged as these are universally supported mergeLimit: 8191, // number of rules that can be safely merged together multiplePseudoMerging: true }, units: { ch: true, in: true, pc: true, pt: true, rem: true, vh: true, vm: true, // vm is vmin on IE9+ see https://developer.mozilla.org/en-US/docs/Web/CSS/length vmax: true, vmin: true, vw: true } } }; DEFAULTS.ie11 = DEFAULTS['*']; DEFAULTS.ie10 = DEFAULTS['*']; DEFAULTS.ie9 = merge(DEFAULTS['*'], { properties: { ieFilters: true, ieSuffixHack: true } }); DEFAULTS.ie8 = merge(DEFAULTS.ie9, { colors: { opacity: false }, properties: { backgroundClipMerging: false, backgroundOriginMerging: false, backgroundSizeMerging: false, iePrefixHack: true, merging: false }, selectors: { mergeablePseudoClasses: [ ':after', ':before', ':first-child', ':first-letter', ':focus', ':hover', ':visited' ], mergeablePseudoElements: [] }, units: { ch: false, rem: false, vh: false, vm: false, vmax: false, vmin: false, vw: false } }); DEFAULTS.ie7 = merge(DEFAULTS.ie8, { properties: { ieBangHack: true }, selectors: { ie7Hack: true, mergeablePseudoClasses: [ ':first-child', ':first-letter', ':hover', ':visited' ] }, }); function compatibilityFrom(source) { return merge(DEFAULTS['*'], calculateSource(source)); } function merge(source, target) { for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { var value = source[key]; if (Object.prototype.hasOwnProperty.call(target, key) && typeof value === 'object' && !Array.isArray(value)) { target[key] = merge(value, target[key] || {}); } else { target[key] = key in target ? target[key] : value; } } } return target; } function calculateSource(source) { if (typeof source == 'object') return source; if (!/[,\+\-]/.test(source)) return DEFAULTS[source] || DEFAULTS['*']; var parts = source.split(','); var template = parts[0] in DEFAULTS ? DEFAULTS[parts.shift()] : DEFAULTS['*']; source = {}; parts.forEach(function (part) { var isAdd = part[0] == '+'; var key = part.substring(1).split('.'); var group = key[0]; var option = key[1]; source[group] = source[group] || {}; source[group][option] = isAdd; }); return merge(template, source); } module.exports = compatibilityFrom; node_modules/clean-css/lib/options/format.js000066600000012017150425117220015164 0ustar00var systemLineBreak = require('os').EOL; var override = require('../utils/override'); var Breaks = { AfterAtRule: 'afterAtRule', AfterBlockBegins: 'afterBlockBegins', AfterBlockEnds: 'afterBlockEnds', AfterComment: 'afterComment', AfterProperty: 'afterProperty', AfterRuleBegins: 'afterRuleBegins', AfterRuleEnds: 'afterRuleEnds', BeforeBlockEnds: 'beforeBlockEnds', BetweenSelectors: 'betweenSelectors' }; var BreakWith = { CarriageReturnLineFeed: '\r\n', LineFeed: '\n', System: systemLineBreak }; var IndentWith = { Space: ' ', Tab: '\t' }; var Spaces = { AroundSelectorRelation: 'aroundSelectorRelation', BeforeBlockBegins: 'beforeBlockBegins', BeforeValue: 'beforeValue' }; var DEFAULTS = { breaks: breaks(false), breakWith: BreakWith.System, indentBy: 0, indentWith: IndentWith.Space, spaces: spaces(false), wrapAt: false, semicolonAfterLastProperty: false }; var BEAUTIFY_ALIAS = 'beautify'; var KEEP_BREAKS_ALIAS = 'keep-breaks'; var OPTION_SEPARATOR = ';'; var OPTION_NAME_VALUE_SEPARATOR = ':'; var HASH_VALUES_OPTION_SEPARATOR = ','; var HASH_VALUES_NAME_VALUE_SEPARATOR = '='; var FALSE_KEYWORD_1 = 'false'; var FALSE_KEYWORD_2 = 'off'; var TRUE_KEYWORD_1 = 'true'; var TRUE_KEYWORD_2 = 'on'; function breaks(value) { var breakOptions = {}; breakOptions[Breaks.AfterAtRule] = value; breakOptions[Breaks.AfterBlockBegins] = value; breakOptions[Breaks.AfterBlockEnds] = value; breakOptions[Breaks.AfterComment] = value; breakOptions[Breaks.AfterProperty] = value; breakOptions[Breaks.AfterRuleBegins] = value; breakOptions[Breaks.AfterRuleEnds] = value; breakOptions[Breaks.BeforeBlockEnds] = value; breakOptions[Breaks.BetweenSelectors] = value; return breakOptions; } function spaces(value) { var spaceOptions = {}; spaceOptions[Spaces.AroundSelectorRelation] = value; spaceOptions[Spaces.BeforeBlockBegins] = value; spaceOptions[Spaces.BeforeValue] = value; return spaceOptions; } function formatFrom(source) { if (source === undefined || source === false) { return false; } if (typeof source == 'object' && 'breakWith' in source) { source = override(source, { breakWith: mapBreakWith(source.breakWith) }); } if (typeof source == 'object' && 'indentBy' in source) { source = override(source, { indentBy: parseInt(source.indentBy) }); } if (typeof source == 'object' && 'indentWith' in source) { source = override(source, { indentWith: mapIndentWith(source.indentWith) }); } if (typeof source == 'object') { return override(DEFAULTS, source); } if (typeof source == 'object') { return override(DEFAULTS, source); } if (typeof source == 'string' && source == BEAUTIFY_ALIAS) { return override(DEFAULTS, { breaks: breaks(true), indentBy: 2, spaces: spaces(true) }); } if (typeof source == 'string' && source == KEEP_BREAKS_ALIAS) { return override(DEFAULTS, { breaks: { afterAtRule: true, afterBlockBegins: true, afterBlockEnds: true, afterComment: true, afterRuleEnds: true, beforeBlockEnds: true } }); } if (typeof source == 'string') { return override(DEFAULTS, toHash(source)); } return DEFAULTS; } function toHash(string) { return string .split(OPTION_SEPARATOR) .reduce(function (accumulator, directive) { var parts = directive.split(OPTION_NAME_VALUE_SEPARATOR); var name = parts[0]; var value = parts[1]; if (name == 'breaks' || name == 'spaces') { accumulator[name] = hashValuesToHash(value); } else if (name == 'indentBy' || name == 'wrapAt') { accumulator[name] = parseInt(value); } else if (name == 'indentWith') { accumulator[name] = mapIndentWith(value); } else if (name == 'breakWith') { accumulator[name] = mapBreakWith(value); } return accumulator; }, {}); } function hashValuesToHash(string) { return string .split(HASH_VALUES_OPTION_SEPARATOR) .reduce(function (accumulator, directive) { var parts = directive.split(HASH_VALUES_NAME_VALUE_SEPARATOR); var name = parts[0]; var value = parts[1]; accumulator[name] = normalizeValue(value); return accumulator; }, {}); } function normalizeValue(value) { switch (value) { case FALSE_KEYWORD_1: case FALSE_KEYWORD_2: return false; case TRUE_KEYWORD_1: case TRUE_KEYWORD_2: return true; default: return value; } } function mapBreakWith(value) { switch (value) { case 'windows': case 'crlf': case BreakWith.CarriageReturnLineFeed: return BreakWith.CarriageReturnLineFeed; case 'unix': case 'lf': case BreakWith.LineFeed: return BreakWith.LineFeed; default: return systemLineBreak; } } function mapIndentWith(value) { switch (value) { case 'space': return IndentWith.Space; case 'tab': return IndentWith.Tab; default: return value; } } module.exports = { Breaks: Breaks, Spaces: Spaces, formatFrom: formatFrom }; node_modules/clean-css/lib/options/rounding-precision.js000066600000003655150425117220017522 0ustar00var override = require('../utils/override'); var INTEGER_PATTERN = /^\d+$/; var ALL_UNITS = ['*', 'all']; var DEFAULT_PRECISION = 'off'; // all precision changes are disabled var DIRECTIVES_SEPARATOR = ','; // e.g. *=5,px=3 var DIRECTIVE_VALUE_SEPARATOR = '='; // e.g. *=5 function roundingPrecisionFrom(source) { return override(defaults(DEFAULT_PRECISION), buildPrecisionFrom(source)); } function defaults(value) { return { 'ch': value, 'cm': value, 'em': value, 'ex': value, 'in': value, 'mm': value, 'pc': value, 'pt': value, 'px': value, 'q': value, 'rem': value, 'vh': value, 'vmax': value, 'vmin': value, 'vw': value, '%': value }; } function buildPrecisionFrom(source) { if (source === null || source === undefined) { return {}; } if (typeof source == 'boolean') { return {}; } if (typeof source == 'number' && source == -1) { return defaults(DEFAULT_PRECISION); } if (typeof source == 'number') { return defaults(source); } if (typeof source == 'string' && INTEGER_PATTERN.test(source)) { return defaults(parseInt(source)); } if (typeof source == 'string' && source == DEFAULT_PRECISION) { return defaults(DEFAULT_PRECISION); } if (typeof source == 'object') { return source; } return source .split(DIRECTIVES_SEPARATOR) .reduce(function (accumulator, directive) { var directiveParts = directive.split(DIRECTIVE_VALUE_SEPARATOR); var name = directiveParts[0]; var value = parseInt(directiveParts[1]); if (isNaN(value) || value == -1) { value = DEFAULT_PRECISION; } if (ALL_UNITS.indexOf(name) > -1) { accumulator = override(accumulator, defaults(value)); } else { accumulator[name] = value; } return accumulator; }, {}); } module.exports = { DEFAULT: DEFAULT_PRECISION, roundingPrecisionFrom: roundingPrecisionFrom }; node_modules/clean-css/lib/options/inline-request.js000066600000000734150425117220016643 0ustar00var url = require('url'); var override = require('../utils/override'); function inlineRequestFrom(option) { return override( /* jshint camelcase: false */ proxyOptionsFrom(process.env.HTTP_PROXY || process.env.http_proxy), option || {} ); } function proxyOptionsFrom(httpProxy) { return httpProxy ? { hostname: url.parse(httpProxy).hostname, port: parseInt(url.parse(httpProxy).port) } : {}; } module.exports = inlineRequestFrom; node_modules/clean-css/lib/options/inline-timeout.js000066600000000215150425117220016633 0ustar00var DEFAULT_TIMEOUT = 5000; function inlineTimeoutFrom(option) { return option || DEFAULT_TIMEOUT; } module.exports = inlineTimeoutFrom; node_modules/clean-css/lib/options/rebase.js000066600000000201150425117220015125 0ustar00function rebaseFrom(rebaseOption) { return undefined === rebaseOption ? true : !!rebaseOption; } module.exports = rebaseFrom; node_modules/clean-css/lib/options/fetch.js000066600000000254150425117220014765 0ustar00var loadRemoteResource = require('../reader/load-remote-resource'); function fetchFrom(callback) { return callback || loadRemoteResource; } module.exports = fetchFrom; node_modules/clean-css/lib/writer/source-maps.js000066600000005571150425117220015762 0ustar00var SourceMapGenerator = require('source-map').SourceMapGenerator; var all = require('./helpers').all; var isRemoteResource = require('../utils/is-remote-resource'); var isWindows = process.platform == 'win32'; var NIX_SEPARATOR_PATTERN = /\//g; var UNKNOWN_SOURCE = '$stdin'; var WINDOWS_SEPARATOR = '\\'; function store(serializeContext, element) { var fromString = typeof element == 'string'; var value = fromString ? element : element[1]; var mappings = fromString ? null : element[2]; var wrap = serializeContext.wrap; wrap(serializeContext, value); track(serializeContext, value, mappings); serializeContext.output.push(value); } function wrap(serializeContext, value) { if (serializeContext.column + value.length > serializeContext.format.wrapAt) { track(serializeContext, serializeContext.format.breakWith, false); serializeContext.output.push(serializeContext.format.breakWith); } } function track(serializeContext, value, mappings) { var parts = value.split('\n'); if (mappings) { trackAllMappings(serializeContext, mappings); } serializeContext.line += parts.length - 1; serializeContext.column = parts.length > 1 ? 0 : (serializeContext.column + parts.pop().length); } function trackAllMappings(serializeContext, mappings) { for (var i = 0, l = mappings.length; i < l; i++) { trackMapping(serializeContext, mappings[i]); } } function trackMapping(serializeContext, mapping) { var line = mapping[0]; var column = mapping[1]; var originalSource = mapping[2]; var source = originalSource; var storedSource = source || UNKNOWN_SOURCE; if (isWindows && source && !isRemoteResource(source)) { storedSource = source.replace(NIX_SEPARATOR_PATTERN, WINDOWS_SEPARATOR); } serializeContext.outputMap.addMapping({ generated: { line: serializeContext.line, column: serializeContext.column }, source: storedSource, original: { line: line, column: column } }); if (serializeContext.inlineSources && (originalSource in serializeContext.sourcesContent)) { serializeContext.outputMap.setSourceContent(storedSource, serializeContext.sourcesContent[originalSource]); } } function serializeStylesAndSourceMap(tokens, context) { var serializeContext = { column: 0, format: context.options.format, indentBy: 0, indentWith: '', inlineSources: context.options.sourceMapInlineSources, line: 1, output: [], outputMap: new SourceMapGenerator(), sourcesContent: context.sourcesContent, spaceAfterClosingBrace: context.options.compatibility.properties.spaceAfterClosingBrace, store: store, wrap: context.options.format.wrapAt ? wrap : function () { /* noop */ } }; all(serializeContext, tokens); return { sourceMap: serializeContext.outputMap, styles: serializeContext.output.join('') }; } module.exports = serializeStylesAndSourceMap; node_modules/clean-css/lib/writer/simple.js000066600000002427150425117220015012 0ustar00var all = require('./helpers').all; function store(serializeContext, token) { var value = typeof token == 'string' ? token : token[1]; var wrap = serializeContext.wrap; wrap(serializeContext, value); track(serializeContext, value); serializeContext.output.push(value); } function wrap(serializeContext, value) { if (serializeContext.column + value.length > serializeContext.format.wrapAt) { track(serializeContext, serializeContext.format.breakWith); serializeContext.output.push(serializeContext.format.breakWith); } } function track(serializeContext, value) { var parts = value.split('\n'); serializeContext.line += parts.length - 1; serializeContext.column = parts.length > 1 ? 0 : (serializeContext.column + parts.pop().length); } function serializeStyles(tokens, context) { var serializeContext = { column: 0, format: context.options.format, indentBy: 0, indentWith: '', line: 1, output: [], spaceAfterClosingBrace: context.options.compatibility.properties.spaceAfterClosingBrace, store: store, wrap: context.options.format.wrapAt ? wrap : function () { /* noop */ } }; all(serializeContext, tokens); return { styles: serializeContext.output.join('') }; } module.exports = serializeStyles; node_modules/clean-css/lib/writer/one-time.js000066600000002127150425117220015233 0ustar00var helpers = require('./helpers'); function store(serializeContext, token) { serializeContext.output.push(typeof token == 'string' ? token : token[1]); } function context() { var newContext = { output: [], store: store }; return newContext; } function all(tokens) { var oneTimeContext = context(); helpers.all(oneTimeContext, tokens); return oneTimeContext.output.join(''); } function body(tokens) { var oneTimeContext = context(); helpers.body(oneTimeContext, tokens); return oneTimeContext.output.join(''); } function property(tokens, position) { var oneTimeContext = context(); helpers.property(oneTimeContext, tokens, position, true); return oneTimeContext.output.join(''); } function rules(tokens) { var oneTimeContext = context(); helpers.rules(oneTimeContext, tokens); return oneTimeContext.output.join(''); } function value(tokens) { var oneTimeContext = context(); helpers.value(oneTimeContext, tokens); return oneTimeContext.output.join(''); } module.exports = { all: all, body: body, property: property, rules: rules, value: value }; node_modules/clean-css/lib/writer/helpers.js000066600000016415150425117220015165 0ustar00var emptyCharacter = ''; var Breaks = require('../options/format').Breaks; var Spaces = require('../options/format').Spaces; var Marker = require('../tokenizer/marker'); var Token = require('../tokenizer/token'); function supportsAfterClosingBrace(token) { return token[1][1] == 'background' || token[1][1] == 'transform' || token[1][1] == 'src'; } function afterClosingBrace(token, valueIndex) { return token[valueIndex][1][token[valueIndex][1].length - 1] == Marker.CLOSE_ROUND_BRACKET; } function afterComma(token, valueIndex) { return token[valueIndex][1] == Marker.COMMA; } function afterSlash(token, valueIndex) { return token[valueIndex][1] == Marker.FORWARD_SLASH; } function beforeComma(token, valueIndex) { return token[valueIndex + 1] && token[valueIndex + 1][1] == Marker.COMMA; } function beforeSlash(token, valueIndex) { return token[valueIndex + 1] && token[valueIndex + 1][1] == Marker.FORWARD_SLASH; } function inFilter(token) { return token[1][1] == 'filter' || token[1][1] == '-ms-filter'; } function disallowsSpace(context, token, valueIndex) { return !context.spaceAfterClosingBrace && supportsAfterClosingBrace(token) && afterClosingBrace(token, valueIndex) || beforeSlash(token, valueIndex) || afterSlash(token, valueIndex) || beforeComma(token, valueIndex) || afterComma(token, valueIndex); } function rules(context, tokens) { var store = context.store; for (var i = 0, l = tokens.length; i < l; i++) { store(context, tokens[i]); if (i < l - 1) { store(context, comma(context)); } } } function body(context, tokens) { var lastPropertyAt = lastPropertyIndex(tokens); for (var i = 0, l = tokens.length; i < l; i++) { property(context, tokens, i, lastPropertyAt); } } function lastPropertyIndex(tokens) { var index = tokens.length - 1; for (; index >= 0; index--) { if (tokens[index][0] != Token.COMMENT) { break; } } return index; } function property(context, tokens, position, lastPropertyAt) { var store = context.store; var token = tokens[position]; var propertyValue = token[2]; var isPropertyBlock = propertyValue && propertyValue[0] === Token.PROPERTY_BLOCK; var needsSemicolon; if ( context.format ) { if ( context.format.semicolonAfterLastProperty || isPropertyBlock ) { needsSemicolon = true; } else if ( position < lastPropertyAt ) { needsSemicolon = true; } else { needsSemicolon = false; } } else { needsSemicolon = position < lastPropertyAt || isPropertyBlock; } var isLast = position === lastPropertyAt; switch (token[0]) { case Token.AT_RULE: store(context, token); store(context, semicolon(context, Breaks.AfterProperty, false)); break; case Token.AT_RULE_BLOCK: rules(context, token[1]); store(context, openBrace(context, Breaks.AfterRuleBegins, true)); body(context, token[2]); store(context, closeBrace(context, Breaks.AfterRuleEnds, false, isLast)); break; case Token.COMMENT: store(context, token); break; case Token.PROPERTY: store(context, token[1]); store(context, colon(context)); if (propertyValue) { value(context, token); } store(context, needsSemicolon ? semicolon(context, Breaks.AfterProperty, isLast) : emptyCharacter); break; case Token.RAW: store(context, token); } } function value(context, token) { var store = context.store; var j, m; if (token[2][0] == Token.PROPERTY_BLOCK) { store(context, openBrace(context, Breaks.AfterBlockBegins, false)); body(context, token[2][1]); store(context, closeBrace(context, Breaks.AfterBlockEnds, false, true)); } else { for (j = 2, m = token.length; j < m; j++) { store(context, token[j]); if (j < m - 1 && (inFilter(token) || !disallowsSpace(context, token, j))) { store(context, Marker.SPACE); } } } } function allowsBreak(context, where) { return context.format && context.format.breaks[where]; } function allowsSpace(context, where) { return context.format && context.format.spaces[where]; } function openBrace(context, where, needsPrefixSpace) { if (context.format) { context.indentBy += context.format.indentBy; context.indentWith = context.format.indentWith.repeat(context.indentBy); return (needsPrefixSpace && allowsSpace(context, Spaces.BeforeBlockBegins) ? Marker.SPACE : emptyCharacter) + Marker.OPEN_CURLY_BRACKET + (allowsBreak(context, where) ? context.format.breakWith : emptyCharacter) + context.indentWith; } else { return Marker.OPEN_CURLY_BRACKET; } } function closeBrace(context, where, beforeBlockEnd, isLast) { if (context.format) { context.indentBy -= context.format.indentBy; context.indentWith = context.format.indentWith.repeat(context.indentBy); return (allowsBreak(context, Breaks.AfterProperty) || beforeBlockEnd && allowsBreak(context, Breaks.BeforeBlockEnds) ? context.format.breakWith : emptyCharacter) + context.indentWith + Marker.CLOSE_CURLY_BRACKET + (isLast ? emptyCharacter : (allowsBreak(context, where) ? context.format.breakWith : emptyCharacter) + context.indentWith); } else { return Marker.CLOSE_CURLY_BRACKET; } } function colon(context) { return context.format ? Marker.COLON + (allowsSpace(context, Spaces.BeforeValue) ? Marker.SPACE : emptyCharacter) : Marker.COLON; } function semicolon(context, where, isLast) { return context.format ? Marker.SEMICOLON + (isLast || !allowsBreak(context, where) ? emptyCharacter : context.format.breakWith + context.indentWith) : Marker.SEMICOLON; } function comma(context) { return context.format ? Marker.COMMA + (allowsBreak(context, Breaks.BetweenSelectors) ? context.format.breakWith : emptyCharacter) + context.indentWith : Marker.COMMA; } function all(context, tokens) { var store = context.store; var token; var isLast; var i, l; for (i = 0, l = tokens.length; i < l; i++) { token = tokens[i]; isLast = i == l - 1; switch (token[0]) { case Token.AT_RULE: store(context, token); store(context, semicolon(context, Breaks.AfterAtRule, isLast)); break; case Token.AT_RULE_BLOCK: rules(context, token[1]); store(context, openBrace(context, Breaks.AfterRuleBegins, true)); body(context, token[2]); store(context, closeBrace(context, Breaks.AfterRuleEnds, false, isLast)); break; case Token.NESTED_BLOCK: rules(context, token[1]); store(context, openBrace(context, Breaks.AfterBlockBegins, true)); all(context, token[2]); store(context, closeBrace(context, Breaks.AfterBlockEnds, true, isLast)); break; case Token.COMMENT: store(context, token); store(context, allowsBreak(context, Breaks.AfterComment) ? context.format.breakWith : emptyCharacter); break; case Token.RAW: store(context, token); break; case Token.RULE: rules(context, token[1]); store(context, openBrace(context, Breaks.AfterRuleBegins, true)); body(context, token[2]); store(context, closeBrace(context, Breaks.AfterRuleEnds, false, isLast)); break; } } } module.exports = { all: all, body: body, property: property, rules: rules, value: value }; node_modules/clean-css/lib/optimizer/validator.js000066600000025551150425117220016217 0ustar00var functionNoVendorRegexStr = '[A-Z]+(\\-|[A-Z]|[0-9])+\\(.*?\\)'; var functionVendorRegexStr = '\\-(\\-|[A-Z]|[0-9])+\\(.*?\\)'; var variableRegexStr = 'var\\(\\-\\-[^\\)]+\\)'; var functionAnyRegexStr = '(' + variableRegexStr + '|' + functionNoVendorRegexStr + '|' + functionVendorRegexStr + ')'; var calcRegex = new RegExp('^(\\-moz\\-|\\-webkit\\-)?calc\\([^\\)]+\\)$', 'i'); var decimalRegex = /[0-9]/; var functionAnyRegex = new RegExp('^' + functionAnyRegexStr + '$', 'i'); var hslColorRegex = /^hsl\(\s{0,31}[\-\.]?\d+\s{0,31},\s{0,31}\.?\d+%\s{0,31},\s{0,31}\.?\d+%\s{0,31}\)|hsla\(\s{0,31}[\-\.]?\d+\s{0,31},\s{0,31}\.?\d+%\s{0,31},\s{0,31}\.?\d+%\s{0,31},\s{0,31}\.?\d+\s{0,31}\)$/i; var identifierRegex = /^(\-[a-z0-9_][a-z0-9\-_]*|[a-z][a-z0-9\-_]*)$/i; var namedEntityRegex = /^[a-z]+$/i; var prefixRegex = /^-([a-z0-9]|-)*$/i; var rgbColorRegex = /^rgb\(\s{0,31}[\d]{1,3}\s{0,31},\s{0,31}[\d]{1,3}\s{0,31},\s{0,31}[\d]{1,3}\s{0,31}\)|rgba\(\s{0,31}[\d]{1,3}\s{0,31},\s{0,31}[\d]{1,3}\s{0,31},\s{0,31}[\d]{1,3}\s{0,31},\s{0,31}[\.\d]+\s{0,31}\)$/i; var timingFunctionRegex = /^(cubic\-bezier|steps)\([^\)]+\)$/; var validTimeUnits = ['ms', 's']; var urlRegex = /^url\([\s\S]+\)$/i; var variableRegex = new RegExp('^' + variableRegexStr + '$', 'i'); var eightValueColorRegex = /^#[0-9a-f]{8}$/i; var fourValueColorRegex = /^#[0-9a-f]{4}$/i; var sixValueColorRegex = /^#[0-9a-f]{6}$/i; var threeValueColorRegex = /^#[0-9a-f]{3}$/i; var DECIMAL_DOT = '.'; var MINUS_SIGN = '-'; var PLUS_SIGN = '+'; var Keywords = { '^': [ 'inherit', 'initial', 'unset' ], '*-style': [ 'auto', 'dashed', 'dotted', 'double', 'groove', 'hidden', 'inset', 'none', 'outset', 'ridge', 'solid' ], '*-timing-function': [ 'ease', 'ease-in', 'ease-in-out', 'ease-out', 'linear', 'step-end', 'step-start' ], 'animation-direction': [ 'alternate', 'alternate-reverse', 'normal', 'reverse' ], 'animation-fill-mode': [ 'backwards', 'both', 'forwards', 'none' ], 'animation-iteration-count': [ 'infinite' ], 'animation-name': [ 'none' ], 'animation-play-state': [ 'paused', 'running' ], 'background-attachment': [ 'fixed', 'inherit', 'local', 'scroll' ], 'background-clip': [ 'border-box', 'content-box', 'inherit', 'padding-box', 'text' ], 'background-origin': [ 'border-box', 'content-box', 'inherit', 'padding-box' ], 'background-position': [ 'bottom', 'center', 'left', 'right', 'top' ], 'background-repeat': [ 'no-repeat', 'inherit', 'repeat', 'repeat-x', 'repeat-y', 'round', 'space' ], 'background-size': [ 'auto', 'cover', 'contain' ], 'border-collapse': [ 'collapse', 'inherit', 'separate' ], 'bottom': [ 'auto' ], 'clear': [ 'both', 'left', 'none', 'right' ], 'color': [ 'transparent' ], 'cursor': [ 'all-scroll', 'auto', 'col-resize', 'crosshair', 'default', 'e-resize', 'help', 'move', 'n-resize', 'ne-resize', 'no-drop', 'not-allowed', 'nw-resize', 'pointer', 'progress', 'row-resize', 's-resize', 'se-resize', 'sw-resize', 'text', 'vertical-text', 'w-resize', 'wait' ], 'display': [ 'block', 'inline', 'inline-block', 'inline-table', 'list-item', 'none', 'table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row', 'table-row-group' ], 'float': [ 'left', 'none', 'right' ], 'left': [ 'auto' ], 'font': [ 'caption', 'icon', 'menu', 'message-box', 'small-caption', 'status-bar', 'unset' ], 'font-size': [ 'large', 'larger', 'medium', 'small', 'smaller', 'x-large', 'x-small', 'xx-large', 'xx-small' ], 'font-stretch': [ 'condensed', 'expanded', 'extra-condensed', 'extra-expanded', 'normal', 'semi-condensed', 'semi-expanded', 'ultra-condensed', 'ultra-expanded' ], 'font-style': [ 'italic', 'normal', 'oblique' ], 'font-variant': [ 'normal', 'small-caps' ], 'font-weight': [ '100', '200', '300', '400', '500', '600', '700', '800', '900', 'bold', 'bolder', 'lighter', 'normal' ], 'line-height': [ 'normal' ], 'list-style-position': [ 'inside', 'outside' ], 'list-style-type': [ 'armenian', 'circle', 'decimal', 'decimal-leading-zero', 'disc', 'decimal|disc', // this is the default value of list-style-type, see comment in compactable.js 'georgian', 'lower-alpha', 'lower-greek', 'lower-latin', 'lower-roman', 'none', 'square', 'upper-alpha', 'upper-latin', 'upper-roman' ], 'overflow': [ 'auto', 'hidden', 'scroll', 'visible' ], 'position': [ 'absolute', 'fixed', 'relative', 'static' ], 'right': [ 'auto' ], 'text-align': [ 'center', 'justify', 'left', 'left|right', // this is the default value of list-style-type, see comment in compactable.js 'right' ], 'text-decoration': [ 'line-through', 'none', 'overline', 'underline' ], 'text-overflow': [ 'clip', 'ellipsis' ], 'top': [ 'auto' ], 'vertical-align': [ 'baseline', 'bottom', 'middle', 'sub', 'super', 'text-bottom', 'text-top', 'top' ], 'visibility': [ 'collapse', 'hidden', 'visible' ], 'white-space': [ 'normal', 'nowrap', 'pre' ], 'width': [ 'inherit', 'initial', 'medium', 'thick', 'thin' ] }; var Units = [ '%', 'ch', 'cm', 'em', 'ex', 'in', 'mm', 'pc', 'pt', 'px', 'rem', 'vh', 'vm', 'vmax', 'vmin', 'vw' ]; function isColor(value) { return value != 'auto' && ( isKeyword('color')(value) || isHexColor(value) || isColorFunction(value) || isNamedEntity(value) ); } function isColorFunction(value) { return isRgbColor(value) || isHslColor(value); } function isDynamicUnit(value) { return calcRegex.test(value); } function isFunction(value) { return functionAnyRegex.test(value); } function isHexColor(value) { return threeValueColorRegex.test(value) || fourValueColorRegex.test(value) || sixValueColorRegex.test(value) || eightValueColorRegex.test(value); } function isHslColor(value) { return hslColorRegex.test(value); } function isIdentifier(value) { return identifierRegex.test(value); } function isImage(value) { return value == 'none' || value == 'inherit' || isUrl(value); } function isKeyword(propertyName) { return function(value) { return Keywords[propertyName].indexOf(value) > -1; }; } function isNamedEntity(value) { return namedEntityRegex.test(value); } function isNumber(value) { return scanForNumber(value) == value.length; } function isRgbColor(value) { return rgbColorRegex.test(value); } function isPrefixed(value) { return prefixRegex.test(value); } function isPositiveNumber(value) { return isNumber(value) && parseFloat(value) >= 0; } function isVariable(value) { return variableRegex.test(value); } function isTime(value) { var numberUpTo = scanForNumber(value); return numberUpTo == value.length && parseInt(value) === 0 || numberUpTo > -1 && validTimeUnits.indexOf(value.slice(numberUpTo + 1)) > -1; } function isTimingFunction() { var isTimingFunctionKeyword = isKeyword('*-timing-function'); return function (value) { return isTimingFunctionKeyword(value) || timingFunctionRegex.test(value); }; } function isUnit(validUnits, value) { var numberUpTo = scanForNumber(value); return numberUpTo == value.length && parseInt(value) === 0 || numberUpTo > -1 && validUnits.indexOf(value.slice(numberUpTo + 1)) > -1 || value == 'auto' || value == 'inherit'; } function isUrl(value) { return urlRegex.test(value); } function isZIndex(value) { return value == 'auto' || isNumber(value) || isKeyword('^')(value); } function scanForNumber(value) { var hasDot = false; var hasSign = false; var character; var i, l; for (i = 0, l = value.length; i < l; i++) { character = value[i]; if (i === 0 && (character == PLUS_SIGN || character == MINUS_SIGN)) { hasSign = true; } else if (i > 0 && hasSign && (character == PLUS_SIGN || character == MINUS_SIGN)) { return i - 1; } else if (character == DECIMAL_DOT && !hasDot) { hasDot = true; } else if (character == DECIMAL_DOT && hasDot) { return i - 1; } else if (decimalRegex.test(character)) { continue; } else { return i - 1; } } return i; } function validator(compatibility) { var validUnits = Units.slice(0).filter(function (value) { return !(value in compatibility.units) || compatibility.units[value] === true; }); return { colorOpacity: compatibility.colors.opacity, isAnimationDirectionKeyword: isKeyword('animation-direction'), isAnimationFillModeKeyword: isKeyword('animation-fill-mode'), isAnimationIterationCountKeyword: isKeyword('animation-iteration-count'), isAnimationNameKeyword: isKeyword('animation-name'), isAnimationPlayStateKeyword: isKeyword('animation-play-state'), isTimingFunction: isTimingFunction(), isBackgroundAttachmentKeyword: isKeyword('background-attachment'), isBackgroundClipKeyword: isKeyword('background-clip'), isBackgroundOriginKeyword: isKeyword('background-origin'), isBackgroundPositionKeyword: isKeyword('background-position'), isBackgroundRepeatKeyword: isKeyword('background-repeat'), isBackgroundSizeKeyword: isKeyword('background-size'), isColor: isColor, isColorFunction: isColorFunction, isDynamicUnit: isDynamicUnit, isFontKeyword: isKeyword('font'), isFontSizeKeyword: isKeyword('font-size'), isFontStretchKeyword: isKeyword('font-stretch'), isFontStyleKeyword: isKeyword('font-style'), isFontVariantKeyword: isKeyword('font-variant'), isFontWeightKeyword: isKeyword('font-weight'), isFunction: isFunction, isGlobal: isKeyword('^'), isHslColor: isHslColor, isIdentifier: isIdentifier, isImage: isImage, isKeyword: isKeyword, isLineHeightKeyword: isKeyword('line-height'), isListStylePositionKeyword: isKeyword('list-style-position'), isListStyleTypeKeyword: isKeyword('list-style-type'), isNumber: isNumber, isPrefixed: isPrefixed, isPositiveNumber: isPositiveNumber, isRgbColor: isRgbColor, isStyleKeyword: isKeyword('*-style'), isTime: isTime, isUnit: isUnit.bind(null, validUnits), isUrl: isUrl, isVariable: isVariable, isWidth: isKeyword('width'), isZIndex: isZIndex }; } module.exports = validator; node_modules/clean-css/lib/optimizer/hack.js000066600000000205150425117220015125 0ustar00var Hack = { ASTERISK: 'asterisk', BANG: 'bang', BACKSLASH: 'backslash', UNDERSCORE: 'underscore' }; module.exports = Hack; node_modules/clean-css/lib/optimizer/restore-from-optimizing.js000066600000003271150425117220021040 0ustar00var Hack = require('./hack'); var Marker = require('../tokenizer/marker'); var ASTERISK_HACK = '*'; var BACKSLASH_HACK = '\\'; var IMPORTANT_TOKEN = '!important'; var UNDERSCORE_HACK = '_'; var BANG_HACK = '!ie'; function restoreFromOptimizing(properties, restoreCallback) { var property; var restored; var current; var i; for (i = properties.length - 1; i >= 0; i--) { property = properties[i]; if (property.unused) { continue; } if (!property.dirty && !property.important && !property.hack) { continue; } if (restoreCallback) { restored = restoreCallback(property); property.value = restored; } else { restored = property.value; } if (property.important) { restoreImportant(property); } if (property.hack) { restoreHack(property); } if ('all' in property) { current = property.all[property.position]; current[1][1] = property.name; current.splice(2, current.length - 1); Array.prototype.push.apply(current, restored); } } } function restoreImportant(property) { property.value[property.value.length - 1][1] += IMPORTANT_TOKEN; } function restoreHack(property) { if (property.hack[0] == Hack.UNDERSCORE) { property.name = UNDERSCORE_HACK + property.name; } else if (property.hack[0] == Hack.ASTERISK) { property.name = ASTERISK_HACK + property.name; } else if (property.hack[0] == Hack.BACKSLASH) { property.value[property.value.length - 1][1] += BACKSLASH_HACK + property.hack[1]; } else if (property.hack[0] == Hack.BANG) { property.value[property.value.length - 1][1] += Marker.SPACE + BANG_HACK; } } module.exports = restoreFromOptimizing; node_modules/clean-css/lib/optimizer/level-0/optimize.js000066600000000204150425117220017322 0ustar00function level0Optimize(tokens) { // noop as level 0 means no optimizations! return tokens; } module.exports = level0Optimize; node_modules/clean-css/lib/optimizer/level-2/merge-non-adjacent-by-selector.js000066600000005005150425117220023354 0ustar00var canReorder = require('./reorderable').canReorder; var extractProperties = require('./extract-properties'); var optimizeProperties = require('./properties/optimize'); var serializeRules = require('../../writer/one-time').rules; var Token = require('../../tokenizer/token'); function mergeNonAdjacentBySelector(tokens, context) { var specificityCache = context.cache.specificity; var allSelectors = {}; var repeatedSelectors = []; var i; for (i = tokens.length - 1; i >= 0; i--) { if (tokens[i][0] != Token.RULE) continue; if (tokens[i][2].length === 0) continue; var selector = serializeRules(tokens[i][1]); allSelectors[selector] = [i].concat(allSelectors[selector] || []); if (allSelectors[selector].length == 2) repeatedSelectors.push(selector); } for (i = repeatedSelectors.length - 1; i >= 0; i--) { var positions = allSelectors[repeatedSelectors[i]]; selectorIterator: for (var j = positions.length - 1; j > 0; j--) { var positionOne = positions[j - 1]; var tokenOne = tokens[positionOne]; var positionTwo = positions[j]; var tokenTwo = tokens[positionTwo]; directionIterator: for (var direction = 1; direction >= -1; direction -= 2) { var topToBottom = direction == 1; var from = topToBottom ? positionOne + 1 : positionTwo - 1; var to = topToBottom ? positionTwo : positionOne; var delta = topToBottom ? 1 : -1; var moved = topToBottom ? tokenOne : tokenTwo; var target = topToBottom ? tokenTwo : tokenOne; var movedProperties = extractProperties(moved); while (from != to) { var traversedProperties = extractProperties(tokens[from]); from += delta; // traversed then moved as we move selectors towards the start var reorderable = topToBottom ? canReorder(movedProperties, traversedProperties, specificityCache) : canReorder(traversedProperties, movedProperties, specificityCache); if (!reorderable && !topToBottom) continue selectorIterator; if (!reorderable && topToBottom) continue directionIterator; } if (topToBottom) { Array.prototype.push.apply(moved[2], target[2]); target[2] = moved[2]; } else { Array.prototype.push.apply(target[2], moved[2]); } optimizeProperties(target[2], true, true, context); moved[2] = []; } } } } module.exports = mergeNonAdjacentBySelector; node_modules/clean-css/lib/optimizer/level-2/reduce-non-adjacent.js000066600000012370150425117220021301 0ustar00var isMergeable = require('./is-mergeable'); var optimizeProperties = require('./properties/optimize'); var cloneArray = require('../../utils/clone-array'); var Token = require('../../tokenizer/token'); var serializeBody = require('../../writer/one-time').body; var serializeRules = require('../../writer/one-time').rules; function reduceNonAdjacent(tokens, context) { var options = context.options; var mergeablePseudoClasses = options.compatibility.selectors.mergeablePseudoClasses; var mergeablePseudoElements = options.compatibility.selectors.mergeablePseudoElements; var multiplePseudoMerging = options.compatibility.selectors.multiplePseudoMerging; var candidates = {}; var repeated = []; for (var i = tokens.length - 1; i >= 0; i--) { var token = tokens[i]; if (token[0] != Token.RULE) { continue; } else if (token[2].length === 0) { continue; } var selectorAsString = serializeRules(token[1]); var isComplexAndNotSpecial = token[1].length > 1 && isMergeable(selectorAsString, mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging); var wrappedSelectors = wrappedSelectorsFrom(token[1]); var selectors = isComplexAndNotSpecial ? [selectorAsString].concat(wrappedSelectors) : [selectorAsString]; for (var j = 0, m = selectors.length; j < m; j++) { var selector = selectors[j]; if (!candidates[selector]) candidates[selector] = []; else repeated.push(selector); candidates[selector].push({ where: i, list: wrappedSelectors, isPartial: isComplexAndNotSpecial && j > 0, isComplex: isComplexAndNotSpecial && j === 0 }); } } reduceSimpleNonAdjacentCases(tokens, repeated, candidates, options, context); reduceComplexNonAdjacentCases(tokens, candidates, options, context); } function wrappedSelectorsFrom(list) { var wrapped = []; for (var i = 0; i < list.length; i++) { wrapped.push([list[i][1]]); } return wrapped; } function reduceSimpleNonAdjacentCases(tokens, repeated, candidates, options, context) { function filterOut(idx, bodies) { return data[idx].isPartial && bodies.length === 0; } function reduceBody(token, newBody, processedCount, tokenIdx) { if (!data[processedCount - tokenIdx - 1].isPartial) token[2] = newBody; } for (var i = 0, l = repeated.length; i < l; i++) { var selector = repeated[i]; var data = candidates[selector]; reduceSelector(tokens, data, { filterOut: filterOut, callback: reduceBody }, options, context); } } function reduceComplexNonAdjacentCases(tokens, candidates, options, context) { var mergeablePseudoClasses = options.compatibility.selectors.mergeablePseudoClasses; var mergeablePseudoElements = options.compatibility.selectors.mergeablePseudoElements; var multiplePseudoMerging = options.compatibility.selectors.multiplePseudoMerging; var localContext = {}; function filterOut(idx) { return localContext.data[idx].where < localContext.intoPosition; } function collectReducedBodies(token, newBody, processedCount, tokenIdx) { if (tokenIdx === 0) localContext.reducedBodies.push(newBody); } allSelectors: for (var complexSelector in candidates) { var into = candidates[complexSelector]; if (!into[0].isComplex) continue; var intoPosition = into[into.length - 1].where; var intoToken = tokens[intoPosition]; var reducedBodies = []; var selectors = isMergeable(complexSelector, mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging) ? into[0].list : [complexSelector]; localContext.intoPosition = intoPosition; localContext.reducedBodies = reducedBodies; for (var j = 0, m = selectors.length; j < m; j++) { var selector = selectors[j]; var data = candidates[selector]; if (data.length < 2) continue allSelectors; localContext.data = data; reduceSelector(tokens, data, { filterOut: filterOut, callback: collectReducedBodies }, options, context); if (serializeBody(reducedBodies[reducedBodies.length - 1]) != serializeBody(reducedBodies[0])) continue allSelectors; } intoToken[2] = reducedBodies[0]; } } function reduceSelector(tokens, data, context, options, outerContext) { var bodies = []; var bodiesAsList = []; var processedTokens = []; for (var j = data.length - 1; j >= 0; j--) { if (context.filterOut(j, bodies)) continue; var where = data[j].where; var token = tokens[where]; var clonedBody = cloneArray(token[2]); bodies = bodies.concat(clonedBody); bodiesAsList.push(clonedBody); processedTokens.push(where); } optimizeProperties(bodies, true, false, outerContext); var processedCount = processedTokens.length; var propertyIdx = bodies.length - 1; var tokenIdx = processedCount - 1; while (tokenIdx >= 0) { if ((tokenIdx === 0 || (bodies[propertyIdx] && bodiesAsList[tokenIdx].indexOf(bodies[propertyIdx]) > -1)) && propertyIdx > -1) { propertyIdx--; continue; } var newBody = bodies.splice(propertyIdx + 1); context.callback(tokens[processedTokens[tokenIdx]], newBody, processedCount, tokenIdx); tokenIdx--; } } module.exports = reduceNonAdjacent; node_modules/clean-css/lib/optimizer/level-2/optimize.js000066600000007410150425117220017332 0ustar00var mergeAdjacent = require('./merge-adjacent'); var mergeMediaQueries = require('./merge-media-queries'); var mergeNonAdjacentByBody = require('./merge-non-adjacent-by-body'); var mergeNonAdjacentBySelector = require('./merge-non-adjacent-by-selector'); var reduceNonAdjacent = require('./reduce-non-adjacent'); var removeDuplicateFontAtRules = require('./remove-duplicate-font-at-rules'); var removeDuplicateMediaQueries = require('./remove-duplicate-media-queries'); var removeDuplicates = require('./remove-duplicates'); var removeUnusedAtRules = require('./remove-unused-at-rules'); var restructure = require('./restructure'); var optimizeProperties = require('./properties/optimize'); var OptimizationLevel = require('../../options/optimization-level').OptimizationLevel; var Token = require('../../tokenizer/token'); function removeEmpty(tokens) { for (var i = 0, l = tokens.length; i < l; i++) { var token = tokens[i]; var isEmpty = false; switch (token[0]) { case Token.RULE: isEmpty = token[1].length === 0 || token[2].length === 0; break; case Token.NESTED_BLOCK: removeEmpty(token[2]); isEmpty = token[2].length === 0; break; case Token.AT_RULE: isEmpty = token[1].length === 0; break; case Token.AT_RULE_BLOCK: isEmpty = token[2].length === 0; } if (isEmpty) { tokens.splice(i, 1); i--; l--; } } } function recursivelyOptimizeBlocks(tokens, context) { for (var i = 0, l = tokens.length; i < l; i++) { var token = tokens[i]; if (token[0] == Token.NESTED_BLOCK) { var isKeyframes = /@(-moz-|-o-|-webkit-)?keyframes/.test(token[1][0][1]); level2Optimize(token[2], context, !isKeyframes); } } } function recursivelyOptimizeProperties(tokens, context) { for (var i = 0, l = tokens.length; i < l; i++) { var token = tokens[i]; switch (token[0]) { case Token.RULE: optimizeProperties(token[2], true, true, context); break; case Token.NESTED_BLOCK: recursivelyOptimizeProperties(token[2], context); } } } function level2Optimize(tokens, context, withRestructuring) { var levelOptions = context.options.level[OptimizationLevel.Two]; var reduced; var i; recursivelyOptimizeBlocks(tokens, context); recursivelyOptimizeProperties(tokens, context); if (levelOptions.removeDuplicateRules) { removeDuplicates(tokens, context); } if (levelOptions.mergeAdjacentRules) { mergeAdjacent(tokens, context); } if (levelOptions.reduceNonAdjacentRules) { reduceNonAdjacent(tokens, context); } if (levelOptions.mergeNonAdjacentRules && levelOptions.mergeNonAdjacentRules != 'body') { mergeNonAdjacentBySelector(tokens, context); } if (levelOptions.mergeNonAdjacentRules && levelOptions.mergeNonAdjacentRules != 'selector') { mergeNonAdjacentByBody(tokens, context); } if (levelOptions.restructureRules && levelOptions.mergeAdjacentRules && withRestructuring) { restructure(tokens, context); mergeAdjacent(tokens, context); } if (levelOptions.restructureRules && !levelOptions.mergeAdjacentRules && withRestructuring) { restructure(tokens, context); } if (levelOptions.removeDuplicateFontRules) { removeDuplicateFontAtRules(tokens, context); } if (levelOptions.removeDuplicateMediaBlocks) { removeDuplicateMediaQueries(tokens, context); } if (levelOptions.removeUnusedAtRules) { removeUnusedAtRules(tokens, context); } if (levelOptions.mergeMedia) { reduced = mergeMediaQueries(tokens, context); for (i = reduced.length - 1; i >= 0; i--) { level2Optimize(reduced[i][2], context, false); } } if (levelOptions.removeEmpty) { removeEmpty(tokens); } return tokens; } module.exports = level2Optimize; node_modules/clean-css/lib/optimizer/level-2/restructure.js000066600000030455150425117220020066 0ustar00var canReorderSingle = require('./reorderable').canReorderSingle; var extractProperties = require('./extract-properties'); var isMergeable = require('./is-mergeable'); var tidyRuleDuplicates = require('./tidy-rule-duplicates'); var Token = require('../../tokenizer/token'); var cloneArray = require('../../utils/clone-array'); var serializeBody = require('../../writer/one-time').body; var serializeRules = require('../../writer/one-time').rules; function naturalSorter(a, b) { return a > b ? 1 : -1; } function cloneAndMergeSelectors(propertyA, propertyB) { var cloned = cloneArray(propertyA); cloned[5] = cloned[5].concat(propertyB[5]); return cloned; } function restructure(tokens, context) { var options = context.options; var mergeablePseudoClasses = options.compatibility.selectors.mergeablePseudoClasses; var mergeablePseudoElements = options.compatibility.selectors.mergeablePseudoElements; var mergeLimit = options.compatibility.selectors.mergeLimit; var multiplePseudoMerging = options.compatibility.selectors.multiplePseudoMerging; var specificityCache = context.cache.specificity; var movableTokens = {}; var movedProperties = []; var multiPropertyMoveCache = {}; var movedToBeDropped = []; var maxCombinationsLevel = 2; var ID_JOIN_CHARACTER = '%'; function sendToMultiPropertyMoveCache(position, movedProperty, allFits) { for (var i = allFits.length - 1; i >= 0; i--) { var fit = allFits[i][0]; var id = addToCache(movedProperty, fit); if (multiPropertyMoveCache[id].length > 1 && processMultiPropertyMove(position, multiPropertyMoveCache[id])) { removeAllMatchingFromCache(id); break; } } } function addToCache(movedProperty, fit) { var id = cacheId(fit); multiPropertyMoveCache[id] = multiPropertyMoveCache[id] || []; multiPropertyMoveCache[id].push([movedProperty, fit]); return id; } function removeAllMatchingFromCache(matchId) { var matchSelectors = matchId.split(ID_JOIN_CHARACTER); var forRemoval = []; var i; for (var id in multiPropertyMoveCache) { var selectors = id.split(ID_JOIN_CHARACTER); for (i = selectors.length - 1; i >= 0; i--) { if (matchSelectors.indexOf(selectors[i]) > -1) { forRemoval.push(id); break; } } } for (i = forRemoval.length - 1; i >= 0; i--) { delete multiPropertyMoveCache[forRemoval[i]]; } } function cacheId(cachedTokens) { var id = []; for (var i = 0, l = cachedTokens.length; i < l; i++) { id.push(serializeRules(cachedTokens[i][1])); } return id.join(ID_JOIN_CHARACTER); } function tokensToMerge(sourceTokens) { var uniqueTokensWithBody = []; var mergeableTokens = []; for (var i = sourceTokens.length - 1; i >= 0; i--) { if (!isMergeable(serializeRules(sourceTokens[i][1]), mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging)) { continue; } mergeableTokens.unshift(sourceTokens[i]); if (sourceTokens[i][2].length > 0 && uniqueTokensWithBody.indexOf(sourceTokens[i]) == -1) uniqueTokensWithBody.push(sourceTokens[i]); } return uniqueTokensWithBody.length > 1 ? mergeableTokens : []; } function shortenIfPossible(position, movedProperty) { var name = movedProperty[0]; var value = movedProperty[1]; var key = movedProperty[4]; var valueSize = name.length + value.length + 1; var allSelectors = []; var qualifiedTokens = []; var mergeableTokens = tokensToMerge(movableTokens[key]); if (mergeableTokens.length < 2) return; var allFits = findAllFits(mergeableTokens, valueSize, 1); var bestFit = allFits[0]; if (bestFit[1] > 0) return sendToMultiPropertyMoveCache(position, movedProperty, allFits); for (var i = bestFit[0].length - 1; i >=0; i--) { allSelectors = bestFit[0][i][1].concat(allSelectors); qualifiedTokens.unshift(bestFit[0][i]); } allSelectors = tidyRuleDuplicates(allSelectors); dropAsNewTokenAt(position, [movedProperty], allSelectors, qualifiedTokens); } function fitSorter(fit1, fit2) { return fit1[1] > fit2[1] ? 1 : (fit1[1] == fit2[1] ? 0 : -1); } function findAllFits(mergeableTokens, propertySize, propertiesCount) { var combinations = allCombinations(mergeableTokens, propertySize, propertiesCount, maxCombinationsLevel - 1); return combinations.sort(fitSorter); } function allCombinations(tokensVariant, propertySize, propertiesCount, level) { var differenceVariants = [[tokensVariant, sizeDifference(tokensVariant, propertySize, propertiesCount)]]; if (tokensVariant.length > 2 && level > 0) { for (var i = tokensVariant.length - 1; i >= 0; i--) { var subVariant = Array.prototype.slice.call(tokensVariant, 0); subVariant.splice(i, 1); differenceVariants = differenceVariants.concat(allCombinations(subVariant, propertySize, propertiesCount, level - 1)); } } return differenceVariants; } function sizeDifference(tokensVariant, propertySize, propertiesCount) { var allSelectorsSize = 0; for (var i = tokensVariant.length - 1; i >= 0; i--) { allSelectorsSize += tokensVariant[i][2].length > propertiesCount ? serializeRules(tokensVariant[i][1]).length : -1; } return allSelectorsSize - (tokensVariant.length - 1) * propertySize + 1; } function dropAsNewTokenAt(position, properties, allSelectors, mergeableTokens) { var i, j, k, m; var allProperties = []; for (i = mergeableTokens.length - 1; i >= 0; i--) { var mergeableToken = mergeableTokens[i]; for (j = mergeableToken[2].length - 1; j >= 0; j--) { var mergeableProperty = mergeableToken[2][j]; for (k = 0, m = properties.length; k < m; k++) { var property = properties[k]; var mergeablePropertyName = mergeableProperty[1][1]; var propertyName = property[0]; var propertyBody = property[4]; if (mergeablePropertyName == propertyName && serializeBody([mergeableProperty]) == propertyBody) { mergeableToken[2].splice(j, 1); break; } } } } for (i = properties.length - 1; i >= 0; i--) { allProperties.unshift(properties[i][3]); } var newToken = [Token.RULE, allSelectors, allProperties]; tokens.splice(position, 0, newToken); } function dropPropertiesAt(position, movedProperty) { var key = movedProperty[4]; var toMove = movableTokens[key]; if (toMove && toMove.length > 1) { if (!shortenMultiMovesIfPossible(position, movedProperty)) shortenIfPossible(position, movedProperty); } } function shortenMultiMovesIfPossible(position, movedProperty) { var candidates = []; var propertiesAndMergableTokens = []; var key = movedProperty[4]; var j, k; var mergeableTokens = tokensToMerge(movableTokens[key]); if (mergeableTokens.length < 2) return; movableLoop: for (var value in movableTokens) { var tokensList = movableTokens[value]; for (j = mergeableTokens.length - 1; j >= 0; j--) { if (tokensList.indexOf(mergeableTokens[j]) == -1) continue movableLoop; } candidates.push(value); } if (candidates.length < 2) return false; for (j = candidates.length - 1; j >= 0; j--) { for (k = movedProperties.length - 1; k >= 0; k--) { if (movedProperties[k][4] == candidates[j]) { propertiesAndMergableTokens.unshift([movedProperties[k], mergeableTokens]); break; } } } return processMultiPropertyMove(position, propertiesAndMergableTokens); } function processMultiPropertyMove(position, propertiesAndMergableTokens) { var valueSize = 0; var properties = []; var property; for (var i = propertiesAndMergableTokens.length - 1; i >= 0; i--) { property = propertiesAndMergableTokens[i][0]; var fullValue = property[4]; valueSize += fullValue.length + (i > 0 ? 1 : 0); properties.push(property); } var mergeableTokens = propertiesAndMergableTokens[0][1]; var bestFit = findAllFits(mergeableTokens, valueSize, properties.length)[0]; if (bestFit[1] > 0) return false; var allSelectors = []; var qualifiedTokens = []; for (i = bestFit[0].length - 1; i >= 0; i--) { allSelectors = bestFit[0][i][1].concat(allSelectors); qualifiedTokens.unshift(bestFit[0][i]); } allSelectors = tidyRuleDuplicates(allSelectors); dropAsNewTokenAt(position, properties, allSelectors, qualifiedTokens); for (i = properties.length - 1; i >= 0; i--) { property = properties[i]; var index = movedProperties.indexOf(property); delete movableTokens[property[4]]; if (index > -1 && movedToBeDropped.indexOf(index) == -1) movedToBeDropped.push(index); } return true; } function boundToAnotherPropertyInCurrrentToken(property, movedProperty, token) { var propertyName = property[0]; var movedPropertyName = movedProperty[0]; if (propertyName != movedPropertyName) return false; var key = movedProperty[4]; var toMove = movableTokens[key]; return toMove && toMove.indexOf(token) > -1; } for (var i = tokens.length - 1; i >= 0; i--) { var token = tokens[i]; var isRule; var j, k, m; var samePropertyAt; if (token[0] == Token.RULE) { isRule = true; } else if (token[0] == Token.NESTED_BLOCK) { isRule = false; } else { continue; } // We cache movedProperties.length as it may change in the loop var movedCount = movedProperties.length; var properties = extractProperties(token); movedToBeDropped = []; var unmovableInCurrentToken = []; for (j = properties.length - 1; j >= 0; j--) { for (k = j - 1; k >= 0; k--) { if (!canReorderSingle(properties[j], properties[k], specificityCache)) { unmovableInCurrentToken.push(j); break; } } } for (j = properties.length - 1; j >= 0; j--) { var property = properties[j]; var movedSameProperty = false; for (k = 0; k < movedCount; k++) { var movedProperty = movedProperties[k]; if (movedToBeDropped.indexOf(k) == -1 && (!canReorderSingle(property, movedProperty, specificityCache) && !boundToAnotherPropertyInCurrrentToken(property, movedProperty, token) || movableTokens[movedProperty[4]] && movableTokens[movedProperty[4]].length === mergeLimit)) { dropPropertiesAt(i + 1, movedProperty, token); if (movedToBeDropped.indexOf(k) == -1) { movedToBeDropped.push(k); delete movableTokens[movedProperty[4]]; } } if (!movedSameProperty) { movedSameProperty = property[0] == movedProperty[0] && property[1] == movedProperty[1]; if (movedSameProperty) { samePropertyAt = k; } } } if (!isRule || unmovableInCurrentToken.indexOf(j) > -1) continue; var key = property[4]; if (movedSameProperty && movedProperties[samePropertyAt][5].length + property[5].length > mergeLimit) { dropPropertiesAt(i + 1, movedProperties[samePropertyAt]); movedProperties.splice(samePropertyAt, 1); movableTokens[key] = [token]; movedSameProperty = false; } else { movableTokens[key] = movableTokens[key] || []; movableTokens[key].push(token); } if (movedSameProperty) { movedProperties[samePropertyAt] = cloneAndMergeSelectors(movedProperties[samePropertyAt], property); } else { movedProperties.push(property); } } movedToBeDropped = movedToBeDropped.sort(naturalSorter); for (j = 0, m = movedToBeDropped.length; j < m; j++) { var dropAt = movedToBeDropped[j] - j; movedProperties.splice(dropAt, 1); } } var position = tokens[0] && tokens[0][0] == Token.AT_RULE && tokens[0][1].indexOf('@charset') === 0 ? 1 : 0; for (; position < tokens.length - 1; position++) { var isImportRule = tokens[position][0] === Token.AT_RULE && tokens[position][1].indexOf('@import') === 0; var isComment = tokens[position][0] === Token.COMMENT; if (!(isImportRule || isComment)) break; } for (i = 0; i < movedProperties.length; i++) { dropPropertiesAt(position, movedProperties[i]); } } module.exports = restructure; node_modules/clean-css/lib/optimizer/level-2/extract-properties.js000066600000003630150425117220021336 0ustar00// This extractor is used in level 2 optimizations // IMPORTANT: Mind Token class and this code is not related! // Properties will be tokenized in one step, see #429 var Token = require('../../tokenizer/token'); var serializeRules = require('../../writer/one-time').rules; var serializeValue = require('../../writer/one-time').value; function extractProperties(token) { var properties = []; var inSpecificSelector; var property; var name; var value; var i, l; if (token[0] == Token.RULE) { inSpecificSelector = !/[\.\+>~]/.test(serializeRules(token[1])); for (i = 0, l = token[2].length; i < l; i++) { property = token[2][i]; if (property[0] != Token.PROPERTY) continue; name = property[1][1]; if (name.length === 0) continue; if (name.indexOf('--') === 0) continue; value = serializeValue(property, i); properties.push([ name, value, findNameRoot(name), token[2][i], name + ':' + value, token[1], inSpecificSelector ]); } } else if (token[0] == Token.NESTED_BLOCK) { for (i = 0, l = token[2].length; i < l; i++) { properties = properties.concat(extractProperties(token[2][i])); } } return properties; } function findNameRoot(name) { if (name == 'list-style') return name; if (name.indexOf('-radius') > 0) return 'border-radius'; if (name == 'border-collapse' || name == 'border-spacing' || name == 'border-image') return name; if (name.indexOf('border-') === 0 && /^border\-\w+\-\w+$/.test(name)) return name.match(/border\-\w+/)[0]; if (name.indexOf('border-') === 0 && /^border\-\w+$/.test(name)) return 'border'; if (name.indexOf('text-') === 0) return name; if (name == '-chrome-') return name; return name.replace(/^\-\w+\-/, '').match(/([a-zA-Z]+)/)[0].toLowerCase(); } module.exports = extractProperties; node_modules/clean-css/lib/optimizer/level-2/remove-duplicates.js000066600000001722150425117220021122 0ustar00var Token = require('../../tokenizer/token'); var serializeBody = require('../../writer/one-time').body; var serializeRules = require('../../writer/one-time').rules; function removeDuplicates(tokens) { var matched = {}; var moreThanOnce = []; var id, token; var body, bodies; for (var i = 0, l = tokens.length; i < l; i++) { token = tokens[i]; if (token[0] != Token.RULE) continue; id = serializeRules(token[1]); if (matched[id] && matched[id].length == 1) moreThanOnce.push(id); else matched[id] = matched[id] || []; matched[id].push(i); } for (i = 0, l = moreThanOnce.length; i < l; i++) { id = moreThanOnce[i]; bodies = []; for (var j = matched[id].length - 1; j >= 0; j--) { token = tokens[matched[id][j]]; body = serializeBody(token[2]); if (bodies.indexOf(body) > -1) token[2] = []; else bodies.push(body); } } } module.exports = removeDuplicates; node_modules/clean-css/lib/optimizer/level-2/compactable.js000066600000062777150425117220017765 0ustar00// Contains the interpretation of CSS properties, as used by the property optimizer var breakUp = require('./break-up'); var canOverride = require('./can-override'); var restore = require('./restore'); var override = require('../../utils/override'); // Properties to process // Extend this object in order to add support for more properties in the optimizer. // // Each key in this object represents a CSS property and should be an object. // Such an object contains properties that describe how the represented CSS property should be handled. // Possible options: // // * components: array (Only specify for shorthand properties.) // Contains the names of the granular properties this shorthand compacts. // // * canOverride: function // Returns whether two tokens of this property can be merged with each other. // This property has no meaning for shorthands. // // * defaultValue: string // Specifies the default value of the property according to the CSS standard. // For shorthand, this is used when every component is set to its default value, therefore it should be the shortest possible default value of all the components. // // * shortestValue: string // Specifies the shortest possible value the property can possibly have. // (Falls back to defaultValue if unspecified.) // // * breakUp: function (Only specify for shorthand properties.) // Breaks the shorthand up to its components. // // * restore: function (Only specify for shorthand properties.) // Puts the shorthand together from its components. // var compactable = { 'animation': { canOverride: canOverride.generic.components([ canOverride.generic.time, canOverride.generic.timingFunction, canOverride.generic.time, canOverride.property.animationIterationCount, canOverride.property.animationDirection, canOverride.property.animationFillMode, canOverride.property.animationPlayState, canOverride.property.animationName ]), components: [ 'animation-duration', 'animation-timing-function', 'animation-delay', 'animation-iteration-count', 'animation-direction', 'animation-fill-mode', 'animation-play-state', 'animation-name' ], breakUp: breakUp.multiplex(breakUp.animation), defaultValue: 'none', restore: restore.multiplex(restore.withoutDefaults), shorthand: true, vendorPrefixes: [ '-moz-', '-o-', '-webkit-' ] }, 'animation-delay': { canOverride: canOverride.generic.time, componentOf: [ 'animation' ], defaultValue: '0s', intoMultiplexMode: 'real', vendorPrefixes: [ '-moz-', '-o-', '-webkit-' ] }, 'animation-direction': { canOverride: canOverride.property.animationDirection, componentOf: [ 'animation' ], defaultValue: 'normal', intoMultiplexMode: 'real', vendorPrefixes: [ '-moz-', '-o-', '-webkit-' ] }, 'animation-duration': { canOverride: canOverride.generic.time, componentOf: [ 'animation' ], defaultValue: '0s', intoMultiplexMode: 'real', keepUnlessDefault: 'animation-delay', vendorPrefixes: [ '-moz-', '-o-', '-webkit-' ] }, 'animation-fill-mode': { canOverride: canOverride.property.animationFillMode, componentOf: [ 'animation' ], defaultValue: 'none', intoMultiplexMode: 'real', vendorPrefixes: [ '-moz-', '-o-', '-webkit-' ] }, 'animation-iteration-count': { canOverride: canOverride.property.animationIterationCount, componentOf: [ 'animation' ], defaultValue: '1', intoMultiplexMode: 'real', vendorPrefixes: [ '-moz-', '-o-', '-webkit-' ] }, 'animation-name': { canOverride: canOverride.property.animationName, componentOf: [ 'animation' ], defaultValue: 'none', intoMultiplexMode: 'real', vendorPrefixes: [ '-moz-', '-o-', '-webkit-' ] }, 'animation-play-state': { canOverride: canOverride.property.animationPlayState, componentOf: [ 'animation' ], defaultValue: 'running', intoMultiplexMode: 'real', vendorPrefixes: [ '-moz-', '-o-', '-webkit-' ] }, 'animation-timing-function': { canOverride: canOverride.generic.timingFunction, componentOf: [ 'animation' ], defaultValue: 'ease', intoMultiplexMode: 'real', vendorPrefixes: [ '-moz-', '-o-', '-webkit-' ] }, 'background': { canOverride: canOverride.generic.components([ canOverride.generic.image, canOverride.property.backgroundPosition, canOverride.property.backgroundSize, canOverride.property.backgroundRepeat, canOverride.property.backgroundAttachment, canOverride.property.backgroundOrigin, canOverride.property.backgroundClip, canOverride.generic.color ]), components: [ 'background-image', 'background-position', 'background-size', 'background-repeat', 'background-attachment', 'background-origin', 'background-clip', 'background-color' ], breakUp: breakUp.multiplex(breakUp.background), defaultValue: '0 0', restore: restore.multiplex(restore.background), shortestValue: '0', shorthand: true }, 'background-attachment': { canOverride: canOverride.property.backgroundAttachment, componentOf: [ 'background' ], defaultValue: 'scroll', intoMultiplexMode: 'real' }, 'background-clip': { canOverride: canOverride.property.backgroundClip, componentOf: [ 'background' ], defaultValue: 'border-box', intoMultiplexMode: 'real', shortestValue: 'border-box' }, 'background-color': { canOverride: canOverride.generic.color, componentOf: [ 'background' ], defaultValue: 'transparent', intoMultiplexMode: 'real', // otherwise real color will turn into default since color appears in last multiplex only multiplexLastOnly: true, nonMergeableValue: 'none', shortestValue: 'red' }, 'background-image': { canOverride: canOverride.generic.image, componentOf: [ 'background' ], defaultValue: 'none', intoMultiplexMode: 'default' }, 'background-origin': { canOverride: canOverride.property.backgroundOrigin, componentOf: [ 'background' ], defaultValue: 'padding-box', intoMultiplexMode: 'real', shortestValue: 'border-box' }, 'background-position': { canOverride: canOverride.property.backgroundPosition, componentOf: [ 'background' ], defaultValue: ['0', '0'], doubleValues: true, intoMultiplexMode: 'real', shortestValue: '0' }, 'background-repeat': { canOverride: canOverride.property.backgroundRepeat, componentOf: [ 'background' ], defaultValue: ['repeat'], doubleValues: true, intoMultiplexMode: 'real' }, 'background-size': { canOverride: canOverride.property.backgroundSize, componentOf: [ 'background' ], defaultValue: ['auto'], doubleValues: true, intoMultiplexMode: 'real', shortestValue: '0 0' }, 'bottom': { canOverride: canOverride.property.bottom, defaultValue: 'auto' }, 'border': { breakUp: breakUp.border, canOverride: canOverride.generic.components([ canOverride.generic.unit, canOverride.property.borderStyle, canOverride.generic.color ]), components: [ 'border-width', 'border-style', 'border-color' ], defaultValue: 'none', overridesShorthands: [ 'border-bottom', 'border-left', 'border-right', 'border-top' ], restore: restore.withoutDefaults, shorthand: true, shorthandComponents: true }, 'border-bottom': { breakUp: breakUp.border, canOverride: canOverride.generic.components([ canOverride.generic.unit, canOverride.property.borderStyle, canOverride.generic.color ]), components: [ 'border-bottom-width', 'border-bottom-style', 'border-bottom-color' ], defaultValue: 'none', restore: restore.withoutDefaults, shorthand: true }, 'border-bottom-color': { canOverride: canOverride.generic.color, componentOf: [ 'border-bottom', 'border-color' ], defaultValue: 'none' }, 'border-bottom-left-radius': { canOverride: canOverride.generic.unit, componentOf: [ 'border-radius' ], defaultValue: '0', vendorPrefixes: [ '-moz-', '-o-' ] }, 'border-bottom-right-radius': { canOverride: canOverride.generic.unit, componentOf: [ 'border-radius' ], defaultValue: '0', vendorPrefixes: [ '-moz-', '-o-' ] }, 'border-bottom-style': { canOverride: canOverride.property.borderStyle, componentOf: [ 'border-bottom', 'border-style' ], defaultValue: 'none' }, 'border-bottom-width': { canOverride: canOverride.generic.unit, componentOf: [ 'border-bottom', 'border-width' ], defaultValue: 'medium', oppositeTo: 'border-top-width', shortestValue: '0' }, 'border-collapse': { canOverride: canOverride.property.borderCollapse, defaultValue: 'separate' }, 'border-color': { breakUp: breakUp.fourValues, canOverride: canOverride.generic.components([ canOverride.generic.color, canOverride.generic.color, canOverride.generic.color, canOverride.generic.color ]), componentOf: [ 'border' ], components: [ 'border-top-color', 'border-right-color', 'border-bottom-color', 'border-left-color' ], defaultValue: 'none', restore: restore.fourValues, shortestValue: 'red', shorthand: true }, 'border-left': { breakUp: breakUp.border, canOverride: canOverride.generic.components([ canOverride.generic.unit, canOverride.property.borderStyle, canOverride.generic.color ]), components: [ 'border-left-width', 'border-left-style', 'border-left-color' ], defaultValue: 'none', restore: restore.withoutDefaults, shorthand: true }, 'border-left-color': { canOverride: canOverride.generic.color, componentOf: [ 'border-color', 'border-left' ], defaultValue: 'none' }, 'border-left-style': { canOverride: canOverride.property.borderStyle, componentOf: [ 'border-left', 'border-style' ], defaultValue: 'none' }, 'border-left-width': { canOverride: canOverride.generic.unit, componentOf: [ 'border-left', 'border-width' ], defaultValue: 'medium', oppositeTo: 'border-right-width', shortestValue: '0' }, 'border-radius': { breakUp: breakUp.borderRadius, canOverride: canOverride.generic.components([ canOverride.generic.unit, canOverride.generic.unit, canOverride.generic.unit, canOverride.generic.unit ]), components: [ 'border-top-left-radius', 'border-top-right-radius', 'border-bottom-right-radius', 'border-bottom-left-radius' ], defaultValue: '0', restore: restore.borderRadius, shorthand: true, vendorPrefixes: [ '-moz-', '-o-' ] }, 'border-right': { breakUp: breakUp.border, canOverride: canOverride.generic.components([ canOverride.generic.unit, canOverride.property.borderStyle, canOverride.generic.color ]), components: [ 'border-right-width', 'border-right-style', 'border-right-color' ], defaultValue: 'none', restore: restore.withoutDefaults, shorthand: true }, 'border-right-color': { canOverride: canOverride.generic.color, componentOf: [ 'border-color', 'border-right' ], defaultValue: 'none' }, 'border-right-style': { canOverride: canOverride.property.borderStyle, componentOf: [ 'border-right', 'border-style' ], defaultValue: 'none' }, 'border-right-width': { canOverride: canOverride.generic.unit, componentOf: [ 'border-right', 'border-width' ], defaultValue: 'medium', oppositeTo: 'border-left-width', shortestValue: '0' }, 'border-style': { breakUp: breakUp.fourValues, canOverride: canOverride.generic.components([ canOverride.property.borderStyle, canOverride.property.borderStyle, canOverride.property.borderStyle, canOverride.property.borderStyle ]), componentOf: [ 'border' ], components: [ 'border-top-style', 'border-right-style', 'border-bottom-style', 'border-left-style' ], defaultValue: 'none', restore: restore.fourValues, shorthand: true }, 'border-top': { breakUp: breakUp.border, canOverride: canOverride.generic.components([ canOverride.generic.unit, canOverride.property.borderStyle, canOverride.generic.color ]), components: [ 'border-top-width', 'border-top-style', 'border-top-color' ], defaultValue: 'none', restore: restore.withoutDefaults, shorthand: true }, 'border-top-color': { canOverride: canOverride.generic.color, componentOf: [ 'border-color', 'border-top' ], defaultValue: 'none' }, 'border-top-left-radius': { canOverride: canOverride.generic.unit, componentOf: [ 'border-radius' ], defaultValue: '0', vendorPrefixes: [ '-moz-', '-o-' ] }, 'border-top-right-radius': { canOverride: canOverride.generic.unit, componentOf: [ 'border-radius' ], defaultValue: '0', vendorPrefixes: [ '-moz-', '-o-' ] }, 'border-top-style': { canOverride: canOverride.property.borderStyle, componentOf: [ 'border-style', 'border-top' ], defaultValue: 'none' }, 'border-top-width': { canOverride: canOverride.generic.unit, componentOf: [ 'border-top', 'border-width' ], defaultValue: 'medium', oppositeTo: 'border-bottom-width', shortestValue: '0' }, 'border-width': { breakUp: breakUp.fourValues, canOverride: canOverride.generic.components([ canOverride.generic.unit, canOverride.generic.unit, canOverride.generic.unit, canOverride.generic.unit ]), componentOf: [ 'border' ], components: [ 'border-top-width', 'border-right-width', 'border-bottom-width', 'border-left-width' ], defaultValue: 'medium', restore: restore.fourValues, shortestValue: '0', shorthand: true }, 'clear': { canOverride: canOverride.property.clear, defaultValue: 'none' }, 'color': { canOverride: canOverride.generic.color, defaultValue: 'transparent', shortestValue: 'red' }, 'cursor': { canOverride: canOverride.property.cursor, defaultValue: 'auto' }, 'display': { canOverride: canOverride.property.display, }, 'float': { canOverride: canOverride.property.float, defaultValue: 'none' }, 'font': { breakUp: breakUp.font, canOverride: canOverride.generic.components([ canOverride.property.fontStyle, canOverride.property.fontVariant, canOverride.property.fontWeight, canOverride.property.fontStretch, canOverride.generic.unit, canOverride.generic.unit, canOverride.property.fontFamily ]), components: [ 'font-style', 'font-variant', 'font-weight', 'font-stretch', 'font-size', 'line-height', 'font-family' ], restore: restore.font, shorthand: true }, 'font-family': { canOverride: canOverride.property.fontFamily, defaultValue: 'user|agent|specific' }, 'font-size': { canOverride: canOverride.generic.unit, defaultValue: 'medium', shortestValue: '0' }, 'font-stretch': { canOverride: canOverride.property.fontStretch, defaultValue: 'normal' }, 'font-style': { canOverride: canOverride.property.fontStyle, defaultValue: 'normal' }, 'font-variant': { canOverride: canOverride.property.fontVariant, defaultValue: 'normal' }, 'font-weight': { canOverride: canOverride.property.fontWeight, defaultValue: 'normal', shortestValue: '400' }, 'height': { canOverride: canOverride.generic.unit, defaultValue: 'auto', shortestValue: '0' }, 'left': { canOverride: canOverride.property.left, defaultValue: 'auto' }, 'line-height': { canOverride: canOverride.generic.unitOrNumber, defaultValue: 'normal', shortestValue: '0' }, 'list-style': { canOverride: canOverride.generic.components([ canOverride.property.listStyleType, canOverride.property.listStylePosition, canOverride.property.listStyleImage ]), components: [ 'list-style-type', 'list-style-position', 'list-style-image' ], breakUp: breakUp.listStyle, restore: restore.withoutDefaults, defaultValue: 'outside', // can't use 'disc' because that'd override default 'decimal' for
    shortestValue: 'none', shorthand: true }, 'list-style-image' : { canOverride: canOverride.generic.image, componentOf: [ 'list-style' ], defaultValue: 'none' }, 'list-style-position' : { canOverride: canOverride.property.listStylePosition, componentOf: [ 'list-style' ], defaultValue: 'outside', shortestValue: 'inside' }, 'list-style-type' : { canOverride: canOverride.property.listStyleType, componentOf: [ 'list-style' ], // NOTE: we can't tell the real default value here, it's 'disc' for
      and 'decimal' for
        // this is a hack, but it doesn't matter because this value will be either overridden or // it will disappear at the final step anyway defaultValue: 'decimal|disc', shortestValue: 'none' }, 'margin': { breakUp: breakUp.fourValues, canOverride: canOverride.generic.components([ canOverride.generic.unit, canOverride.generic.unit, canOverride.generic.unit, canOverride.generic.unit ]), components: [ 'margin-top', 'margin-right', 'margin-bottom', 'margin-left' ], defaultValue: '0', restore: restore.fourValues, shorthand: true }, 'margin-bottom': { canOverride: canOverride.generic.unit, componentOf: [ 'margin' ], defaultValue: '0', oppositeTo: 'margin-top' }, 'margin-left': { canOverride: canOverride.generic.unit, componentOf: [ 'margin' ], defaultValue: '0', oppositeTo: 'margin-right' }, 'margin-right': { canOverride: canOverride.generic.unit, componentOf: [ 'margin' ], defaultValue: '0', oppositeTo: 'margin-left' }, 'margin-top': { canOverride: canOverride.generic.unit, componentOf: [ 'margin' ], defaultValue: '0', oppositeTo: 'margin-bottom' }, 'outline': { canOverride: canOverride.generic.components([ canOverride.generic.color, canOverride.property.outlineStyle, canOverride.generic.unit ]), components: [ 'outline-color', 'outline-style', 'outline-width' ], breakUp: breakUp.outline, restore: restore.withoutDefaults, defaultValue: '0', shorthand: true }, 'outline-color': { canOverride: canOverride.generic.color, componentOf: [ 'outline' ], defaultValue: 'invert', shortestValue: 'red' }, 'outline-style': { canOverride: canOverride.property.outlineStyle, componentOf: [ 'outline' ], defaultValue: 'none' }, 'outline-width': { canOverride: canOverride.generic.unit, componentOf: [ 'outline' ], defaultValue: 'medium', shortestValue: '0' }, 'overflow': { canOverride: canOverride.property.overflow, defaultValue: 'visible' }, 'overflow-x': { canOverride: canOverride.property.overflow, defaultValue: 'visible' }, 'overflow-y': { canOverride: canOverride.property.overflow, defaultValue: 'visible' }, 'padding': { breakUp: breakUp.fourValues, canOverride: canOverride.generic.components([ canOverride.generic.unit, canOverride.generic.unit, canOverride.generic.unit, canOverride.generic.unit ]), components: [ 'padding-top', 'padding-right', 'padding-bottom', 'padding-left' ], defaultValue: '0', restore: restore.fourValues, shorthand: true }, 'padding-bottom': { canOverride: canOverride.generic.unit, componentOf: [ 'padding' ], defaultValue: '0', oppositeTo: 'padding-top' }, 'padding-left': { canOverride: canOverride.generic.unit, componentOf: [ 'padding' ], defaultValue: '0', oppositeTo: 'padding-right' }, 'padding-right': { canOverride: canOverride.generic.unit, componentOf: [ 'padding' ], defaultValue: '0', oppositeTo: 'padding-left' }, 'padding-top': { canOverride: canOverride.generic.unit, componentOf: [ 'padding' ], defaultValue: '0', oppositeTo: 'padding-bottom' }, 'position': { canOverride: canOverride.property.position, defaultValue: 'static' }, 'right': { canOverride: canOverride.property.right, defaultValue: 'auto' }, 'text-align': { canOverride: canOverride.property.textAlign, // NOTE: we can't tell the real default value here, as it depends on default text direction // this is a hack, but it doesn't matter because this value will be either overridden or // it will disappear anyway defaultValue: 'left|right' }, 'text-decoration': { canOverride: canOverride.property.textDecoration, defaultValue: 'none' }, 'text-overflow': { canOverride: canOverride.property.textOverflow, defaultValue: 'none' }, 'text-shadow': { canOverride: canOverride.property.textShadow, defaultValue: 'none' }, 'top': { canOverride: canOverride.property.top, defaultValue: 'auto' }, 'transform': { canOverride: canOverride.property.transform, vendorPrefixes: [ '-moz-', '-ms-', '-webkit-' ] }, 'transition': { breakUp: breakUp.multiplex(breakUp.transition), canOverride: canOverride.generic.components([ canOverride.property.transitionProperty, canOverride.generic.time, canOverride.generic.timingFunction, canOverride.generic.time ]), components: [ 'transition-property', 'transition-duration', 'transition-timing-function', 'transition-delay' ], defaultValue: 'none', restore: restore.multiplex(restore.withoutDefaults), shorthand: true, vendorPrefixes: [ '-moz-', '-o-', '-webkit-' ] }, 'transition-delay': { canOverride: canOverride.generic.time, componentOf: [ 'transition' ], defaultValue: '0s', intoMultiplexMode: 'real', vendorPrefixes: [ '-moz-', '-o-', '-webkit-' ] }, 'transition-duration': { canOverride: canOverride.generic.time, componentOf: [ 'transition' ], defaultValue: '0s', intoMultiplexMode: 'real', vendorPrefixes: [ '-moz-', '-o-', '-webkit-' ] }, 'transition-property': { canOverride: canOverride.generic.propertyName, componentOf: [ 'transition' ], defaultValue: 'all', intoMultiplexMode: 'placeholder', placeholderValue: '_', // it's a short value that won't match any property and still be a valid `transition-property` vendorPrefixes: [ '-moz-', '-o-', '-webkit-' ] }, 'transition-timing-function': { canOverride: canOverride.generic.timingFunction, componentOf: [ 'transition' ], defaultValue: 'ease', intoMultiplexMode: 'real', vendorPrefixes: [ '-moz-', '-o-', '-webkit-' ] }, 'vertical-align': { canOverride: canOverride.property.verticalAlign, defaultValue: 'baseline' }, 'visibility': { canOverride: canOverride.property.visibility, defaultValue: 'visible' }, 'white-space': { canOverride: canOverride.property.whiteSpace, defaultValue: 'normal' }, 'width': { canOverride: canOverride.generic.unit, defaultValue: 'auto', shortestValue: '0' }, 'z-index': { canOverride: canOverride.property.zIndex, defaultValue: 'auto' } }; function cloneDescriptor(propertyName, prefix) { var clonedDescriptor = override(compactable[propertyName], {}); if ('componentOf' in clonedDescriptor) { clonedDescriptor.componentOf = clonedDescriptor.componentOf.map(function (shorthandName) { return prefix + shorthandName; }); } if ('components' in clonedDescriptor) { clonedDescriptor.components = clonedDescriptor.components.map(function (longhandName) { return prefix + longhandName; }); } if ('keepUnlessDefault' in clonedDescriptor) { clonedDescriptor.keepUnlessDefault = prefix + clonedDescriptor.keepUnlessDefault; } return clonedDescriptor; } // generate vendor-prefixed properties var vendorPrefixedCompactable = {}; for (var propertyName in compactable) { var descriptor = compactable[propertyName]; if (!('vendorPrefixes' in descriptor)) { continue; } for (var i = 0; i < descriptor.vendorPrefixes.length; i++) { var prefix = descriptor.vendorPrefixes[i]; var clonedDescriptor = cloneDescriptor(propertyName, prefix); delete clonedDescriptor.vendorPrefixes; vendorPrefixedCompactable[prefix + propertyName] = clonedDescriptor; } delete descriptor.vendorPrefixes; } module.exports = override(compactable, vendorPrefixedCompactable); node_modules/clean-css/lib/optimizer/level-2/remove-unused-at-rules.js000066600000015177150425117220022033 0ustar00var populateComponents = require('./properties/populate-components'); var wrapForOptimizing = require('../wrap-for-optimizing').single; var restoreFromOptimizing = require('../restore-from-optimizing'); var Token = require('../../tokenizer/token'); var animationNameRegex = /^(\-moz\-|\-o\-|\-webkit\-)?animation-name$/; var animationRegex = /^(\-moz\-|\-o\-|\-webkit\-)?animation$/; var keyframeRegex = /^@(\-moz\-|\-o\-|\-webkit\-)?keyframes /; var importantRegex = /\s{0,31}!important$/; var optionalMatchingQuotesRegex = /^(['"]?)(.*)\1$/; function normalize(value) { return value .replace(optionalMatchingQuotesRegex, '$2') .replace(importantRegex, ''); } function removeUnusedAtRules(tokens, context) { removeUnusedAtRule(tokens, matchCounterStyle, markCounterStylesAsUsed, context); removeUnusedAtRule(tokens, matchFontFace, markFontFacesAsUsed, context); removeUnusedAtRule(tokens, matchKeyframe, markKeyframesAsUsed, context); removeUnusedAtRule(tokens, matchNamespace, markNamespacesAsUsed, context); } function removeUnusedAtRule(tokens, matchCallback, markCallback, context) { var atRules = {}; var atRule; var atRuleTokens; var atRuleToken; var zeroAt; var i, l; for (i = 0, l = tokens.length; i < l; i++) { matchCallback(tokens[i], atRules); } if (Object.keys(atRules).length === 0) { return; } markUsedAtRules(tokens, markCallback, atRules, context); for (atRule in atRules) { atRuleTokens = atRules[atRule]; for (i = 0, l = atRuleTokens.length; i < l; i++) { atRuleToken = atRuleTokens[i]; zeroAt = atRuleToken[0] == Token.AT_RULE ? 1 : 2; atRuleToken[zeroAt] = []; } } } function markUsedAtRules(tokens, markCallback, atRules, context) { var boundMarkCallback = markCallback(atRules); var i, l; for (i = 0, l = tokens.length; i < l; i++) { switch (tokens[i][0]) { case Token.RULE: boundMarkCallback(tokens[i], context); break; case Token.NESTED_BLOCK: markUsedAtRules(tokens[i][2], markCallback, atRules, context); } } } function matchCounterStyle(token, atRules) { var match; if (token[0] == Token.AT_RULE_BLOCK && token[1][0][1].indexOf('@counter-style') === 0) { match = token[1][0][1].split(' ')[1]; atRules[match] = atRules[match] || []; atRules[match].push(token); } } function markCounterStylesAsUsed(atRules) { return function (token, context) { var property; var wrappedProperty; var i, l; for (i = 0, l = token[2].length; i < l; i++) { property = token[2][i]; if (property[1][1] == 'list-style') { wrappedProperty = wrapForOptimizing(property); populateComponents([wrappedProperty], context.validator, context.warnings); if (wrappedProperty.components[0].value[0][1] in atRules) { delete atRules[property[2][1]]; } restoreFromOptimizing([wrappedProperty]); } if (property[1][1] == 'list-style-type' && property[2][1] in atRules) { delete atRules[property[2][1]]; } } }; } function matchFontFace(token, atRules) { var property; var match; var i, l; if (token[0] == Token.AT_RULE_BLOCK && token[1][0][1] == '@font-face') { for (i = 0, l = token[2].length; i < l; i++) { property = token[2][i]; if (property[1][1] == 'font-family') { match = normalize(property[2][1].toLowerCase()); atRules[match] = atRules[match] || []; atRules[match].push(token); break; } } } } function markFontFacesAsUsed(atRules) { return function (token, context) { var property; var wrappedProperty; var component; var normalizedMatch; var i, l; var j, m; for (i = 0, l = token[2].length; i < l; i++) { property = token[2][i]; if (property[1][1] == 'font') { wrappedProperty = wrapForOptimizing(property); populateComponents([wrappedProperty], context.validator, context.warnings); component = wrappedProperty.components[6]; for (j = 0, m = component.value.length; j < m; j++) { normalizedMatch = normalize(component.value[j][1].toLowerCase()); if (normalizedMatch in atRules) { delete atRules[normalizedMatch]; } } restoreFromOptimizing([wrappedProperty]); } if (property[1][1] == 'font-family') { for (j = 2, m = property.length; j < m; j++) { normalizedMatch = normalize(property[j][1].toLowerCase()); if (normalizedMatch in atRules) { delete atRules[normalizedMatch]; } } } } }; } function matchKeyframe(token, atRules) { var match; if (token[0] == Token.NESTED_BLOCK && keyframeRegex.test(token[1][0][1])) { match = token[1][0][1].split(' ')[1]; atRules[match] = atRules[match] || []; atRules[match].push(token); } } function markKeyframesAsUsed(atRules) { return function (token, context) { var property; var wrappedProperty; var component; var i, l; var j, m; for (i = 0, l = token[2].length; i < l; i++) { property = token[2][i]; if (animationRegex.test(property[1][1])) { wrappedProperty = wrapForOptimizing(property); populateComponents([wrappedProperty], context.validator, context.warnings); component = wrappedProperty.components[7]; for (j = 0, m = component.value.length; j < m; j++) { if (component.value[j][1] in atRules) { delete atRules[component.value[j][1]]; } } restoreFromOptimizing([wrappedProperty]); } if (animationNameRegex.test(property[1][1])) { for (j = 2, m = property.length; j < m; j++) { if (property[j][1] in atRules) { delete atRules[property[j][1]]; } } } } }; } function matchNamespace(token, atRules) { var match; if (token[0] == Token.AT_RULE && token[1].indexOf('@namespace') === 0) { match = token[1].split(' ')[1]; atRules[match] = atRules[match] || []; atRules[match].push(token); } } function markNamespacesAsUsed(atRules) { var namespaceRegex = new RegExp(Object.keys(atRules).join('\\\||') + '\\\|', 'g'); return function (token) { var match; var scope; var normalizedMatch; var i, l; var j, m; for (i = 0, l = token[1].length; i < l; i++) { scope = token[1][i]; match = scope[1].match(namespaceRegex); for (j = 0, m = match.length; j < m; j++) { normalizedMatch = match[j].substring(0, match[j].length - 1); if (normalizedMatch in atRules) { delete atRules[normalizedMatch]; } } } }; } module.exports = removeUnusedAtRules; node_modules/clean-css/lib/optimizer/level-2/clone.js000066600000001404150425117220016567 0ustar00var wrapSingle = require('../wrap-for-optimizing').single; var Token = require('../../tokenizer/token'); function deep(property) { var cloned = shallow(property); for (var i = property.components.length - 1; i >= 0; i--) { var component = shallow(property.components[i]); component.value = property.components[i].value.slice(0); cloned.components.unshift(component); } cloned.dirty = true; cloned.value = property.value.slice(0); return cloned; } function shallow(property) { var cloned = wrapSingle([ Token.PROPERTY, [Token.PROPERTY_NAME, property.name] ]); cloned.important = property.important; cloned.hack = property.hack; cloned.unused = false; return cloned; } module.exports = { deep: deep, shallow: shallow }; node_modules/clean-css/lib/optimizer/level-2/specificities-overlap.js000066600000001446150425117220021766 0ustar00var specificity = require('./specificity'); function specificitiesOverlap(selector1, selector2, cache) { var specificity1; var specificity2; var i, l; var j, m; for (i = 0, l = selector1.length; i < l; i++) { specificity1 = findSpecificity(selector1[i][1], cache); for (j = 0, m = selector2.length; j < m; j++) { specificity2 = findSpecificity(selector2[j][1], cache); if (specificity1[0] === specificity2[0] && specificity1[1] === specificity2[1] && specificity1[2] === specificity2[2]) { return true; } } } return false; } function findSpecificity(selector, cache) { var value; if (!(selector in cache)) { cache[selector] = value = specificity(selector); } return value || cache[selector]; } module.exports = specificitiesOverlap; node_modules/clean-css/lib/optimizer/level-2/invalid-property-error.js000066600000000474150425117220022134 0ustar00function InvalidPropertyError(message) { this.name = 'InvalidPropertyError'; this.message = message; this.stack = (new Error()).stack; } InvalidPropertyError.prototype = Object.create(Error.prototype); InvalidPropertyError.prototype.constructor = InvalidPropertyError; module.exports = InvalidPropertyError; node_modules/clean-css/lib/optimizer/level-2/is-mergeable.js000066600000015432150425117220020031 0ustar00var Marker = require('../../tokenizer/marker'); var split = require('../../utils/split'); var DEEP_SELECTOR_PATTERN = /\/deep\//; var DOUBLE_COLON_PATTERN = /^::/; var NOT_PSEUDO = ':not'; var PSEUDO_CLASSES_WITH_ARGUMENTS = [ ':dir', ':lang', ':not', ':nth-child', ':nth-last-child', ':nth-last-of-type', ':nth-of-type' ]; var RELATION_PATTERN = /[>\+~]/; var UNMIXABLE_PSEUDO_CLASSES = [ ':after', ':before', ':first-letter', ':first-line', ':lang' ]; var UNMIXABLE_PSEUDO_ELEMENTS = [ '::after', '::before', '::first-letter', '::first-line' ]; var Level = { DOUBLE_QUOTE: 'double-quote', SINGLE_QUOTE: 'single-quote', ROOT: 'root' }; function isMergeable(selector, mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging) { var singleSelectors = split(selector, Marker.COMMA); var singleSelector; var i, l; for (i = 0, l = singleSelectors.length; i < l; i++) { singleSelector = singleSelectors[i]; if (singleSelector.length === 0 || isDeepSelector(singleSelector) || (singleSelector.indexOf(Marker.COLON) > -1 && !areMergeable(singleSelector, extractPseudoFrom(singleSelector), mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging))) { return false; } } return true; } function isDeepSelector(selector) { return DEEP_SELECTOR_PATTERN.test(selector); } function extractPseudoFrom(selector) { var list = []; var character; var buffer = []; var level = Level.ROOT; var roundBracketLevel = 0; var isQuoted; var isEscaped; var isPseudo = false; var isRelation; var wasColon = false; var index; var len; for (index = 0, len = selector.length; index < len; index++) { character = selector[index]; isRelation = !isEscaped && RELATION_PATTERN.test(character); isQuoted = level == Level.DOUBLE_QUOTE || level == Level.SINGLE_QUOTE; if (isEscaped) { buffer.push(character); } else if (character == Marker.DOUBLE_QUOTE && level == Level.ROOT) { buffer.push(character); level = Level.DOUBLE_QUOTE; } else if (character == Marker.DOUBLE_QUOTE && level == Level.DOUBLE_QUOTE) { buffer.push(character); level = Level.ROOT; } else if (character == Marker.SINGLE_QUOTE && level == Level.ROOT) { buffer.push(character); level = Level.SINGLE_QUOTE; } else if (character == Marker.SINGLE_QUOTE && level == Level.SINGLE_QUOTE) { buffer.push(character); level = Level.ROOT; } else if (isQuoted) { buffer.push(character); } else if (character == Marker.OPEN_ROUND_BRACKET) { buffer.push(character); roundBracketLevel++; } else if (character == Marker.CLOSE_ROUND_BRACKET && roundBracketLevel == 1 && isPseudo) { buffer.push(character); list.push(buffer.join('')); roundBracketLevel--; buffer = []; isPseudo = false; } else if (character == Marker.CLOSE_ROUND_BRACKET) { buffer.push(character); roundBracketLevel--; } else if (character == Marker.COLON && roundBracketLevel === 0 && isPseudo && !wasColon) { list.push(buffer.join('')); buffer = []; buffer.push(character); } else if (character == Marker.COLON && roundBracketLevel === 0 && !wasColon) { buffer = []; buffer.push(character); isPseudo = true; } else if (character == Marker.SPACE && roundBracketLevel === 0 && isPseudo) { list.push(buffer.join('')); buffer = []; isPseudo = false; } else if (isRelation && roundBracketLevel === 0 && isPseudo) { list.push(buffer.join('')); buffer = []; isPseudo = false; } else { buffer.push(character); } isEscaped = character == Marker.BACK_SLASH; wasColon = character == Marker.COLON; } if (buffer.length > 0 && isPseudo) { list.push(buffer.join('')); } return list; } function areMergeable(selector, matches, mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging) { return areAllowed(matches, mergeablePseudoClasses, mergeablePseudoElements) && needArguments(matches) && (matches.length < 2 || !someIncorrectlyChained(selector, matches)) && (matches.length < 2 || multiplePseudoMerging && allMixable(matches)); } function areAllowed(matches, mergeablePseudoClasses, mergeablePseudoElements) { var match; var name; var i, l; for (i = 0, l = matches.length; i < l; i++) { match = matches[i]; name = match.indexOf(Marker.OPEN_ROUND_BRACKET) > -1 ? match.substring(0, match.indexOf(Marker.OPEN_ROUND_BRACKET)) : match; if (mergeablePseudoClasses.indexOf(name) === -1 && mergeablePseudoElements.indexOf(name) === -1) { return false; } } return true; } function needArguments(matches) { var match; var name; var bracketOpensAt; var hasArguments; var i, l; for (i = 0, l = matches.length; i < l; i++) { match = matches[i]; bracketOpensAt = match.indexOf(Marker.OPEN_ROUND_BRACKET); hasArguments = bracketOpensAt > -1; name = hasArguments ? match.substring(0, bracketOpensAt) : match; if (hasArguments && PSEUDO_CLASSES_WITH_ARGUMENTS.indexOf(name) == -1) { return false; } if (!hasArguments && PSEUDO_CLASSES_WITH_ARGUMENTS.indexOf(name) > -1) { return false; } } return true; } function someIncorrectlyChained(selector, matches) { var positionInSelector = 0; var match; var matchAt; var nextMatch; var nextMatchAt; var name; var nextName; var areChained; var i, l; for (i = 0, l = matches.length; i < l; i++) { match = matches[i]; nextMatch = matches[i + 1]; if (!nextMatch) { break; } matchAt = selector.indexOf(match, positionInSelector); nextMatchAt = selector.indexOf(match, matchAt + 1); positionInSelector = nextMatchAt; areChained = matchAt + match.length == nextMatchAt; if (areChained) { name = match.indexOf(Marker.OPEN_ROUND_BRACKET) > -1 ? match.substring(0, match.indexOf(Marker.OPEN_ROUND_BRACKET)) : match; nextName = nextMatch.indexOf(Marker.OPEN_ROUND_BRACKET) > -1 ? nextMatch.substring(0, nextMatch.indexOf(Marker.OPEN_ROUND_BRACKET)) : nextMatch; if (name != NOT_PSEUDO || nextName != NOT_PSEUDO) { return true; } } } return false; } function allMixable(matches) { var unmixableMatches = 0; var match; var i, l; for (i = 0, l = matches.length; i < l; i++) { match = matches[i]; if (isPseudoElement(match)) { unmixableMatches += UNMIXABLE_PSEUDO_ELEMENTS.indexOf(match) > -1 ? 1 : 0; } else { unmixableMatches += UNMIXABLE_PSEUDO_CLASSES.indexOf(match) > -1 ? 1 : 0; } if (unmixableMatches > 1) { return false; } } return true; } function isPseudoElement(pseudo) { return DOUBLE_COLON_PATTERN.test(pseudo); } module.exports = isMergeable; node_modules/clean-css/lib/optimizer/level-2/restore-with-components.js000066600000000477150425117220022317 0ustar00var compactable = require('./compactable'); function restoreWithComponents(property) { var descriptor = compactable[property.name]; if (descriptor && descriptor.shorthand) { return descriptor.restore(property, compactable); } else { return property.value; } } module.exports = restoreWithComponents; node_modules/clean-css/lib/optimizer/level-2/remove-duplicate-media-queries.js000066600000001225150425117220023465 0ustar00var Token = require('../../tokenizer/token'); var serializeAll = require('../../writer/one-time').all; var serializeRules = require('../../writer/one-time').rules; function removeDuplicateMediaQueries(tokens) { var candidates = {}; var candidate; var token; var key; var i, l; for (i = 0, l = tokens.length; i < l; i++) { token = tokens[i]; if (token[0] != Token.NESTED_BLOCK) { continue; } key = serializeRules(token[1]) + '%' + serializeAll(token[2]); candidate = candidates[key]; if (candidate) { candidate[2] = []; } candidates[key] = token; } } module.exports = removeDuplicateMediaQueries; node_modules/clean-css/lib/optimizer/level-2/specificity.js000066600000004662150425117220020013 0ustar00var Marker = require('../../tokenizer/marker'); var Selector = { ADJACENT_SIBLING: '+', DESCENDANT: '>', DOT: '.', HASH: '#', NON_ADJACENT_SIBLING: '~', PSEUDO: ':' }; var LETTER_PATTERN = /[a-zA-Z]/; var NOT_PREFIX = ':not('; var SEPARATOR_PATTERN = /[\s,\(>~\+]/; function specificity(selector) { var result = [0, 0, 0]; var character; var isEscaped; var isSingleQuoted; var isDoubleQuoted; var roundBracketLevel = 0; var couldIntroduceNewTypeSelector; var withinNotPseudoClass = false; var wasPseudoClass = false; var i, l; for (i = 0, l = selector.length; i < l; i++) { character = selector[i]; if (isEscaped) { // noop } else if (character == Marker.SINGLE_QUOTE && !isDoubleQuoted && !isSingleQuoted) { isSingleQuoted = true; } else if (character == Marker.SINGLE_QUOTE && !isDoubleQuoted && isSingleQuoted) { isSingleQuoted = false; } else if (character == Marker.DOUBLE_QUOTE && !isDoubleQuoted && !isSingleQuoted) { isDoubleQuoted = true; } else if (character == Marker.DOUBLE_QUOTE && isDoubleQuoted && !isSingleQuoted) { isDoubleQuoted = false; } else if (isSingleQuoted || isDoubleQuoted) { continue; } else if (roundBracketLevel > 0 && !withinNotPseudoClass) { // noop } else if (character == Marker.OPEN_ROUND_BRACKET) { roundBracketLevel++; } else if (character == Marker.CLOSE_ROUND_BRACKET && roundBracketLevel == 1) { roundBracketLevel--; withinNotPseudoClass = false; } else if (character == Marker.CLOSE_ROUND_BRACKET) { roundBracketLevel--; } else if (character == Selector.HASH) { result[0]++; } else if (character == Selector.DOT || character == Marker.OPEN_SQUARE_BRACKET) { result[1]++; } else if (character == Selector.PSEUDO && !wasPseudoClass && !isNotPseudoClass(selector, i)) { result[1]++; withinNotPseudoClass = false; } else if (character == Selector.PSEUDO) { withinNotPseudoClass = true; } else if ((i === 0 || couldIntroduceNewTypeSelector) && LETTER_PATTERN.test(character)) { result[2]++; } isEscaped = character == Marker.BACK_SLASH; wasPseudoClass = character == Selector.PSEUDO; couldIntroduceNewTypeSelector = !isEscaped && SEPARATOR_PATTERN.test(character); } return result; } function isNotPseudoClass(selector, index) { return selector.indexOf(NOT_PREFIX, index) === index; } module.exports = specificity; node_modules/clean-css/lib/optimizer/level-2/rules-overlap.js000066600000001124150425117220020266 0ustar00var MODIFIER_PATTERN = /\-\-.+$/; function rulesOverlap(rule1, rule2, bemMode) { var scope1; var scope2; var i, l; var j, m; for (i = 0, l = rule1.length; i < l; i++) { scope1 = rule1[i][1]; for (j = 0, m = rule2.length; j < m; j++) { scope2 = rule2[j][1]; if (scope1 == scope2) { return true; } if (bemMode && withoutModifiers(scope1) == withoutModifiers(scope2)) { return true; } } } return false; } function withoutModifiers(scope) { return scope.replace(MODIFIER_PATTERN, ''); } module.exports = rulesOverlap; node_modules/clean-css/lib/optimizer/level-2/remove-duplicate-font-at-rules.js000066600000001153150425117220023433 0ustar00var Token = require('../../tokenizer/token'); var serializeAll = require('../../writer/one-time').all; var FONT_FACE_SCOPE = '@font-face'; function removeDuplicateFontAtRules(tokens) { var fontAtRules = []; var token; var key; var i, l; for (i = 0, l = tokens.length; i < l; i++) { token = tokens[i]; if (token[0] != Token.AT_RULE_BLOCK && token[1][0][1] != FONT_FACE_SCOPE) { continue; } key = serializeAll([token]); if (fontAtRules.indexOf(key) > -1) { token[2] = []; } else { fontAtRules.push(key); } } } module.exports = removeDuplicateFontAtRules; node_modules/clean-css/lib/optimizer/level-2/merge-non-adjacent-by-body.js000066600000005554150425117220022502 0ustar00var isMergeable = require('./is-mergeable'); var sortSelectors = require('../level-1/sort-selectors'); var tidyRules = require('../level-1/tidy-rules'); var OptimizationLevel = require('../../options/optimization-level').OptimizationLevel; var serializeBody = require('../../writer/one-time').body; var serializeRules = require('../../writer/one-time').rules; var Token = require('../../tokenizer/token'); function unsafeSelector(value) { return /\.|\*| :/.test(value); } function isBemElement(token) { var asString = serializeRules(token[1]); return asString.indexOf('__') > -1 || asString.indexOf('--') > -1; } function withoutModifier(selector) { return selector.replace(/--[^ ,>\+~:]+/g, ''); } function removeAnyUnsafeElements(left, candidates) { var leftSelector = withoutModifier(serializeRules(left[1])); for (var body in candidates) { var right = candidates[body]; var rightSelector = withoutModifier(serializeRules(right[1])); if (rightSelector.indexOf(leftSelector) > -1 || leftSelector.indexOf(rightSelector) > -1) delete candidates[body]; } } function mergeNonAdjacentByBody(tokens, context) { var options = context.options; var mergeSemantically = options.level[OptimizationLevel.Two].mergeSemantically; var adjacentSpace = options.compatibility.selectors.adjacentSpace; var selectorsSortingMethod = options.level[OptimizationLevel.One].selectorsSortingMethod; var mergeablePseudoClasses = options.compatibility.selectors.mergeablePseudoClasses; var mergeablePseudoElements = options.compatibility.selectors.mergeablePseudoElements; var multiplePseudoMerging = options.compatibility.selectors.multiplePseudoMerging; var candidates = {}; for (var i = tokens.length - 1; i >= 0; i--) { var token = tokens[i]; if (token[0] != Token.RULE) continue; if (token[2].length > 0 && (!mergeSemantically && unsafeSelector(serializeRules(token[1])))) candidates = {}; if (token[2].length > 0 && mergeSemantically && isBemElement(token)) removeAnyUnsafeElements(token, candidates); var candidateBody = serializeBody(token[2]); var oldToken = candidates[candidateBody]; if (oldToken && isMergeable(serializeRules(token[1]), mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging) && isMergeable(serializeRules(oldToken[1]), mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging)) { if (token[2].length > 0) { token[1] = tidyRules(oldToken[1].concat(token[1]), false, adjacentSpace, false, context.warnings); token[1] = token[1].length > 1 ? sortSelectors(token[1], selectorsSortingMethod) : token[1]; } else { token[1] = oldToken[1].concat(token[1]); } oldToken[2] = []; candidates[candidateBody] = null; } candidates[serializeBody(token[2])] = token; } } module.exports = mergeNonAdjacentByBody; node_modules/clean-css/lib/optimizer/level-2/break-up.js000066600000052230150425117220017200 0ustar00var InvalidPropertyError = require('./invalid-property-error'); var wrapSingle = require('../wrap-for-optimizing').single; var Token = require('../../tokenizer/token'); var Marker = require('../../tokenizer/marker'); var formatPosition = require('../../utils/format-position'); function _anyIsInherit(values) { var i, l; for (i = 0, l = values.length; i < l; i++) { if (values[i][1] == 'inherit') { return true; } } return false; } function _colorFilter(validator) { return function (value) { return value[1] == 'invert' || validator.isColor(value[1]) || validator.isPrefixed(value[1]); }; } function _styleFilter(validator) { return function (value) { return value[1] != 'inherit' && validator.isStyleKeyword(value[1]) && !validator.isColorFunction(value[1]); }; } function _wrapDefault(name, property, compactable) { var descriptor = compactable[name]; if (descriptor.doubleValues && descriptor.defaultValue.length == 2) { return wrapSingle([ Token.PROPERTY, [Token.PROPERTY_NAME, name], [Token.PROPERTY_VALUE, descriptor.defaultValue[0]], [Token.PROPERTY_VALUE, descriptor.defaultValue[1]] ]); } else if (descriptor.doubleValues && descriptor.defaultValue.length == 1) { return wrapSingle([ Token.PROPERTY, [Token.PROPERTY_NAME, name], [Token.PROPERTY_VALUE, descriptor.defaultValue[0]] ]); } else { return wrapSingle([ Token.PROPERTY, [Token.PROPERTY_NAME, name], [Token.PROPERTY_VALUE, descriptor.defaultValue] ]); } } function _widthFilter(validator) { return function (value) { return value[1] != 'inherit' && (validator.isWidth(value[1]) || validator.isUnit(value[1]) && !validator.isDynamicUnit(value[1])) && !validator.isStyleKeyword(value[1]) && !validator.isColorFunction(value[1]); }; } function animation(property, compactable, validator) { var duration = _wrapDefault(property.name + '-duration', property, compactable); var timing = _wrapDefault(property.name + '-timing-function', property, compactable); var delay = _wrapDefault(property.name + '-delay', property, compactable); var iteration = _wrapDefault(property.name + '-iteration-count', property, compactable); var direction = _wrapDefault(property.name + '-direction', property, compactable); var fill = _wrapDefault(property.name + '-fill-mode', property, compactable); var play = _wrapDefault(property.name + '-play-state', property, compactable); var name = _wrapDefault(property.name + '-name', property, compactable); var components = [duration, timing, delay, iteration, direction, fill, play, name]; var values = property.value; var value; var durationSet = false; var timingSet = false; var delaySet = false; var iterationSet = false; var directionSet = false; var fillSet = false; var playSet = false; var nameSet = false; var i; var l; if (property.value.length == 1 && property.value[0][1] == 'inherit') { duration.value = timing.value = delay.value = iteration.value = direction.value = fill.value = play.value = name.value = property.value; return components; } if (values.length > 1 && _anyIsInherit(values)) { throw new InvalidPropertyError('Invalid animation values at ' + formatPosition(values[0][2][0]) + '. Ignoring.'); } for (i = 0, l = values.length; i < l; i++) { value = values[i]; if (validator.isTime(value[1]) && !durationSet) { duration.value = [value]; durationSet = true; } else if (validator.isTime(value[1]) && !delaySet) { delay.value = [value]; delaySet = true; } else if ((validator.isGlobal(value[1]) || validator.isTimingFunction(value[1])) && !timingSet) { timing.value = [value]; timingSet = true; } else if ((validator.isAnimationIterationCountKeyword(value[1]) || validator.isPositiveNumber(value[1])) && !iterationSet) { iteration.value = [value]; iterationSet = true; } else if (validator.isAnimationDirectionKeyword(value[1]) && !directionSet) { direction.value = [value]; directionSet = true; } else if (validator.isAnimationFillModeKeyword(value[1]) && !fillSet) { fill.value = [value]; fillSet = true; } else if (validator.isAnimationPlayStateKeyword(value[1]) && !playSet) { play.value = [value]; playSet = true; } else if ((validator.isAnimationNameKeyword(value[1]) || validator.isIdentifier(value[1])) && !nameSet) { name.value = [value]; nameSet = true; } else { throw new InvalidPropertyError('Invalid animation value at ' + formatPosition(value[2][0]) + '. Ignoring.'); } } return components; } function background(property, compactable, validator) { var image = _wrapDefault('background-image', property, compactable); var position = _wrapDefault('background-position', property, compactable); var size = _wrapDefault('background-size', property, compactable); var repeat = _wrapDefault('background-repeat', property, compactable); var attachment = _wrapDefault('background-attachment', property, compactable); var origin = _wrapDefault('background-origin', property, compactable); var clip = _wrapDefault('background-clip', property, compactable); var color = _wrapDefault('background-color', property, compactable); var components = [image, position, size, repeat, attachment, origin, clip, color]; var values = property.value; var positionSet = false; var clipSet = false; var originSet = false; var repeatSet = false; var anyValueSet = false; if (property.value.length == 1 && property.value[0][1] == 'inherit') { // NOTE: 'inherit' is not a valid value for background-attachment color.value = image.value = repeat.value = position.value = size.value = origin.value = clip.value = property.value; return components; } if (property.value.length == 1 && property.value[0][1] == '0 0') { return components; } for (var i = values.length - 1; i >= 0; i--) { var value = values[i]; if (validator.isBackgroundAttachmentKeyword(value[1])) { attachment.value = [value]; anyValueSet = true; } else if (validator.isBackgroundClipKeyword(value[1]) || validator.isBackgroundOriginKeyword(value[1])) { if (clipSet) { origin.value = [value]; originSet = true; } else { clip.value = [value]; clipSet = true; } anyValueSet = true; } else if (validator.isBackgroundRepeatKeyword(value[1])) { if (repeatSet) { repeat.value.unshift(value); } else { repeat.value = [value]; repeatSet = true; } anyValueSet = true; } else if (validator.isBackgroundPositionKeyword(value[1]) || validator.isBackgroundSizeKeyword(value[1]) || validator.isUnit(value[1]) || validator.isDynamicUnit(value[1])) { if (i > 0) { var previousValue = values[i - 1]; if (previousValue[1] == Marker.FORWARD_SLASH) { size.value = [value]; } else if (i > 1 && values[i - 2][1] == Marker.FORWARD_SLASH) { size.value = [previousValue, value]; i -= 2; } else { if (!positionSet) position.value = []; position.value.unshift(value); positionSet = true; } } else { if (!positionSet) position.value = []; position.value.unshift(value); positionSet = true; } anyValueSet = true; } else if ((color.value[0][1] == compactable[color.name].defaultValue || color.value[0][1] == 'none') && (validator.isColor(value[1]) || validator.isPrefixed(value[1]))) { color.value = [value]; anyValueSet = true; } else if (validator.isUrl(value[1]) || validator.isFunction(value[1])) { image.value = [value]; anyValueSet = true; } } if (clipSet && !originSet) origin.value = clip.value.slice(0); if (!anyValueSet) { throw new InvalidPropertyError('Invalid background value at ' + formatPosition(values[0][2][0]) + '. Ignoring.'); } return components; } function borderRadius(property, compactable) { var values = property.value; var splitAt = -1; for (var i = 0, l = values.length; i < l; i++) { if (values[i][1] == Marker.FORWARD_SLASH) { splitAt = i; break; } } if (splitAt === 0 || splitAt === values.length - 1) { throw new InvalidPropertyError('Invalid border-radius value at ' + formatPosition(values[0][2][0]) + '. Ignoring.'); } var target = _wrapDefault(property.name, property, compactable); target.value = splitAt > -1 ? values.slice(0, splitAt) : values.slice(0); target.components = fourValues(target, compactable); var remainder = _wrapDefault(property.name, property, compactable); remainder.value = splitAt > -1 ? values.slice(splitAt + 1) : values.slice(0); remainder.components = fourValues(remainder, compactable); for (var j = 0; j < 4; j++) { target.components[j].multiplex = true; target.components[j].value = target.components[j].value.concat(remainder.components[j].value); } return target.components; } function font(property, compactable, validator) { var style = _wrapDefault('font-style', property, compactable); var variant = _wrapDefault('font-variant', property, compactable); var weight = _wrapDefault('font-weight', property, compactable); var stretch = _wrapDefault('font-stretch', property, compactable); var size = _wrapDefault('font-size', property, compactable); var height = _wrapDefault('line-height', property, compactable); var family = _wrapDefault('font-family', property, compactable); var components = [style, variant, weight, stretch, size, height, family]; var values = property.value; var fuzzyMatched = 4; // style, variant, weight, and stretch var index = 0; var isStretchSet = false; var isStretchValid; var isStyleSet = false; var isStyleValid; var isVariantSet = false; var isVariantValid; var isWeightSet = false; var isWeightValid; var isSizeSet = false; var appendableFamilyName = false; if (!values[index]) { throw new InvalidPropertyError('Missing font values at ' + formatPosition(property.all[property.position][1][2][0]) + '. Ignoring.'); } if (values.length == 1 && values[0][1] == 'inherit') { style.value = variant.value = weight.value = stretch.value = size.value = height.value = family.value = values; return components; } if (values.length == 1 && (validator.isFontKeyword(values[0][1]) || validator.isGlobal(values[0][1]) || validator.isPrefixed(values[0][1]))) { values[0][1] = Marker.INTERNAL + values[0][1]; style.value = variant.value = weight.value = stretch.value = size.value = height.value = family.value = values; return components; } if (values.length < 2 || !_anyIsFontSize(values, validator) || !_anyIsFontFamily(values, validator)) { throw new InvalidPropertyError('Invalid font values at ' + formatPosition(property.all[property.position][1][2][0]) + '. Ignoring.'); } if (values.length > 1 && _anyIsInherit(values)) { throw new InvalidPropertyError('Invalid font values at ' + formatPosition(values[0][2][0]) + '. Ignoring.'); } // fuzzy match style, variant, weight, and stretch on first elements while (index < fuzzyMatched) { isStretchValid = validator.isFontStretchKeyword(values[index][1]) || validator.isGlobal(values[index][1]); isStyleValid = validator.isFontStyleKeyword(values[index][1]) || validator.isGlobal(values[index][1]); isVariantValid = validator.isFontVariantKeyword(values[index][1]) || validator.isGlobal(values[index][1]); isWeightValid = validator.isFontWeightKeyword(values[index][1]) || validator.isGlobal(values[index][1]); if (isStyleValid && !isStyleSet) { style.value = [values[index]]; isStyleSet = true; } else if (isVariantValid && !isVariantSet) { variant.value = [values[index]]; isVariantSet = true; } else if (isWeightValid && !isWeightSet) { weight.value = [values[index]]; isWeightSet = true; } else if (isStretchValid && !isStretchSet) { stretch.value = [values[index]]; isStretchSet = true; } else if (isStyleValid && isStyleSet || isVariantValid && isVariantSet || isWeightValid && isWeightSet || isStretchValid && isStretchSet) { throw new InvalidPropertyError('Invalid font style / variant / weight / stretch value at ' + formatPosition(values[0][2][0]) + '. Ignoring.'); } else { break; } index++; } // now comes font-size ... if (validator.isFontSizeKeyword(values[index][1]) || validator.isUnit(values[index][1]) && !validator.isDynamicUnit(values[index][1])) { size.value = [values[index]]; isSizeSet = true; index++; } else { throw new InvalidPropertyError('Missing font size at ' + formatPosition(values[0][2][0]) + '. Ignoring.'); } if (!values[index]) { throw new InvalidPropertyError('Missing font family at ' + formatPosition(values[0][2][0]) + '. Ignoring.'); } // ... and perhaps line-height if (isSizeSet && values[index] && values[index][1] == Marker.FORWARD_SLASH && values[index + 1] && (validator.isLineHeightKeyword(values[index + 1][1]) || validator.isUnit(values[index + 1][1]) || validator.isNumber(values[index + 1][1]))) { height.value = [values[index + 1]]; index++; index++; } // ... and whatever comes next is font-family family.value = []; while (values[index]) { if (values[index][1] == Marker.COMMA) { appendableFamilyName = false; } else { if (appendableFamilyName) { family.value[family.value.length - 1][1] += Marker.SPACE + values[index][1]; } else { family.value.push(values[index]); } appendableFamilyName = true; } index++; } if (family.value.length === 0) { throw new InvalidPropertyError('Missing font family at ' + formatPosition(values[0][2][0]) + '. Ignoring.'); } return components; } function _anyIsFontSize(values, validator) { var value; var i, l; for (i = 0, l = values.length; i < l; i++) { value = values[i]; if (validator.isFontSizeKeyword(value[1]) || validator.isUnit(value[1]) && !validator.isDynamicUnit(value[1]) || validator.isFunction(value[1])) { return true; } } return false; } function _anyIsFontFamily(values, validator) { var value; var i, l; for (i = 0, l = values.length; i < l; i++) { value = values[i]; if (validator.isIdentifier(value[1])) { return true; } } return false; } function fourValues(property, compactable) { var componentNames = compactable[property.name].components; var components = []; var value = property.value; if (value.length < 1) return []; if (value.length < 2) value[1] = value[0].slice(0); if (value.length < 3) value[2] = value[0].slice(0); if (value.length < 4) value[3] = value[1].slice(0); for (var i = componentNames.length - 1; i >= 0; i--) { var component = wrapSingle([ Token.PROPERTY, [Token.PROPERTY_NAME, componentNames[i]] ]); component.value = [value[i]]; components.unshift(component); } return components; } function multiplex(splitWith) { return function (property, compactable, validator) { var splitsAt = []; var values = property.value; var i, j, l, m; // find split commas for (i = 0, l = values.length; i < l; i++) { if (values[i][1] == ',') splitsAt.push(i); } if (splitsAt.length === 0) return splitWith(property, compactable, validator); var splitComponents = []; // split over commas, and into components for (i = 0, l = splitsAt.length; i <= l; i++) { var from = i === 0 ? 0 : splitsAt[i - 1] + 1; var to = i < l ? splitsAt[i] : values.length; var _property = _wrapDefault(property.name, property, compactable); _property.value = values.slice(from, to); splitComponents.push(splitWith(_property, compactable, validator)); } var components = splitComponents[0]; // group component values from each split for (i = 0, l = components.length; i < l; i++) { components[i].multiplex = true; for (j = 1, m = splitComponents.length; j < m; j++) { components[i].value.push([Token.PROPERTY_VALUE, Marker.COMMA]); Array.prototype.push.apply(components[i].value, splitComponents[j][i].value); } } return components; }; } function listStyle(property, compactable, validator) { var type = _wrapDefault('list-style-type', property, compactable); var position = _wrapDefault('list-style-position', property, compactable); var image = _wrapDefault('list-style-image', property, compactable); var components = [type, position, image]; if (property.value.length == 1 && property.value[0][1] == 'inherit') { type.value = position.value = image.value = [property.value[0]]; return components; } var values = property.value.slice(0); var total = values.length; var index = 0; // `image` first... for (index = 0, total = values.length; index < total; index++) { if (validator.isUrl(values[index][1]) || values[index][1] == '0') { image.value = [values[index]]; values.splice(index, 1); break; } } // ... then `position` for (index = 0, total = values.length; index < total; index++) { if (validator.isListStylePositionKeyword(values[index][1])) { position.value = [values[index]]; values.splice(index, 1); break; } } // ... and what's left is a `type` if (values.length > 0 && (validator.isListStyleTypeKeyword(values[0][1]) || validator.isIdentifier(values[0][1]))) { type.value = [values[0]]; } return components; } function transition(property, compactable, validator) { var prop = _wrapDefault(property.name + '-property', property, compactable); var duration = _wrapDefault(property.name + '-duration', property, compactable); var timing = _wrapDefault(property.name + '-timing-function', property, compactable); var delay = _wrapDefault(property.name + '-delay', property, compactable); var components = [prop, duration, timing, delay]; var values = property.value; var value; var durationSet = false; var delaySet = false; var propSet = false; var timingSet = false; var i; var l; if (property.value.length == 1 && property.value[0][1] == 'inherit') { prop.value = duration.value = timing.value = delay.value = property.value; return components; } if (values.length > 1 && _anyIsInherit(values)) { throw new InvalidPropertyError('Invalid animation values at ' + formatPosition(values[0][2][0]) + '. Ignoring.'); } for (i = 0, l = values.length; i < l; i++) { value = values[i]; if (validator.isTime(value[1]) && !durationSet) { duration.value = [value]; durationSet = true; } else if (validator.isTime(value[1]) && !delaySet) { delay.value = [value]; delaySet = true; } else if ((validator.isGlobal(value[1]) || validator.isTimingFunction(value[1])) && !timingSet) { timing.value = [value]; timingSet = true; } else if (validator.isIdentifier(value[1]) && !propSet) { prop.value = [value]; propSet = true; } else { throw new InvalidPropertyError('Invalid animation value at ' + formatPosition(value[2][0]) + '. Ignoring.'); } } return components; } function widthStyleColor(property, compactable, validator) { var descriptor = compactable[property.name]; var components = [ _wrapDefault(descriptor.components[0], property, compactable), _wrapDefault(descriptor.components[1], property, compactable), _wrapDefault(descriptor.components[2], property, compactable) ]; var color, style, width; for (var i = 0; i < 3; i++) { var component = components[i]; if (component.name.indexOf('color') > 0) color = component; else if (component.name.indexOf('style') > 0) style = component; else width = component; } if ((property.value.length == 1 && property.value[0][1] == 'inherit') || (property.value.length == 3 && property.value[0][1] == 'inherit' && property.value[1][1] == 'inherit' && property.value[2][1] == 'inherit')) { color.value = style.value = width.value = [property.value[0]]; return components; } var values = property.value.slice(0); var match, matches; // NOTE: usually users don't follow the required order of parts in this shorthand, // so we'll try to parse it caring as little about order as possible if (values.length > 0) { matches = values.filter(_widthFilter(validator)); match = matches.length > 1 && (matches[0][1] == 'none' || matches[0][1] == 'auto') ? matches[1] : matches[0]; if (match) { width.value = [match]; values.splice(values.indexOf(match), 1); } } if (values.length > 0) { match = values.filter(_styleFilter(validator))[0]; if (match) { style.value = [match]; values.splice(values.indexOf(match), 1); } } if (values.length > 0) { match = values.filter(_colorFilter(validator))[0]; if (match) { color.value = [match]; values.splice(values.indexOf(match), 1); } } return components; } module.exports = { animation: animation, background: background, border: widthStyleColor, borderRadius: borderRadius, font: font, fourValues: fourValues, listStyle: listStyle, multiplex: multiplex, outline: widthStyleColor, transition: transition }; node_modules/clean-css/lib/optimizer/level-2/merge-media-queries.js000066600000006106150425117220021322 0ustar00var canReorder = require('./reorderable').canReorder; var canReorderSingle = require('./reorderable').canReorderSingle; var extractProperties = require('./extract-properties'); var rulesOverlap = require('./rules-overlap'); var serializeRules = require('../../writer/one-time').rules; var OptimizationLevel = require('../../options/optimization-level').OptimizationLevel; var Token = require('../../tokenizer/token'); function mergeMediaQueries(tokens, context) { var mergeSemantically = context.options.level[OptimizationLevel.Two].mergeSemantically; var specificityCache = context.cache.specificity; var candidates = {}; var reduced = []; for (var i = tokens.length - 1; i >= 0; i--) { var token = tokens[i]; if (token[0] != Token.NESTED_BLOCK) { continue; } var key = serializeRules(token[1]); var candidate = candidates[key]; if (!candidate) { candidate = []; candidates[key] = candidate; } candidate.push(i); } for (var name in candidates) { var positions = candidates[name]; positionLoop: for (var j = positions.length - 1; j > 0; j--) { var positionOne = positions[j]; var tokenOne = tokens[positionOne]; var positionTwo = positions[j - 1]; var tokenTwo = tokens[positionTwo]; directionLoop: for (var direction = 1; direction >= -1; direction -= 2) { var topToBottom = direction == 1; var from = topToBottom ? positionOne + 1 : positionTwo - 1; var to = topToBottom ? positionTwo : positionOne; var delta = topToBottom ? 1 : -1; var source = topToBottom ? tokenOne : tokenTwo; var target = topToBottom ? tokenTwo : tokenOne; var movedProperties = extractProperties(source); while (from != to) { var traversedProperties = extractProperties(tokens[from]); from += delta; if (mergeSemantically && allSameRulePropertiesCanBeReordered(movedProperties, traversedProperties, specificityCache)) { continue; } if (!canReorder(movedProperties, traversedProperties, specificityCache)) continue directionLoop; } target[2] = topToBottom ? source[2].concat(target[2]) : target[2].concat(source[2]); source[2] = []; reduced.push(target); continue positionLoop; } } } return reduced; } function allSameRulePropertiesCanBeReordered(movedProperties, traversedProperties, specificityCache) { var movedProperty; var movedRule; var traversedProperty; var traversedRule; var i, l; var j, m; for (i = 0, l = movedProperties.length; i < l; i++) { movedProperty = movedProperties[i]; movedRule = movedProperty[5]; for (j = 0, m = traversedProperties.length; j < m; j++) { traversedProperty = traversedProperties[j]; traversedRule = traversedProperty[5]; if (rulesOverlap(movedRule, traversedRule, true) && !canReorderSingle(movedProperty, traversedProperty, specificityCache)) { return false; } } } return true; } module.exports = mergeMediaQueries; node_modules/clean-css/lib/optimizer/level-2/reorderable.js000066600000007232150425117220017762 0ustar00// TODO: it'd be great to merge it with the other canReorder functionality var rulesOverlap = require('./rules-overlap'); var specificitiesOverlap = require('./specificities-overlap'); var FLEX_PROPERTIES = /align\-items|box\-align|box\-pack|flex|justify/; var BORDER_PROPERTIES = /^border\-(top|right|bottom|left|color|style|width|radius)/; function canReorder(left, right, cache) { for (var i = right.length - 1; i >= 0; i--) { for (var j = left.length - 1; j >= 0; j--) { if (!canReorderSingle(left[j], right[i], cache)) return false; } } return true; } function canReorderSingle(left, right, cache) { var leftName = left[0]; var leftValue = left[1]; var leftNameRoot = left[2]; var leftSelector = left[5]; var leftInSpecificSelector = left[6]; var rightName = right[0]; var rightValue = right[1]; var rightNameRoot = right[2]; var rightSelector = right[5]; var rightInSpecificSelector = right[6]; if (leftName == 'font' && rightName == 'line-height' || rightName == 'font' && leftName == 'line-height') return false; if (FLEX_PROPERTIES.test(leftName) && FLEX_PROPERTIES.test(rightName)) return false; if (leftNameRoot == rightNameRoot && unprefixed(leftName) == unprefixed(rightName) && (vendorPrefixed(leftName) ^ vendorPrefixed(rightName))) return false; if (leftNameRoot == 'border' && BORDER_PROPERTIES.test(rightNameRoot) && (leftName == 'border' || leftName == rightNameRoot || (leftValue != rightValue && sameBorderComponent(leftName, rightName)))) return false; if (rightNameRoot == 'border' && BORDER_PROPERTIES.test(leftNameRoot) && (rightName == 'border' || rightName == leftNameRoot || (leftValue != rightValue && sameBorderComponent(leftName, rightName)))) return false; if (leftNameRoot == 'border' && rightNameRoot == 'border' && leftName != rightName && (isSideBorder(leftName) && isStyleBorder(rightName) || isStyleBorder(leftName) && isSideBorder(rightName))) return false; if (leftNameRoot != rightNameRoot) return true; if (leftName == rightName && leftNameRoot == rightNameRoot && (leftValue == rightValue || withDifferentVendorPrefix(leftValue, rightValue))) return true; if (leftName != rightName && leftNameRoot == rightNameRoot && leftName != leftNameRoot && rightName != rightNameRoot) return true; if (leftName != rightName && leftNameRoot == rightNameRoot && leftValue == rightValue) return true; if (rightInSpecificSelector && leftInSpecificSelector && !inheritable(leftNameRoot) && !inheritable(rightNameRoot) && !rulesOverlap(rightSelector, leftSelector, false)) return true; if (!specificitiesOverlap(leftSelector, rightSelector, cache)) return true; return false; } function vendorPrefixed(name) { return /^\-(?:moz|webkit|ms|o)\-/.test(name); } function unprefixed(name) { return name.replace(/^\-(?:moz|webkit|ms|o)\-/, ''); } function sameBorderComponent(name1, name2) { return name1.split('-').pop() == name2.split('-').pop(); } function isSideBorder(name) { return name == 'border-top' || name == 'border-right' || name == 'border-bottom' || name == 'border-left'; } function isStyleBorder(name) { return name == 'border-color' || name == 'border-style' || name == 'border-width'; } function withDifferentVendorPrefix(value1, value2) { return vendorPrefixed(value1) && vendorPrefixed(value2) && value1.split('-')[1] != value2.split('-')[2]; } function inheritable(name) { // According to http://www.w3.org/TR/CSS21/propidx.html // Others will be catched by other, preceeding rules return name == 'font' || name == 'line-height' || name == 'list-style'; } module.exports = { canReorder: canReorder, canReorderSingle: canReorderSingle }; node_modules/clean-css/lib/optimizer/level-2/properties/optimize.js000066600000002717150425117220021533 0ustar00var mergeIntoShorthands = require('./merge-into-shorthands'); var overrideProperties = require('./override-properties'); var populateComponents = require('./populate-components'); var restoreWithComponents = require('../restore-with-components'); var wrapForOptimizing = require('../../wrap-for-optimizing').all; var removeUnused = require('../../remove-unused'); var restoreFromOptimizing = require('../../restore-from-optimizing'); var OptimizationLevel = require('../../../options/optimization-level').OptimizationLevel; function optimizeProperties(properties, withOverriding, withMerging, context) { var levelOptions = context.options.level[OptimizationLevel.Two]; var _properties = wrapForOptimizing(properties, false, levelOptions.skipProperties); var _property; var i, l; populateComponents(_properties, context.validator, context.warnings); for (i = 0, l = _properties.length; i < l; i++) { _property = _properties[i]; if (_property.block) { optimizeProperties(_property.value[0][1], withOverriding, withMerging, context); } } if (withMerging && levelOptions.mergeIntoShorthands) { mergeIntoShorthands(_properties, context.validator); } if (withOverriding && levelOptions.overrideProperties) { overrideProperties(_properties, withMerging, context.options.compatibility, context.validator); } restoreFromOptimizing(_properties, restoreWithComponents); removeUnused(_properties); } module.exports = optimizeProperties; node_modules/clean-css/lib/optimizer/level-2/properties/vendor-prefixes.js000066600000000701150425117220023002 0ustar00var VENDOR_PREFIX_PATTERN = /(?:^|\W)(\-\w+\-)/g; function unique(value) { var prefixes = []; var match; while ((match = VENDOR_PREFIX_PATTERN.exec(value)) !== null) { if (prefixes.indexOf(match[0]) == -1) { prefixes.push(match[0]); } } return prefixes; } function same(value1, value2) { return unique(value1).sort().join(',') == unique(value2).sort().join(','); } module.exports = { unique: unique, same: same }; node_modules/clean-css/lib/optimizer/level-2/properties/understandable.js000066600000000550150425117220022657 0ustar00var sameVendorPrefixes = require('./vendor-prefixes').same; function understandable(validator, value1, value2, _position, isPaired) { if (!sameVendorPrefixes(value1, value2)) { return false; } if (isPaired && validator.isVariable(value1) !== validator.isVariable(value2)) { return false; } return true; } module.exports = understandable; node_modules/clean-css/lib/optimizer/level-2/properties/is-component-of.js000066600000001251150425117220022700 0ustar00var compactable = require('../compactable'); function isComponentOf(property1, property2, shallow) { return isDirectComponentOf(property1, property2) || !shallow && !!compactable[property1.name].shorthandComponents && isSubComponentOf(property1, property2); } function isDirectComponentOf(property1, property2) { var descriptor = compactable[property1.name]; return 'components' in descriptor && descriptor.components.indexOf(property2.name) > -1; } function isSubComponentOf(property1, property2) { return property1 .components .some(function (component) { return isDirectComponentOf(component, property2); }); } module.exports = isComponentOf; node_modules/clean-css/lib/optimizer/level-2/properties/has-inherit.js000066600000000314150425117220022075 0ustar00function hasInherit(property) { for (var i = property.value.length - 1; i >= 0; i--) { if (property.value[i][1] == 'inherit') return true; } return false; } module.exports = hasInherit; node_modules/clean-css/lib/optimizer/level-2/properties/override-properties.js000066600000034401150425117220023677 0ustar00var hasInherit = require('./has-inherit'); var everyValuesPair = require('./every-values-pair'); var findComponentIn = require('./find-component-in'); var isComponentOf = require('./is-component-of'); var isMergeableShorthand = require('./is-mergeable-shorthand'); var overridesNonComponentShorthand = require('./overrides-non-component-shorthand'); var sameVendorPrefixesIn = require('./vendor-prefixes').same; var compactable = require('../compactable'); var deepClone = require('../clone').deep; var restoreWithComponents = require('../restore-with-components'); var shallowClone = require('../clone').shallow; var restoreFromOptimizing = require('../../restore-from-optimizing'); var Token = require('../../../tokenizer/token'); var Marker = require('../../../tokenizer/marker'); var serializeProperty = require('../../../writer/one-time').property; function wouldBreakCompatibility(property, validator) { for (var i = 0; i < property.components.length; i++) { var component = property.components[i]; var descriptor = compactable[component.name]; var canOverride = descriptor && descriptor.canOverride || canOverride.sameValue; var _component = shallowClone(component); _component.value = [[Token.PROPERTY_VALUE, descriptor.defaultValue]]; if (!everyValuesPair(canOverride.bind(null, validator), _component, component)) { return true; } } return false; } function overrideIntoMultiplex(property, by) { by.unused = true; turnIntoMultiplex(by, multiplexSize(property)); property.value = by.value; } function overrideByMultiplex(property, by) { by.unused = true; property.multiplex = true; property.value = by.value; } function overrideSimple(property, by) { by.unused = true; property.value = by.value; } function override(property, by) { if (by.multiplex) overrideByMultiplex(property, by); else if (property.multiplex) overrideIntoMultiplex(property, by); else overrideSimple(property, by); } function overrideShorthand(property, by) { by.unused = true; for (var i = 0, l = property.components.length; i < l; i++) { override(property.components[i], by.components[i], property.multiplex); } } function turnIntoMultiplex(property, size) { property.multiplex = true; if (compactable[property.name].shorthand) { turnShorthandValueIntoMultiplex(property, size); } else { turnLonghandValueIntoMultiplex(property, size); } } function turnShorthandValueIntoMultiplex(property, size) { var component; var i, l; for (i = 0, l = property.components.length; i < l; i++) { component = property.components[i]; if (!component.multiplex) { turnLonghandValueIntoMultiplex(component, size); } } } function turnLonghandValueIntoMultiplex(property, size) { var descriptor = compactable[property.name]; var withRealValue = descriptor.intoMultiplexMode == 'real'; var withValue = descriptor.intoMultiplexMode == 'real' ? property.value.slice(0) : (descriptor.intoMultiplexMode == 'placeholder' ? descriptor.placeholderValue : descriptor.defaultValue); var i = multiplexSize(property); var j; var m = withValue.length; for (; i < size; i++) { property.value.push([Token.PROPERTY_VALUE, Marker.COMMA]); if (Array.isArray(withValue)) { for (j = 0; j < m; j++) { property.value.push(withRealValue ? withValue[j] : [Token.PROPERTY_VALUE, withValue[j]]); } } else { property.value.push(withRealValue ? withValue : [Token.PROPERTY_VALUE, withValue]); } } } function multiplexSize(component) { var size = 0; for (var i = 0, l = component.value.length; i < l; i++) { if (component.value[i][1] == Marker.COMMA) size++; } return size + 1; } function lengthOf(property) { var fakeAsArray = [ Token.PROPERTY, [Token.PROPERTY_NAME, property.name] ].concat(property.value); return serializeProperty([fakeAsArray], 0).length; } function moreSameShorthands(properties, startAt, name) { // Since we run the main loop in `compactOverrides` backwards, at this point some // properties may not be marked as unused. // We should consider reverting the order if possible var count = 0; for (var i = startAt; i >= 0; i--) { if (properties[i].name == name && !properties[i].unused) count++; if (count > 1) break; } return count > 1; } function overridingFunction(shorthand, validator) { for (var i = 0, l = shorthand.components.length; i < l; i++) { if (!anyValue(validator.isUrl, shorthand.components[i]) && anyValue(validator.isFunction, shorthand.components[i])) { return true; } } return false; } function anyValue(fn, property) { for (var i = 0, l = property.value.length; i < l; i++) { if (property.value[i][1] == Marker.COMMA) continue; if (fn(property.value[i][1])) return true; } return false; } function wouldResultInLongerValue(left, right) { if (!left.multiplex && !right.multiplex || left.multiplex && right.multiplex) return false; var multiplex = left.multiplex ? left : right; var simple = left.multiplex ? right : left; var component; var multiplexClone = deepClone(multiplex); restoreFromOptimizing([multiplexClone], restoreWithComponents); var simpleClone = deepClone(simple); restoreFromOptimizing([simpleClone], restoreWithComponents); var lengthBefore = lengthOf(multiplexClone) + 1 + lengthOf(simpleClone); if (left.multiplex) { component = findComponentIn(multiplexClone, simpleClone); overrideIntoMultiplex(component, simpleClone); } else { component = findComponentIn(simpleClone, multiplexClone); turnIntoMultiplex(simpleClone, multiplexSize(multiplexClone)); overrideByMultiplex(component, multiplexClone); } restoreFromOptimizing([simpleClone], restoreWithComponents); var lengthAfter = lengthOf(simpleClone); return lengthBefore <= lengthAfter; } function isCompactable(property) { return property.name in compactable; } function noneOverrideHack(left, right) { return !left.multiplex && (left.name == 'background' || left.name == 'background-image') && right.multiplex && (right.name == 'background' || right.name == 'background-image') && anyLayerIsNone(right.value); } function anyLayerIsNone(values) { var layers = intoLayers(values); for (var i = 0, l = layers.length; i < l; i++) { if (layers[i].length == 1 && layers[i][0][1] == 'none') return true; } return false; } function intoLayers(values) { var layers = []; for (var i = 0, layer = [], l = values.length; i < l; i++) { var value = values[i]; if (value[1] == Marker.COMMA) { layers.push(layer); layer = []; } else { layer.push(value); } } layers.push(layer); return layers; } function overrideProperties(properties, withMerging, compatibility, validator) { var mayOverride, right, left, component; var overriddenComponents; var overriddenComponent; var overridingComponent; var overridable; var i, j, k; propertyLoop: for (i = properties.length - 1; i >= 0; i--) { right = properties[i]; if (!isCompactable(right)) continue; if (right.block) continue; mayOverride = compactable[right.name].canOverride; traverseLoop: for (j = i - 1; j >= 0; j--) { left = properties[j]; if (!isCompactable(left)) continue; if (left.block) continue; if (left.unused || right.unused) continue; if (left.hack && !right.hack && !right.important || !left.hack && !left.important && right.hack) continue; if (left.important == right.important && left.hack[0] != right.hack[0]) continue; if (left.important == right.important && (left.hack[0] != right.hack[0] || (left.hack[1] && left.hack[1] != right.hack[1]))) continue; if (hasInherit(right)) continue; if (noneOverrideHack(left, right)) continue; if (right.shorthand && isComponentOf(right, left)) { // maybe `left` can be overridden by `right` which is a shorthand? if (!right.important && left.important) continue; if (!sameVendorPrefixesIn([left], right.components)) continue; if (!anyValue(validator.isFunction, left) && overridingFunction(right, validator)) continue; if (!isMergeableShorthand(right)) { left.unused = true; continue; } component = findComponentIn(right, left); mayOverride = compactable[left.name].canOverride; if (everyValuesPair(mayOverride.bind(null, validator), left, component)) { left.unused = true; } } else if (right.shorthand && overridesNonComponentShorthand(right, left)) { // `right` is a shorthand while `left` can be overriden by it, think `border` and `border-top` if (!right.important && left.important) { continue; } if (!sameVendorPrefixesIn([left], right.components)) { continue; } if (!anyValue(validator.isFunction, left) && overridingFunction(right, validator)) { continue; } overriddenComponents = left.shorthand ? left.components: [left]; for (k = overriddenComponents.length - 1; k >= 0; k--) { overriddenComponent = overriddenComponents[k]; overridingComponent = findComponentIn(right, overriddenComponent); mayOverride = compactable[overriddenComponent.name].canOverride; if (!everyValuesPair(mayOverride.bind(null, validator), left, overridingComponent)) { continue traverseLoop; } } left.unused = true; } else if (withMerging && left.shorthand && !right.shorthand && isComponentOf(left, right, true)) { // maybe `right` can be pulled into `left` which is a shorthand? if (right.important && !left.important) continue; if (!right.important && left.important) { right.unused = true; continue; } // Pending more clever algorithm in #527 if (moreSameShorthands(properties, i - 1, left.name)) continue; if (overridingFunction(left, validator)) continue; if (!isMergeableShorthand(left)) continue; component = findComponentIn(left, right); if (everyValuesPair(mayOverride.bind(null, validator), component, right)) { var disabledBackgroundMerging = !compatibility.properties.backgroundClipMerging && component.name.indexOf('background-clip') > -1 || !compatibility.properties.backgroundOriginMerging && component.name.indexOf('background-origin') > -1 || !compatibility.properties.backgroundSizeMerging && component.name.indexOf('background-size') > -1; var nonMergeableValue = compactable[right.name].nonMergeableValue === right.value[0][1]; if (disabledBackgroundMerging || nonMergeableValue) continue; if (!compatibility.properties.merging && wouldBreakCompatibility(left, validator)) continue; if (component.value[0][1] != right.value[0][1] && (hasInherit(left) || hasInherit(right))) continue; if (wouldResultInLongerValue(left, right)) continue; if (!left.multiplex && right.multiplex) turnIntoMultiplex(left, multiplexSize(right)); override(component, right); left.dirty = true; } } else if (withMerging && left.shorthand && right.shorthand && left.name == right.name) { // merge if all components can be merged if (!left.multiplex && right.multiplex) continue; if (!right.important && left.important) { right.unused = true; continue propertyLoop; } if (right.important && !left.important) { left.unused = true; continue; } if (!isMergeableShorthand(right)) { left.unused = true; continue; } for (k = left.components.length - 1; k >= 0; k--) { var leftComponent = left.components[k]; var rightComponent = right.components[k]; mayOverride = compactable[leftComponent.name].canOverride; if (!everyValuesPair(mayOverride.bind(null, validator), leftComponent, rightComponent)) continue propertyLoop; } overrideShorthand(left, right); left.dirty = true; } else if (withMerging && left.shorthand && right.shorthand && isComponentOf(left, right)) { // border is a shorthand but any of its components is a shorthand too if (!left.important && right.important) continue; component = findComponentIn(left, right); mayOverride = compactable[right.name].canOverride; if (!everyValuesPair(mayOverride.bind(null, validator), component, right)) continue; if (left.important && !right.important) { right.unused = true; continue; } var rightRestored = compactable[right.name].restore(right, compactable); if (rightRestored.length > 1) continue; component = findComponentIn(left, right); override(component, right); right.dirty = true; } else if (left.name == right.name) { // two non-shorthands should be merged based on understandability overridable = true; if (right.shorthand) { for (k = right.components.length - 1; k >= 0 && overridable; k--) { overriddenComponent = left.components[k]; overridingComponent = right.components[k]; mayOverride = compactable[overridingComponent.name].canOverride; overridable = overridable && everyValuesPair(mayOverride.bind(null, validator), overriddenComponent, overridingComponent); } } else { mayOverride = compactable[right.name].canOverride; overridable = everyValuesPair(mayOverride.bind(null, validator), left, right); } if (left.important && !right.important && overridable) { right.unused = true; continue; } if (!left.important && right.important && overridable) { left.unused = true; continue; } if (!overridable) { continue; } left.unused = true; } } } } module.exports = overrideProperties; node_modules/clean-css/lib/optimizer/level-2/properties/overrides-non-component-shorthand.js000066600000000532150425117220026446 0ustar00var compactable = require('../compactable'); function overridesNonComponentShorthand(property1, property2) { return property1.name in compactable && 'overridesShorthands' in compactable[property1.name] && compactable[property1.name].overridesShorthands.indexOf(property2.name) > -1; } module.exports = overridesNonComponentShorthand; node_modules/clean-css/lib/optimizer/level-2/properties/merge-into-shorthands.js000066600000030323150425117220024106 0ustar00var everyValuesPair = require('./every-values-pair'); var hasInherit = require('./has-inherit'); var populateComponents = require('./populate-components'); var compactable = require('../compactable'); var deepClone = require('../clone').deep; var restoreWithComponents = require('../restore-with-components'); var restoreFromOptimizing = require('../../restore-from-optimizing'); var wrapSingle = require('../../wrap-for-optimizing').single; var serializeBody = require('../../../writer/one-time').body; var Token = require('../../../tokenizer/token'); function mergeIntoShorthands(properties, validator) { var candidates = {}; var descriptor; var componentOf; var property; var i, l; var j, m; // there is no shorthand property made up of less than 3 longhands if (properties.length < 3) { return; } for (i = 0, l = properties.length; i < l; i++) { property = properties[i]; descriptor = compactable[property.name]; if (property.unused) { continue; } if (property.hack) { continue; } if (property.block) { continue; } invalidateOrCompact(properties, i, candidates, validator); if (descriptor && descriptor.componentOf) { for (j = 0, m = descriptor.componentOf.length; j < m; j++) { componentOf = descriptor.componentOf[j]; candidates[componentOf] = candidates[componentOf] || {}; candidates[componentOf][property.name] = property; } } } invalidateOrCompact(properties, i, candidates, validator); } function invalidateOrCompact(properties, position, candidates, validator) { var invalidatedBy = properties[position]; var shorthandName; var shorthandDescriptor; var candidateComponents; for (shorthandName in candidates) { if (undefined !== invalidatedBy && shorthandName == invalidatedBy.name) { continue; } shorthandDescriptor = compactable[shorthandName]; candidateComponents = candidates[shorthandName]; if (invalidatedBy && invalidates(candidates, shorthandName, invalidatedBy)) { delete candidates[shorthandName]; continue; } if (shorthandDescriptor.components.length > Object.keys(candidateComponents).length) { continue; } if (mixedImportance(candidateComponents)) { continue; } if (!overridable(candidateComponents, shorthandName, validator)) { continue; } if (!mergeable(candidateComponents)) { continue; } if (mixedInherit(candidateComponents)) { replaceWithInheritBestFit(properties, candidateComponents, shorthandName, validator); } else { replaceWithShorthand(properties, candidateComponents, shorthandName, validator); } } } function invalidates(candidates, shorthandName, invalidatedBy) { var shorthandDescriptor = compactable[shorthandName]; var invalidatedByDescriptor = compactable[invalidatedBy.name]; var componentName; if ('overridesShorthands' in shorthandDescriptor && shorthandDescriptor.overridesShorthands.indexOf(invalidatedBy.name) > -1) { return true; } if (invalidatedByDescriptor && 'componentOf' in invalidatedByDescriptor) { for (componentName in candidates[shorthandName]) { if (invalidatedByDescriptor.componentOf.indexOf(componentName) > -1) { return true; } } } return false; } function mixedImportance(components) { var important; var componentName; for (componentName in components) { if (undefined !== important && components[componentName].important != important) { return true; } important = components[componentName].important; } return false; } function overridable(components, shorthandName, validator) { var descriptor = compactable[shorthandName]; var newValuePlaceholder = [ Token.PROPERTY, [Token.PROPERTY_NAME, shorthandName], [Token.PROPERTY_VALUE, descriptor.defaultValue] ]; var newProperty = wrapSingle(newValuePlaceholder); var component; var mayOverride; var i, l; populateComponents([newProperty], validator, []); for (i = 0, l = descriptor.components.length; i < l; i++) { component = components[descriptor.components[i]]; mayOverride = compactable[component.name].canOverride; if (!everyValuesPair(mayOverride.bind(null, validator), newProperty.components[i], component)) { return false; } } return true; } function mergeable(components) { var lastCount = null; var currentCount; var componentName; var component; var descriptor; var values; for (componentName in components) { component = components[componentName]; descriptor = compactable[componentName]; if (!('restore' in descriptor)) { continue; } restoreFromOptimizing([component.all[component.position]], restoreWithComponents); values = descriptor.restore(component, compactable); currentCount = values.length; if (lastCount !== null && currentCount !== lastCount) { return false; } lastCount = currentCount; } return true; } function mixedInherit(components) { var componentName; var lastValue = null; var currentValue; for (componentName in components) { currentValue = hasInherit(components[componentName]); if (lastValue !== null && lastValue !== currentValue) { return true; } lastValue = currentValue; } return false; } function replaceWithInheritBestFit(properties, candidateComponents, shorthandName, validator) { var viaLonghands = buildSequenceWithInheritLonghands(candidateComponents, shorthandName, validator); var viaShorthand = buildSequenceWithInheritShorthand(candidateComponents, shorthandName, validator); var longhandTokensSequence = viaLonghands[0]; var shorthandTokensSequence = viaShorthand[0]; var isLonghandsShorter = serializeBody(longhandTokensSequence).length < serializeBody(shorthandTokensSequence).length; var newTokensSequence = isLonghandsShorter ? longhandTokensSequence : shorthandTokensSequence; var newProperty = isLonghandsShorter ? viaLonghands[1] : viaShorthand[1]; var newComponents = isLonghandsShorter ? viaLonghands[2] : viaShorthand[2]; var all = candidateComponents[Object.keys(candidateComponents)[0]].all; var componentName; var oldComponent; var newComponent; var newToken; newProperty.position = all.length; newProperty.shorthand = true; newProperty.dirty = true; newProperty.all = all; newProperty.all.push(newTokensSequence[0]); properties.push(newProperty); for (componentName in candidateComponents) { oldComponent = candidateComponents[componentName]; oldComponent.unused = true; if (oldComponent.name in newComponents) { newComponent = newComponents[oldComponent.name]; newToken = findTokenIn(newTokensSequence, componentName); newComponent.position = all.length; newComponent.all = all; newComponent.all.push(newToken); properties.push(newComponent); } } } function buildSequenceWithInheritLonghands(components, shorthandName, validator) { var tokensSequence = []; var inheritComponents = {}; var nonInheritComponents = {}; var descriptor = compactable[shorthandName]; var shorthandToken = [ Token.PROPERTY, [Token.PROPERTY_NAME, shorthandName], [Token.PROPERTY_VALUE, descriptor.defaultValue] ]; var newProperty = wrapSingle(shorthandToken); var component; var longhandToken; var newComponent; var nameMetadata; var i, l; populateComponents([newProperty], validator, []); for (i = 0, l = descriptor.components.length; i < l; i++) { component = components[descriptor.components[i]]; if (hasInherit(component)) { longhandToken = component.all[component.position].slice(0, 2); Array.prototype.push.apply(longhandToken, component.value); tokensSequence.push(longhandToken); newComponent = deepClone(component); newComponent.value = inferComponentValue(components, newComponent.name); newProperty.components[i] = newComponent; inheritComponents[component.name] = deepClone(component); } else { newComponent = deepClone(component); newComponent.all = component.all; newProperty.components[i] = newComponent; nonInheritComponents[component.name] = component; } } nameMetadata = joinMetadata(nonInheritComponents, 1); shorthandToken[1].push(nameMetadata); restoreFromOptimizing([newProperty], restoreWithComponents); shorthandToken = shorthandToken.slice(0, 2); Array.prototype.push.apply(shorthandToken, newProperty.value); tokensSequence.unshift(shorthandToken); return [tokensSequence, newProperty, inheritComponents]; } function inferComponentValue(components, propertyName) { var descriptor = compactable[propertyName]; if ('oppositeTo' in descriptor) { return components[descriptor.oppositeTo].value; } else { return [[Token.PROPERTY_VALUE, descriptor.defaultValue]]; } } function joinMetadata(components, at) { var metadata = []; var component; var originalValue; var componentMetadata; var componentName; for (componentName in components) { component = components[componentName]; originalValue = component.all[component.position]; componentMetadata = originalValue[at][originalValue[at].length - 1]; Array.prototype.push.apply(metadata, componentMetadata); } return metadata.sort(metadataSorter); } function metadataSorter(metadata1, metadata2) { var line1 = metadata1[0]; var line2 = metadata2[0]; var column1 = metadata1[1]; var column2 = metadata2[1]; if (line1 < line2) { return -1; } else if (line1 === line2) { return column1 < column2 ? -1 : 1; } else { return 1; } } function buildSequenceWithInheritShorthand(components, shorthandName, validator) { var tokensSequence = []; var inheritComponents = {}; var nonInheritComponents = {}; var descriptor = compactable[shorthandName]; var shorthandToken = [ Token.PROPERTY, [Token.PROPERTY_NAME, shorthandName], [Token.PROPERTY_VALUE, 'inherit'] ]; var newProperty = wrapSingle(shorthandToken); var component; var longhandToken; var nameMetadata; var valueMetadata; var i, l; populateComponents([newProperty], validator, []); for (i = 0, l = descriptor.components.length; i < l; i++) { component = components[descriptor.components[i]]; if (hasInherit(component)) { inheritComponents[component.name] = component; } else { longhandToken = component.all[component.position].slice(0, 2); Array.prototype.push.apply(longhandToken, component.value); tokensSequence.push(longhandToken); nonInheritComponents[component.name] = deepClone(component); } } nameMetadata = joinMetadata(inheritComponents, 1); shorthandToken[1].push(nameMetadata); valueMetadata = joinMetadata(inheritComponents, 2); shorthandToken[2].push(valueMetadata); tokensSequence.unshift(shorthandToken); return [tokensSequence, newProperty, nonInheritComponents]; } function findTokenIn(tokens, componentName) { var i, l; for (i = 0, l = tokens.length; i < l; i++) { if (tokens[i][1][1] == componentName) { return tokens[i]; } } } function replaceWithShorthand(properties, candidateComponents, shorthandName, validator) { var descriptor = compactable[shorthandName]; var nameMetadata; var valueMetadata; var newValuePlaceholder = [ Token.PROPERTY, [Token.PROPERTY_NAME, shorthandName], [Token.PROPERTY_VALUE, descriptor.defaultValue] ]; var all; var newProperty = wrapSingle(newValuePlaceholder); newProperty.shorthand = true; newProperty.dirty = true; populateComponents([newProperty], validator, []); for (var i = 0, l = descriptor.components.length; i < l; i++) { var component = candidateComponents[descriptor.components[i]]; newProperty.components[i] = deepClone(component); newProperty.important = component.important; all = component.all; } for (var componentName in candidateComponents) { candidateComponents[componentName].unused = true; } nameMetadata = joinMetadata(candidateComponents, 1); newValuePlaceholder[1].push(nameMetadata); valueMetadata = joinMetadata(candidateComponents, 2); newValuePlaceholder[2].push(valueMetadata); newProperty.position = all.length; newProperty.all = all; newProperty.all.push(newValuePlaceholder); properties.push(newProperty); } module.exports = mergeIntoShorthands; node_modules/clean-css/lib/optimizer/level-2/properties/find-component-in.js000066600000001671150425117220023215 0ustar00var compactable = require('../compactable'); function findComponentIn(shorthand, longhand) { var comparator = nameComparator(longhand); return findInDirectComponents(shorthand, comparator) || findInSubComponents(shorthand, comparator); } function nameComparator(to) { return function (property) { return to.name === property.name; }; } function findInDirectComponents(shorthand, comparator) { return shorthand.components.filter(comparator)[0]; } function findInSubComponents(shorthand, comparator) { var shorthandComponent; var longhandMatch; var i, l; if (!compactable[shorthand.name].shorthandComponents) { return; } for (i = 0, l = shorthand.components.length; i < l; i++) { shorthandComponent = shorthand.components[i]; longhandMatch = findInDirectComponents(shorthandComponent, comparator); if (longhandMatch) { return longhandMatch; } } return; } module.exports = findComponentIn; node_modules/clean-css/lib/optimizer/level-2/properties/populate-components.js000066600000002377150425117220023711 0ustar00var compactable = require('../compactable'); var InvalidPropertyError = require('../invalid-property-error'); function populateComponents(properties, validator, warnings) { var component; var j, m; for (var i = properties.length - 1; i >= 0; i--) { var property = properties[i]; var descriptor = compactable[property.name]; if (descriptor && descriptor.shorthand) { property.shorthand = true; property.dirty = true; try { property.components = descriptor.breakUp(property, compactable, validator); if (descriptor.shorthandComponents) { for (j = 0, m = property.components.length; j < m; j++) { component = property.components[j]; component.components = compactable[component.name].breakUp(component, compactable, validator); } } } catch (e) { if (e instanceof InvalidPropertyError) { property.components = []; // this will set property.unused to true below warnings.push(e.message); } else { throw e; } } if (property.components.length > 0) property.multiplex = property.components[0].multiplex; else property.unused = true; } } } module.exports = populateComponents; node_modules/clean-css/lib/optimizer/level-2/properties/is-mergeable-shorthand.js000066600000000400150425117220024202 0ustar00var Marker = require('../../../tokenizer/marker'); function isMergeableShorthand(shorthand) { if (shorthand.name != 'font') { return true; } return shorthand.value[0][1].indexOf(Marker.INTERNAL) == -1; } module.exports = isMergeableShorthand; node_modules/clean-css/lib/optimizer/level-2/properties/every-values-pair.js000066600000001414150425117220023244 0ustar00var Marker = require('../../../tokenizer/marker'); function everyValuesPair(fn, left, right) { var leftSize = left.value.length; var rightSize = right.value.length; var total = Math.max(leftSize, rightSize); var lowerBound = Math.min(leftSize, rightSize) - 1; var leftValue; var rightValue; var position; for (position = 0; position < total; position++) { leftValue = left.value[position] && left.value[position][1] || leftValue; rightValue = right.value[position] && right.value[position][1] || rightValue; if (leftValue == Marker.COMMA || rightValue == Marker.COMMA) { continue; } if (!fn(leftValue, rightValue, position, position <= lowerBound)) { return false; } } return true; } module.exports = everyValuesPair; node_modules/clean-css/lib/optimizer/level-2/restore.js000066600000023145150425117220017160 0ustar00var shallowClone = require('./clone').shallow; var Token = require('../../tokenizer/token'); var Marker = require('../../tokenizer/marker'); function isInheritOnly(values) { for (var i = 0, l = values.length; i < l; i++) { var value = values[i][1]; if (value != 'inherit' && value != Marker.COMMA && value != Marker.FORWARD_SLASH) return false; } return true; } function background(property, compactable, lastInMultiplex) { var components = property.components; var restored = []; var needsOne, needsBoth; function restoreValue(component) { Array.prototype.unshift.apply(restored, component.value); } function isDefaultValue(component) { var descriptor = compactable[component.name]; if (descriptor.doubleValues && descriptor.defaultValue.length == 1) { return component.value[0][1] == descriptor.defaultValue[0] && (component.value[1] ? component.value[1][1] == descriptor.defaultValue[0] : true); } else if (descriptor.doubleValues && descriptor.defaultValue.length != 1) { return component.value[0][1] == descriptor.defaultValue[0] && (component.value[1] ? component.value[1][1] : component.value[0][1]) == descriptor.defaultValue[1]; } else { return component.value[0][1] == descriptor.defaultValue; } } for (var i = components.length - 1; i >= 0; i--) { var component = components[i]; var isDefault = isDefaultValue(component); if (component.name == 'background-clip') { var originComponent = components[i - 1]; var isOriginDefault = isDefaultValue(originComponent); needsOne = component.value[0][1] == originComponent.value[0][1]; needsBoth = !needsOne && ( (isOriginDefault && !isDefault) || (!isOriginDefault && !isDefault) || (!isOriginDefault && isDefault && component.value[0][1] != originComponent.value[0][1])); if (needsOne) { restoreValue(originComponent); } else if (needsBoth) { restoreValue(component); restoreValue(originComponent); } i--; } else if (component.name == 'background-size') { var positionComponent = components[i - 1]; var isPositionDefault = isDefaultValue(positionComponent); needsOne = !isPositionDefault && isDefault; needsBoth = !needsOne && (isPositionDefault && !isDefault || !isPositionDefault && !isDefault); if (needsOne) { restoreValue(positionComponent); } else if (needsBoth) { restoreValue(component); restored.unshift([Token.PROPERTY_VALUE, Marker.FORWARD_SLASH]); restoreValue(positionComponent); } else if (positionComponent.value.length == 1) { restoreValue(positionComponent); } i--; } else { if (isDefault || compactable[component.name].multiplexLastOnly && !lastInMultiplex) continue; restoreValue(component); } } if (restored.length === 0 && property.value.length == 1 && property.value[0][1] == '0') restored.push(property.value[0]); if (restored.length === 0) restored.push([Token.PROPERTY_VALUE, compactable[property.name].defaultValue]); if (isInheritOnly(restored)) return [restored[0]]; return restored; } function borderRadius(property, compactable) { if (property.multiplex) { var horizontal = shallowClone(property); var vertical = shallowClone(property); for (var i = 0; i < 4; i++) { var component = property.components[i]; var horizontalComponent = shallowClone(property); horizontalComponent.value = [component.value[0]]; horizontal.components.push(horizontalComponent); var verticalComponent = shallowClone(property); // FIXME: only shorthand compactor (see breakup#borderRadius) knows that border radius // longhands have two values, whereas tokenizer does not care about populating 2nd value // if it's missing, hence this fallback verticalComponent.value = [component.value[1] || component.value[0]]; vertical.components.push(verticalComponent); } var horizontalValues = fourValues(horizontal, compactable); var verticalValues = fourValues(vertical, compactable); if (horizontalValues.length == verticalValues.length && horizontalValues[0][1] == verticalValues[0][1] && (horizontalValues.length > 1 ? horizontalValues[1][1] == verticalValues[1][1] : true) && (horizontalValues.length > 2 ? horizontalValues[2][1] == verticalValues[2][1] : true) && (horizontalValues.length > 3 ? horizontalValues[3][1] == verticalValues[3][1] : true)) { return horizontalValues; } else { return horizontalValues.concat([[Token.PROPERTY_VALUE, Marker.FORWARD_SLASH]]).concat(verticalValues); } } else { return fourValues(property, compactable); } } function font(property, compactable) { var components = property.components; var restored = []; var component; var componentIndex = 0; var fontFamilyIndex = 0; if (property.value[0][1].indexOf(Marker.INTERNAL) === 0) { property.value[0][1] = property.value[0][1].substring(Marker.INTERNAL.length); return property.value; } // first four components are optional while (componentIndex < 4) { component = components[componentIndex]; if (component.value[0][1] != compactable[component.name].defaultValue) { Array.prototype.push.apply(restored, component.value); } componentIndex++; } // then comes font-size Array.prototype.push.apply(restored, components[componentIndex].value); componentIndex++; // then may come line-height if (components[componentIndex].value[0][1] != compactable[components[componentIndex].name].defaultValue) { Array.prototype.push.apply(restored, [[Token.PROPERTY_VALUE, Marker.FORWARD_SLASH]]); Array.prototype.push.apply(restored, components[componentIndex].value); } componentIndex++; // then comes font-family while (components[componentIndex].value[fontFamilyIndex]) { restored.push(components[componentIndex].value[fontFamilyIndex]); if (components[componentIndex].value[fontFamilyIndex + 1]) { restored.push([Token.PROPERTY_VALUE, Marker.COMMA]); } fontFamilyIndex++; } if (isInheritOnly(restored)) { return [restored[0]]; } return restored; } function fourValues(property) { var components = property.components; var value1 = components[0].value[0]; var value2 = components[1].value[0]; var value3 = components[2].value[0]; var value4 = components[3].value[0]; if (value1[1] == value2[1] && value1[1] == value3[1] && value1[1] == value4[1]) { return [value1]; } else if (value1[1] == value3[1] && value2[1] == value4[1]) { return [value1, value2]; } else if (value2[1] == value4[1]) { return [value1, value2, value3]; } else { return [value1, value2, value3, value4]; } } function multiplex(restoreWith) { return function (property, compactable) { if (!property.multiplex) return restoreWith(property, compactable, true); var multiplexSize = 0; var restored = []; var componentMultiplexSoFar = {}; var i, l; // At this point we don't know what's the multiplex size, e.g. how many background layers are there for (i = 0, l = property.components[0].value.length; i < l; i++) { if (property.components[0].value[i][1] == Marker.COMMA) multiplexSize++; } for (i = 0; i <= multiplexSize; i++) { var _property = shallowClone(property); // We split multiplex into parts and restore them one by one for (var j = 0, m = property.components.length; j < m; j++) { var componentToClone = property.components[j]; var _component = shallowClone(componentToClone); _property.components.push(_component); // The trick is some properties has more than one value, so we iterate over values looking for // a multiplex separator - a comma for (var k = componentMultiplexSoFar[_component.name] || 0, n = componentToClone.value.length; k < n; k++) { if (componentToClone.value[k][1] == Marker.COMMA) { componentMultiplexSoFar[_component.name] = k + 1; break; } _component.value.push(componentToClone.value[k]); } } // No we can restore shorthand value var lastInMultiplex = i == multiplexSize; var _restored = restoreWith(_property, compactable, lastInMultiplex); Array.prototype.push.apply(restored, _restored); if (i < multiplexSize) restored.push([Token.PROPERTY_VALUE, Marker.COMMA]); } return restored; }; } function withoutDefaults(property, compactable) { var components = property.components; var restored = []; for (var i = components.length - 1; i >= 0; i--) { var component = components[i]; var descriptor = compactable[component.name]; if (component.value[0][1] != descriptor.defaultValue || ('keepUnlessDefault' in descriptor) && !isDefault(components, compactable, descriptor.keepUnlessDefault)) { restored.unshift(component.value[0]); } } if (restored.length === 0) restored.push([Token.PROPERTY_VALUE, compactable[property.name].defaultValue]); if (isInheritOnly(restored)) return [restored[0]]; return restored; } function isDefault(components, compactable, propertyName) { var component; var i, l; for (i = 0, l = components.length; i < l; i++) { component = components[i]; if (component.name == propertyName && component.value[0][1] == compactable[propertyName].defaultValue) { return true; } } return false; } module.exports = { background: background, borderRadius: borderRadius, font: font, fourValues: fourValues, multiplex: multiplex, withoutDefaults: withoutDefaults }; node_modules/clean-css/lib/optimizer/level-2/tidy-rule-duplicates.js000066600000000615150425117220021543 0ustar00function ruleSorter(s1, s2) { return s1[1] > s2[1] ? 1 : -1; } function tidyRuleDuplicates(rules) { var list = []; var repeated = []; for (var i = 0, l = rules.length; i < l; i++) { var rule = rules[i]; if (repeated.indexOf(rule[1]) == -1) { repeated.push(rule[1]); list.push(rule); } } return list.sort(ruleSorter); } module.exports = tidyRuleDuplicates; node_modules/clean-css/lib/optimizer/level-2/can-override.js000066600000024347150425117220020060 0ustar00var understandable = require('./properties/understandable'); function animationIterationCount(validator, value1, value2) { if (!understandable(validator, value1, value2, 0, true) && !(validator.isAnimationIterationCountKeyword(value2) || validator.isPositiveNumber(value2))) { return false; } else if (validator.isVariable(value1) && validator.isVariable(value2)) { return true; } return validator.isAnimationIterationCountKeyword(value2) || validator.isPositiveNumber(value2); } function animationName(validator, value1, value2) { if (!understandable(validator, value1, value2, 0, true) && !(validator.isAnimationNameKeyword(value2) || validator.isIdentifier(value2))) { return false; } else if (validator.isVariable(value1) && validator.isVariable(value2)) { return true; } return validator.isAnimationNameKeyword(value2) || validator.isIdentifier(value2); } function areSameFunction(validator, value1, value2) { if (!validator.isFunction(value1) || !validator.isFunction(value2)) { return false; } var function1Name = value1.substring(0, value1.indexOf('(')); var function2Name = value2.substring(0, value2.indexOf('(')); return function1Name === function2Name; } function backgroundPosition(validator, value1, value2) { if (!understandable(validator, value1, value2, 0, true) && !(validator.isBackgroundPositionKeyword(value2) || validator.isGlobal(value2))) { return false; } else if (validator.isVariable(value1) && validator.isVariable(value2)) { return true; } else if (validator.isBackgroundPositionKeyword(value2) || validator.isGlobal(value2)) { return true; } return unit(validator, value1, value2); } function backgroundSize(validator, value1, value2) { if (!understandable(validator, value1, value2, 0, true) && !(validator.isBackgroundSizeKeyword(value2) || validator.isGlobal(value2))) { return false; } else if (validator.isVariable(value1) && validator.isVariable(value2)) { return true; } else if (validator.isBackgroundSizeKeyword(value2) || validator.isGlobal(value2)) { return true; } return unit(validator, value1, value2); } function color(validator, value1, value2) { if (!understandable(validator, value1, value2, 0, true) && !validator.isColor(value2)) { return false; } else if (validator.isVariable(value1) && validator.isVariable(value2)) { return true; } else if (!validator.colorOpacity && (validator.isRgbColor(value1) || validator.isHslColor(value1))) { return false; } else if (!validator.colorOpacity && (validator.isRgbColor(value2) || validator.isHslColor(value2))) { return false; } else if (validator.isColor(value1) && validator.isColor(value2)) { return true; } return sameFunctionOrValue(validator, value1, value2); } function components(overrideCheckers) { return function (validator, value1, value2, position) { return overrideCheckers[position](validator, value1, value2); }; } function fontFamily(validator, value1, value2) { return understandable(validator, value1, value2, 0, true); } function image(validator, value1, value2) { if (!understandable(validator, value1, value2, 0, true) && !validator.isImage(value2)) { return false; } else if (validator.isVariable(value1) && validator.isVariable(value2)) { return true; } else if (validator.isImage(value2)) { return true; } else if (validator.isImage(value1)) { return false; } return sameFunctionOrValue(validator, value1, value2); } function keyword(propertyName) { return function(validator, value1, value2) { if (!understandable(validator, value1, value2, 0, true) && !validator.isKeyword(propertyName)(value2)) { return false; } else if (validator.isVariable(value1) && validator.isVariable(value2)) { return true; } return validator.isKeyword(propertyName)(value2); }; } function keywordWithGlobal(propertyName) { return function(validator, value1, value2) { if (!understandable(validator, value1, value2, 0, true) && !(validator.isKeyword(propertyName)(value2) || validator.isGlobal(value2))) { return false; } else if (validator.isVariable(value1) && validator.isVariable(value2)) { return true; } return validator.isKeyword(propertyName)(value2) || validator.isGlobal(value2); }; } function propertyName(validator, value1, value2) { if (!understandable(validator, value1, value2, 0, true) && !validator.isIdentifier(value2)) { return false; } else if (validator.isVariable(value1) && validator.isVariable(value2)) { return true; } return validator.isIdentifier(value2); } function sameFunctionOrValue(validator, value1, value2) { return areSameFunction(validator, value1, value2) ? true : value1 === value2; } function textShadow(validator, value1, value2) { if (!understandable(validator, value1, value2, 0, true) && !(validator.isUnit(value2) || validator.isColor(value2) || validator.isGlobal(value2))) { return false; } else if (validator.isVariable(value1) && validator.isVariable(value2)) { return true; } return validator.isUnit(value2) || validator.isColor(value2) || validator.isGlobal(value2); } function time(validator, value1, value2) { if (!understandable(validator, value1, value2, 0, true) && !validator.isTime(value2)) { return false; } else if (validator.isVariable(value1) && validator.isVariable(value2)) { return true; } else if (validator.isTime(value1) && !validator.isTime(value2)) { return false; } else if (validator.isTime(value2)) { return true; } else if (validator.isTime(value1)) { return false; } else if (validator.isFunction(value1) && !validator.isPrefixed(value1) && validator.isFunction(value2) && !validator.isPrefixed(value2)) { return true; } return sameFunctionOrValue(validator, value1, value2); } function timingFunction(validator, value1, value2) { if (!understandable(validator, value1, value2, 0, true) && !(validator.isTimingFunction(value2) || validator.isGlobal(value2))) { return false; } else if (validator.isVariable(value1) && validator.isVariable(value2)) { return true; } return validator.isTimingFunction(value2) || validator.isGlobal(value2); } function unit(validator, value1, value2) { if (!understandable(validator, value1, value2, 0, true) && !validator.isUnit(value2)) { return false; } else if (validator.isVariable(value1) && validator.isVariable(value2)) { return true; } else if (validator.isUnit(value1) && !validator.isUnit(value2)) { return false; } else if (validator.isUnit(value2)) { return true; } else if (validator.isUnit(value1)) { return false; } else if (validator.isFunction(value1) && !validator.isPrefixed(value1) && validator.isFunction(value2) && !validator.isPrefixed(value2)) { return true; } return sameFunctionOrValue(validator, value1, value2); } function unitOrKeywordWithGlobal(propertyName) { var byKeyword = keywordWithGlobal(propertyName); return function(validator, value1, value2) { return unit(validator, value1, value2) || byKeyword(validator, value1, value2); }; } function unitOrNumber(validator, value1, value2) { if (!understandable(validator, value1, value2, 0, true) && !(validator.isUnit(value2) || validator.isNumber(value2))) { return false; } else if (validator.isVariable(value1) && validator.isVariable(value2)) { return true; } else if ((validator.isUnit(value1) || validator.isNumber(value1)) && !(validator.isUnit(value2) || validator.isNumber(value2))) { return false; } else if (validator.isUnit(value2) || validator.isNumber(value2)) { return true; } else if (validator.isUnit(value1) || validator.isNumber(value1)) { return false; } else if (validator.isFunction(value1) && !validator.isPrefixed(value1) && validator.isFunction(value2) && !validator.isPrefixed(value2)) { return true; } return sameFunctionOrValue(validator, value1, value2); } function zIndex(validator, value1, value2) { if (!understandable(validator, value1, value2, 0, true) && !validator.isZIndex(value2)) { return false; } else if (validator.isVariable(value1) && validator.isVariable(value2)) { return true; } return validator.isZIndex(value2); } module.exports = { generic: { color: color, components: components, image: image, propertyName: propertyName, time: time, timingFunction: timingFunction, unit: unit, unitOrNumber: unitOrNumber }, property: { animationDirection: keywordWithGlobal('animation-direction'), animationFillMode: keyword('animation-fill-mode'), animationIterationCount: animationIterationCount, animationName: animationName, animationPlayState: keywordWithGlobal('animation-play-state'), backgroundAttachment: keyword('background-attachment'), backgroundClip: keywordWithGlobal('background-clip'), backgroundOrigin: keyword('background-origin'), backgroundPosition: backgroundPosition, backgroundRepeat: keyword('background-repeat'), backgroundSize: backgroundSize, bottom: unitOrKeywordWithGlobal('bottom'), borderCollapse: keyword('border-collapse'), borderStyle: keywordWithGlobal('*-style'), clear: keywordWithGlobal('clear'), cursor: keywordWithGlobal('cursor'), display: keywordWithGlobal('display'), float: keywordWithGlobal('float'), left: unitOrKeywordWithGlobal('left'), fontFamily: fontFamily, fontStretch: keywordWithGlobal('font-stretch'), fontStyle: keywordWithGlobal('font-style'), fontVariant: keywordWithGlobal('font-variant'), fontWeight: keywordWithGlobal('font-weight'), listStyleType: keywordWithGlobal('list-style-type'), listStylePosition: keywordWithGlobal('list-style-position'), outlineStyle: keywordWithGlobal('*-style'), overflow: keywordWithGlobal('overflow'), position: keywordWithGlobal('position'), right: unitOrKeywordWithGlobal('right'), textAlign: keywordWithGlobal('text-align'), textDecoration: keywordWithGlobal('text-decoration'), textOverflow: keywordWithGlobal('text-overflow'), textShadow: textShadow, top: unitOrKeywordWithGlobal('top'), transform: sameFunctionOrValue, verticalAlign: unitOrKeywordWithGlobal('vertical-align'), visibility: keywordWithGlobal('visibility'), whiteSpace: keywordWithGlobal('white-space'), zIndex: zIndex } }; node_modules/clean-css/lib/optimizer/level-2/merge-adjacent.js000066600000004221150425117220020335 0ustar00var isMergeable = require('./is-mergeable'); var optimizeProperties = require('./properties/optimize'); var sortSelectors = require('../level-1/sort-selectors'); var tidyRules = require('../level-1/tidy-rules'); var OptimizationLevel = require('../../options/optimization-level').OptimizationLevel; var serializeBody = require('../../writer/one-time').body; var serializeRules = require('../../writer/one-time').rules; var Token = require('../../tokenizer/token'); function mergeAdjacent(tokens, context) { var lastToken = [null, [], []]; var options = context.options; var adjacentSpace = options.compatibility.selectors.adjacentSpace; var selectorsSortingMethod = options.level[OptimizationLevel.One].selectorsSortingMethod; var mergeablePseudoClasses = options.compatibility.selectors.mergeablePseudoClasses; var mergeablePseudoElements = options.compatibility.selectors.mergeablePseudoElements; var mergeLimit = options.compatibility.selectors.mergeLimit; var multiplePseudoMerging = options.compatibility.selectors.multiplePseudoMerging; for (var i = 0, l = tokens.length; i < l; i++) { var token = tokens[i]; if (token[0] != Token.RULE) { lastToken = [null, [], []]; continue; } if (lastToken[0] == Token.RULE && serializeRules(token[1]) == serializeRules(lastToken[1])) { Array.prototype.push.apply(lastToken[2], token[2]); optimizeProperties(lastToken[2], true, true, context); token[2] = []; } else if (lastToken[0] == Token.RULE && serializeBody(token[2]) == serializeBody(lastToken[2]) && isMergeable(serializeRules(token[1]), mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging) && isMergeable(serializeRules(lastToken[1]), mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging) && lastToken[1].length < mergeLimit) { lastToken[1] = tidyRules(lastToken[1].concat(token[1]), false, adjacentSpace, false, context.warnings); lastToken[1] = lastToken.length > 1 ? sortSelectors(lastToken[1], selectorsSortingMethod) : lastToken[1]; token[2] = []; } else { lastToken = token; } } } module.exports = mergeAdjacent; node_modules/clean-css/lib/optimizer/wrap-for-optimizing.js000066600000011576150425117220020160 0ustar00var Hack = require('./hack'); var Marker = require('../tokenizer/marker'); var Token = require('../tokenizer/token'); var Match = { ASTERISK: '*', BACKSLASH: '\\', BANG: '!', BANG_SUFFIX_PATTERN: /!\w+$/, IMPORTANT_TOKEN: '!important', IMPORTANT_TOKEN_PATTERN: new RegExp('!important$', 'i'), IMPORTANT_WORD: 'important', IMPORTANT_WORD_PATTERN: new RegExp('important$', 'i'), SUFFIX_BANG_PATTERN: /!$/, UNDERSCORE: '_', VARIABLE_REFERENCE_PATTERN: /var\(--.+\)$/ }; function wrapAll(properties, includeVariable, skipProperties) { var wrapped = []; var single; var property; var i; for (i = properties.length - 1; i >= 0; i--) { property = properties[i]; if (property[0] != Token.PROPERTY) { continue; } if (!includeVariable && someVariableReferences(property)) { continue; } if (skipProperties && skipProperties.indexOf(property[1][1]) > -1) { continue; } single = wrapSingle(property); single.all = properties; single.position = i; wrapped.unshift(single); } return wrapped; } function someVariableReferences(property) { var i, l; var value; // skipping `property` and property name tokens for (i = 2, l = property.length; i < l; i++) { value = property[i]; if (value[0] != Token.PROPERTY_VALUE) { continue; } if (isVariableReference(value[1])) { return true; } } return false; } function isVariableReference(value) { return Match.VARIABLE_REFERENCE_PATTERN.test(value); } function isMultiplex(property) { var value; var i, l; for (i = 3, l = property.length; i < l; i++) { value = property[i]; if (value[0] == Token.PROPERTY_VALUE && (value[1] == Marker.COMMA || value[1] == Marker.FORWARD_SLASH)) { return true; } } return false; } function hackFrom(property) { var match = false; var name = property[1][1]; var lastValue = property[property.length - 1]; if (name[0] == Match.UNDERSCORE) { match = [Hack.UNDERSCORE]; } else if (name[0] == Match.ASTERISK) { match = [Hack.ASTERISK]; } else if (lastValue[1][0] == Match.BANG && !lastValue[1].match(Match.IMPORTANT_WORD_PATTERN)) { match = [Hack.BANG]; } else if (lastValue[1].indexOf(Match.BANG) > 0 && !lastValue[1].match(Match.IMPORTANT_WORD_PATTERN) && Match.BANG_SUFFIX_PATTERN.test(lastValue[1])) { match = [Hack.BANG]; } else if (lastValue[1].indexOf(Match.BACKSLASH) > 0 && lastValue[1].indexOf(Match.BACKSLASH) == lastValue[1].length - Match.BACKSLASH.length - 1) { match = [Hack.BACKSLASH, lastValue[1].substring(lastValue[1].indexOf(Match.BACKSLASH) + 1)]; } else if (lastValue[1].indexOf(Match.BACKSLASH) === 0 && lastValue[1].length == 2) { match = [Hack.BACKSLASH, lastValue[1].substring(1)]; } return match; } function isImportant(property) { if (property.length < 3) return false; var lastValue = property[property.length - 1]; if (Match.IMPORTANT_TOKEN_PATTERN.test(lastValue[1])) { return true; } else if (Match.IMPORTANT_WORD_PATTERN.test(lastValue[1]) && Match.SUFFIX_BANG_PATTERN.test(property[property.length - 2][1])) { return true; } return false; } function stripImportant(property) { var lastValue = property[property.length - 1]; var oneButLastValue = property[property.length - 2]; if (Match.IMPORTANT_TOKEN_PATTERN.test(lastValue[1])) { lastValue[1] = lastValue[1].replace(Match.IMPORTANT_TOKEN_PATTERN, ''); } else { lastValue[1] = lastValue[1].replace(Match.IMPORTANT_WORD_PATTERN, ''); oneButLastValue[1] = oneButLastValue[1].replace(Match.SUFFIX_BANG_PATTERN, ''); } if (lastValue[1].length === 0) { property.pop(); } if (oneButLastValue[1].length === 0) { property.pop(); } } function stripPrefixHack(property) { property[1][1] = property[1][1].substring(1); } function stripSuffixHack(property, hackFrom) { var lastValue = property[property.length - 1]; lastValue[1] = lastValue[1] .substring(0, lastValue[1].indexOf(hackFrom[0] == Hack.BACKSLASH ? Match.BACKSLASH : Match.BANG)) .trim(); if (lastValue[1].length === 0) { property.pop(); } } function wrapSingle(property) { var importantProperty = isImportant(property); if (importantProperty) { stripImportant(property); } var whichHack = hackFrom(property); if (whichHack[0] == Hack.ASTERISK || whichHack[0] == Hack.UNDERSCORE) { stripPrefixHack(property); } else if (whichHack[0] == Hack.BACKSLASH || whichHack[0] == Hack.BANG) { stripSuffixHack(property, whichHack); } return { block: property[2] && property[2][0] == Token.PROPERTY_BLOCK, components: [], dirty: false, hack: whichHack, important: importantProperty, name: property[1][1], multiplex: property.length > 3 ? isMultiplex(property) : false, position: 0, shorthand: false, unused: false, value: property.slice(2) }; } module.exports = { all: wrapAll, single: wrapSingle }; node_modules/clean-css/lib/optimizer/level-1/shorten-rgb.js000066600000000702150425117220017720 0ustar00function shortenRgb(red, green, blue) { var normalizedRed = Math.max(0, Math.min(parseInt(red), 255)); var normalizedGreen = Math.max(0, Math.min(parseInt(green), 255)); var normalizedBlue = Math.max(0, Math.min(parseInt(blue), 255)); // Credit: Asen http://jsbin.com/UPUmaGOc/2/edit?js,console return '#' + ('00000' + (normalizedRed << 16 | normalizedGreen << 8 | normalizedBlue).toString(16)).slice(-6); } module.exports = shortenRgb; node_modules/clean-css/lib/optimizer/level-1/optimize.js000066600000051122150425117220017330 0ustar00var shortenHex = require('./shorten-hex'); var shortenHsl = require('./shorten-hsl'); var shortenRgb = require('./shorten-rgb'); var sortSelectors = require('./sort-selectors'); var tidyRules = require('./tidy-rules'); var tidyBlock = require('./tidy-block'); var tidyAtRule = require('./tidy-at-rule'); var Hack = require('../hack'); var removeUnused = require('../remove-unused'); var restoreFromOptimizing = require('../restore-from-optimizing'); var wrapForOptimizing = require('../wrap-for-optimizing').all; var OptimizationLevel = require('../../options/optimization-level').OptimizationLevel; var Token = require('../../tokenizer/token'); var Marker = require('../../tokenizer/marker'); var formatPosition = require('../../utils/format-position'); var split = require('../../utils/split'); var serializeRules = require('../../writer/one-time').rules; var IgnoreProperty = 'ignore-property'; var CHARSET_TOKEN = '@charset'; var CHARSET_REGEXP = new RegExp('^' + CHARSET_TOKEN, 'i'); var DEFAULT_ROUNDING_PRECISION = require('../../options/rounding-precision').DEFAULT; var WHOLE_PIXEL_VALUE = /(?:^|\s|\()(-?\d+)px/; var TIME_VALUE = /^(\-?[\d\.]+)(m?s)$/; var HEX_VALUE_PATTERN = /[0-9a-f]/i; var PROPERTY_NAME_PATTERN = /^(?:\-chrome\-|\-[\w\-]+\w|\w[\w\-]+\w|\-\-\S+)$/; var IMPORT_PREFIX_PATTERN = /^@import/i; var QUOTED_PATTERN = /^('.*'|".*")$/; var QUOTED_BUT_SAFE_PATTERN = /^['"][a-zA-Z][a-zA-Z\d\-_]+['"]$/; var URL_PREFIX_PATTERN = /^url\(/i; var LOCAL_PREFIX_PATTERN = /^local\(/i; var VARIABLE_NAME_PATTERN = /^--\S+$/; function isLocal(value){ return LOCAL_PREFIX_PATTERN.test(value); } function isNegative(value) { return value && value[1][0] == '-' && parseFloat(value[1]) < 0; } function isQuoted(value) { return QUOTED_PATTERN.test(value); } function isUrl(value) { return URL_PREFIX_PATTERN.test(value); } function normalizeUrl(value) { return value .replace(URL_PREFIX_PATTERN, 'url(') .replace(/\\?\n|\\?\r\n/g, ''); } function optimizeBackground(property) { var values = property.value; if (values.length == 1 && values[0][1] == 'none') { values[0][1] = '0 0'; } if (values.length == 1 && values[0][1] == 'transparent') { values[0][1] = '0 0'; } } function optimizeBorderRadius(property) { var values = property.value; var spliceAt; if (values.length == 3 && values[1][1] == '/' && values[0][1] == values[2][1]) { spliceAt = 1; } else if (values.length == 5 && values[2][1] == '/' && values[0][1] == values[3][1] && values[1][1] == values[4][1]) { spliceAt = 2; } else if (values.length == 7 && values[3][1] == '/' && values[0][1] == values[4][1] && values[1][1] == values[5][1] && values[2][1] == values[6][1]) { spliceAt = 3; } else if (values.length == 9 && values[4][1] == '/' && values[0][1] == values[5][1] && values[1][1] == values[6][1] && values[2][1] == values[7][1] && values[3][1] == values[8][1]) { spliceAt = 4; } if (spliceAt) { property.value.splice(spliceAt); property.dirty = true; } } /** * @param {string} name * @param {string} value * @param {Object} compatibility * @return {string} */ function optimizeColors(name, value, compatibility) { if (!value.match(/#|rgb|hsl/gi)) { return shortenHex(value); } value = value .replace(/(rgb|hsl)a?\((\-?\d+),(\-?\d+\%?),(\-?\d+\%?),(0*[1-9]+[0-9]*(\.?\d*)?)\)/gi, function (match, colorFn, p1, p2, p3, alpha) { return (parseInt(alpha, 10) >= 1 ? colorFn + '(' + [p1,p2,p3].join(',') + ')' : match); }) .replace(/rgb\((\-?\d+),(\-?\d+),(\-?\d+)\)/gi, function (match, red, green, blue) { return shortenRgb(red, green, blue); }) .replace(/hsl\((-?\d+),(-?\d+)%?,(-?\d+)%?\)/gi, function (match, hue, saturation, lightness) { return shortenHsl(hue, saturation, lightness); }) .replace(/(^|[^='"])#([0-9a-f]{6})/gi, function (match, prefix, color, at, inputValue) { var suffix = inputValue[at + match.length]; if (suffix && HEX_VALUE_PATTERN.test(suffix)) { return match; } else if (color[0] == color[1] && color[2] == color[3] && color[4] == color[5]) { return (prefix + '#' + color[0] + color[2] + color[4]).toLowerCase(); } else { return (prefix + '#' + color).toLowerCase(); } }) .replace(/(^|[^='"])#([0-9a-f]{3})/gi, function (match, prefix, color) { return prefix + '#' + color.toLowerCase(); }) .replace(/(rgb|rgba|hsl|hsla)\(([^\)]+)\)/gi, function (match, colorFunction, colorDef) { var tokens = colorDef.split(','); var colorFnLowercase = colorFunction && colorFunction.toLowerCase(); var applies = (colorFnLowercase == 'hsl' && tokens.length == 3) || (colorFnLowercase == 'hsla' && tokens.length == 4) || (colorFnLowercase == 'rgb' && tokens.length === 3 && colorDef.indexOf('%') > 0) || (colorFnLowercase == 'rgba' && tokens.length == 4 && colorDef.indexOf('%') > 0); if (!applies) { return match; } if (tokens[1].indexOf('%') == -1) { tokens[1] += '%'; } if (tokens[2].indexOf('%') == -1) { tokens[2] += '%'; } return colorFunction + '(' + tokens.join(',') + ')'; }); if (compatibility.colors.opacity && name.indexOf('background') == -1) { value = value.replace(/(?:rgba|hsla)\(0,0%?,0%?,0\)/g, function (match) { if (split(value, ',').pop().indexOf('gradient(') > -1) { return match; } return 'transparent'; }); } return shortenHex(value); } function optimizeFilter(property) { if (property.value.length == 1) { property.value[0][1] = property.value[0][1].replace(/progid:DXImageTransform\.Microsoft\.(Alpha|Chroma)(\W)/, function (match, filter, suffix) { return filter.toLowerCase() + suffix; }); } property.value[0][1] = property.value[0][1] .replace(/,(\S)/g, ', $1') .replace(/ ?= ?/g, '='); } function optimizeFontWeight(property, atIndex) { var value = property.value[atIndex][1]; if (value == 'normal') { value = '400'; } else if (value == 'bold') { value = '700'; } property.value[atIndex][1] = value; } function optimizeMultipleZeros(property) { var values = property.value; var spliceAt; if (values.length == 4 && values[0][1] === '0' && values[1][1] === '0' && values[2][1] === '0' && values[3][1] === '0') { if (property.name.indexOf('box-shadow') > -1) { spliceAt = 2; } else { spliceAt = 1; } } if (spliceAt) { property.value.splice(spliceAt); property.dirty = true; } } function optimizeOutline(property) { var values = property.value; if (values.length == 1 && values[0][1] == 'none') { values[0][1] = '0'; } } function optimizePixelLengths(_, value, compatibility) { if (!WHOLE_PIXEL_VALUE.test(value)) { return value; } return value.replace(WHOLE_PIXEL_VALUE, function (match, val) { var newValue; var intVal = parseInt(val); if (intVal === 0) { return match; } if (compatibility.properties.shorterLengthUnits && compatibility.units.pt && intVal * 3 % 4 === 0) { newValue = intVal * 3 / 4 + 'pt'; } if (compatibility.properties.shorterLengthUnits && compatibility.units.pc && intVal % 16 === 0) { newValue = intVal / 16 + 'pc'; } if (compatibility.properties.shorterLengthUnits && compatibility.units.in && intVal % 96 === 0) { newValue = intVal / 96 + 'in'; } if (newValue) { newValue = match.substring(0, match.indexOf(val)) + newValue; } return newValue && newValue.length < match.length ? newValue : match; }); } function optimizePrecision(_, value, precisionOptions) { if (!precisionOptions.enabled || value.indexOf('.') === -1) { return value; } return value .replace(precisionOptions.decimalPointMatcher, '$1$2$3') .replace(precisionOptions.zeroMatcher, function (match, integerPart, fractionPart, unit) { var multiplier = precisionOptions.units[unit].multiplier; var parsedInteger = parseInt(integerPart); var integer = isNaN(parsedInteger) ? 0 : parsedInteger; var fraction = parseFloat(fractionPart); return Math.round((integer + fraction) * multiplier) / multiplier + unit; }); } function optimizeTimeUnits(_, value) { if (!TIME_VALUE.test(value)) return value; return value.replace(TIME_VALUE, function (match, val, unit) { var newValue; if (unit == 'ms') { newValue = parseInt(val) / 1000 + 's'; } else if (unit == 's') { newValue = parseFloat(val) * 1000 + 'ms'; } return newValue.length < match.length ? newValue : match; }); } function optimizeUnits(name, value, unitsRegexp) { if (/^(?:\-moz\-calc|\-webkit\-calc|calc|rgb|hsl|rgba|hsla)\(/.test(value)) { return value; } if (name == 'flex' || name == '-ms-flex' || name == '-webkit-flex' || name == 'flex-basis' || name == '-webkit-flex-basis') { return value; } if (value.indexOf('%') > 0 && (name == 'height' || name == 'max-height' || name == 'width' || name == 'max-width')) { return value; } return value .replace(unitsRegexp, '$1' + '0' + '$2') .replace(unitsRegexp, '$1' + '0' + '$2'); } function optimizeWhitespace(name, value) { if (name.indexOf('filter') > -1 || value.indexOf(' ') == -1 || value.indexOf('expression') === 0) { return value; } if (value.indexOf(Marker.SINGLE_QUOTE) > -1 || value.indexOf(Marker.DOUBLE_QUOTE) > -1) { return value; } value = value.replace(/\s+/g, ' '); if (value.indexOf('calc') > -1) { value = value.replace(/\) ?\/ ?/g, ')/ '); } return value .replace(/(\(;?)\s+/g, '$1') .replace(/\s+(;?\))/g, '$1') .replace(/, /g, ','); } function optimizeZeroDegUnit(_, value) { if (value.indexOf('0deg') == -1) { return value; } return value.replace(/\(0deg\)/g, '(0)'); } function optimizeZeroUnits(name, value) { if (value.indexOf('0') == -1) { return value; } if (value.indexOf('-') > -1) { value = value .replace(/([^\w\d\-]|^)\-0([^\.]|$)/g, '$10$2') .replace(/([^\w\d\-]|^)\-0([^\.]|$)/g, '$10$2'); } return value .replace(/(^|\s)0+([1-9])/g, '$1$2') .replace(/(^|\D)\.0+(\D|$)/g, '$10$2') .replace(/(^|\D)\.0+(\D|$)/g, '$10$2') .replace(/\.([1-9]*)0+(\D|$)/g, function (match, nonZeroPart, suffix) { return (nonZeroPart.length > 0 ? '.' : '') + nonZeroPart + suffix; }) .replace(/(^|\D)0\.(\d)/g, '$1.$2'); } function removeQuotes(name, value) { if (name == 'content' || name.indexOf('font-variation-settings') > -1 || name.indexOf('font-feature-settings') > -1 || name == 'grid' || name.indexOf('grid-') > -1) { return value; } return QUOTED_BUT_SAFE_PATTERN.test(value) ? value.substring(1, value.length - 1) : value; } function removeUrlQuotes(value) { return /^url\(['"].+['"]\)$/.test(value) && !/^url\(['"].*[\*\s\(\)'"].*['"]\)$/.test(value) && !/^url\(['"]data:[^;]+;charset/.test(value) ? value.replace(/["']/g, '') : value; } function transformValue(propertyName, propertyValue, rule, transformCallback) { var selector = serializeRules(rule); var transformedValue = transformCallback(propertyName, propertyValue, selector); if (transformedValue === undefined) { return propertyValue; } else if (transformedValue === false) { return IgnoreProperty; } else { return transformedValue; } } // function optimizeBody(rule, properties, context) { var options = context.options; var levelOptions = options.level[OptimizationLevel.One]; var property, name, type, value; var valueIsUrl; var propertyToken; var _properties = wrapForOptimizing(properties, true); propertyLoop: for (var i = 0, l = _properties.length; i < l; i++) { property = _properties[i]; name = property.name; if (!PROPERTY_NAME_PATTERN.test(name)) { propertyToken = property.all[property.position]; context.warnings.push('Invalid property name \'' + name + '\' at ' + formatPosition(propertyToken[1][2][0]) + '. Ignoring.'); property.unused = true; } if (property.value.length === 0) { propertyToken = property.all[property.position]; context.warnings.push('Empty property \'' + name + '\' at ' + formatPosition(propertyToken[1][2][0]) + '. Ignoring.'); property.unused = true; } if (property.hack && ( (property.hack[0] == Hack.ASTERISK || property.hack[0] == Hack.UNDERSCORE) && !options.compatibility.properties.iePrefixHack || property.hack[0] == Hack.BACKSLASH && !options.compatibility.properties.ieSuffixHack || property.hack[0] == Hack.BANG && !options.compatibility.properties.ieBangHack)) { property.unused = true; } if (levelOptions.removeNegativePaddings && name.indexOf('padding') === 0 && (isNegative(property.value[0]) || isNegative(property.value[1]) || isNegative(property.value[2]) || isNegative(property.value[3]))) { property.unused = true; } if (!options.compatibility.properties.ieFilters && isLegacyFilter(property)) { property.unused = true; } if (property.unused) { continue; } if (property.block) { optimizeBody(rule, property.value[0][1], context); continue; } if (VARIABLE_NAME_PATTERN.test(name)) { continue; } for (var j = 0, m = property.value.length; j < m; j++) { type = property.value[j][0]; value = property.value[j][1]; valueIsUrl = isUrl(value); if (type == Token.PROPERTY_BLOCK) { property.unused = true; context.warnings.push('Invalid value token at ' + formatPosition(value[0][1][2][0]) + '. Ignoring.'); break; } if (valueIsUrl && !context.validator.isUrl(value)) { property.unused = true; context.warnings.push('Broken URL \'' + value + '\' at ' + formatPosition(property.value[j][2][0]) + '. Ignoring.'); break; } if (valueIsUrl) { value = levelOptions.normalizeUrls ? normalizeUrl(value) : value; value = !options.compatibility.properties.urlQuotes ? removeUrlQuotes(value) : value; } else if (isQuoted(value) || isLocal(value)) { value = levelOptions.removeQuotes ? removeQuotes(name, value) : value; } else { value = levelOptions.removeWhitespace ? optimizeWhitespace(name, value) : value; value = optimizePrecision(name, value, options.precision); value = optimizePixelLengths(name, value, options.compatibility); value = levelOptions.replaceTimeUnits ? optimizeTimeUnits(name, value) : value; value = levelOptions.replaceZeroUnits ? optimizeZeroUnits(name, value) : value; if (options.compatibility.properties.zeroUnits) { value = optimizeZeroDegUnit(name, value); value = optimizeUnits(name, value, options.unitsRegexp); } if (options.compatibility.properties.colors) { value = optimizeColors(name, value, options.compatibility); } } value = transformValue(name, value, rule, levelOptions.transform); if (value === IgnoreProperty) { property.unused = true; continue propertyLoop; } property.value[j][1] = value; } if (levelOptions.replaceMultipleZeros) { optimizeMultipleZeros(property); } if (name == 'background' && levelOptions.optimizeBackground) { optimizeBackground(property); } else if (name.indexOf('border') === 0 && name.indexOf('radius') > 0 && levelOptions.optimizeBorderRadius) { optimizeBorderRadius(property); } else if (name == 'filter'&& levelOptions.optimizeFilter && options.compatibility.properties.ieFilters) { optimizeFilter(property); } else if (name == 'font-weight' && levelOptions.optimizeFontWeight) { optimizeFontWeight(property, 0); } else if (name == 'outline' && levelOptions.optimizeOutline) { optimizeOutline(property); } } restoreFromOptimizing(_properties); removeUnused(_properties); removeComments(properties, options); } function removeComments(tokens, options) { var token; var i; for (i = 0; i < tokens.length; i++) { token = tokens[i]; if (token[0] != Token.COMMENT) { continue; } optimizeComment(token, options); if (token[1].length === 0) { tokens.splice(i, 1); i--; } } } function optimizeComment(token, options) { if (token[1][2] == Marker.EXCLAMATION && (options.level[OptimizationLevel.One].specialComments == 'all' || options.commentsKept < options.level[OptimizationLevel.One].specialComments)) { options.commentsKept++; return; } token[1] = []; } function cleanupCharsets(tokens) { var hasCharset = false; for (var i = 0, l = tokens.length; i < l; i++) { var token = tokens[i]; if (token[0] != Token.AT_RULE) continue; if (!CHARSET_REGEXP.test(token[1])) continue; if (hasCharset || token[1].indexOf(CHARSET_TOKEN) == -1) { tokens.splice(i, 1); i--; l--; } else { hasCharset = true; tokens.splice(i, 1); tokens.unshift([Token.AT_RULE, token[1].replace(CHARSET_REGEXP, CHARSET_TOKEN)]); } } } function buildUnitRegexp(options) { var units = ['px', 'em', 'ex', 'cm', 'mm', 'in', 'pt', 'pc', '%']; var otherUnits = ['ch', 'rem', 'vh', 'vm', 'vmax', 'vmin', 'vw']; otherUnits.forEach(function (unit) { if (options.compatibility.units[unit]) { units.push(unit); } }); return new RegExp('(^|\\s|\\(|,)0(?:' + units.join('|') + ')(\\W|$)', 'g'); } function buildPrecisionOptions(roundingPrecision) { var precisionOptions = { matcher: null, units: {}, }; var optimizable = []; var unit; var value; for (unit in roundingPrecision) { value = roundingPrecision[unit]; if (value != DEFAULT_ROUNDING_PRECISION) { precisionOptions.units[unit] = {}; precisionOptions.units[unit].value = value; precisionOptions.units[unit].multiplier = Math.pow(10, value); optimizable.push(unit); } } if (optimizable.length > 0) { precisionOptions.enabled = true; precisionOptions.decimalPointMatcher = new RegExp('(\\d)\\.($|' + optimizable.join('|') + ')($|\\W)', 'g'); precisionOptions.zeroMatcher = new RegExp('(\\d*)(\\.\\d+)(' + optimizable.join('|') + ')', 'g'); } return precisionOptions; } function isImport(token) { return IMPORT_PREFIX_PATTERN.test(token[1]); } function isLegacyFilter(property) { var value; if (property.name == 'filter' || property.name == '-ms-filter') { value = property.value[0][1]; return value.indexOf('progid') > -1 || value.indexOf('alpha') === 0 || value.indexOf('chroma') === 0; } else { return false; } } function level1Optimize(tokens, context) { var options = context.options; var levelOptions = options.level[OptimizationLevel.One]; var ie7Hack = options.compatibility.selectors.ie7Hack; var adjacentSpace = options.compatibility.selectors.adjacentSpace; var spaceAfterClosingBrace = options.compatibility.properties.spaceAfterClosingBrace; var format = options.format; var mayHaveCharset = false; var afterRules = false; options.unitsRegexp = options.unitsRegexp || buildUnitRegexp(options); options.precision = options.precision || buildPrecisionOptions(levelOptions.roundingPrecision); options.commentsKept = options.commentsKept || 0; for (var i = 0, l = tokens.length; i < l; i++) { var token = tokens[i]; switch (token[0]) { case Token.AT_RULE: token[1] = isImport(token) && afterRules ? '' : token[1]; token[1] = levelOptions.tidyAtRules ? tidyAtRule(token[1]) : token[1]; mayHaveCharset = true; break; case Token.AT_RULE_BLOCK: optimizeBody(token[1], token[2], context); afterRules = true; break; case Token.NESTED_BLOCK: token[1] = levelOptions.tidyBlockScopes ? tidyBlock(token[1], spaceAfterClosingBrace) : token[1]; level1Optimize(token[2], context); afterRules = true; break; case Token.COMMENT: optimizeComment(token, options); break; case Token.RULE: token[1] = levelOptions.tidySelectors ? tidyRules(token[1], !ie7Hack, adjacentSpace, format, context.warnings) : token[1]; token[1] = token[1].length > 1 ? sortSelectors(token[1], levelOptions.selectorsSortingMethod) : token[1]; optimizeBody(token[1], token[2], context); afterRules = true; break; } if (token[0] == Token.COMMENT && token[1].length === 0 || levelOptions.removeEmpty && (token[1].length === 0 || (token[2] && token[2].length === 0))) { tokens.splice(i, 1); i--; l--; } } if (levelOptions.cleanupCharsets && mayHaveCharset) { cleanupCharsets(tokens); } return tokens; } module.exports = level1Optimize; node_modules/clean-css/lib/optimizer/level-1/tidy-rules.js000066600000015474150425117220017603 0ustar00var Spaces = require('../../options/format').Spaces; var Marker = require('../../tokenizer/marker'); var formatPosition = require('../../utils/format-position'); var CASE_ATTRIBUTE_PATTERN = /[\s"'][iI]\s*\]/; var CASE_RESTORE_PATTERN = /([\d\w])([iI])\]/g; var DOUBLE_QUOTE_CASE_PATTERN = /="([a-zA-Z][a-zA-Z\d\-_]+)"([iI])/g; var DOUBLE_QUOTE_PATTERN = /="([a-zA-Z][a-zA-Z\d\-_]+)"(\s|\])/g; var HTML_COMMENT_PATTERN = /^(?:(?:)\s*)+/; var SINGLE_QUOTE_CASE_PATTERN = /='([a-zA-Z][a-zA-Z\d\-_]+)'([iI])/g; var SINGLE_QUOTE_PATTERN = /='([a-zA-Z][a-zA-Z\d\-_]+)'(\s|\])/g; var RELATION_PATTERN = /[>\+~]/; var WHITESPACE_PATTERN = /\s/; var ASTERISK_PLUS_HTML_HACK = '*+html '; var ASTERISK_FIRST_CHILD_PLUS_HTML_HACK = '*:first-child+html '; var LESS_THAN = '<'; function hasInvalidCharacters(value) { var isEscaped; var isInvalid = false; var character; var isQuote = false; var i, l; for (i = 0, l = value.length; i < l; i++) { character = value[i]; if (isEscaped) { // continue as always } else if (character == Marker.SINGLE_QUOTE || character == Marker.DOUBLE_QUOTE) { isQuote = !isQuote; } else if (!isQuote && (character == Marker.CLOSE_CURLY_BRACKET || character == Marker.EXCLAMATION || character == LESS_THAN || character == Marker.SEMICOLON)) { isInvalid = true; break; } else if (!isQuote && i === 0 && RELATION_PATTERN.test(character)) { isInvalid = true; break; } isEscaped = character == Marker.BACK_SLASH; } return isInvalid; } function removeWhitespace(value, format) { var stripped = []; var character; var isNewLineNix; var isNewLineWin; var isEscaped; var wasEscaped; var isQuoted; var isSingleQuoted; var isDoubleQuoted; var isAttribute; var isRelation; var isWhitespace; var roundBracketLevel = 0; var wasRelation = false; var wasWhitespace = false; var withCaseAttribute = CASE_ATTRIBUTE_PATTERN.test(value); var spaceAroundRelation = format && format.spaces[Spaces.AroundSelectorRelation]; var i, l; for (i = 0, l = value.length; i < l; i++) { character = value[i]; isNewLineNix = character == Marker.NEW_LINE_NIX; isNewLineWin = character == Marker.NEW_LINE_NIX && value[i - 1] == Marker.CARRIAGE_RETURN; isQuoted = isSingleQuoted || isDoubleQuoted; isRelation = !isAttribute && !isEscaped && roundBracketLevel === 0 && RELATION_PATTERN.test(character); isWhitespace = WHITESPACE_PATTERN.test(character); if (wasEscaped && isQuoted && isNewLineWin) { // swallow escaped new windows lines in comments stripped.pop(); stripped.pop(); } else if (isEscaped && isQuoted && isNewLineNix) { // swallow escaped new *nix lines in comments stripped.pop(); } else if (isEscaped) { stripped.push(character); } else if (character == Marker.OPEN_SQUARE_BRACKET && !isQuoted) { stripped.push(character); isAttribute = true; } else if (character == Marker.CLOSE_SQUARE_BRACKET && !isQuoted) { stripped.push(character); isAttribute = false; } else if (character == Marker.OPEN_ROUND_BRACKET && !isQuoted) { stripped.push(character); roundBracketLevel++; } else if (character == Marker.CLOSE_ROUND_BRACKET && !isQuoted) { stripped.push(character); roundBracketLevel--; } else if (character == Marker.SINGLE_QUOTE && !isQuoted) { stripped.push(character); isSingleQuoted = true; } else if (character == Marker.DOUBLE_QUOTE && !isQuoted) { stripped.push(character); isDoubleQuoted = true; } else if (character == Marker.SINGLE_QUOTE && isQuoted) { stripped.push(character); isSingleQuoted = false; } else if (character == Marker.DOUBLE_QUOTE && isQuoted) { stripped.push(character); isDoubleQuoted = false; } else if (isWhitespace && wasRelation && !spaceAroundRelation) { continue; } else if (!isWhitespace && wasRelation && spaceAroundRelation) { stripped.push(Marker.SPACE); stripped.push(character); } else if (isWhitespace && (isAttribute || roundBracketLevel > 0) && !isQuoted) { // skip space } else if (isWhitespace && wasWhitespace && !isQuoted) { // skip extra space } else if ((isNewLineWin || isNewLineNix) && (isAttribute || roundBracketLevel > 0) && isQuoted) { // skip newline } else if (isRelation && wasWhitespace && !spaceAroundRelation) { stripped.pop(); stripped.push(character); } else if (isRelation && !wasWhitespace && spaceAroundRelation) { stripped.push(Marker.SPACE); stripped.push(character); } else if (isWhitespace) { stripped.push(Marker.SPACE); } else { stripped.push(character); } wasEscaped = isEscaped; isEscaped = character == Marker.BACK_SLASH; wasRelation = isRelation; wasWhitespace = isWhitespace; } return withCaseAttribute ? stripped.join('').replace(CASE_RESTORE_PATTERN, '$1 $2]') : stripped.join(''); } function removeQuotes(value) { if (value.indexOf('\'') == -1 && value.indexOf('"') == -1) { return value; } return value .replace(SINGLE_QUOTE_CASE_PATTERN, '=$1 $2') .replace(SINGLE_QUOTE_PATTERN, '=$1$2') .replace(DOUBLE_QUOTE_CASE_PATTERN, '=$1 $2') .replace(DOUBLE_QUOTE_PATTERN, '=$1$2'); } function tidyRules(rules, removeUnsupported, adjacentSpace, format, warnings) { var list = []; var repeated = []; function removeHTMLComment(rule, match) { warnings.push('HTML comment \'' + match + '\' at ' + formatPosition(rule[2][0]) + '. Removing.'); return ''; } for (var i = 0, l = rules.length; i < l; i++) { var rule = rules[i]; var reduced = rule[1]; reduced = reduced.replace(HTML_COMMENT_PATTERN, removeHTMLComment.bind(null, rule)); if (hasInvalidCharacters(reduced)) { warnings.push('Invalid selector \'' + rule[1] + '\' at ' + formatPosition(rule[2][0]) + '. Ignoring.'); continue; } reduced = removeWhitespace(reduced, format); reduced = removeQuotes(reduced); if (adjacentSpace && reduced.indexOf('nav') > 0) { reduced = reduced.replace(/\+nav(\S|$)/, '+ nav$1'); } if (removeUnsupported && reduced.indexOf(ASTERISK_PLUS_HTML_HACK) > -1) { continue; } if (removeUnsupported && reduced.indexOf(ASTERISK_FIRST_CHILD_PLUS_HTML_HACK) > -1) { continue; } if (reduced.indexOf('*') > -1) { reduced = reduced .replace(/\*([:#\.\[])/g, '$1') .replace(/^(\:first\-child)?\+html/, '*$1+html'); } if (repeated.indexOf(reduced) > -1) { continue; } rule[1] = reduced; repeated.push(reduced); list.push(rule); } if (list.length == 1 && list[0][1].length === 0) { warnings.push('Empty selector \'' + list[0][1] + '\' at ' + formatPosition(list[0][2][0]) + '. Ignoring.'); list = []; } return list; } module.exports = tidyRules; node_modules/clean-css/lib/optimizer/level-1/shorten-hex.js000066600000010613150425117220017734 0ustar00var COLORS = { aliceblue: '#f0f8ff', antiquewhite: '#faebd7', aqua: '#0ff', aquamarine: '#7fffd4', azure: '#f0ffff', beige: '#f5f5dc', bisque: '#ffe4c4', black: '#000', blanchedalmond: '#ffebcd', blue: '#00f', blueviolet: '#8a2be2', brown: '#a52a2a', burlywood: '#deb887', cadetblue: '#5f9ea0', chartreuse: '#7fff00', chocolate: '#d2691e', coral: '#ff7f50', cornflowerblue: '#6495ed', cornsilk: '#fff8dc', crimson: '#dc143c', cyan: '#0ff', darkblue: '#00008b', darkcyan: '#008b8b', darkgoldenrod: '#b8860b', darkgray: '#a9a9a9', darkgreen: '#006400', darkgrey: '#a9a9a9', darkkhaki: '#bdb76b', darkmagenta: '#8b008b', darkolivegreen: '#556b2f', darkorange: '#ff8c00', darkorchid: '#9932cc', darkred: '#8b0000', darksalmon: '#e9967a', darkseagreen: '#8fbc8f', darkslateblue: '#483d8b', darkslategray: '#2f4f4f', darkslategrey: '#2f4f4f', darkturquoise: '#00ced1', darkviolet: '#9400d3', deeppink: '#ff1493', deepskyblue: '#00bfff', dimgray: '#696969', dimgrey: '#696969', dodgerblue: '#1e90ff', firebrick: '#b22222', floralwhite: '#fffaf0', forestgreen: '#228b22', fuchsia: '#f0f', gainsboro: '#dcdcdc', ghostwhite: '#f8f8ff', gold: '#ffd700', goldenrod: '#daa520', gray: '#808080', green: '#008000', greenyellow: '#adff2f', grey: '#808080', honeydew: '#f0fff0', hotpink: '#ff69b4', indianred: '#cd5c5c', indigo: '#4b0082', ivory: '#fffff0', khaki: '#f0e68c', lavender: '#e6e6fa', lavenderblush: '#fff0f5', lawngreen: '#7cfc00', lemonchiffon: '#fffacd', lightblue: '#add8e6', lightcoral: '#f08080', lightcyan: '#e0ffff', lightgoldenrodyellow: '#fafad2', lightgray: '#d3d3d3', lightgreen: '#90ee90', lightgrey: '#d3d3d3', lightpink: '#ffb6c1', lightsalmon: '#ffa07a', lightseagreen: '#20b2aa', lightskyblue: '#87cefa', lightslategray: '#778899', lightslategrey: '#778899', lightsteelblue: '#b0c4de', lightyellow: '#ffffe0', lime: '#0f0', limegreen: '#32cd32', linen: '#faf0e6', magenta: '#ff00ff', maroon: '#800000', mediumaquamarine: '#66cdaa', mediumblue: '#0000cd', mediumorchid: '#ba55d3', mediumpurple: '#9370db', mediumseagreen: '#3cb371', mediumslateblue: '#7b68ee', mediumspringgreen: '#00fa9a', mediumturquoise: '#48d1cc', mediumvioletred: '#c71585', midnightblue: '#191970', mintcream: '#f5fffa', mistyrose: '#ffe4e1', moccasin: '#ffe4b5', navajowhite: '#ffdead', navy: '#000080', oldlace: '#fdf5e6', olive: '#808000', olivedrab: '#6b8e23', orange: '#ffa500', orangered: '#ff4500', orchid: '#da70d6', palegoldenrod: '#eee8aa', palegreen: '#98fb98', paleturquoise: '#afeeee', palevioletred: '#db7093', papayawhip: '#ffefd5', peachpuff: '#ffdab9', peru: '#cd853f', pink: '#ffc0cb', plum: '#dda0dd', powderblue: '#b0e0e6', purple: '#800080', rebeccapurple: '#663399', red: '#f00', rosybrown: '#bc8f8f', royalblue: '#4169e1', saddlebrown: '#8b4513', salmon: '#fa8072', sandybrown: '#f4a460', seagreen: '#2e8b57', seashell: '#fff5ee', sienna: '#a0522d', silver: '#c0c0c0', skyblue: '#87ceeb', slateblue: '#6a5acd', slategray: '#708090', slategrey: '#708090', snow: '#fffafa', springgreen: '#00ff7f', steelblue: '#4682b4', tan: '#d2b48c', teal: '#008080', thistle: '#d8bfd8', tomato: '#ff6347', turquoise: '#40e0d0', violet: '#ee82ee', wheat: '#f5deb3', white: '#fff', whitesmoke: '#f5f5f5', yellow: '#ff0', yellowgreen: '#9acd32' }; var toHex = {}; var toName = {}; for (var name in COLORS) { var hex = COLORS[name]; if (name.length < hex.length) { toName[hex] = name; } else { toHex[name] = hex; } } var toHexPattern = new RegExp('(^| |,|\\))(' + Object.keys(toHex).join('|') + ')( |,|\\)|$)', 'ig'); var toNamePattern = new RegExp('(' + Object.keys(toName).join('|') + ')([^a-f0-9]|$)', 'ig'); function hexConverter(match, prefix, colorValue, suffix) { return prefix + toHex[colorValue.toLowerCase()] + suffix; } function nameConverter(match, colorValue, suffix) { return toName[colorValue.toLowerCase()] + suffix; } function shortenHex(value) { var hasHex = value.indexOf('#') > -1; var shortened = value.replace(toHexPattern, hexConverter); if (shortened != value) { shortened = shortened.replace(toHexPattern, hexConverter); } return hasHex ? shortened.replace(toNamePattern, nameConverter) : shortened; } module.exports = shortenHex; node_modules/clean-css/lib/optimizer/level-1/tidy-at-rule.js000066600000000261150425117220020006 0ustar00function tidyAtRule(value) { return value .replace(/\s+/g, ' ') .replace(/url\(\s+/g, 'url(') .replace(/\s+\)/g, ')') .trim(); } module.exports = tidyAtRule; node_modules/clean-css/lib/optimizer/level-1/tidy-block.js000066600000001263150425117220017532 0ustar00var SUPPORTED_COMPACT_BLOCK_MATCHER = /^@media\W/; function tidyBlock(values, spaceAfterClosingBrace) { var withoutSpaceAfterClosingBrace; var i; for (i = values.length - 1; i >= 0; i--) { withoutSpaceAfterClosingBrace = !spaceAfterClosingBrace && SUPPORTED_COMPACT_BLOCK_MATCHER.test(values[i][1]); values[i][1] = values[i][1] .replace(/\n|\r\n/g, ' ') .replace(/\s+/g, ' ') .replace(/(,|:|\() /g, '$1') .replace(/ \)/g, ')') .replace(/'([a-zA-Z][a-zA-Z\d\-_]+)'/, '$1') .replace(/"([a-zA-Z][a-zA-Z\d\-_]+)"/, '$1') .replace(withoutSpaceAfterClosingBrace ? /\) /g : null, ')'); } return values; } module.exports = tidyBlock; node_modules/clean-css/lib/optimizer/level-1/sort-selectors.js000066600000001021150425117220020451 0ustar00var naturalCompare = require('../../utils/natural-compare'); function naturalSorter(scope1, scope2) { return naturalCompare(scope1[1], scope2[1]); } function standardSorter(scope1, scope2) { return scope1[1] > scope2[1] ? 1 : -1; } function sortSelectors(selectors, method) { switch (method) { case 'natural': return selectors.sort(naturalSorter); case 'standard': return selectors.sort(standardSorter); case 'none': case false: return selectors; } } module.exports = sortSelectors; node_modules/clean-css/lib/optimizer/level-1/shorten-hsl.js000066600000002600150425117220017733 0ustar00// HSL to RGB converter. Both methods adapted from: // http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript function hslToRgb(h, s, l) { var r, g, b; // normalize hue orientation b/w 0 and 360 degrees h = h % 360; if (h < 0) h += 360; h = ~~h / 360; if (s < 0) s = 0; else if (s > 100) s = 100; s = ~~s / 100; if (l < 0) l = 0; else if (l > 100) l = 100; l = ~~l / 100; if (s === 0) { r = g = b = l; // achromatic } else { var q = l < 0.5 ? l * (1 + s) : l + s - l * s; var p = 2 * l - q; r = hueToRgb(p, q, h + 1/3); g = hueToRgb(p, q, h); b = hueToRgb(p, q, h - 1/3); } return [~~(r * 255), ~~(g * 255), ~~(b * 255)]; } function hueToRgb(p, q, t) { if (t < 0) t += 1; if (t > 1) t -= 1; if (t < 1/6) return p + (q - p) * 6 * t; if (t < 1/2) return q; if (t < 2/3) return p + (q - p) * (2/3 - t) * 6; return p; } function shortenHsl(hue, saturation, lightness) { var asRgb = hslToRgb(hue, saturation, lightness); var redAsHex = asRgb[0].toString(16); var greenAsHex = asRgb[1].toString(16); var blueAsHex = asRgb[2].toString(16); return '#' + ((redAsHex.length == 1 ? '0' : '') + redAsHex) + ((greenAsHex.length == 1 ? '0' : '') + greenAsHex) + ((blueAsHex.length == 1 ? '0' : '') + blueAsHex); } module.exports = shortenHsl; node_modules/clean-css/lib/optimizer/remove-unused.js000066600000000364150425117220017023 0ustar00function removeUnused(properties) { for (var i = properties.length - 1; i >= 0; i--) { var property = properties[i]; if (property.unused) { property.all.splice(property.position, 1); } } } module.exports = removeUnused; node_modules/clean-css/lib/reader/input-source-map-tracker.js000066600000002547150425117220020313 0ustar00var SourceMapConsumer = require('source-map').SourceMapConsumer; function inputSourceMapTracker() { var maps = {}; return { all: all.bind(null, maps), isTracking: isTracking.bind(null, maps), originalPositionFor: originalPositionFor.bind(null, maps), track: track.bind(null, maps) }; } function all(maps) { return maps; } function isTracking(maps, source) { return source in maps; } function originalPositionFor(maps, metadata, range, selectorFallbacks) { var line = metadata[0]; var column = metadata[1]; var source = metadata[2]; var position = { line: line, column: column + range }; var originalPosition; while (!originalPosition && position.column > column) { position.column--; originalPosition = maps[source].originalPositionFor(position); } if (!originalPosition || originalPosition.column < 0) { return metadata; } if (originalPosition.line === null && line > 1 && selectorFallbacks > 0) { return originalPositionFor(maps, [line - 1, column, source], range, selectorFallbacks - 1); } return originalPosition.line !== null ? toMetadata(originalPosition) : metadata; } function toMetadata(asHash) { return [asHash.line, asHash.column, asHash.source]; } function track(maps, source, data) { maps[source] = new SourceMapConsumer(data); } module.exports = inputSourceMapTracker; node_modules/clean-css/lib/reader/normalize-path.js000066600000000306150425117220016373 0ustar00var UNIX_SEPARATOR = '/'; var WINDOWS_SEPARATOR_PATTERN = /\\/g; function normalizePath(path) { return path.replace(WINDOWS_SEPARATOR_PATTERN, UNIX_SEPARATOR); } module.exports = normalizePath; node_modules/clean-css/lib/reader/restore-import.js000066600000000204150425117220016431 0ustar00function restoreImport(uri, mediaQuery) { return ('@import ' + uri + ' ' + mediaQuery).trim(); } module.exports = restoreImport; node_modules/clean-css/lib/reader/read-sources.js000066600000031740150425117220016043 0ustar00var fs = require('fs'); var path = require('path'); var applySourceMaps = require('./apply-source-maps'); var extractImportUrlAndMedia = require('./extract-import-url-and-media'); var isAllowedResource = require('./is-allowed-resource'); var loadOriginalSources = require('./load-original-sources'); var normalizePath = require('./normalize-path'); var rebase = require('./rebase'); var rebaseLocalMap = require('./rebase-local-map'); var rebaseRemoteMap = require('./rebase-remote-map'); var restoreImport = require('./restore-import'); var tokenize = require('../tokenizer/tokenize'); var Token = require('../tokenizer/token'); var Marker = require('../tokenizer/marker'); var hasProtocol = require('../utils/has-protocol'); var isImport = require('../utils/is-import'); var isRemoteResource = require('../utils/is-remote-resource'); var UNKNOWN_URI = 'uri:unknown'; function readSources(input, context, callback) { return doReadSources(input, context, function (tokens) { return applySourceMaps(tokens, context, function () { return loadOriginalSources(context, function () { return callback(tokens); }); }); }); } function doReadSources(input, context, callback) { if (typeof input == 'string') { return fromString(input, context, callback); } else if (Buffer.isBuffer(input)) { return fromString(input.toString(), context, callback); } else if (Array.isArray(input)) { return fromArray(input, context, callback); } else if (typeof input == 'object') { return fromHash(input, context, callback); } } function fromString(input, context, callback) { context.source = undefined; context.sourcesContent[undefined] = input; context.stats.originalSize += input.length; return fromStyles(input, context, { inline: context.options.inline }, callback); } function fromArray(input, context, callback) { var inputAsImports = input.reduce(function (accumulator, uriOrHash) { if (typeof uriOrHash === 'string') { return addStringSource(uriOrHash, accumulator); } else { return addHashSource(uriOrHash, context, accumulator); } }, []); return fromStyles(inputAsImports.join(''), context, { inline: ['all'] }, callback); } function fromHash(input, context, callback) { var inputAsImports = addHashSource(input, context, []); return fromStyles(inputAsImports.join(''), context, { inline: ['all'] }, callback); } function addStringSource(input, imports) { imports.push(restoreAsImport(normalizeUri(input))); return imports; } function addHashSource(input, context, imports) { var uri; var normalizedUri; var source; for (uri in input) { source = input[uri]; normalizedUri = normalizeUri(uri); imports.push(restoreAsImport(normalizedUri)); context.sourcesContent[normalizedUri] = source.styles; if (source.sourceMap) { trackSourceMap(source.sourceMap, normalizedUri, context); } } return imports; } function normalizeUri(uri) { var currentPath = path.resolve(''); var absoluteUri; var relativeToCurrentPath; var normalizedUri; if (isRemoteResource(uri)) { return uri; } absoluteUri = path.isAbsolute(uri) ? uri : path.resolve(uri); relativeToCurrentPath = path.relative(currentPath, absoluteUri); normalizedUri = normalizePath(relativeToCurrentPath); return normalizedUri; } function trackSourceMap(sourceMap, uri, context) { var parsedMap = typeof sourceMap == 'string' ? JSON.parse(sourceMap) : sourceMap; var rebasedMap = isRemoteResource(uri) ? rebaseRemoteMap(parsedMap, uri) : rebaseLocalMap(parsedMap, uri || UNKNOWN_URI, context.options.rebaseTo); context.inputSourceMapTracker.track(uri, rebasedMap); } function restoreAsImport(uri) { return restoreImport('url(' + uri + ')', '') + Marker.SEMICOLON; } function fromStyles(styles, context, parentInlinerContext, callback) { var tokens; var rebaseConfig = {}; if (!context.source) { rebaseConfig.fromBase = path.resolve(''); rebaseConfig.toBase = context.options.rebaseTo; } else if (isRemoteResource(context.source)) { rebaseConfig.fromBase = context.source; rebaseConfig.toBase = context.source; } else if (path.isAbsolute(context.source)) { rebaseConfig.fromBase = path.dirname(context.source); rebaseConfig.toBase = context.options.rebaseTo; } else { rebaseConfig.fromBase = path.dirname(path.resolve(context.source)); rebaseConfig.toBase = context.options.rebaseTo; } tokens = tokenize(styles, context); tokens = rebase(tokens, context.options.rebase, context.validator, rebaseConfig); return allowsAnyImports(parentInlinerContext.inline) ? inline(tokens, context, parentInlinerContext, callback) : callback(tokens); } function allowsAnyImports(inline) { return !(inline.length == 1 && inline[0] == 'none'); } function inline(tokens, externalContext, parentInlinerContext, callback) { var inlinerContext = { afterContent: false, callback: callback, errors: externalContext.errors, externalContext: externalContext, fetch: externalContext.options.fetch, inlinedStylesheets: parentInlinerContext.inlinedStylesheets || externalContext.inlinedStylesheets, inline: parentInlinerContext.inline, inlineRequest: externalContext.options.inlineRequest, inlineTimeout: externalContext.options.inlineTimeout, isRemote: parentInlinerContext.isRemote || false, localOnly: externalContext.localOnly, outputTokens: [], rebaseTo: externalContext.options.rebaseTo, sourceTokens: tokens, warnings: externalContext.warnings }; return doInlineImports(inlinerContext); } function doInlineImports(inlinerContext) { var token; var i, l; for (i = 0, l = inlinerContext.sourceTokens.length; i < l; i++) { token = inlinerContext.sourceTokens[i]; if (token[0] == Token.AT_RULE && isImport(token[1])) { inlinerContext.sourceTokens.splice(0, i); return inlineStylesheet(token, inlinerContext); } else if (token[0] == Token.AT_RULE || token[0] == Token.COMMENT) { inlinerContext.outputTokens.push(token); } else { inlinerContext.outputTokens.push(token); inlinerContext.afterContent = true; } } inlinerContext.sourceTokens = []; return inlinerContext.callback(inlinerContext.outputTokens); } function inlineStylesheet(token, inlinerContext) { var uriAndMediaQuery = extractImportUrlAndMedia(token[1]); var uri = uriAndMediaQuery[0]; var mediaQuery = uriAndMediaQuery[1]; var metadata = token[2]; return isRemoteResource(uri) ? inlineRemoteStylesheet(uri, mediaQuery, metadata, inlinerContext) : inlineLocalStylesheet(uri, mediaQuery, metadata, inlinerContext); } function inlineRemoteStylesheet(uri, mediaQuery, metadata, inlinerContext) { var isAllowed = isAllowedResource(uri, true, inlinerContext.inline); var originalUri = uri; var isLoaded = uri in inlinerContext.externalContext.sourcesContent; var isRuntimeResource = !hasProtocol(uri); if (inlinerContext.inlinedStylesheets.indexOf(uri) > -1) { inlinerContext.warnings.push('Ignoring remote @import of "' + uri + '" as it has already been imported.'); inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1); return doInlineImports(inlinerContext); } else if (inlinerContext.localOnly && inlinerContext.afterContent) { inlinerContext.warnings.push('Ignoring remote @import of "' + uri + '" as no callback given and after other content.'); inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1); return doInlineImports(inlinerContext); } else if (isRuntimeResource) { inlinerContext.warnings.push('Skipping remote @import of "' + uri + '" as no protocol given.'); inlinerContext.outputTokens = inlinerContext.outputTokens.concat(inlinerContext.sourceTokens.slice(0, 1)); inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1); return doInlineImports(inlinerContext); } else if (inlinerContext.localOnly && !isLoaded) { inlinerContext.warnings.push('Skipping remote @import of "' + uri + '" as no callback given.'); inlinerContext.outputTokens = inlinerContext.outputTokens.concat(inlinerContext.sourceTokens.slice(0, 1)); inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1); return doInlineImports(inlinerContext); } else if (!isAllowed && inlinerContext.afterContent) { inlinerContext.warnings.push('Ignoring remote @import of "' + uri + '" as resource is not allowed and after other content.'); inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1); return doInlineImports(inlinerContext); } else if (!isAllowed) { inlinerContext.warnings.push('Skipping remote @import of "' + uri + '" as resource is not allowed.'); inlinerContext.outputTokens = inlinerContext.outputTokens.concat(inlinerContext.sourceTokens.slice(0, 1)); inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1); return doInlineImports(inlinerContext); } inlinerContext.inlinedStylesheets.push(uri); function whenLoaded(error, importedStyles) { if (error) { inlinerContext.errors.push('Broken @import declaration of "' + uri + '" - ' + error); return process.nextTick(function () { inlinerContext.outputTokens = inlinerContext.outputTokens.concat(inlinerContext.sourceTokens.slice(0, 1)); inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1); doInlineImports(inlinerContext); }); } inlinerContext.inline = inlinerContext.externalContext.options.inline; inlinerContext.isRemote = true; inlinerContext.externalContext.source = originalUri; inlinerContext.externalContext.sourcesContent[uri] = importedStyles; inlinerContext.externalContext.stats.originalSize += importedStyles.length; return fromStyles(importedStyles, inlinerContext.externalContext, inlinerContext, function (importedTokens) { importedTokens = wrapInMedia(importedTokens, mediaQuery, metadata); inlinerContext.outputTokens = inlinerContext.outputTokens.concat(importedTokens); inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1); return doInlineImports(inlinerContext); }); } return isLoaded ? whenLoaded(null, inlinerContext.externalContext.sourcesContent[uri]) : inlinerContext.fetch(uri, inlinerContext.inlineRequest, inlinerContext.inlineTimeout, whenLoaded); } function inlineLocalStylesheet(uri, mediaQuery, metadata, inlinerContext) { var currentPath = path.resolve(''); var absoluteUri = path.isAbsolute(uri) ? path.resolve(currentPath, uri[0] == '/' ? uri.substring(1) : uri) : path.resolve(inlinerContext.rebaseTo, uri); var relativeToCurrentPath = path.relative(currentPath, absoluteUri); var importedStyles; var isAllowed = isAllowedResource(uri, false, inlinerContext.inline); var normalizedPath = normalizePath(relativeToCurrentPath); var isLoaded = normalizedPath in inlinerContext.externalContext.sourcesContent; if (inlinerContext.inlinedStylesheets.indexOf(absoluteUri) > -1) { inlinerContext.warnings.push('Ignoring local @import of "' + uri + '" as it has already been imported.'); } else if (!isLoaded && (!fs.existsSync(absoluteUri) || !fs.statSync(absoluteUri).isFile())) { inlinerContext.errors.push('Ignoring local @import of "' + uri + '" as resource is missing.'); } else if (!isAllowed && inlinerContext.afterContent) { inlinerContext.warnings.push('Ignoring local @import of "' + uri + '" as resource is not allowed and after other content.'); } else if (inlinerContext.afterContent) { inlinerContext.warnings.push('Ignoring local @import of "' + uri + '" as after other content.'); } else if (!isAllowed) { inlinerContext.warnings.push('Skipping local @import of "' + uri + '" as resource is not allowed.'); inlinerContext.outputTokens = inlinerContext.outputTokens.concat(inlinerContext.sourceTokens.slice(0, 1)); } else { importedStyles = isLoaded ? inlinerContext.externalContext.sourcesContent[normalizedPath] : fs.readFileSync(absoluteUri, 'utf-8'); inlinerContext.inlinedStylesheets.push(absoluteUri); inlinerContext.inline = inlinerContext.externalContext.options.inline; inlinerContext.externalContext.source = normalizedPath; inlinerContext.externalContext.sourcesContent[normalizedPath] = importedStyles; inlinerContext.externalContext.stats.originalSize += importedStyles.length; return fromStyles(importedStyles, inlinerContext.externalContext, inlinerContext, function (importedTokens) { importedTokens = wrapInMedia(importedTokens, mediaQuery, metadata); inlinerContext.outputTokens = inlinerContext.outputTokens.concat(importedTokens); inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1); return doInlineImports(inlinerContext); }); } inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1); return doInlineImports(inlinerContext); } function wrapInMedia(tokens, mediaQuery, metadata) { if (mediaQuery) { return [[Token.NESTED_BLOCK, [[Token.NESTED_BLOCK_SCOPE, '@media ' + mediaQuery, metadata]], tokens]]; } else { return tokens; } } module.exports = readSources; node_modules/clean-css/lib/reader/match-data-uri.js000066600000000255150425117220016244 0ustar00var DATA_URI_PATTERN = /^data:(\S*?)?(;charset=[^;]+)?(;[^,]+?)?,(.+)/; function matchDataUri(uri) { return DATA_URI_PATTERN.exec(uri); } module.exports = matchDataUri; node_modules/clean-css/lib/reader/extract-import-url-and-media.js000066600000001526150425117220021045 0ustar00var split = require('../utils/split'); var BRACE_PREFIX = /^\(/; var BRACE_SUFFIX = /\)$/; var IMPORT_PREFIX_PATTERN = /^@import/i; var QUOTE_PREFIX_PATTERN = /['"]\s*/; var QUOTE_SUFFIX_PATTERN = /\s*['"]/; var URL_PREFIX_PATTERN = /^url\(\s*/i; var URL_SUFFIX_PATTERN = /\s*\)/i; function extractImportUrlAndMedia(atRuleValue) { var uri; var mediaQuery; var stripped; var parts; stripped = atRuleValue .replace(IMPORT_PREFIX_PATTERN, '') .trim() .replace(URL_PREFIX_PATTERN, '(') .replace(URL_SUFFIX_PATTERN, ')') .replace(QUOTE_PREFIX_PATTERN, '') .replace(QUOTE_SUFFIX_PATTERN, ''); parts = split(stripped, ' '); uri = parts[0] .replace(BRACE_PREFIX, '') .replace(BRACE_SUFFIX, ''); mediaQuery = parts.slice(1).join(' '); return [uri, mediaQuery]; } module.exports = extractImportUrlAndMedia; node_modules/clean-css/lib/reader/apply-source-maps.js000066600000017372150425117220017035 0ustar00var fs = require('fs'); var path = require('path'); var isAllowedResource = require('./is-allowed-resource'); var matchDataUri = require('./match-data-uri'); var rebaseLocalMap = require('./rebase-local-map'); var rebaseRemoteMap = require('./rebase-remote-map'); var Token = require('../tokenizer/token'); var hasProtocol = require('../utils/has-protocol'); var isDataUriResource = require('../utils/is-data-uri-resource'); var isRemoteResource = require('../utils/is-remote-resource'); var MAP_MARKER_PATTERN = /^\/\*# sourceMappingURL=(\S+) \*\/$/; function applySourceMaps(tokens, context, callback) { var applyContext = { callback: callback, fetch: context.options.fetch, index: 0, inline: context.options.inline, inlineRequest: context.options.inlineRequest, inlineTimeout: context.options.inlineTimeout, inputSourceMapTracker: context.inputSourceMapTracker, localOnly: context.localOnly, processedTokens: [], rebaseTo: context.options.rebaseTo, sourceTokens: tokens, warnings: context.warnings }; return context.options.sourceMap && tokens.length > 0 ? doApplySourceMaps(applyContext) : callback(tokens); } function doApplySourceMaps(applyContext) { var singleSourceTokens = []; var lastSource = findTokenSource(applyContext.sourceTokens[0]); var source; var token; var l; for (l = applyContext.sourceTokens.length; applyContext.index < l; applyContext.index++) { token = applyContext.sourceTokens[applyContext.index]; source = findTokenSource(token); if (source != lastSource) { singleSourceTokens = []; lastSource = source; } singleSourceTokens.push(token); applyContext.processedTokens.push(token); if (token[0] == Token.COMMENT && MAP_MARKER_PATTERN.test(token[1])) { return fetchAndApplySourceMap(token[1], source, singleSourceTokens, applyContext); } } return applyContext.callback(applyContext.processedTokens); } function findTokenSource(token) { var scope; var metadata; if (token[0] == Token.AT_RULE || token[0] == Token.COMMENT) { metadata = token[2][0]; } else { scope = token[1][0]; metadata = scope[2][0]; } return metadata[2]; } function fetchAndApplySourceMap(sourceMapComment, source, singleSourceTokens, applyContext) { return extractInputSourceMapFrom(sourceMapComment, applyContext, function (inputSourceMap) { if (inputSourceMap) { applyContext.inputSourceMapTracker.track(source, inputSourceMap); applySourceMapRecursively(singleSourceTokens, applyContext.inputSourceMapTracker); } applyContext.index++; return doApplySourceMaps(applyContext); }); } function extractInputSourceMapFrom(sourceMapComment, applyContext, whenSourceMapReady) { var uri = MAP_MARKER_PATTERN.exec(sourceMapComment)[1]; var absoluteUri; var sourceMap; var rebasedMap; if (isDataUriResource(uri)) { sourceMap = extractInputSourceMapFromDataUri(uri); return whenSourceMapReady(sourceMap); } else if (isRemoteResource(uri)) { return loadInputSourceMapFromRemoteUri(uri, applyContext, function (sourceMap) { var parsedMap; if (sourceMap) { parsedMap = JSON.parse(sourceMap); rebasedMap = rebaseRemoteMap(parsedMap, uri); whenSourceMapReady(rebasedMap); } else { whenSourceMapReady(null); } }); } else { // at this point `uri` is already rebased, see lib/reader/rebase.js#rebaseSourceMapComment // it is rebased to be consistent with rebasing other URIs // however here we need to resolve it back to read it from disk absoluteUri = path.resolve(applyContext.rebaseTo, uri); sourceMap = loadInputSourceMapFromLocalUri(absoluteUri, applyContext); if (sourceMap) { rebasedMap = rebaseLocalMap(sourceMap, absoluteUri, applyContext.rebaseTo); return whenSourceMapReady(rebasedMap); } else { return whenSourceMapReady(null); } } } function extractInputSourceMapFromDataUri(uri) { var dataUriMatch = matchDataUri(uri); var charset = dataUriMatch[2] ? dataUriMatch[2].split(/[=;]/)[2] : 'us-ascii'; var encoding = dataUriMatch[3] ? dataUriMatch[3].split(';')[1] : 'utf8'; var data = encoding == 'utf8' ? global.unescape(dataUriMatch[4]) : dataUriMatch[4]; var buffer = new Buffer(data, encoding); buffer.charset = charset; return JSON.parse(buffer.toString()); } function loadInputSourceMapFromRemoteUri(uri, applyContext, whenLoaded) { var isAllowed = isAllowedResource(uri, true, applyContext.inline); var isRuntimeResource = !hasProtocol(uri); if (applyContext.localOnly) { applyContext.warnings.push('Cannot fetch remote resource from "' + uri + '" as no callback given.'); return whenLoaded(null); } else if (isRuntimeResource) { applyContext.warnings.push('Cannot fetch "' + uri + '" as no protocol given.'); return whenLoaded(null); } else if (!isAllowed) { applyContext.warnings.push('Cannot fetch "' + uri + '" as resource is not allowed.'); return whenLoaded(null); } applyContext.fetch(uri, applyContext.inlineRequest, applyContext.inlineTimeout, function (error, body) { if (error) { applyContext.warnings.push('Missing source map at "' + uri + '" - ' + error); return whenLoaded(null); } whenLoaded(body); }); } function loadInputSourceMapFromLocalUri(uri, applyContext) { var isAllowed = isAllowedResource(uri, false, applyContext.inline); var sourceMap; if (!fs.existsSync(uri) || !fs.statSync(uri).isFile()) { applyContext.warnings.push('Ignoring local source map at "' + uri + '" as resource is missing.'); return null; } else if (!isAllowed) { applyContext.warnings.push('Cannot fetch "' + uri + '" as resource is not allowed.'); return null; } sourceMap = fs.readFileSync(uri, 'utf-8'); return JSON.parse(sourceMap); } function applySourceMapRecursively(tokens, inputSourceMapTracker) { var token; var i, l; for (i = 0, l = tokens.length; i < l; i++) { token = tokens[i]; switch (token[0]) { case Token.AT_RULE: applySourceMapTo(token, inputSourceMapTracker); break; case Token.AT_RULE_BLOCK: applySourceMapRecursively(token[1], inputSourceMapTracker); applySourceMapRecursively(token[2], inputSourceMapTracker); break; case Token.AT_RULE_BLOCK_SCOPE: applySourceMapTo(token, inputSourceMapTracker); break; case Token.NESTED_BLOCK: applySourceMapRecursively(token[1], inputSourceMapTracker); applySourceMapRecursively(token[2], inputSourceMapTracker); break; case Token.NESTED_BLOCK_SCOPE: applySourceMapTo(token, inputSourceMapTracker); break; case Token.COMMENT: applySourceMapTo(token, inputSourceMapTracker); break; case Token.PROPERTY: applySourceMapRecursively(token, inputSourceMapTracker); break; case Token.PROPERTY_BLOCK: applySourceMapRecursively(token[1], inputSourceMapTracker); break; case Token.PROPERTY_NAME: applySourceMapTo(token, inputSourceMapTracker); break; case Token.PROPERTY_VALUE: applySourceMapTo(token, inputSourceMapTracker); break; case Token.RULE: applySourceMapRecursively(token[1], inputSourceMapTracker); applySourceMapRecursively(token[2], inputSourceMapTracker); break; case Token.RULE_SCOPE: applySourceMapTo(token, inputSourceMapTracker); } } return tokens; } function applySourceMapTo(token, inputSourceMapTracker) { var value = token[1]; var metadata = token[2]; var newMetadata = []; var i, l; for (i = 0, l = metadata.length; i < l; i++) { newMetadata.push(inputSourceMapTracker.originalPositionFor(metadata[i], value.length)); } token[2] = newMetadata; } module.exports = applySourceMaps; node_modules/clean-css/lib/reader/is-allowed-resource.js000066600000004023150425117220017326 0ustar00var path = require('path'); var url = require('url'); var isRemoteResource = require('../utils/is-remote-resource'); var hasProtocol = require('../utils/has-protocol'); var HTTP_PROTOCOL = 'http:'; function isAllowedResource(uri, isRemote, rules) { var match; var absoluteUri; var allowed = isRemote ? false : true; var rule; var isNegated; var normalizedRule; var i; if (rules.length === 0) { return false; } if (isRemote && !hasProtocol(uri)) { uri = HTTP_PROTOCOL + uri; } match = isRemote ? url.parse(uri).host : uri; absoluteUri = isRemote ? uri : path.resolve(uri); for (i = 0; i < rules.length; i++) { rule = rules[i]; isNegated = rule[0] == '!'; normalizedRule = rule.substring(1); if (isNegated && isRemote && isRemoteRule(normalizedRule)) { allowed = allowed && !isAllowedResource(uri, true, [normalizedRule]); } else if (isNegated && !isRemote && !isRemoteRule(normalizedRule)) { allowed = allowed && !isAllowedResource(uri, false, [normalizedRule]); } else if (isNegated) { allowed = allowed && true; } else if (rule == 'all') { allowed = true; } else if (isRemote && rule == 'local') { allowed = allowed || false; } else if (isRemote && rule == 'remote') { allowed = true; } else if (!isRemote && rule == 'remote') { allowed = false; } else if (!isRemote && rule == 'local') { allowed = true; } else if (rule === match) { allowed = true; } else if (rule === uri) { allowed = true; } else if (isRemote && absoluteUri.indexOf(rule) === 0) { allowed = true; } else if (!isRemote && absoluteUri.indexOf(path.resolve(rule)) === 0) { allowed = true; } else if (isRemote != isRemoteRule(normalizedRule)) { allowed = allowed && true; } else { allowed = false; } } return allowed; } function isRemoteRule(rule) { return isRemoteResource(rule) || url.parse(HTTP_PROTOCOL + '//' + rule).host == rule; } module.exports = isAllowedResource; node_modules/clean-css/lib/reader/rebase-local-map.js000066600000000676150425117220016557 0ustar00var path = require('path'); function rebaseLocalMap(sourceMap, sourceUri, rebaseTo) { var currentPath = path.resolve(''); var absoluteUri = path.resolve(currentPath, sourceUri); var absoluteUriDirectory = path.dirname(absoluteUri); sourceMap.sources = sourceMap.sources.map(function(source) { return path.relative(rebaseTo, path.resolve(absoluteUriDirectory, source)); }); return sourceMap; } module.exports = rebaseLocalMap; node_modules/clean-css/lib/reader/load-remote-resource.js000066600000003513150425117220017501 0ustar00var http = require('http'); var https = require('https'); var url = require('url'); var isHttpResource = require('../utils/is-http-resource'); var isHttpsResource = require('../utils/is-https-resource'); var override = require('../utils/override'); var HTTP_PROTOCOL = 'http:'; function loadRemoteResource(uri, inlineRequest, inlineTimeout, callback) { var proxyProtocol = inlineRequest.protocol || inlineRequest.hostname; var errorHandled = false; var requestOptions; var fetch; requestOptions = override( url.parse(uri), inlineRequest || {} ); if (inlineRequest.hostname !== undefined) { // overwrite as we always expect a http proxy currently requestOptions.protocol = inlineRequest.protocol || HTTP_PROTOCOL; requestOptions.path = requestOptions.href; } fetch = (proxyProtocol && !isHttpsResource(proxyProtocol)) || isHttpResource(uri) ? http.get : https.get; fetch(requestOptions, function (res) { var chunks = []; var movedUri; if (errorHandled) { return; } if (res.statusCode < 200 || res.statusCode > 399) { return callback(res.statusCode, null); } else if (res.statusCode > 299) { movedUri = url.resolve(uri, res.headers.location); return loadRemoteResource(movedUri, inlineRequest, inlineTimeout, callback); } res.on('data', function (chunk) { chunks.push(chunk.toString()); }); res.on('end', function () { var body = chunks.join(''); callback(null, body); }); }) .on('error', function (res) { if (errorHandled) { return; } errorHandled = true; callback(res.message, null); }) .on('timeout', function () { if (errorHandled) { return; } errorHandled = true; callback('timeout', null); }) .setTimeout(inlineTimeout); } module.exports = loadRemoteResource; node_modules/clean-css/lib/reader/rebase-remote-map.js000066600000000512150425117220016745 0ustar00var path = require('path'); var url = require('url'); function rebaseRemoteMap(sourceMap, sourceUri) { var sourceDirectory = path.dirname(sourceUri); sourceMap.sources = sourceMap.sources.map(function(source) { return url.resolve(sourceDirectory, source); }); return sourceMap; } module.exports = rebaseRemoteMap; node_modules/clean-css/lib/reader/rewrite-url.js000066600000005215150425117220015726 0ustar00var path = require('path'); var url = require('url'); var DOUBLE_QUOTE = '"'; var SINGLE_QUOTE = '\''; var URL_PREFIX = 'url('; var URL_SUFFIX = ')'; var QUOTE_PREFIX_PATTERN = /^["']/; var QUOTE_SUFFIX_PATTERN = /["']$/; var ROUND_BRACKETS_PATTERN = /[\(\)]/; var URL_PREFIX_PATTERN = /^url\(/i; var URL_SUFFIX_PATTERN = /\)$/; var WHITESPACE_PATTERN = /\s/; var isWindows = process.platform == 'win32'; function rebase(uri, rebaseConfig) { if (!rebaseConfig) { return uri; } if (isAbsolute(uri) && !isRemote(rebaseConfig.toBase)) { return uri; } if (isRemote(uri) || isSVGMarker(uri) || isInternal(uri)) { return uri; } if (isData(uri)) { return '\'' + uri + '\''; } if (isRemote(rebaseConfig.toBase)) { return url.resolve(rebaseConfig.toBase, uri); } return rebaseConfig.absolute ? normalize(absolute(uri, rebaseConfig)) : normalize(relative(uri, rebaseConfig)); } function isAbsolute(uri) { return path.isAbsolute(uri); } function isSVGMarker(uri) { return uri[0] == '#'; } function isInternal(uri) { return /^\w+:\w+/.test(uri); } function isRemote(uri) { return /^[^:]+?:\/\//.test(uri) || uri.indexOf('//') === 0; } function isData(uri) { return uri.indexOf('data:') === 0; } function absolute(uri, rebaseConfig) { return path .resolve(path.join(rebaseConfig.fromBase || '', uri)) .replace(rebaseConfig.toBase, ''); } function relative(uri, rebaseConfig) { return path.relative(rebaseConfig.toBase, path.join(rebaseConfig.fromBase || '', uri)); } function normalize(uri) { return isWindows ? uri.replace(/\\/g, '/') : uri; } function quoteFor(unquotedUrl) { if (unquotedUrl.indexOf(SINGLE_QUOTE) > -1) { return DOUBLE_QUOTE; } else if (unquotedUrl.indexOf(DOUBLE_QUOTE) > -1) { return SINGLE_QUOTE; } else if (hasWhitespace(unquotedUrl) || hasRoundBrackets(unquotedUrl)) { return SINGLE_QUOTE; } else { return ''; } } function hasWhitespace(url) { return WHITESPACE_PATTERN.test(url); } function hasRoundBrackets(url) { return ROUND_BRACKETS_PATTERN.test(url); } function rewriteUrl(originalUrl, rebaseConfig, pathOnly) { var strippedUrl = originalUrl .replace(URL_PREFIX_PATTERN, '') .replace(URL_SUFFIX_PATTERN, '') .trim(); var unquotedUrl = strippedUrl .replace(QUOTE_PREFIX_PATTERN, '') .replace(QUOTE_SUFFIX_PATTERN, '') .trim(); var quote = strippedUrl[0] == SINGLE_QUOTE || strippedUrl[0] == DOUBLE_QUOTE ? strippedUrl[0] : quoteFor(unquotedUrl); return pathOnly ? rebase(unquotedUrl, rebaseConfig) : URL_PREFIX + quote + rebase(unquotedUrl, rebaseConfig) + quote + URL_SUFFIX; } module.exports = rewriteUrl; node_modules/clean-css/lib/reader/rebase.js000066600000005034150425117220014705 0ustar00var extractImportUrlAndMedia = require('./extract-import-url-and-media'); var restoreImport = require('./restore-import'); var rewriteUrl = require('./rewrite-url'); var Token = require('../tokenizer/token'); var isImport = require('../utils/is-import'); var SOURCE_MAP_COMMENT_PATTERN = /^\/\*# sourceMappingURL=(\S+) \*\/$/; function rebase(tokens, rebaseAll, validator, rebaseConfig) { return rebaseAll ? rebaseEverything(tokens, validator, rebaseConfig) : rebaseAtRules(tokens, validator, rebaseConfig); } function rebaseEverything(tokens, validator, rebaseConfig) { var token; var i, l; for (i = 0, l = tokens.length; i < l; i++) { token = tokens[i]; switch (token[0]) { case Token.AT_RULE: rebaseAtRule(token, validator, rebaseConfig); break; case Token.AT_RULE_BLOCK: rebaseProperties(token[2], validator, rebaseConfig); break; case Token.COMMENT: rebaseSourceMapComment(token, rebaseConfig); break; case Token.NESTED_BLOCK: rebaseEverything(token[2], validator, rebaseConfig); break; case Token.RULE: rebaseProperties(token[2], validator, rebaseConfig); break; } } return tokens; } function rebaseAtRules(tokens, validator, rebaseConfig) { var token; var i, l; for (i = 0, l = tokens.length; i < l; i++) { token = tokens[i]; switch (token[0]) { case Token.AT_RULE: rebaseAtRule(token, validator, rebaseConfig); break; } } return tokens; } function rebaseAtRule(token, validator, rebaseConfig) { if (!isImport(token[1])) { return; } var uriAndMediaQuery = extractImportUrlAndMedia(token[1]); var newUrl = rewriteUrl(uriAndMediaQuery[0], rebaseConfig); var mediaQuery = uriAndMediaQuery[1]; token[1] = restoreImport(newUrl, mediaQuery); } function rebaseSourceMapComment(token, rebaseConfig) { var matches = SOURCE_MAP_COMMENT_PATTERN.exec(token[1]); if (matches && matches[1].indexOf('data:') === -1) { token[1] = token[1].replace(matches[1], rewriteUrl(matches[1], rebaseConfig, true)); } } function rebaseProperties(properties, validator, rebaseConfig) { var property; var value; var i, l; var j, m; for (i = 0, l = properties.length; i < l; i++) { property = properties[i]; for (j = 2 /* 0 is Token.PROPERTY, 1 is name */, m = property.length; j < m; j++) { value = property[j][1]; if (validator.isUrl(value)) { property[j][1] = rewriteUrl(value, rebaseConfig); } } } } module.exports = rebase; node_modules/clean-css/lib/reader/load-original-sources.js000066600000007366150425117220017660 0ustar00var fs = require('fs'); var path = require('path'); var isAllowedResource = require('./is-allowed-resource'); var hasProtocol = require('../utils/has-protocol'); var isRemoteResource = require('../utils/is-remote-resource'); function loadOriginalSources(context, callback) { var loadContext = { callback: callback, fetch: context.options.fetch, index: 0, inline: context.options.inline, inlineRequest: context.options.inlineRequest, inlineTimeout: context.options.inlineTimeout, localOnly: context.localOnly, rebaseTo: context.options.rebaseTo, sourcesContent: context.sourcesContent, uriToSource: uriToSourceMapping(context.inputSourceMapTracker.all()), warnings: context.warnings }; return context.options.sourceMap && context.options.sourceMapInlineSources ? doLoadOriginalSources(loadContext) : callback(); } function uriToSourceMapping(allSourceMapConsumers) { var mapping = {}; var consumer; var uri; var source; var i, l; for (source in allSourceMapConsumers) { consumer = allSourceMapConsumers[source]; for (i = 0, l = consumer.sources.length; i < l; i++) { uri = consumer.sources[i]; source = consumer.sourceContentFor(uri, true); mapping[uri] = source; } } return mapping; } function doLoadOriginalSources(loadContext) { var uris = Object.keys(loadContext.uriToSource); var uri; var source; var total; for (total = uris.length; loadContext.index < total; loadContext.index++) { uri = uris[loadContext.index]; source = loadContext.uriToSource[uri]; if (source) { loadContext.sourcesContent[uri] = source; } else { return loadOriginalSource(uri, loadContext); } } return loadContext.callback(); } function loadOriginalSource(uri, loadContext) { var content; if (isRemoteResource(uri)) { return loadOriginalSourceFromRemoteUri(uri, loadContext, function (content) { loadContext.index++; loadContext.sourcesContent[uri] = content; return doLoadOriginalSources(loadContext); }); } else { content = loadOriginalSourceFromLocalUri(uri, loadContext); loadContext.index++; loadContext.sourcesContent[uri] = content; return doLoadOriginalSources(loadContext); } } function loadOriginalSourceFromRemoteUri(uri, loadContext, whenLoaded) { var isAllowed = isAllowedResource(uri, true, loadContext.inline); var isRuntimeResource = !hasProtocol(uri); if (loadContext.localOnly) { loadContext.warnings.push('Cannot fetch remote resource from "' + uri + '" as no callback given.'); return whenLoaded(null); } else if (isRuntimeResource) { loadContext.warnings.push('Cannot fetch "' + uri + '" as no protocol given.'); return whenLoaded(null); } else if (!isAllowed) { loadContext.warnings.push('Cannot fetch "' + uri + '" as resource is not allowed.'); return whenLoaded(null); } loadContext.fetch(uri, loadContext.inlineRequest, loadContext.inlineTimeout, function (error, content) { if (error) { loadContext.warnings.push('Missing original source at "' + uri + '" - ' + error); } whenLoaded(content); }); } function loadOriginalSourceFromLocalUri(relativeUri, loadContext) { var isAllowed = isAllowedResource(relativeUri, false, loadContext.inline); var absoluteUri = path.resolve(loadContext.rebaseTo, relativeUri); if (!fs.existsSync(absoluteUri) || !fs.statSync(absoluteUri).isFile()) { loadContext.warnings.push('Ignoring local source map at "' + absoluteUri + '" as resource is missing.'); return null; } else if (!isAllowed) { loadContext.warnings.push('Cannot fetch "' + absoluteUri + '" as resource is not allowed.'); return null; } return fs.readFileSync(absoluteUri, 'utf8'); } module.exports = loadOriginalSources; node_modules/clean-css/LICENSE000066600000002046150425117220012103 0ustar00Copyright (C) 2017 JakubPawlowicz.com Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. node_modules/clean-css/package.json000066600000002173150425117220013365 0ustar00{ "name": "clean-css", "version": "4.2.4", "author": "Jakub Pawlowicz (http://twitter.com/jakubpawlowicz)", "description": "A well-tested CSS minifier", "license": "MIT", "keywords": [ "css", "minifier" ], "homepage": "https://github.com/jakubpawlowicz/clean-css", "repository": { "type": "git", "url": "https://github.com/jakubpawlowicz/clean-css.git" }, "bugs": { "url": "https://github.com/jakubpawlowicz/clean-css/issues" }, "main": "index.js", "files": [ "lib", "History.md", "index.js", "LICENSE" ], "scripts": { "browserify": "browserify --standalone CleanCSS index.js | uglifyjs --compress --mangle -o cleancss-browser.js", "bench": "node ./test/bench.js", "check": "jshint .", "prepublish": "npm run check", "test": "vows" }, "dependencies": { "source-map": "~0.6.0" }, "devDependencies": { "browserify": "^14.0.0", "http-proxy": "1.x", "jshint": "2.x", "nock": "9.x", "server-destroy": "1.x", "uglify-js": ">=2.6.1", "vows": "0.8.x" }, "engines": { "node": ">= 4.0" } } sample-cli-config-file.conf000066600000002051150425117220011622 0ustar00{ "caseSensitive": false, "collapseBooleanAttributes": true, "collapseInlineTagWhitespace": false, "collapseWhitespace": true, "conservativeCollapse": false, "continueOnParseError": true, "customAttrCollapse": ".*", "decodeEntities": true, "html5": true, "ignoreCustomFragments": [ "<#[\\s\\S]*?#>", "<%[\\s\\S]*?%>", "<\\?[\\s\\S]*?\\?>" ], "includeAutoGeneratedTags": false, "keepClosingSlash": false, "maxLineLength": 0, "minifyCSS": true, "minifyJS": true, "preserveLineBreaks": false, "preventAttributesEscaping": false, "processConditionalComments": true, "processScripts": [ "text/html" ], "removeAttributeQuotes": true, "removeComments": true, "removeEmptyAttributes": true, "removeEmptyElements": true, "removeOptionalTags": true, "removeRedundantAttributes": true, "removeScriptTypeAttributes": true, "removeStyleLinkTypeAttributes": true, "removeTagWhitespace": true, "sortAttributes": true, "sortClassName": true, "trimCustomFragments": true, "useShortDoctype": true } src/tokenchain.js000066600000003425150425117220010023 0ustar00'use strict'; function Sorter() { } Sorter.prototype.sort = function(tokens, fromIndex) { fromIndex = fromIndex || 0; for (var i = 0, len = this.keys.length; i < len; i++) { var key = this.keys[i]; var token = key.slice(1); var index = tokens.indexOf(token, fromIndex); if (index !== -1) { do { if (index !== fromIndex) { tokens.splice(index, 1); tokens.splice(fromIndex, 0, token); } fromIndex++; } while ((index = tokens.indexOf(token, fromIndex)) !== -1); return this[key].sort(tokens, fromIndex); } } return tokens; }; function TokenChain() { } TokenChain.prototype = { add: function(tokens) { var self = this; tokens.forEach(function(token) { var key = '$' + token; if (!self[key]) { self[key] = []; self[key].processed = 0; } self[key].push(tokens); }); }, createSorter: function() { var self = this; var sorter = new Sorter(); sorter.keys = Object.keys(self).sort(function(j, k) { var m = self[j].length; var n = self[k].length; return m < n ? 1 : m > n ? -1 : j < k ? -1 : j > k ? 1 : 0; }).filter(function(key) { if (self[key].processed < self[key].length) { var token = key.slice(1); var chain = new TokenChain(); self[key].forEach(function(tokens) { var index; while ((index = tokens.indexOf(token)) !== -1) { tokens.splice(index, 1); } tokens.forEach(function(token) { self['$' + token].processed++; }); chain.add(tokens.slice(0)); }); sorter[key] = chain.createSorter(); return true; } return false; }); return sorter; } }; module.exports = TokenChain; src/htmlparser.js000066600000047007150425117220010065 0ustar00/*! * HTML Parser By John Resig (ejohn.org) * Modified by Juriy "kangax" Zaytsev * Original code by Erik Arvidsson, Mozilla Public License * http://erik.eae.net/simplehtmlparser/simplehtmlparser.js */ /* * // Use like so: * HTMLParser(htmlString, { * start: function(tag, attrs, unary) {}, * end: function(tag) {}, * chars: function(text) {}, * comment: function(text) {} * }); * * // or to get an XML string: * HTMLtoXML(htmlString); * * // or to get an XML DOM Document * HTMLtoDOM(htmlString); * * // or to inject into an existing document/DOM node * HTMLtoDOM(htmlString, document); * HTMLtoDOM(htmlString, document.body); * */ /* global ActiveXObject, DOMDocument */ 'use strict'; var createMapFromString = require('./utils').createMapFromString; function makeMap(values) { return createMapFromString(values, true); } // Regular Expressions for parsing tags and attributes var singleAttrIdentifier = /([^\s"'<>/=]+)/, singleAttrAssigns = [/=/], singleAttrValues = [ // attr value double quotes /"([^"]*)"+/.source, // attr value, single quotes /'([^']*)'+/.source, // attr value, no quotes /([^ \t\n\f\r"'`=<>]+)/.source ], // https://www.w3.org/TR/1999/REC-xml-names-19990114/#NT-QName qnameCapture = (function() { // based on https://www.npmjs.com/package/ncname var combiningChar = '\\u0300-\\u0345\\u0360\\u0361\\u0483-\\u0486\\u0591-\\u05A1\\u05A3-\\u05B9\\u05BB-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u064B-\\u0652\\u0670\\u06D6-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0901-\\u0903\\u093C\\u093E-\\u094D\\u0951-\\u0954\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u0A02\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A70\\u0A71\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B43\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B82\\u0B83\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C01-\\u0C03\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C82\\u0C83\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0D02\\u0D03\\u0D3E-\\u0D43\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F3E\\u0F3F\\u0F71-\\u0F84\\u0F86-\\u0F8B\\u0F90-\\u0F95\\u0F97\\u0F99-\\u0FAD\\u0FB1-\\u0FB7\\u0FB9\\u20D0-\\u20DC\\u20E1\\u302A-\\u302F\\u3099\\u309A'; var digit = '0-9\\u0660-\\u0669\\u06F0-\\u06F9\\u0966-\\u096F\\u09E6-\\u09EF\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0BE7-\\u0BEF\\u0C66-\\u0C6F\\u0CE6-\\u0CEF\\u0D66-\\u0D6F\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F29'; var extender = '\\xB7\\u02D0\\u02D1\\u0387\\u0640\\u0E46\\u0EC6\\u3005\\u3031-\\u3035\\u309D\\u309E\\u30FC-\\u30FE'; var letter = 'A-Za-z\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u0131\\u0134-\\u013E\\u0141-\\u0148\\u014A-\\u017E\\u0180-\\u01C3\\u01CD-\\u01F0\\u01F4\\u01F5\\u01FA-\\u0217\\u0250-\\u02A8\\u02BB-\\u02C1\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03CE\\u03D0-\\u03D6\\u03DA\\u03DC\\u03DE\\u03E0\\u03E2-\\u03F3\\u0401-\\u040C\\u040E-\\u044F\\u0451-\\u045C\\u045E-\\u0481\\u0490-\\u04C4\\u04C7\\u04C8\\u04CB\\u04CC\\u04D0-\\u04EB\\u04EE-\\u04F5\\u04F8\\u04F9\\u0531-\\u0556\\u0559\\u0561-\\u0586\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0621-\\u063A\\u0641-\\u064A\\u0671-\\u06B7\\u06BA-\\u06BE\\u06C0-\\u06CE\\u06D0-\\u06D3\\u06D5\\u06E5\\u06E6\\u0905-\\u0939\\u093D\\u0958-\\u0961\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\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-\\u0A8B\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AE0\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B36-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB5\\u0BB7-\\u0BB9\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CDE\\u0CE0\\u0CE1\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D28\\u0D2A-\\u0D39\\u0D60\\u0D61\\u0E01-\\u0E2E\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E45\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD\\u0EAE\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0F40-\\u0F47\\u0F49-\\u0F69\\u10A0-\\u10C5\\u10D0-\\u10F6\\u1100\\u1102\\u1103\\u1105-\\u1107\\u1109\\u110B\\u110C\\u110E-\\u1112\\u113C\\u113E\\u1140\\u114C\\u114E\\u1150\\u1154\\u1155\\u1159\\u115F-\\u1161\\u1163\\u1165\\u1167\\u1169\\u116D\\u116E\\u1172\\u1173\\u1175\\u119E\\u11A8\\u11AB\\u11AE\\u11AF\\u11B7\\u11B8\\u11BA\\u11BC-\\u11C2\\u11EB\\u11F0\\u11F9\\u1E00-\\u1E9B\\u1EA0-\\u1EF9\\u1F00-\\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\\u2126\\u212A\\u212B\\u212E\\u2180-\\u2182\\u3007\\u3021-\\u3029\\u3041-\\u3094\\u30A1-\\u30FA\\u3105-\\u312C\\u4E00-\\u9FA5\\uAC00-\\uD7A3'; var ncname = '[' + letter + '_][' + letter + digit + '\\.\\-_' + combiningChar + extender + ']*'; return '((?:' + ncname + '\\:)?' + ncname + ')'; })(), startTagOpen = new RegExp('^<' + qnameCapture), startTagClose = /^\s*(\/?)>/, endTag = new RegExp('^<\\/' + qnameCapture + '[^>]*>'), doctype = /^]+>/i; var IS_REGEX_CAPTURING_BROKEN = false; 'x'.replace(/x(.)?/g, function(m, g) { IS_REGEX_CAPTURING_BROKEN = g === ''; }); // Empty Elements var empty = makeMap('area,base,basefont,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr'); // Inline Elements var inline = makeMap('a,abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,code,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,noscript,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,svg,textarea,tt,u,var'); // Elements that you can, intentionally, leave open // (and which close themselves) var closeSelf = makeMap('colgroup,dd,dt,li,option,p,td,tfoot,th,thead,tr,source'); // Attributes that have their values filled in disabled='disabled' var fillAttrs = makeMap('checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected'); // Special Elements (can contain anything) var special = makeMap('script,style'); // HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3 // Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content var nonPhrasing = makeMap('address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,ol,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track,ul'); var reCache = {}; function attrForHandler(handler) { var pattern = singleAttrIdentifier.source + '(?:\\s*(' + joinSingleAttrAssigns(handler) + ')' + '[ \\t\\n\\f\\r]*(?:' + singleAttrValues.join('|') + '))?'; if (handler.customAttrSurround) { var attrClauses = []; for (var i = handler.customAttrSurround.length - 1; i >= 0; i--) { attrClauses[i] = '(?:' + '(' + handler.customAttrSurround[i][0].source + ')\\s*' + pattern + '\\s*(' + handler.customAttrSurround[i][1].source + ')' + ')'; } attrClauses.push('(?:' + pattern + ')'); pattern = '(?:' + attrClauses.join('|') + ')'; } return new RegExp('^\\s*' + pattern); } function joinSingleAttrAssigns(handler) { return singleAttrAssigns.concat( handler.customAttrAssign || [] ).map(function(assign) { return '(?:' + assign.source + ')'; }).join('|'); } function HTMLParser(html, handler) { var stack = [], lastTag; var attribute = attrForHandler(handler); var last, prevTag, nextTag; while (html) { last = html; // Make sure we're not in a script or style element if (!lastTag || !special(lastTag)) { var textEnd = html.indexOf('<'); if (textEnd === 0) { // Comment: if (/^'); if (commentEnd >= 0) { if (handler.comment) { handler.comment(html.substring(4, commentEnd)); } html = html.substring(commentEnd + 3); prevTag = ''; continue; } } // https://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment if (/^'); if (conditionalEnd >= 0) { if (handler.comment) { handler.comment(html.substring(2, conditionalEnd + 1), true /* non-standard */); } html = html.substring(conditionalEnd + 2); prevTag = ''; continue; } } // Doctype: var doctypeMatch = html.match(doctype); if (doctypeMatch) { if (handler.doctype) { handler.doctype(doctypeMatch[0]); } html = html.substring(doctypeMatch[0].length); prevTag = ''; continue; } // End tag: var endTagMatch = html.match(endTag); if (endTagMatch) { html = html.substring(endTagMatch[0].length); endTagMatch[0].replace(endTag, parseEndTag); prevTag = '/' + endTagMatch[1].toLowerCase(); continue; } // Start tag: var startTagMatch = parseStartTag(html); if (startTagMatch) { html = startTagMatch.rest; handleStartTag(startTagMatch); prevTag = startTagMatch.tagName.toLowerCase(); continue; } // Treat `<` as text if (handler.continueOnParseError) { textEnd = html.indexOf('<', 1); } } var text; if (textEnd >= 0) { text = html.substring(0, textEnd); html = html.substring(textEnd); } else { text = html; html = ''; } // next tag var nextTagMatch = parseStartTag(html); if (nextTagMatch) { nextTag = nextTagMatch.tagName; } else { nextTagMatch = html.match(endTag); if (nextTagMatch) { nextTag = '/' + nextTagMatch[1]; } else { nextTag = ''; } } if (handler.chars) { handler.chars(text, prevTag, nextTag); } prevTag = ''; } else { var stackedTag = lastTag.toLowerCase(); var reStackedTag = reCache[stackedTag] || (reCache[stackedTag] = new RegExp('([\\s\\S]*?)]*>', 'i')); html = html.replace(reStackedTag, function(all, text) { if (stackedTag !== 'script' && stackedTag !== 'style' && stackedTag !== 'noscript') { text = text .replace(//g, '$1') .replace(//g, '$1'); } if (handler.chars) { handler.chars(text); } return ''; }); parseEndTag('', stackedTag); } if (html === last) { throw new Error('Parse Error: ' + html); } } if (!handler.partialMarkup) { // Clean up any remaining tags parseEndTag(); } function parseStartTag(input) { var start = input.match(startTagOpen); if (start) { var match = { tagName: start[1], attrs: [] }; input = input.slice(start[0].length); var end, attr; while (!(end = input.match(startTagClose)) && (attr = input.match(attribute))) { input = input.slice(attr[0].length); match.attrs.push(attr); } if (end) { match.unarySlash = end[1]; match.rest = input.slice(end[0].length); return match; } } } function closeIfFound(tagName) { if (findTag(tagName) >= 0) { parseEndTag('', tagName); return true; } } function handleStartTag(match) { var tagName = match.tagName; var unarySlash = match.unarySlash; if (handler.html5) { if (lastTag === 'p' && nonPhrasing(tagName)) { parseEndTag('', lastTag); } else if (tagName === 'tbody') { closeIfFound('thead'); } else if (tagName === 'tfoot') { if (!closeIfFound('tbody')) { closeIfFound('thead'); } } if (tagName === 'col' && findTag('colgroup') < 0) { lastTag = 'colgroup'; stack.push({ tag: lastTag, attrs: [] }); if (handler.start) { handler.start(lastTag, [], false, ''); } } } if (!handler.html5 && !inline(tagName)) { while (lastTag && inline(lastTag)) { parseEndTag('', lastTag); } } if (closeSelf(tagName) && lastTag === tagName) { parseEndTag('', tagName); } var unary = empty(tagName) || tagName === 'html' && lastTag === 'head' || !!unarySlash; var attrs = match.attrs.map(function(args) { var name, value, customOpen, customClose, customAssign, quote; var ncp = 7; // number of captured parts, scalar // hackish work around FF bug https://bugzilla.mozilla.org/show_bug.cgi?id=369778 if (IS_REGEX_CAPTURING_BROKEN && args[0].indexOf('""') === -1) { if (args[3] === '') { delete args[3]; } if (args[4] === '') { delete args[4]; } if (args[5] === '') { delete args[5]; } } function populate(index) { customAssign = args[index]; value = args[index + 1]; if (typeof value !== 'undefined') { return '"'; } value = args[index + 2]; if (typeof value !== 'undefined') { return '\''; } value = args[index + 3]; if (typeof value === 'undefined' && fillAttrs(name)) { value = name; } return ''; } var j = 1; if (handler.customAttrSurround) { for (var i = 0, l = handler.customAttrSurround.length; i < l; i++, j += ncp) { name = args[j + 1]; if (name) { quote = populate(j + 2); customOpen = args[j]; customClose = args[j + 6]; break; } } } if (!name && (name = args[j])) { quote = populate(j + 1); } return { name: name, value: value, customAssign: customAssign || '=', customOpen: customOpen || '', customClose: customClose || '', quote: quote || '' }; }); if (!unary) { stack.push({ tag: tagName, attrs: attrs }); lastTag = tagName; unarySlash = ''; } if (handler.start) { handler.start(tagName, attrs, unary, unarySlash); } } function findTag(tagName) { var pos; var needle = tagName.toLowerCase(); for (pos = stack.length - 1; pos >= 0; pos--) { if (stack[pos].tag.toLowerCase() === needle) { break; } } return pos; } function parseEndTag(tag, tagName) { var pos; // Find the closest opened tag of the same type if (tagName) { pos = findTag(tagName); } // If no tag name is provided, clean shop else { pos = 0; } if (pos >= 0) { // Close all the open elements, up the stack for (var i = stack.length - 1; i >= pos; i--) { if (handler.end) { handler.end(stack[i].tag, stack[i].attrs, i > pos || !tag); } } // Remove the open elements from the stack stack.length = pos; lastTag = pos && stack[pos - 1].tag; } else if (tagName.toLowerCase() === 'br') { if (handler.start) { handler.start(tagName, [], true, ''); } } else if (tagName.toLowerCase() === 'p') { if (handler.start) { handler.start(tagName, [], false, '', true); } if (handler.end) { handler.end(tagName, []); } } } } exports.HTMLParser = HTMLParser; exports.HTMLtoXML = function(html) { var results = ''; new HTMLParser(html, { start: function(tag, attrs, unary) { results += '<' + tag; for (var i = 0, len = attrs.length; i < len; i++) { results += ' ' + attrs[i].name + '="' + (attrs[i].value || '').replace(/"/g, '"') + '"'; } results += (unary ? '/' : '') + '>'; }, end: function(tag) { results += ''; }, chars: function(text) { results += text; }, comment: function(text) { results += ''; }, ignore: function(text) { results += text; } }); return results; }; exports.HTMLtoDOM = function(html, doc) { // There can be only one of these elements var one = { html: true, head: true, body: true, title: true }; // Enforce a structure for the document var structure = { link: 'head', base: 'head' }; if (doc) { doc = doc.ownerDocument || doc.getOwnerDocument && doc.getOwnerDocument() || doc; } else if (typeof DOMDocument !== 'undefined') { doc = new DOMDocument(); } else if (typeof document !== 'undefined' && document.implementation && document.implementation.createDocument) { doc = document.implementation.createDocument('', '', null); } else if (typeof ActiveX !== 'undefined') { doc = new ActiveXObject('Msxml.DOMDocument'); } var elems = [], documentElement = doc.documentElement || doc.getDocumentElement && doc.getDocumentElement(); // If we're dealing with an empty document then we // need to pre-populate it with the HTML document structure if (!documentElement && doc.createElement) { (function() { var html = doc.createElement('html'); var head = doc.createElement('head'); head.appendChild(doc.createElement('title')); html.appendChild(head); html.appendChild(doc.createElement('body')); doc.appendChild(html); })(); } // Find all the unique elements if (doc.getElementsByTagName) { for (var i in one) { one[i] = doc.getElementsByTagName(i)[0]; } } // If we're working with a document, inject contents into // the body element var curParentNode = one.body; new HTMLParser(html, { start: function(tagName, attrs, unary) { // If it's a pre-built element, then we can ignore // its construction if (one[tagName]) { curParentNode = one[tagName]; return; } var elem = doc.createElement(tagName); for (var attr in attrs) { elem.setAttribute(attrs[attr].name, attrs[attr].value); } if (structure[tagName] && typeof one[structure[tagName]] !== 'boolean') { one[structure[tagName]].appendChild(elem); } else if (curParentNode && curParentNode.appendChild) { curParentNode.appendChild(elem); } if (!unary) { elems.push(elem); curParentNode = elem; } }, end: function(/* tag */) { elems.length -= 1; // Init the new parentNode curParentNode = elems[elems.length - 1]; }, chars: function(text) { curParentNode.appendChild(doc.createTextNode(text)); }, comment: function(/* text */) { // create comment node }, ignore: function(/* text */) { // What to do here? } }); return doc; }; src/utils.js000066600000000647150425117220007043 0ustar00'use strict'; function createMap(values, ignoreCase) { var map = {}; values.forEach(function(value) { map[value] = 1; }); return ignoreCase ? function(value) { return map[value.toLowerCase()] === 1; } : function(value) { return map[value] === 1; }; } exports.createMap = createMap; exports.createMapFromString = function(values, ignoreCase) { return createMap(values.split(/,/), ignoreCase); }; src/htmlminifier.js000066600000132113150425117220010364 0ustar00'use strict'; var CleanCSS = require('clean-css'); var decode = require('he').decode; var HTMLParser = require('./htmlparser').HTMLParser; var RelateUrl = require('relateurl'); var TokenChain = require('./tokenchain'); var Terser = require('terser'); var utils = require('./utils'); function trimWhitespace(str) { return str && str.replace(/^[ \n\r\t\f]+/, '').replace(/[ \n\r\t\f]+$/, ''); } function collapseWhitespaceAll(str) { // Non-breaking space is specifically handled inside the replacer function here: return str && str.replace(/[ \n\r\t\f\xA0]+/g, function(spaces) { return spaces === '\t' ? '\t' : spaces.replace(/(^|\xA0+)[^\xA0]+/g, '$1 '); }); } function collapseWhitespace(str, options, trimLeft, trimRight, collapseAll) { var lineBreakBefore = '', lineBreakAfter = ''; if (options.preserveLineBreaks) { str = str.replace(/^[ \n\r\t\f]*?[\n\r][ \n\r\t\f]*/, function() { lineBreakBefore = '\n'; return ''; }).replace(/[ \n\r\t\f]*?[\n\r][ \n\r\t\f]*$/, function() { lineBreakAfter = '\n'; return ''; }); } if (trimLeft) { // Non-breaking space is specifically handled inside the replacer function here: str = str.replace(/^[ \n\r\t\f\xA0]+/, function(spaces) { var conservative = !lineBreakBefore && options.conservativeCollapse; if (conservative && spaces === '\t') { return '\t'; } return spaces.replace(/^[^\xA0]+/, '').replace(/(\xA0+)[^\xA0]+/g, '$1 ') || (conservative ? ' ' : ''); }); } if (trimRight) { // Non-breaking space is specifically handled inside the replacer function here: str = str.replace(/[ \n\r\t\f\xA0]+$/, function(spaces) { var conservative = !lineBreakAfter && options.conservativeCollapse; if (conservative && spaces === '\t') { return '\t'; } return spaces.replace(/[^\xA0]+(\xA0+)/g, ' $1').replace(/[^\xA0]+$/, '') || (conservative ? ' ' : ''); }); } if (collapseAll) { // strip non space whitespace then compress spaces to one str = collapseWhitespaceAll(str); } return lineBreakBefore + str + lineBreakAfter; } var createMapFromString = utils.createMapFromString; // non-empty tags that will maintain whitespace around them var inlineTags = createMapFromString('a,abbr,acronym,b,bdi,bdo,big,button,cite,code,del,dfn,em,font,i,ins,kbd,label,mark,math,nobr,object,q,rp,rt,rtc,ruby,s,samp,select,small,span,strike,strong,sub,sup,svg,textarea,time,tt,u,var'); // non-empty tags that will maintain whitespace within them var inlineTextTags = createMapFromString('a,abbr,acronym,b,big,del,em,font,i,ins,kbd,mark,nobr,rp,s,samp,small,span,strike,strong,sub,sup,time,tt,u,var'); // self-closing tags that will maintain whitespace around them var selfClosingInlineTags = createMapFromString('comment,img,input,wbr'); function collapseWhitespaceSmart(str, prevTag, nextTag, options) { var trimLeft = prevTag && !selfClosingInlineTags(prevTag); if (trimLeft && !options.collapseInlineTagWhitespace) { trimLeft = prevTag.charAt(0) === '/' ? !inlineTags(prevTag.slice(1)) : !inlineTextTags(prevTag); } var trimRight = nextTag && !selfClosingInlineTags(nextTag); if (trimRight && !options.collapseInlineTagWhitespace) { trimRight = nextTag.charAt(0) === '/' ? !inlineTextTags(nextTag.slice(1)) : !inlineTags(nextTag); } return collapseWhitespace(str, options, trimLeft, trimRight, prevTag && nextTag); } function isConditionalComment(text) { return /^\[if\s[^\]]+]|\[endif]$/.test(text); } function isIgnoredComment(text, options) { for (var i = 0, len = options.ignoreCustomComments.length; i < len; i++) { if (options.ignoreCustomComments[i].test(text)) { return true; } } return false; } function isEventAttribute(attrName, options) { var patterns = options.customEventAttributes; if (patterns) { for (var i = patterns.length; i--;) { if (patterns[i].test(attrName)) { return true; } } return false; } return /^on[a-z]{3,}$/.test(attrName); } function canRemoveAttributeQuotes(value) { // https://mathiasbynens.be/notes/unquoted-attribute-values return /^[^ \t\n\f\r"'`=<>]+$/.test(value); } function attributesInclude(attributes, attribute) { for (var i = attributes.length; i--;) { if (attributes[i].name.toLowerCase() === attribute) { return true; } } return false; } function isAttributeRedundant(tag, attrName, attrValue, attrs) { attrValue = attrValue ? trimWhitespace(attrValue.toLowerCase()) : ''; return ( tag === 'script' && attrName === 'language' && attrValue === 'javascript' || tag === 'form' && attrName === 'method' && attrValue === 'get' || tag === 'input' && attrName === 'type' && attrValue === 'text' || tag === 'script' && attrName === 'charset' && !attributesInclude(attrs, 'src') || tag === 'a' && attrName === 'name' && attributesInclude(attrs, 'id') || tag === 'area' && attrName === 'shape' && attrValue === 'rect' ); } // https://mathiasbynens.be/demo/javascript-mime-type // https://developer.mozilla.org/en/docs/Web/HTML/Element/script#attr-type var executableScriptsMimetypes = utils.createMap([ 'text/javascript', 'text/ecmascript', 'text/jscript', 'application/javascript', 'application/x-javascript', 'application/ecmascript', 'module' ]); var keepScriptsMimetypes = utils.createMap([ 'module' ]); function isScriptTypeAttribute(attrValue) { attrValue = trimWhitespace(attrValue.split(/;/, 2)[0]).toLowerCase(); return attrValue === '' || executableScriptsMimetypes(attrValue); } function keepScriptTypeAttribute(attrValue) { attrValue = trimWhitespace(attrValue.split(/;/, 2)[0]).toLowerCase(); return keepScriptsMimetypes(attrValue); } function isExecutableScript(tag, attrs) { if (tag !== 'script') { return false; } for (var i = 0, len = attrs.length; i < len; i++) { var attrName = attrs[i].name.toLowerCase(); if (attrName === 'type') { return isScriptTypeAttribute(attrs[i].value); } } return true; } function isStyleLinkTypeAttribute(attrValue) { attrValue = trimWhitespace(attrValue).toLowerCase(); return attrValue === '' || attrValue === 'text/css'; } function isStyleSheet(tag, attrs) { if (tag !== 'style') { return false; } for (var i = 0, len = attrs.length; i < len; i++) { var attrName = attrs[i].name.toLowerCase(); if (attrName === 'type') { return isStyleLinkTypeAttribute(attrs[i].value); } } return true; } var isSimpleBoolean = createMapFromString('allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible'); var isBooleanValue = createMapFromString('true,false'); function isBooleanAttribute(attrName, attrValue) { return isSimpleBoolean(attrName) || attrName === 'draggable' && !isBooleanValue(attrValue); } function isUriTypeAttribute(attrName, tag) { return ( /^(?:a|area|link|base)$/.test(tag) && attrName === 'href' || tag === 'img' && /^(?:src|longdesc|usemap)$/.test(attrName) || tag === 'object' && /^(?:classid|codebase|data|usemap)$/.test(attrName) || tag === 'q' && attrName === 'cite' || tag === 'blockquote' && attrName === 'cite' || (tag === 'ins' || tag === 'del') && attrName === 'cite' || tag === 'form' && attrName === 'action' || tag === 'input' && (attrName === 'src' || attrName === 'usemap') || tag === 'head' && attrName === 'profile' || tag === 'script' && (attrName === 'src' || attrName === 'for') ); } function isNumberTypeAttribute(attrName, tag) { return ( /^(?:a|area|object|button)$/.test(tag) && attrName === 'tabindex' || tag === 'input' && (attrName === 'maxlength' || attrName === 'tabindex') || tag === 'select' && (attrName === 'size' || attrName === 'tabindex') || tag === 'textarea' && /^(?:rows|cols|tabindex)$/.test(attrName) || tag === 'colgroup' && attrName === 'span' || tag === 'col' && attrName === 'span' || (tag === 'th' || tag === 'td') && (attrName === 'rowspan' || attrName === 'colspan') ); } function isLinkType(tag, attrs, value) { if (tag !== 'link') { return false; } for (var i = 0, len = attrs.length; i < len; i++) { if (attrs[i].name === 'rel' && attrs[i].value === value) { return true; } } } function isMediaQuery(tag, attrs, attrName) { return attrName === 'media' && (isLinkType(tag, attrs, 'stylesheet') || isStyleSheet(tag, attrs)); } var srcsetTags = createMapFromString('img,source'); function isSrcset(attrName, tag) { return attrName === 'srcset' && srcsetTags(tag); } function cleanAttributeValue(tag, attrName, attrValue, options, attrs) { if (isEventAttribute(attrName, options)) { attrValue = trimWhitespace(attrValue).replace(/^javascript:\s*/i, ''); return options.minifyJS(attrValue, true); } else if (attrName === 'class') { attrValue = trimWhitespace(attrValue); if (options.sortClassName) { attrValue = options.sortClassName(attrValue); } else { attrValue = collapseWhitespaceAll(attrValue); } return attrValue; } else if (isUriTypeAttribute(attrName, tag)) { attrValue = trimWhitespace(attrValue); return isLinkType(tag, attrs, 'canonical') ? attrValue : options.minifyURLs(attrValue); } else if (isNumberTypeAttribute(attrName, tag)) { return trimWhitespace(attrValue); } else if (attrName === 'style') { attrValue = trimWhitespace(attrValue); if (attrValue) { if (/;$/.test(attrValue) && !/&#?[0-9a-zA-Z]+;$/.test(attrValue)) { attrValue = attrValue.replace(/\s*;$/, ';'); } attrValue = options.minifyCSS(attrValue, 'inline'); } return attrValue; } else if (isSrcset(attrName, tag)) { // https://html.spec.whatwg.org/multipage/embedded-content.html#attr-img-srcset attrValue = trimWhitespace(attrValue).split(/\s+,\s*|\s*,\s+/).map(function(candidate) { var url = candidate; var descriptor = ''; var match = candidate.match(/\s+([1-9][0-9]*w|[0-9]+(?:\.[0-9]+)?x)$/); if (match) { url = url.slice(0, -match[0].length); var num = +match[1].slice(0, -1); var suffix = match[1].slice(-1); if (num !== 1 || suffix !== 'x') { descriptor = ' ' + num + suffix; } } return options.minifyURLs(url) + descriptor; }).join(', '); } else if (isMetaViewport(tag, attrs) && attrName === 'content') { attrValue = attrValue.replace(/\s+/g, '').replace(/[0-9]+\.[0-9]+/g, function(numString) { // "0.90000" -> "0.9" // "1.0" -> "1" // "1.0001" -> "1.0001" (unchanged) return (+numString).toString(); }); } else if (isContentSecurityPolicy(tag, attrs) && attrName.toLowerCase() === 'content') { return collapseWhitespaceAll(attrValue); } else if (options.customAttrCollapse && options.customAttrCollapse.test(attrName)) { attrValue = attrValue.replace(/\n+|\r+|\s{2,}/g, ''); } else if (tag === 'script' && attrName === 'type') { attrValue = trimWhitespace(attrValue.replace(/\s*;\s*/g, ';')); } else if (isMediaQuery(tag, attrs, attrName)) { attrValue = trimWhitespace(attrValue); return options.minifyCSS(attrValue, 'media'); } return attrValue; } function isMetaViewport(tag, attrs) { if (tag !== 'meta') { return false; } for (var i = 0, len = attrs.length; i < len; i++) { if (attrs[i].name === 'name' && attrs[i].value === 'viewport') { return true; } } } function isContentSecurityPolicy(tag, attrs) { if (tag !== 'meta') { return false; } for (var i = 0, len = attrs.length; i < len; i++) { if (attrs[i].name.toLowerCase() === 'http-equiv' && attrs[i].value.toLowerCase() === 'content-security-policy') { return true; } } } function ignoreCSS(id) { return '/* clean-css ignore:start */' + id + '/* clean-css ignore:end */'; } // Wrap CSS declarations for CleanCSS > 3.x // See https://github.com/jakubpawlowicz/clean-css/issues/418 function wrapCSS(text, type) { switch (type) { case 'inline': return '*{' + text + '}'; case 'media': return '@media ' + text + '{a{top:0}}'; default: return text; } } function unwrapCSS(text, type) { var matches; switch (type) { case 'inline': matches = text.match(/^\*\{([\s\S]*)\}$/); break; case 'media': matches = text.match(/^@media ([\s\S]*?)\s*{[\s\S]*}$/); break; } return matches ? matches[1] : text; } function cleanConditionalComment(comment, options) { return options.processConditionalComments ? comment.replace(/^(\[if\s[^\]]+]>)([\s\S]*?)( -1) { return minify(text, options); } } return text; } // Tag omission rules from https://html.spec.whatwg.org/multipage/syntax.html#optional-tags // with the following deviations: // - retain if followed by