drawDB/src/utils/index.js

89 lines
2.5 KiB
JavaScript
Raw Normal View History

2023-09-19 20:49:28 +08:00
import { Validator } from "jsonschema";
2023-09-19 20:49:31 +08:00
import { ddbSchema, jsonSchema } from "../schemas";
2023-09-19 20:49:28 +08:00
2023-09-19 20:50:39 +08:00
function enterFullscreen() {
2023-09-19 20:48:35 +08:00
const element = document.documentElement;
if (element.requestFullscreen) {
element.requestFullscreen();
} else if (element.mozRequestFullScreen) {
element.mozRequestFullScreen();
} else if (element.webkitRequestFullscreen) {
element.webkitRequestFullscreen();
} else if (element.msRequestFullscreen) {
element.msRequestFullscreen();
}
2023-09-19 20:50:39 +08:00
}
2023-09-19 20:48:35 +08:00
2023-09-19 20:50:39 +08:00
function exitFullscreen() {
2023-09-19 20:48:35 +08:00
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if (document.webkitExitFullscreen) {
document.webkitExitFullscreen();
} else if (document.msExitFullscreen) {
document.msExitFullscreen();
}
2023-09-19 20:50:39 +08:00
}
2023-09-19 20:48:35 +08:00
2023-09-19 20:50:39 +08:00
function jsonDiagramIsValid(obj) {
2023-09-19 20:49:28 +08:00
return new Validator().validate(obj, jsonSchema).valid;
2023-09-19 20:50:39 +08:00
}
2023-09-19 20:49:28 +08:00
2023-09-19 20:50:39 +08:00
function ddbDiagramIsValid(obj) {
2023-09-19 20:49:31 +08:00
return new Validator().validate(obj, ddbSchema).valid;
2023-09-19 20:50:39 +08:00
}
2023-09-19 20:49:31 +08:00
2023-09-19 20:49:39 +08:00
function dataURItoBlob(dataUrl) {
const byteString = atob(dataUrl.split(",")[1]);
const mimeString = dataUrl.split(",")[0].split(":")[1].split(";")[0];
const arrayBuffer = new ArrayBuffer(byteString.length);
const intArray = new Uint8Array(arrayBuffer);
for (let i = 0; i < byteString.length; i++) {
intArray[i] = byteString.charCodeAt(i);
}
return new Blob([intArray], { type: mimeString });
}
2023-09-19 20:50:39 +08:00
function jsonToSQL(obj) {
return obj.tables
.map(
(table) =>
`${
table.comment === "" ? "" : `/* ${table.comment} */\n`
}CREATE TABLE \`${table.name}\` (\n${table.fields
.map(
(field) =>
`${field.comment === "" ? "" : `\t-- ${field.comment}\n`}\t\`${
field.name
}\` ${field.type}${
2023-09-19 20:50:43 +08:00
field.length !== "n/a"
? `(${field.length})`
: field.enumValues
? `(${field.enumValues.map((v) => `"${v}"`).join(", ")})`
: ""
}${field.notNull ? " NOT NULL" : ""}${
field.increment ? " AUTO_INCREMENT" : ""
}${field.unique ? " UNIQUE" : ""}${
field.default !== "" ? ` DEFAULT ${field.default}` : ""
},`
2023-09-19 20:50:39 +08:00
)
.join("\n")}\n\tPRIMARY KEY(${table.fields
.filter((f) => f.primary)
.map((f) => `\`${f.name}\``)
.join(", ")})\n);`
2023-09-19 20:50:39 +08:00
)
.join("\n");
}
2023-09-19 20:49:31 +08:00
export {
enterFullscreen,
exitFullscreen,
jsonDiagramIsValid,
ddbDiagramIsValid,
2023-09-19 20:49:39 +08:00
dataURItoBlob,
2023-09-19 20:50:39 +08:00
jsonToSQL,
2023-09-19 20:49:31 +08:00
};