// pastebin.run
// Copyright (C) 2022 Konrad Borowski
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see .
import {
createEffect,
createResource,
Match,
onCleanup,
Setter,
Switch,
} from "solid-js";
import CodeView from "../models/CodeView";
import WrapperOptions from "../models/WrapperOptions";
import OutputBox from "./OutputBox";
import Spinner from "./Spinner";
export default function Output(props: {
codeView: CodeView;
stdin: string;
wrapperOptions: WrapperOptions;
setWrapperOptions: Setter;
}) {
const abortController = new AbortController();
const [output, { refetch }] = createResource(async () => {
const body = new URLSearchParams();
body.append("compilerOptions", props.wrapperOptions.compilerOptions);
body.append("code", props.codeView.code);
body.append("stdin", props.stdin);
return (
await fetch(`/api/v0/run/${props.wrapperOptions.wrapper.identifier}`, {
method: "POST",
body,
headers: {
"Content-Type": "application/x-www-form-urlencoded",
},
signal: abortController.signal,
})
).json();
});
createEffect(() => {
if (props.wrapperOptions.wrapper.isFormatter && output()?.status === 0) {
props.codeView.code = output().output.replace(
/\x7F(?:E[^\x7F]*|O)?/g,
""
);
if (!output().output.includes("\x7F")) {
props.setWrapperOptions();
}
}
});
onCleanup(() => abortController.abort());
return (
);
}