Files
bitburner-src/src/ScriptEditor/ui/utils.ts
T

68 lines
1.9 KiB
TypeScript

import { GetServer } from "../../Server/AllServers";
import { editor, Uri } from "monaco-editor";
import { OpenScript } from "./OpenScript";
import { getFileType, FileType } from "../../utils/ScriptTransformer";
import { throwIfReachable } from "../../utils/helpers/throwIfReachable";
function getServerCode(scripts: OpenScript[], index: number): string | null {
const openScript = scripts[index];
const server = GetServer(openScript.hostname);
if (server === null) {
return null;
}
const data = server.getContentFile(openScript.path)?.content ?? null;
return data;
}
function isUnsavedFile(scripts: OpenScript[], index: number): boolean {
const openScript = scripts[index];
const serverData = getServerCode(scripts, index);
if (serverData === null) {
return true;
}
return serverData !== openScript.code;
}
function reorder(list: unknown[], startIndex: number, endIndex: number): void {
const [removed] = list.splice(startIndex, 1);
list.splice(endIndex, 0, removed);
}
function makeModel(hostname: string, filename: string, code: string): editor.ITextModel {
const uri = Uri.from({
scheme: "memory",
path: `${hostname}/${filename}`,
});
// If there is a model with this URI and it's not disposed, return it.
const model = editor.getModel(uri);
if (model && !model.isDisposed()) {
return model;
}
let language;
const fileType = getFileType(filename);
switch (fileType) {
case FileType.PLAINTEXT:
language = "plaintext";
break;
case FileType.JSON:
language = "json";
break;
case FileType.JS:
case FileType.JSX:
language = "javascript";
break;
case FileType.TS:
case FileType.TSX:
language = "typescript";
break;
case FileType.NS1:
language = "javascript";
break;
default:
throwIfReachable(fileType);
}
return editor.createModel(code, language, uri);
}
export { getServerCode, isUnsavedFile, reorder, makeModel };