summaryrefslogtreecommitdiff
path: root/node_modules/terser/lib/utils/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/terser/lib/utils/index.js')
-rw-r--r--node_modules/terser/lib/utils/index.js295
1 files changed, 0 insertions, 295 deletions
diff --git a/node_modules/terser/lib/utils/index.js b/node_modules/terser/lib/utils/index.js
deleted file mode 100644
index 65fa989b..00000000
--- a/node_modules/terser/lib/utils/index.js
+++ /dev/null
@@ -1,295 +0,0 @@
-/***********************************************************************
-
- A JavaScript tokenizer / parser / beautifier / compressor.
- https://github.com/mishoo/UglifyJS2
-
- -------------------------------- (C) ---------------------------------
-
- Author: Mihai Bazon
- <mihai.bazon@gmail.com>
- http://mihai.bazon.net/blog
-
- Distributed under the BSD license:
-
- Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
- 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.
-
- ***********************************************************************/
-
-"use strict";
-
-import { AST_Node } from "../ast.js";
-
-function characters(str) {
- return str.split("");
-}
-
-function member(name, array) {
- return array.includes(name);
-}
-
-class DefaultsError extends Error {
- constructor(msg, defs) {
- super();
-
- this.name = "DefaultsError";
- this.message = msg;
- this.defs = defs;
- }
-}
-
-function defaults(args, defs, croak) {
- if (args === true) {
- args = {};
- } else if (args != null && typeof args === "object") {
- args = {...args};
- }
-
- const ret = args || {};
-
- if (croak) for (const i in ret) if (HOP(ret, i) && !HOP(defs, i)) {
- throw new DefaultsError("`" + i + "` is not a supported option", defs);
- }
-
- for (const i in defs) if (HOP(defs, i)) {
- if (!args || !HOP(args, i)) {
- ret[i] = defs[i];
- } else if (i === "ecma") {
- let ecma = args[i] | 0;
- if (ecma > 5 && ecma < 2015) ecma += 2009;
- ret[i] = ecma;
- } else {
- ret[i] = (args && HOP(args, i)) ? args[i] : defs[i];
- }
- }
-
- return ret;
-}
-
-function noop() {}
-function return_false() { return false; }
-function return_true() { return true; }
-function return_this() { return this; }
-function return_null() { return null; }
-
-var MAP = (function() {
- function MAP(a, tw, allow_splicing = true) {
- const new_a = [];
-
- for (let i = 0; i < a.length; ++i) {
- let item = a[i];
- let ret = item.transform(tw, allow_splicing);
-
- if (ret instanceof AST_Node) {
- new_a.push(ret);
- } else if (ret instanceof Splice) {
- new_a.push(...ret.v);
- }
- }
-
- return new_a;
- }
-
- MAP.splice = function(val) { return new Splice(val); };
- MAP.skip = {};
- function Splice(val) { this.v = val; }
- return MAP;
-})();
-
-function make_node(ctor, orig, props) {
- if (!props) props = {};
- if (orig) {
- if (!props.start) props.start = orig.start;
- if (!props.end) props.end = orig.end;
- }
- return new ctor(props);
-}
-
-function push_uniq(array, el) {
- if (!array.includes(el))
- array.push(el);
-}
-
-function string_template(text, props) {
- return text.replace(/{(.+?)}/g, function(str, p) {
- return props && props[p];
- });
-}
-
-function remove(array, el) {
- for (var i = array.length; --i >= 0;) {
- if (array[i] === el) array.splice(i, 1);
- }
-}
-
-function mergeSort(array, cmp) {
- if (array.length < 2) return array.slice();
- function merge(a, b) {
- var r = [], ai = 0, bi = 0, i = 0;
- while (ai < a.length && bi < b.length) {
- cmp(a[ai], b[bi]) <= 0
- ? r[i++] = a[ai++]
- : r[i++] = b[bi++];
- }
- if (ai < a.length) r.push.apply(r, a.slice(ai));
- if (bi < b.length) r.push.apply(r, b.slice(bi));
- return r;
- }
- function _ms(a) {
- if (a.length <= 1)
- return a;
- var m = Math.floor(a.length / 2), left = a.slice(0, m), right = a.slice(m);
- left = _ms(left);
- right = _ms(right);
- return merge(left, right);
- }
- return _ms(array);
-}
-
-function makePredicate(words) {
- if (!Array.isArray(words)) words = words.split(" ");
-
- return new Set(words.sort());
-}
-
-function map_add(map, key, value) {
- if (map.has(key)) {
- map.get(key).push(value);
- } else {
- map.set(key, [ value ]);
- }
-}
-
-function map_from_object(obj) {
- var map = new Map();
- for (var key in obj) {
- if (HOP(obj, key) && key.charAt(0) === "$") {
- map.set(key.substr(1), obj[key]);
- }
- }
- return map;
-}
-
-function map_to_object(map) {
- var obj = Object.create(null);
- map.forEach(function (value, key) {
- obj["$" + key] = value;
- });
- return obj;
-}
-
-function HOP(obj, prop) {
- return Object.prototype.hasOwnProperty.call(obj, prop);
-}
-
-function keep_name(keep_setting, name) {
- return keep_setting === true
- || (keep_setting instanceof RegExp && keep_setting.test(name));
-}
-
-var lineTerminatorEscape = {
- "\0": "0",
- "\n": "n",
- "\r": "r",
- "\u2028": "u2028",
- "\u2029": "u2029",
-};
-function regexp_source_fix(source) {
- // V8 does not escape line terminators in regexp patterns in node 12
- // We'll also remove literal \0
- return source.replace(/[\0\n\r\u2028\u2029]/g, function (match, offset) {
- var escaped = source[offset - 1] == "\\"
- && (source[offset - 2] != "\\"
- || /(?:^|[^\\])(?:\\{2})*$/.test(source.slice(0, offset - 1)));
- return (escaped ? "" : "\\") + lineTerminatorEscape[match];
- });
-}
-
-// Subset of regexps that is not going to cause regexp based DDOS
-// https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS
-const re_safe_regexp = /^[\\/|\0\s\w^$.[\]()]*$/;
-
-/** Check if the regexp is safe for Terser to create without risking a RegExp DOS */
-export const regexp_is_safe = (source) => re_safe_regexp.test(source);
-
-const all_flags = "dgimsuyv";
-function sort_regexp_flags(flags) {
- const existing_flags = new Set(flags.split(""));
- let out = "";
- for (const flag of all_flags) {
- if (existing_flags.has(flag)) {
- out += flag;
- existing_flags.delete(flag);
- }
- }
- if (existing_flags.size) {
- // Flags Terser doesn't know about
- existing_flags.forEach(flag => { out += flag; });
- }
- return out;
-}
-
-function has_annotation(node, annotation) {
- return node._annotations & annotation;
-}
-
-function set_annotation(node, annotation) {
- node._annotations |= annotation;
-}
-
-function clear_annotation(node, annotation) {
- node._annotations &= ~annotation;
-}
-
-export {
- characters,
- defaults,
- HOP,
- keep_name,
- make_node,
- makePredicate,
- map_add,
- map_from_object,
- map_to_object,
- MAP,
- member,
- mergeSort,
- noop,
- push_uniq,
- regexp_source_fix,
- remove,
- return_false,
- return_null,
- return_this,
- return_true,
- sort_regexp_flags,
- string_template,
- has_annotation,
- set_annotation,
- clear_annotation,
-};