summaryrefslogtreecommitdiff
path: root/node_modules/terser/lib/compress/native-objects.js
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2023-10-31 15:37:35 +0800
committerlittleblack111 <littleblack11111@gmail.com>2023-10-31 15:37:35 +0800
commitd5f14083061f2ce6a42313188443a42e30796320 (patch)
treecc6a9889e08b29595a76a33b9e7b4ef84866468b /node_modules/terser/lib/compress/native-objects.js
parentb1a6ea021f29f182b62f9f81024a3d8ac8621b7f (diff)
added make browserlist(autoprefixer) work fixed
Diffstat (limited to 'node_modules/terser/lib/compress/native-objects.js')
-rw-r--r--node_modules/terser/lib/compress/native-objects.js206
1 files changed, 206 insertions, 0 deletions
diff --git a/node_modules/terser/lib/compress/native-objects.js b/node_modules/terser/lib/compress/native-objects.js
new file mode 100644
index 00000000..d7cb7042
--- /dev/null
+++ b/node_modules/terser/lib/compress/native-objects.js
@@ -0,0 +1,206 @@
+/***********************************************************************
+
+ 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.
+
+ ***********************************************************************/
+
+import { makePredicate } from "../utils/index.js";
+
+// Lists of native methods, useful for `unsafe` option which assumes they exist.
+// Note: Lots of methods and functions are missing here, in case they aren't pure
+// or not available in all JS environments.
+
+function make_nested_lookup(obj) {
+ const out = new Map();
+ for (var key of Object.keys(obj)) {
+ out.set(key, makePredicate(obj[key]));
+ }
+
+ const does_have = (global_name, fname) => {
+ const inner_map = out.get(global_name);
+ return inner_map != null && inner_map.has(fname);
+ };
+ return does_have;
+}
+
+// Objects which are safe to access without throwing or causing a side effect.
+// Usually we'd check the `unsafe` option first but these are way too common for that
+export const pure_prop_access_globals = new Set([
+ "Number",
+ "String",
+ "Array",
+ "Object",
+ "Function",
+ "Promise",
+]);
+
+const object_methods = [
+ "constructor",
+ "toString",
+ "valueOf",
+];
+
+export const is_pure_native_method = make_nested_lookup({
+ Array: [
+ "at",
+ "flat",
+ "includes",
+ "indexOf",
+ "join",
+ "lastIndexOf",
+ "slice",
+ ...object_methods,
+ ],
+ Boolean: object_methods,
+ Function: object_methods,
+ Number: [
+ "toExponential",
+ "toFixed",
+ "toPrecision",
+ ...object_methods,
+ ],
+ Object: object_methods,
+ RegExp: [
+ "test",
+ ...object_methods,
+ ],
+ String: [
+ "at",
+ "charAt",
+ "charCodeAt",
+ "charPointAt",
+ "concat",
+ "endsWith",
+ "fromCharCode",
+ "fromCodePoint",
+ "includes",
+ "indexOf",
+ "italics",
+ "lastIndexOf",
+ "localeCompare",
+ "match",
+ "matchAll",
+ "normalize",
+ "padStart",
+ "padEnd",
+ "repeat",
+ "replace",
+ "replaceAll",
+ "search",
+ "slice",
+ "split",
+ "startsWith",
+ "substr",
+ "substring",
+ "repeat",
+ "toLocaleLowerCase",
+ "toLocaleUpperCase",
+ "toLowerCase",
+ "toUpperCase",
+ "trim",
+ "trimEnd",
+ "trimStart",
+ ...object_methods,
+ ],
+});
+
+export const is_pure_native_fn = make_nested_lookup({
+ 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",
+ "hasOwn",
+ "keys",
+ ],
+ String: [
+ "fromCharCode",
+ ],
+});
+
+// Known numeric values which come with JS environments
+export const is_pure_native_value = make_nested_lookup({
+ Math: [
+ "E",
+ "LN10",
+ "LN2",
+ "LOG2E",
+ "LOG10E",
+ "PI",
+ "SQRT1_2",
+ "SQRT2",
+ ],
+ Number: [
+ "MAX_VALUE",
+ "MIN_VALUE",
+ "NaN",
+ "NEGATIVE_INFINITY",
+ "POSITIVE_INFINITY",
+ ],
+});