diff --git a/packages/babel-parser/src/plugin-utils.js b/packages/babel-parser/src/plugin-utils.js index d6d2612096ae..69cc39f7acb2 100644 --- a/packages/babel-parser/src/plugin-utils.js +++ b/packages/babel-parser/src/plugin-utils.js @@ -18,6 +18,28 @@ export function hasPlugin(plugins: PluginList, name: string): boolean { }); } +export function getPluginOption( + plugins: PluginList, + name: string, + option: string, +) { + const plugin = plugins.find(plugin => { + if (Array.isArray(plugin)) { + return plugin[0] === name; + } else { + return plugin === name; + } + }); + + if (plugin && Array.isArray(plugin)) { + return plugin[1][option]; + } + + return null; +} + +const PIPELINE_PROPOSALS = ["minimal"]; + export function validatePlugins(plugins: PluginList) { if ( hasPlugin(plugins, "decorators") && @@ -31,6 +53,18 @@ export function validatePlugins(plugins: PluginList) { if (hasPlugin(plugins, "flow") && hasPlugin(plugins, "typescript")) { throw new Error("Cannot combine flow and typescript plugins."); } + + if ( + hasPlugin(plugins, "pipelineOperator") && + !PIPELINE_PROPOSALS.includes( + getPluginOption(plugins, "pipelineOperator", "proposal"), + ) + ) { + throw new Error( + "'pipelineOperator' requires 'proposal' option whose value should be one of: " + + PIPELINE_PROPOSALS.join(", "), + ); + } } // These plugins are defined using a mixin which extends the parser class. diff --git a/packages/babel-parser/test/fixtures/experimental/nullish-coalescing-operator/with-pipeline/options.json b/packages/babel-parser/test/fixtures/experimental/nullish-coalescing-operator/with-pipeline/options.json index 37fbfac05f2a..7a167840fb0e 100644 --- a/packages/babel-parser/test/fixtures/experimental/nullish-coalescing-operator/with-pipeline/options.json +++ b/packages/babel-parser/test/fixtures/experimental/nullish-coalescing-operator/with-pipeline/options.json @@ -1,4 +1,3 @@ { - "plugins": ["nullishCoalescingOperator", "pipelineOperator"] + "plugins": ["nullishCoalescingOperator", ["pipelineOperator", { "proposal": "minimal" }]] } - \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/arrow-requires-parens-with-parend-args/options.json b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/arrow-requires-parens-with-parend-args/options.json deleted file mode 100644 index 120167aad9cf..000000000000 --- a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/arrow-requires-parens-with-parend-args/options.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "plugins": ["pipelineOperator"], - "throws": "Unexpected token, expected \";\" (1:10)" -} diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/arrow-requires-parens/options.json b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/arrow-requires-parens/options.json deleted file mode 100644 index 6f196466a493..000000000000 --- a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/arrow-requires-parens/options.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "plugins": ["pipelineOperator"], - "throws": "Unexpected token, expected \";\" (1:8)" -} diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/await-requires-parens/options.json b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/await-requires-parens/options.json deleted file mode 100644 index 599d48a46961..000000000000 --- a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/await-requires-parens/options.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "plugins": ["pipelineOperator"] -} diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/base/options.json b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/base/options.json deleted file mode 100644 index 599d48a46961..000000000000 --- a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/base/options.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "plugins": ["pipelineOperator"] -} diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/chain/options.json b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/chain/options.json deleted file mode 100644 index 599d48a46961..000000000000 --- a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/chain/options.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "plugins": ["pipelineOperator"] -} diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/base/input.js b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/invalid-proposal/input.js similarity index 100% rename from packages/babel-parser/test/fixtures/experimental/pipeline-operator/base/input.js rename to packages/babel-parser/test/fixtures/experimental/pipeline-operator/invalid-proposal/input.js diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/invalid-proposal/options.json b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/invalid-proposal/options.json new file mode 100644 index 000000000000..e2bb752988d3 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/invalid-proposal/options.json @@ -0,0 +1,6 @@ +{ + "plugins": [ + ["pipelineOperator", { "proposal": "invalid" }] + ], + "throws": "'pipelineOperator' requires 'proposal' option whose value should be one of: minimal (1:0)" +} diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/multiline/options.json b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/multiline/options.json deleted file mode 100644 index 599d48a46961..000000000000 --- a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/multiline/options.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "plugins": ["pipelineOperator"] -} diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/precedence/options.json b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/precedence/options.json deleted file mode 100644 index 599d48a46961..000000000000 --- a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/precedence/options.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "plugins": ["pipelineOperator"] -} diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/arrow-requires-parens-with-parend-args/input.js b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-arrow-requires-parens-with-parend-args/input.js similarity index 100% rename from packages/babel-parser/test/fixtures/experimental/pipeline-operator/arrow-requires-parens-with-parend-args/input.js rename to packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-arrow-requires-parens-with-parend-args/input.js diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-arrow-requires-parens-with-parend-args/options.json b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-arrow-requires-parens-with-parend-args/options.json new file mode 100644 index 000000000000..b4e236359dd1 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-arrow-requires-parens-with-parend-args/options.json @@ -0,0 +1,6 @@ +{ + "plugins": [ + ["pipelineOperator", { "proposal": "minimal" }] + ], + "throws": "Unexpected token, expected \";\" (1:10)" +} diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/arrow-requires-parens/input.js b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-arrow-requires-parens/input.js similarity index 100% rename from packages/babel-parser/test/fixtures/experimental/pipeline-operator/arrow-requires-parens/input.js rename to packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-arrow-requires-parens/input.js diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-arrow-requires-parens/options.json b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-arrow-requires-parens/options.json new file mode 100644 index 000000000000..551ef0ba6c76 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-arrow-requires-parens/options.json @@ -0,0 +1,6 @@ +{ + "plugins": [ + ["pipelineOperator", { "proposal": "minimal" }] + ], + "throws": "Unexpected token, expected \";\" (1:8)" +} diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/await-requires-parens/input.js b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-await-requires-parens/input.js similarity index 100% rename from packages/babel-parser/test/fixtures/experimental/pipeline-operator/await-requires-parens/input.js rename to packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-await-requires-parens/input.js diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-await-requires-parens/options.json b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-await-requires-parens/options.json new file mode 100644 index 000000000000..f96a57c74821 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-await-requires-parens/options.json @@ -0,0 +1,5 @@ +{ + "plugins": [ + ["pipelineOperator", { "proposal": "minimal" }] + ] +} diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/await-requires-parens/output.json b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-await-requires-parens/output.json similarity index 100% rename from packages/babel-parser/test/fixtures/experimental/pipeline-operator/await-requires-parens/output.json rename to packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-await-requires-parens/output.json diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/ban-await-f/input.js b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-ban-await-f/input.js similarity index 100% rename from packages/babel-parser/test/fixtures/experimental/pipeline-operator/ban-await-f/input.js rename to packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-ban-await-f/input.js diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/ban-await/options.json b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-ban-await-f/options.json similarity index 61% rename from packages/babel-parser/test/fixtures/experimental/pipeline-operator/ban-await/options.json rename to packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-ban-await-f/options.json index d964de6b4d2b..126164b9ee52 100644 --- a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/ban-await/options.json +++ b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-ban-await-f/options.json @@ -1,4 +1,6 @@ { - "plugins": ["pipelineOperator"], + "plugins": [ + ["pipelineOperator", { "proposal": "minimal" }] + ], "throws": "Unexpected \"await\" after pipeline body; await must have parentheses in minimal proposal (2:14)" } diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/ban-await/input.js b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-ban-await/input.js similarity index 100% rename from packages/babel-parser/test/fixtures/experimental/pipeline-operator/ban-await/input.js rename to packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-ban-await/input.js diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/ban-await-f/options.json b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-ban-await/options.json similarity index 61% rename from packages/babel-parser/test/fixtures/experimental/pipeline-operator/ban-await-f/options.json rename to packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-ban-await/options.json index d964de6b4d2b..126164b9ee52 100644 --- a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/ban-await-f/options.json +++ b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-ban-await/options.json @@ -1,4 +1,6 @@ { - "plugins": ["pipelineOperator"], + "plugins": [ + ["pipelineOperator", { "proposal": "minimal" }] + ], "throws": "Unexpected \"await\" after pipeline body; await must have parentheses in minimal proposal (2:14)" } diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-base/input.js b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-base/input.js new file mode 100644 index 000000000000..cf3443941ff0 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-base/input.js @@ -0,0 +1 @@ +a |> b diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-base/options.json b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-base/options.json new file mode 100644 index 000000000000..f96a57c74821 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-base/options.json @@ -0,0 +1,5 @@ +{ + "plugins": [ + ["pipelineOperator", { "proposal": "minimal" }] + ] +} diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/base/output.json b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-base/output.json similarity index 100% rename from packages/babel-parser/test/fixtures/experimental/pipeline-operator/base/output.json rename to packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-base/output.json diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/chain/input.js b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-chain/input.js similarity index 100% rename from packages/babel-parser/test/fixtures/experimental/pipeline-operator/chain/input.js rename to packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-chain/input.js diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-chain/options.json b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-chain/options.json new file mode 100644 index 000000000000..f96a57c74821 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-chain/options.json @@ -0,0 +1,5 @@ +{ + "plugins": [ + ["pipelineOperator", { "proposal": "minimal" }] + ] +} diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/chain/output.json b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-chain/output.json similarity index 100% rename from packages/babel-parser/test/fixtures/experimental/pipeline-operator/chain/output.json rename to packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-chain/output.json diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/multiline/input.js b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-multiline/input.js similarity index 100% rename from packages/babel-parser/test/fixtures/experimental/pipeline-operator/multiline/input.js rename to packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-multiline/input.js diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-multiline/options.json b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-multiline/options.json new file mode 100644 index 000000000000..f96a57c74821 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-multiline/options.json @@ -0,0 +1,5 @@ +{ + "plugins": [ + ["pipelineOperator", { "proposal": "minimal" }] + ] +} diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/multiline/output.json b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-multiline/output.json similarity index 100% rename from packages/babel-parser/test/fixtures/experimental/pipeline-operator/multiline/output.json rename to packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-multiline/output.json diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/precedence/input.js b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-precedence/input.js similarity index 100% rename from packages/babel-parser/test/fixtures/experimental/pipeline-operator/precedence/input.js rename to packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-precedence/input.js diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-precedence/options.json b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-precedence/options.json new file mode 100644 index 000000000000..f96a57c74821 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-precedence/options.json @@ -0,0 +1,5 @@ +{ + "plugins": [ + ["pipelineOperator", { "proposal": "minimal" }] + ] +} diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/precedence/output.json b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-precedence/output.json similarity index 100% rename from packages/babel-parser/test/fixtures/experimental/pipeline-operator/precedence/output.json rename to packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-precedence/output.json diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/with-arrow-parend-params/input.js b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-with-arrow-parend-params/input.js similarity index 100% rename from packages/babel-parser/test/fixtures/experimental/pipeline-operator/with-arrow-parend-params/input.js rename to packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-with-arrow-parend-params/input.js diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-with-arrow-parend-params/options.json b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-with-arrow-parend-params/options.json new file mode 100644 index 000000000000..f96a57c74821 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-with-arrow-parend-params/options.json @@ -0,0 +1,5 @@ +{ + "plugins": [ + ["pipelineOperator", { "proposal": "minimal" }] + ] +} diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/with-arrow-parend-params/output.json b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-with-arrow-parend-params/output.json similarity index 100% rename from packages/babel-parser/test/fixtures/experimental/pipeline-operator/with-arrow-parend-params/output.json rename to packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-with-arrow-parend-params/output.json diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/with-arrow/input.js b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-with-arrow/input.js similarity index 100% rename from packages/babel-parser/test/fixtures/experimental/pipeline-operator/with-arrow/input.js rename to packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-with-arrow/input.js diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-with-arrow/options.json b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-with-arrow/options.json new file mode 100644 index 000000000000..f96a57c74821 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-with-arrow/options.json @@ -0,0 +1,5 @@ +{ + "plugins": [ + ["pipelineOperator", { "proposal": "minimal" }] + ] +} diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/with-arrow/output.json b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-with-arrow/output.json similarity index 100% rename from packages/babel-parser/test/fixtures/experimental/pipeline-operator/with-arrow/output.json rename to packages/babel-parser/test/fixtures/experimental/pipeline-operator/proposal-minimal-with-arrow/output.json diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/with-arrow-parend-params/options.json b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/with-arrow-parend-params/options.json deleted file mode 100644 index 599d48a46961..000000000000 --- a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/with-arrow-parend-params/options.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "plugins": ["pipelineOperator"] -} diff --git a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/with-arrow/options.json b/packages/babel-parser/test/fixtures/experimental/pipeline-operator/with-arrow/options.json deleted file mode 100644 index 599d48a46961..000000000000 --- a/packages/babel-parser/test/fixtures/experimental/pipeline-operator/with-arrow/options.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "plugins": ["pipelineOperator"] -}