“use strict”;

Object.defineProperty(exports, “__esModule”, {

value: true

}); exports.default = generateMissingPluginMessage; const pluginNameMap = {

classProperties: {
  syntax: {
    name: "@babel/plugin-syntax-class-properties",
    url: "https://git.io/vb4yQ"
  },
  transform: {
    name: "@babel/plugin-proposal-class-properties",
    url: "https://git.io/vb4SL"
  }
},
decorators: {
  syntax: {
    name: "@babel/plugin-syntax-decorators",
    url: "https://git.io/vb4y9"
  },
  transform: {
    name: "@babel/plugin-proposal-decorators",
    url: "https://git.io/vb4ST"
  }
},
doExpressions: {
  syntax: {
    name: "@babel/plugin-syntax-do-expressions",
    url: "https://git.io/vb4yh"
  },
  transform: {
    name: "@babel/plugin-proposal-do-expressions",
    url: "https://git.io/vb4S3"
  }
},
dynamicImport: {
  syntax: {
    name: "@babel/plugin-syntax-dynamic-import",
    url: "https://git.io/vb4Sv"
  }
},
exportDefaultFrom: {
  syntax: {
    name: "@babel/plugin-syntax-export-default-from",
    url: "https://git.io/vb4SO"
  },
  transform: {
    name: "@babel/plugin-proposal-export-default-from",
    url: "https://git.io/vb4yH"
  }
},
exportNamespaceFrom: {
  syntax: {
    name: "@babel/plugin-syntax-export-namespace-from",
    url: "https://git.io/vb4Sf"
  },
  transform: {
    name: "@babel/plugin-proposal-export-namespace-from",
    url: "https://git.io/vb4SG"
  }
},
flow: {
  syntax: {
    name: "@babel/plugin-syntax-flow",
    url: "https://git.io/vb4yb"
  },
  transform: {
    name: "@babel/plugin-transform-flow-strip-types",
    url: "https://git.io/vb49g"
  }
},
functionBind: {
  syntax: {
    name: "@babel/plugin-syntax-function-bind",
    url: "https://git.io/vb4y7"
  },
  transform: {
    name: "@babel/plugin-proposal-function-bind",
    url: "https://git.io/vb4St"
  }
},
functionSent: {
  syntax: {
    name: "@babel/plugin-syntax-function-sent",
    url: "https://git.io/vb4yN"
  },
  transform: {
    name: "@babel/plugin-proposal-function-sent",
    url: "https://git.io/vb4SZ"
  }
},
importMeta: {
  syntax: {
    name: "@babel/plugin-syntax-import-meta",
    url: "https://git.io/vbKK6"
  }
},
jsx: {
  syntax: {
    name: "@babel/plugin-syntax-jsx",
    url: "https://git.io/vb4yA"
  },
  transform: {
    name: "@babel/plugin-transform-react-jsx",
    url: "https://git.io/vb4yd"
  }
},
logicalAssignment: {
  syntax: {
    name: "@babel/plugin-syntax-logical-assignment-operators",
    url: "https://git.io/vAlBp"
  },
  transform: {
    name: "@babel/plugin-proposal-logical-assignment-operators",
    url: "https://git.io/vAlRe"
  }
},
nullishCoalescingOperator: {
  syntax: {
    name: "@babel/plugin-syntax-nullish-coalescing-operator",
    url: "https://git.io/vb4yx"
  },
  transform: {
    name: "@babel/plugin-proposal-nullish-coalescing-operator",
    url: "https://git.io/vb4Se"
  }
},
numericSeparator: {
  syntax: {
    name: "@babel/plugin-syntax-numeric-separator",
    url: "https://git.io/vb4Sq"
  },
  transform: {
    name: "@babel/plugin-proposal-numeric-separator",
    url: "https://git.io/vb4yS"
  }
},
optionalChaining: {
  syntax: {
    name: "@babel/plugin-syntax-optional-chaining",
    url: "https://git.io/vb4Sc"
  },
  transform: {
    name: "@babel/plugin-proposal-optional-chaining",
    url: "https://git.io/vb4Sk"
  }
},
pipelineOperator: {
  syntax: {
    name: "@babel/plugin-syntax-pipeline-operator",
    url: "https://git.io/vb4yj"
  },
  transform: {
    name: "@babel/plugin-proposal-pipeline-operator",
    url: "https://git.io/vb4SU"
  }
},
throwExpressions: {
  syntax: {
    name: "@babel/plugin-syntax-throw-expressions",
    url: "https://git.io/vb4SJ"
  },
  transform: {
    name: "@babel/plugin-proposal-throw-expressions",
    url: "https://git.io/vb4yF"
  }
},
typescript: {
  syntax: {
    name: "@babel/plugin-syntax-typescript",
    url: "https://git.io/vb4SC"
  },
  transform: {
    name: "@babel/plugin-transform-typescript",
    url: "https://git.io/vb4Sm"
  }
},
asyncGenerators: {
  syntax: {
    name: "@babel/plugin-syntax-async-generators",
    url: "https://git.io/vb4SY"
  },
  transform: {
    name: "@babel/plugin-proposal-async-generator-functions",
    url: "https://git.io/vb4yp"
  }
},
objectRestSpread: {
  syntax: {
    name: "@babel/plugin-syntax-object-rest-spread",
    url: "https://git.io/vb4y5"
  },
  transform: {
    name: "@babel/plugin-proposal-object-rest-spread",
    url: "https://git.io/vb4Ss"
  }
},
optionalCatchBinding: {
  syntax: {
    name: "@babel/plugin-syntax-optional-catch-binding",
    url: "https://git.io/vb4Sn"
  },
  transform: {
    name: "@babel/plugin-proposal-optional-catch-binding",
    url: "https://git.io/vb4SI"
  }
}

};

const getNameURLCombination = ({

name,
url

}) => `${name} (${url})`;

function generateMissingPluginMessage(missingPluginName, loc, codeFrame) {

let helpMessage = `Support for the experimental syntax '${missingPluginName}' isn't currently enabled ` + `(${loc.line}:${loc.column + 1}):\n\n` + codeFrame;
const pluginInfo = pluginNameMap[missingPluginName];

if (pluginInfo) {
  const {
    syntax: syntaxPlugin,
    transform: transformPlugin
  } = pluginInfo;

  if (syntaxPlugin) {
    if (transformPlugin) {
      const transformPluginInfo = getNameURLCombination(transformPlugin);
      helpMessage += `\n\nAdd ${transformPluginInfo} to the 'plugins' section of your Babel config ` + `to enable transformation.`;
    } else {
      const syntaxPluginInfo = getNameURLCombination(syntaxPlugin);
      helpMessage += `\n\nAdd ${syntaxPluginInfo} to the 'plugins' section of your Babel config ` + `to enable parsing.`;
    }
  }
}

return helpMessage;

}