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";
|
2017-09-12 22:44:50 +03:00
|
|
|
|
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";
|
2017-06-13 19:20:13 +03:00
|
|
|
|
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;
|
|
|
|
}
|