37 lines
1.3 KiB
JavaScript
37 lines
1.3 KiB
JavaScript
import { declare } from "@babel/helper-plugin-utils";
|
|
|
|
const PIPELINE_PROPOSALS = ["minimal", "fsharp", "hack", "smart"];
|
|
const TOPIC_TOKENS = ["%", "#"];
|
|
const documentationURL =
|
|
"https://babeljs.io/docs/en/babel-plugin-proposal-pipeline-operator";
|
|
|
|
export default declare((api, { proposal, topicToken }) => {
|
|
api.assertVersion(7);
|
|
|
|
if (typeof proposal !== "string" || !PIPELINE_PROPOSALS.includes(proposal)) {
|
|
const proposalList = PIPELINE_PROPOSALS.map(p => `"${p}"`).join(", ");
|
|
throw new Error(
|
|
`The pipeline plugin requires a "proposal" option. "proposal" must be one of: ${proposalList}. See <${documentationURL}>.`,
|
|
);
|
|
}
|
|
|
|
if (proposal === "hack" && !TOPIC_TOKENS.includes(topicToken)) {
|
|
const topicTokenList = TOPIC_TOKENS.map(t => `"${t}"`).join(", ");
|
|
throw new Error(
|
|
`The pipeline plugin in "proposal": "hack" mode also requires a "topicToken" option. "topicToken" must be one of: ${topicTokenList}. See <${documentationURL}>.`,
|
|
);
|
|
}
|
|
|
|
return {
|
|
name: "syntax-pipeline-operator",
|
|
|
|
manipulateOptions(opts, parserOpts) {
|
|
// Add parser options.
|
|
parserOpts.plugins.push(["pipelineOperator", { proposal, topicToken }]);
|
|
|
|
// Add generator options.
|
|
opts.generatorOpts.topicToken = topicToken;
|
|
},
|
|
};
|
|
});
|