diff options
author | Joel Kronqvist <joel.h.kronqvist@gmail.com> | 2022-03-05 19:02:27 +0200 |
---|---|---|
committer | Joel Kronqvist <joel.h.kronqvist@gmail.com> | 2022-03-05 19:02:27 +0200 |
commit | 5d309ff52cd399a6b71968a6b9a70c8ac0b98981 (patch) | |
tree | 360f7eb50f956e2367ef38fa1fc6ac7ac5258042 /node_modules/babel-preset-current-node-syntax/src/index.js | |
parent | b500a50f1b97d93c98b36ed9a980f8188d648147 (diff) | |
download | LYLLRuoka-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.js | 57 |
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 }); |