aboutsummaryrefslogtreecommitdiff
path: root/node_modules/babel-preset-current-node-syntax/src/index.js
diff options
context:
space:
mode:
authorJoel Kronqvist <joel.h.kronqvist@gmail.com>2022-03-05 19:02:27 +0200
committerJoel Kronqvist <joel.h.kronqvist@gmail.com>2022-03-05 19:02:27 +0200
commit5d309ff52cd399a6b71968a6b9a70c8ac0b98981 (patch)
tree360f7eb50f956e2367ef38fa1fc6ac7ac5258042 /node_modules/babel-preset-current-node-syntax/src/index.js
parentb500a50f1b97d93c98b36ed9a980f8188d648147 (diff)
downloadLYLLRuoka-5d309ff52cd399a6b71968a6b9a70c8ac0b98981.tar.gz
LYLLRuoka-5d309ff52cd399a6b71968a6b9a70c8ac0b98981.zip
Added node_modules for the updating to work properly.
Diffstat (limited to 'node_modules/babel-preset-current-node-syntax/src/index.js')
-rw-r--r--node_modules/babel-preset-current-node-syntax/src/index.js57
1 files changed, 57 insertions, 0 deletions
diff --git a/node_modules/babel-preset-current-node-syntax/src/index.js b/node_modules/babel-preset-current-node-syntax/src/index.js
new file mode 100644
index 0000000..e0243bd
--- /dev/null
+++ b/node_modules/babel-preset-current-node-syntax/src/index.js
@@ -0,0 +1,57 @@
+const tests = {
+ // ECMAScript 2018
+ "object-rest-spread": ["({ ...{} })", "({ ...x } = {})"], // Babel 7.2.0
+ "async-generators": ["async function* f() {}"], // Babel 7.2.0
+
+ // ECMAScript 2019
+ "optional-catch-binding": ["try {} catch {}"], // Babel 7.2.0
+ "json-strings": ["'\\u2028'"], // Babel 7.2.0
+
+ // ECMAScript 2020
+ "bigint": ["1n"], // Babel 7.8.0
+ "optional-chaining": ["a?.b"], // Babel 7.9.0
+ "nullish-coalescing-operator": ["a ?? b"], // Babel 7.9.0
+ // import.meta is handled manually
+
+ // Stage 3
+ "numeric-separator": ["1_2"],
+ "class-properties": [
+ "(class { x = 1 })",
+ "(class { #x = 1 })",
+ "(class { #x() {} })",
+ ],
+ "logical-assignment-operators": ["a ||= b", "a &&= b", "a ??= c"],
+};
+
+const plugins = [];
+const works = (test) => {
+ try {
+ // Wrap the test in a function to only test the syntax, without executing it
+ (0, eval)(`(() => { ${test} })`);
+ return true;
+ } catch (_error) {
+ return false;
+ }
+};
+
+for (const [name, cases] of Object.entries(tests)) {
+ if (cases.some(works)) {
+ plugins.push(require.resolve(`@babel/plugin-syntax-${name}`));
+ }
+}
+
+// import.meta is only allowed in modules, and modules can only be evaluated
+// synchronously. For this reason, we cannot detect import.meta support at
+// runtime. It is supported starting from 10.4, so we can check the version.
+const major = parseInt(process.versions.node, 10);
+const minor = parseInt(process.versions.node.match(/^\d+\.(\d+)/)[1], 10);
+if (major > 10 || (major === 10 && minor >= 4)) {
+ plugins.push(require.resolve("@babel/plugin-syntax-import-meta"));
+}
+// Same for top level await - it is only supported in modules. It is supported
+// from 14.3.0
+if (major > 14 || (major === 14 && minor >= 3)) {
+ plugins.push(require.resolve("@babel/plugin-syntax-top-level-await"));
+}
+
+module.exports = () => ({ plugins });