J. S. Choi 35e4e1f067 Hack-pipe proposal with % topic token (#13416)
Co-authored-by: Federico Ciardi <fed.ciardi@gmail.com>
2021-08-03 23:30:16 +02:00

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;
},
};
});