prettier/website/playground/index.js

100 lines
2.2 KiB
JavaScript
Raw Normal View History

2018-04-12 03:01:36 +03:00
import "codemirror-graphql/mode";
2018-04-12 00:22:03 +03:00
import React from "react";
import ReactDOM from "react-dom";
2018-04-12 00:22:03 +03:00
import Playground from "./Playground";
2018-04-17 22:42:03 +03:00
import VersionLink from "./VersionLink";
2018-04-17 22:09:37 +03:00
import WorkerApi from "./WorkerApi";
2018-04-17 22:42:03 +03:00
const ENABLED_OPTIONS = [
"parser",
"printWidth",
"tabWidth",
"useTabs",
{ name: "semi", inverted: true },
"singleQuote",
{ name: "bracketSpacing", inverted: true },
"jsxBracketSameLine",
"arrowParens",
"trailingComma",
"proseWrap",
"insertPragma",
"requirePragma"
].map(option => (typeof option === "string" ? { name: option } : option));
class App extends React.Component {
constructor() {
super();
this.state = { loaded: false };
this.worker = new WorkerApi("/worker.js");
}
componentDidMount() {
this.worker
.postMessage({ type: "meta" })
.then(({ supportInfo, version }) => {
this.setState({
loaded: true,
availableOptions: parsePrettierOptions(supportInfo),
version: fixPrettierVersion(version)
});
});
}
render() {
const { loaded, availableOptions, version } = this.state;
2018-04-17 23:29:44 +03:00
if (!loaded) {
return "Loading...";
}
2018-04-17 22:42:03 +03:00
return (
<React.Fragment>
<VersionLink version={version} />
<Playground
worker={this.worker}
availableOptions={availableOptions}
version={version}
/>
</React.Fragment>
);
}
}
ReactDOM.render(<App />, document.getElementById("root"));
function parsePrettierOptions(supportInfo) {
const supportedOptions = supportInfo.options.reduce((acc, option) => {
acc[option.name] = option;
return acc;
}, {});
return ENABLED_OPTIONS.reduce((optionsList, optionConfig) => {
2018-04-17 23:29:44 +03:00
if (!supportedOptions[optionConfig.name]) {
return optionsList;
}
2018-04-17 22:42:03 +03:00
const option = Object.assign(
{},
optionConfig,
supportedOptions[optionConfig.name]
);
option.cliName =
"--" +
(option.inverted ? "no-" : "") +
option.name.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();
optionsList.push(option);
return optionsList;
}, []);
}
function fixPrettierVersion(version) {
const match = version.match(/^\d+\.\d+\.\d+-pr.(\d+)$/);
if (match) {
return `pr-${match[1]}`;
}
return version;
}