Strip types from prompt variants
We want Monaco to treat the prompt constructor as Typescript so we get type checks, but we actually want to save the prompt constructor as Javascript so we can run it directly without transpiling.
This commit is contained in:
@@ -2,12 +2,7 @@ import { type RouterOutputs } from "~/utils/api";
|
||||
import { type SliceCreator } from "./store";
|
||||
import loader from "@monaco-editor/loader";
|
||||
import openAITypes from "~/codegen/openai.types.ts.txt";
|
||||
import prettier from "prettier/standalone";
|
||||
import parserTypescript from "prettier/plugins/typescript";
|
||||
|
||||
// @ts-expect-error for some reason missing from types
|
||||
import parserEstree from "prettier/plugins/estree";
|
||||
import { type languages } from "monaco-editor/esm/vs/editor/editor.api";
|
||||
import formatPromptConstructor from "~/utils/formatPromptConstructor";
|
||||
|
||||
export const editorBackground = "#fafafa";
|
||||
|
||||
@@ -19,26 +14,6 @@ export type SharedVariantEditorSlice = {
|
||||
setScenarios: (scenarios: RouterOutputs["scenarios"]["list"]) => void;
|
||||
};
|
||||
|
||||
const customFormatter: languages.DocumentFormattingEditProvider = {
|
||||
provideDocumentFormattingEdits: async (model) => {
|
||||
const val = model.getValue();
|
||||
console.log("going to format!", val);
|
||||
const text = await prettier.format(val, {
|
||||
parser: "typescript",
|
||||
plugins: [parserTypescript, parserEstree],
|
||||
// We're showing these in pretty narrow panes so let's keep the print width low
|
||||
printWidth: 60,
|
||||
});
|
||||
|
||||
return [
|
||||
{
|
||||
range: model.getFullModelRange(),
|
||||
text,
|
||||
},
|
||||
];
|
||||
},
|
||||
};
|
||||
|
||||
export const createVariantEditorSlice: SliceCreator<SharedVariantEditorSlice> = (set, get) => ({
|
||||
monaco: loader.__getMonacoInstance(),
|
||||
loadMonaco: async () => {
|
||||
@@ -71,7 +46,16 @@ export const createVariantEditorSlice: SliceCreator<SharedVariantEditorSlice> =
|
||||
monaco.Uri.parse("file:///openai.types.ts"),
|
||||
);
|
||||
|
||||
monaco.languages.registerDocumentFormattingEditProvider("typescript", customFormatter);
|
||||
monaco.languages.registerDocumentFormattingEditProvider("typescript", {
|
||||
provideDocumentFormattingEdits: async (model) => {
|
||||
return [
|
||||
{
|
||||
range: model.getFullModelRange(),
|
||||
text: await formatPromptConstructor(model.getValue()),
|
||||
},
|
||||
];
|
||||
},
|
||||
});
|
||||
|
||||
set((state) => {
|
||||
state.sharedVariantEditor.monaco = monaco;
|
||||
|
||||
Reference in New Issue
Block a user