Fix dependencies

This commit is contained in:
1ilit 2024-02-12 21:05:21 +02:00
parent 604bed67dd
commit 7cea7c9f5f
4 changed files with 217 additions and 234 deletions

194
package-lock.json generated
View File

@ -24,13 +24,9 @@
"react": "^18.2.0", "react": "^18.2.0",
"react-cookie": "^7.0.1", "react-cookie": "^7.0.1",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"react-google-recaptcha": "^3.1.0",
"react-hotkeys-hook": "^4.4.1", "react-hotkeys-hook": "^4.4.1",
"react-icons": "^4.12.0", "react-icons": "^4.12.0",
"react-router": "^6.21.0",
"react-router-dom": "^6.21.0", "react-router-dom": "^6.21.0",
"socket.io-client": "^4.7.2",
"unique-names-generator": "^4.7.1",
"url": "^0.11.1" "url": "^0.11.1"
}, },
"devDependencies": { "devDependencies": {
@ -44,7 +40,7 @@
"eslint-plugin-react-refresh": "^0.4.5", "eslint-plugin-react-refresh": "^0.4.5",
"postcss": "^8.4.32", "postcss": "^8.4.32",
"tailwindcss": "^3.3.6", "tailwindcss": "^3.3.6",
"vite": "^5.0.8" "vite": "^5.0.11"
} }
}, },
"node_modules/@aashutoshrathi/word-wrap": { "node_modules/@aashutoshrathi/word-wrap": {
@ -1557,11 +1553,6 @@
"win32" "win32"
] ]
}, },
"node_modules/@socket.io/component-emitter": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz",
"integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg=="
},
"node_modules/@types/babel__core": { "node_modules/@types/babel__core": {
"version": "7.20.5", "version": "7.20.5",
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
@ -2347,6 +2338,7 @@
"version": "4.3.4", "version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dev": true,
"dependencies": { "dependencies": {
"ms": "2.1.2" "ms": "2.1.2"
}, },
@ -2457,26 +2449,6 @@
"integrity": "sha512-X4ze/9Sc3QWs6h92yerwqv7aB/uU8vCjZcrMjA8N9R1pjMFRe44dLsck5FzLilOYvcXuDn93B+bpGYyufc70gQ==", "integrity": "sha512-X4ze/9Sc3QWs6h92yerwqv7aB/uU8vCjZcrMjA8N9R1pjMFRe44dLsck5FzLilOYvcXuDn93B+bpGYyufc70gQ==",
"dev": true "dev": true
}, },
"node_modules/engine.io-client": {
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.3.tgz",
"integrity": "sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q==",
"dependencies": {
"@socket.io/component-emitter": "~3.1.0",
"debug": "~4.3.1",
"engine.io-parser": "~5.2.1",
"ws": "~8.11.0",
"xmlhttprequest-ssl": "~2.0.0"
}
},
"node_modules/engine.io-parser": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.1.tgz",
"integrity": "sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==",
"engines": {
"node": ">=10.0.0"
}
},
"node_modules/es-abstract": { "node_modules/es-abstract": {
"version": "1.22.3", "version": "1.22.3",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz",
@ -3075,9 +3047,9 @@
"dev": true "dev": true
}, },
"node_modules/follow-redirects": { "node_modules/follow-redirects": {
"version": "1.15.3", "version": "1.15.5",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz",
"integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==",
"funding": [ "funding": [
{ {
"type": "individual", "type": "individual",
@ -3819,6 +3791,16 @@
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
"dev": true "dev": true
}, },
"node_modules/isomorphic.js": {
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/isomorphic.js/-/isomorphic.js-0.2.5.tgz",
"integrity": "sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==",
"peer": true,
"funding": {
"type": "GitHub Sponsors ❤",
"url": "https://github.com/sponsors/dmonad"
}
},
"node_modules/iterator.prototype": { "node_modules/iterator.prototype": {
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz",
@ -3967,6 +3949,26 @@
"resolved": "https://registry.npmjs.org/lexical/-/lexical-0.12.5.tgz", "resolved": "https://registry.npmjs.org/lexical/-/lexical-0.12.5.tgz",
"integrity": "sha512-ZMqisIxNe+JBqaUa1Qmz7ghpvnmARHxgYz+F0rcXRtSPZtgEL8OT2c9xk8CJ4ccVpf+qRQlONzCEIZfQQHd/RA==" "integrity": "sha512-ZMqisIxNe+JBqaUa1Qmz7ghpvnmARHxgYz+F0rcXRtSPZtgEL8OT2c9xk8CJ4ccVpf+qRQlONzCEIZfQQHd/RA=="
}, },
"node_modules/lib0": {
"version": "0.2.88",
"resolved": "https://registry.npmjs.org/lib0/-/lib0-0.2.88.tgz",
"integrity": "sha512-KyroiEvCeZcZEMx5Ys+b4u4eEBbA1ch7XUaBhYpwa/nPMrzTjUhI4RfcytmQfYoTBPcdyx+FX6WFNIoNuJzJfQ==",
"peer": true,
"dependencies": {
"isomorphic.js": "^0.2.4"
},
"bin": {
"0gentesthtml": "bin/gentesthtml.js",
"0serve": "bin/0serve.js"
},
"engines": {
"node": ">=16"
},
"funding": {
"type": "GitHub Sponsors ❤",
"url": "https://github.com/sponsors/dmonad"
}
},
"node_modules/lilconfig": { "node_modules/lilconfig": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
@ -4085,10 +4087,17 @@
"node": "*" "node": "*"
} }
}, },
"node_modules/monaco-editor": {
"version": "0.46.0",
"resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.46.0.tgz",
"integrity": "sha512-ADwtLIIww+9FKybWscd7OCfm9odsFYHImBRI1v9AviGce55QY8raT+9ihH8jX/E/e6QVSGM+pKj4jSUSRmALNQ==",
"peer": true
},
"node_modules/ms": { "node_modules/ms": {
"version": "2.1.2", "version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
}, },
"node_modules/mz": { "node_modules/mz": {
"version": "2.7.0", "version": "2.7.0",
@ -4415,9 +4424,9 @@
} }
}, },
"node_modules/postcss": { "node_modules/postcss": {
"version": "8.4.32", "version": "8.4.35",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz",
"integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -4672,18 +4681,6 @@
"node": ">=0.10.0" "node": ">=0.10.0"
} }
}, },
"node_modules/react-async-script": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/react-async-script/-/react-async-script-1.2.0.tgz",
"integrity": "sha512-bCpkbm9JiAuMGhkqoAiC0lLkb40DJ0HOEJIku+9JDjxX3Rcs+ztEOG13wbrOskt3n2DTrjshhaQ/iay+SnGg5Q==",
"dependencies": {
"hoist-non-react-statics": "^3.3.0",
"prop-types": "^15.5.0"
},
"peerDependencies": {
"react": ">=16.4.1"
}
},
"node_modules/react-cookie": { "node_modules/react-cookie": {
"version": "7.0.1", "version": "7.0.1",
"resolved": "https://registry.npmjs.org/react-cookie/-/react-cookie-7.0.1.tgz", "resolved": "https://registry.npmjs.org/react-cookie/-/react-cookie-7.0.1.tgz",
@ -4737,18 +4734,6 @@
"react": ">=16.13.1" "react": ">=16.13.1"
} }
}, },
"node_modules/react-google-recaptcha": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/react-google-recaptcha/-/react-google-recaptcha-3.1.0.tgz",
"integrity": "sha512-cYW2/DWas8nEKZGD7SCu9BSuVz8iOcOLHChHyi7upUuVhkpkhYG/6N3KDiTQ3XAiZ2UAZkfvYKMfAHOzBOcGEg==",
"dependencies": {
"prop-types": "^15.5.0",
"react-async-script": "^1.2.0"
},
"peerDependencies": {
"react": ">=16.4.1"
}
},
"node_modules/react-hotkeys-hook": { "node_modules/react-hotkeys-hook": {
"version": "4.4.1", "version": "4.4.1",
"resolved": "https://registry.npmjs.org/react-hotkeys-hook/-/react-hotkeys-hook-4.4.1.tgz", "resolved": "https://registry.npmjs.org/react-hotkeys-hook/-/react-hotkeys-hook-4.4.1.tgz",
@ -5137,32 +5122,6 @@
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
} }
}, },
"node_modules/socket.io-client": {
"version": "4.7.2",
"resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.2.tgz",
"integrity": "sha512-vtA0uD4ibrYD793SOIAwlo8cj6haOeMHrGvwPxJsxH7CeIksqJ+3Zc06RvWTIFgiSqx4A3sOnTXpfAEE2Zyz6w==",
"dependencies": {
"@socket.io/component-emitter": "~3.1.0",
"debug": "~4.3.2",
"engine.io-client": "~6.5.2",
"socket.io-parser": "~4.2.4"
},
"engines": {
"node": ">=10.0.0"
}
},
"node_modules/socket.io-parser": {
"version": "4.2.4",
"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz",
"integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==",
"dependencies": {
"@socket.io/component-emitter": "~3.1.0",
"debug": "~4.3.1"
},
"engines": {
"node": ">=10.0.0"
}
},
"node_modules/source-map-js": { "node_modules/source-map-js": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
@ -5576,14 +5535,6 @@
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
} }
}, },
"node_modules/unique-names-generator": {
"version": "4.7.1",
"resolved": "https://registry.npmjs.org/unique-names-generator/-/unique-names-generator-4.7.1.tgz",
"integrity": "sha512-lMx9dX+KRmG8sq6gulYYpKWZc9RlGsgBR6aoO8Qsm3qvkSJ+3rAymr+TnV8EDMrIrwuFJ4kruzMWM/OpYzPoow==",
"engines": {
"node": ">=8"
}
},
"node_modules/universal-cookie": { "node_modules/universal-cookie": {
"version": "7.0.1", "version": "7.0.1",
"resolved": "https://registry.npmjs.org/universal-cookie/-/universal-cookie-7.0.1.tgz", "resolved": "https://registry.npmjs.org/universal-cookie/-/universal-cookie-7.0.1.tgz",
@ -5670,13 +5621,13 @@
} }
}, },
"node_modules/vite": { "node_modules/vite": {
"version": "5.0.10", "version": "5.1.1",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.0.10.tgz", "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.1.tgz",
"integrity": "sha512-2P8J7WWgmc355HUMlFrwofacvr98DAjoE52BfdbwQtyLH06XKwaL/FMnmKM2crF0iX4MpmMKoDlNCB1ok7zHCw==", "integrity": "sha512-wclpAgY3F1tR7t9LL5CcHC41YPkQIpKUGeIuT8MdNwNZr6OqOTLs7JX5vIHAtzqLWXts0T+GDrh9pN2arneKqg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"esbuild": "^0.19.3", "esbuild": "^0.19.3",
"postcss": "^8.4.32", "postcss": "^8.4.35",
"rollup": "^4.2.0" "rollup": "^4.2.0"
}, },
"bin": { "bin": {
@ -5820,34 +5771,6 @@
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
}, },
"node_modules/ws": {
"version": "8.11.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz",
"integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==",
"engines": {
"node": ">=10.0.0"
},
"peerDependencies": {
"bufferutil": "^4.0.1",
"utf-8-validate": "^5.0.2"
},
"peerDependenciesMeta": {
"bufferutil": {
"optional": true
},
"utf-8-validate": {
"optional": true
}
}
},
"node_modules/xmlhttprequest-ssl": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz",
"integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==",
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/yallist": { "node_modules/yallist": {
"version": "3.1.1", "version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
@ -5863,6 +5786,23 @@
"node": ">= 14" "node": ">= 14"
} }
}, },
"node_modules/yjs": {
"version": "13.6.12",
"resolved": "https://registry.npmjs.org/yjs/-/yjs-13.6.12.tgz",
"integrity": "sha512-KOT8ILoyVH2f/PxPadeu5kVVS055D1r3x1iFfJVJzFdnN98pVGM8H07NcKsO+fG3F7/0tf30Vnokf5YIqhU/iw==",
"peer": true,
"dependencies": {
"lib0": "^0.2.86"
},
"engines": {
"node": ">=16.0.0",
"npm": ">=8.0.0"
},
"funding": {
"type": "GitHub Sponsors ❤",
"url": "https://github.com/sponsors/dmonad"
}
},
"node_modules/yocto-queue": { "node_modules/yocto-queue": {
"version": "0.1.0", "version": "0.1.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",

View File

@ -26,13 +26,9 @@
"react": "^18.2.0", "react": "^18.2.0",
"react-cookie": "^7.0.1", "react-cookie": "^7.0.1",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"react-google-recaptcha": "^3.1.0",
"react-hotkeys-hook": "^4.4.1", "react-hotkeys-hook": "^4.4.1",
"react-icons": "^4.12.0", "react-icons": "^4.12.0",
"react-router": "^6.21.0",
"react-router-dom": "^6.21.0", "react-router-dom": "^6.21.0",
"socket.io-client": "^4.7.2",
"unique-names-generator": "^4.7.1",
"url": "^0.11.1" "url": "^0.11.1"
}, },
"devDependencies": { "devDependencies": {
@ -46,6 +42,9 @@
"eslint-plugin-react-refresh": "^0.4.5", "eslint-plugin-react-refresh": "^0.4.5",
"postcss": "^8.4.32", "postcss": "^8.4.32",
"tailwindcss": "^3.3.6", "tailwindcss": "^3.3.6",
"vite": "^5.0.8" "vite": "^5.0.11"
},
"overrides": {
"follow-redirects": "^1.15.4"
} }
} }

View File

@ -47,7 +47,7 @@ import {
jsonToPostgreSQL, jsonToPostgreSQL,
jsonToSQLite, jsonToSQLite,
jsonToMariaDB, jsonToMariaDB,
jsonToSQLServer jsonToSQLServer,
} from "../utils"; } from "../utils";
import { import {
AreaContext, AreaContext,
@ -66,7 +66,7 @@ import jsPDF from "jspdf";
import { useHotkeys } from "react-hotkeys-hook"; import { useHotkeys } from "react-hotkeys-hook";
import { Validator } from "jsonschema"; import { Validator } from "jsonschema";
import { areaSchema, noteSchema, tableSchema } from "../data/schemas"; import { areaSchema, noteSchema, tableSchema } from "../data/schemas";
import { Editor } from "@monaco-editor/react"; import Editor from "@monaco-editor/react";
import { db } from "../data/db"; import { db } from "../data/db";
import { useLiveQuery } from "dexie-react-hooks"; import { useLiveQuery } from "dexie-react-hooks";
import { Parser } from "node-sql-parser"; import { Parser } from "node-sql-parser";
@ -168,7 +168,7 @@ export default function ControlPanel({
const undo = () => { const undo = () => {
if (undoStack.length === 0) return; if (undoStack.length === 0) return;
const a = undoStack[undoStack.length - 1]; const a = undoStack[undoStack.length - 1];
setUndoStack(prev => prev.filter((e, i) => i !== prev.length - 1)); setUndoStack((prev) => prev.filter((e, i) => i !== prev.length - 1));
if (a.action === Action.ADD) { if (a.action === Action.ADD) {
if (a.element === ObjectType.TABLE) { if (a.element === ObjectType.TABLE) {
deleteTable(tables[tables.length - 1].id, false); deleteTable(tables[tables.length - 1].id, false);
@ -341,7 +341,7 @@ export default function ControlPanel({
const redo = () => { const redo = () => {
if (redoStack.length === 0) return; if (redoStack.length === 0) return;
const a = redoStack[redoStack.length - 1]; const a = redoStack[redoStack.length - 1];
setRedoStack(prev => prev.filter((e, i) => i !== prev.length - 1)); setRedoStack((prev) => prev.filter((e, i) => i !== prev.length - 1));
if (a.action === Action.ADD) { if (a.action === Action.ADD) {
if (a.element === ObjectType.TABLE) { if (a.element === ObjectType.TABLE) {
addTable(false); addTable(false);
@ -837,8 +837,8 @@ export default function ControlPanel({
"Import from source": { "Import from source": {
function: () => { function: () => {
setData({ src: "", overwrite: true, dbms: "MySQL" }); setData({ src: "", overwrite: true, dbms: "MySQL" });
setVisible(MODAL.IMPORT_SRC) setVisible(MODAL.IMPORT_SRC);
} },
}, },
"Export as": { "Export as": {
children: [ children: [
@ -1024,7 +1024,7 @@ export default function ControlPanel({
data: src, data: src,
extension: "sql", extension: "sql",
})); }));
} },
}, },
], ],
function: () => {}, function: () => {},
@ -1100,14 +1100,14 @@ export default function ControlPanel({
}, },
"Presentation mode": { "Presentation mode": {
function: () => { function: () => {
setLayout(prev => ({ setLayout((prev) => ({
...prev, ...prev,
header: false, header: false,
sidebar: false, sidebar: false,
toolbar: false, toolbar: false,
})); }));
enterFullscreen(); enterFullscreen();
} },
}, },
"Field summary": { "Field summary": {
function: viewFieldSummary, function: viewFieldSummary,
@ -1169,9 +1169,7 @@ export default function ControlPanel({
Autosave: { Autosave: {
function: () => function: () =>
setSettings((prev) => { setSettings((prev) => {
Toast.success( Toast.success(`Autosave is ${settings.autosave ? "off" : "on"}`);
`Autosave is ${settings.autosave ? "off" : "on"}`
);
return { ...prev, autosave: !prev.autosave }; return { ...prev, autosave: !prev.autosave };
}), }),
}, },
@ -1289,10 +1287,12 @@ export default function ControlPanel({
const parser = new Parser(); const parser = new Parser();
let ast = null; let ast = null;
try { try {
console.log(data.dbms) console.log(data.dbms);
ast = parser.astify(data.src, { database: data.dbms }); ast = parser.astify(data.src, { database: data.dbms });
} catch (err) { } catch (err) {
Toast.error("Could not parse the sql file. Make sure there are no syntax errors."); Toast.error(
"Could not parse the sql file. Make sure there are no syntax errors."
);
console.log(err); console.log(err);
return; return;
} }
@ -1301,7 +1301,7 @@ export default function ControlPanel({
const relationships = []; const relationships = [];
const inlineForeignKeys = []; const inlineForeignKeys = [];
ast.forEach(((e) => { ast.forEach((e) => {
if (e.type === "create") { if (e.type === "create") {
if (e.keyword === "table") { if (e.keyword === "table") {
const table = {}; const table = {};
@ -1334,14 +1334,31 @@ export default function ControlPanel({
let check = ""; let check = "";
if (d.check.definition[0].left.column) { if (d.check.definition[0].left.column) {
let value = d.check.definition[0].right.value; let value = d.check.definition[0].right.value;
if (d.check.definition[0].right.type === "double_quote_string" || d.check.definition[0].right.type === "single_quote_string") if (
value = '\'' + value + '\'' d.check.definition[0].right.type ===
check = d.check.definition[0].left.column + " " + d.check.definition[0].operator + " " + value; "double_quote_string" ||
d.check.definition[0].right.type === "single_quote_string"
)
value = "'" + value + "'";
check =
d.check.definition[0].left.column +
" " +
d.check.definition[0].operator +
" " +
value;
} else { } else {
let value = d.check.definition[0].right.value; let value = d.check.definition[0].right.value;
if (d.check.definition[0].left.type === "double_quote_string" || d.check.definition[0].left.type === "single_quote_string") if (
value = '\'' + value + '\'' d.check.definition[0].left.type === "double_quote_string" ||
check = value + " " + d.check.definition[0].operator + " " + d.check.definition[0].right.column; d.check.definition[0].left.type === "single_quote_string"
)
value = "'" + value + "'";
check =
value +
" " +
d.check.definition[0].operator +
" " +
d.check.definition[0].right.column;
} }
field.check = check; field.check = check;
} }
@ -1349,15 +1366,15 @@ export default function ControlPanel({
table.fields.push(field); table.fields.push(field);
} else if (d.resource === "constraint") { } else if (d.resource === "constraint") {
if (d.constraint_type === "primary key") { if (d.constraint_type === "primary key") {
d.definition.forEach(c => { d.definition.forEach((c) => {
table.fields.forEach((f) => { table.fields.forEach((f) => {
if (f.name === c.column && !f.primary) { if (f.name === c.column && !f.primary) {
f.primary = true; f.primary = true;
} }
}) });
}); });
} else if (d.constraint_type === "FOREIGN KEY") { } else if (d.constraint_type === "FOREIGN KEY") {
inlineForeignKeys.push({ ...d, startTable: e.table[0].table }) inlineForeignKeys.push({ ...d, startTable: e.table[0].table });
} }
} }
}); });
@ -1366,16 +1383,15 @@ export default function ControlPanel({
e.id = i; e.id = i;
e.fields.forEach((f, j) => { e.fields.forEach((f, j) => {
f.id = j; f.id = j;
}) });
}) });
} } else if (e.keyword === "index") {
else if (e.keyword === "index") {
const index = {}; const index = {};
index.name = e.index; index.name = e.index;
index.unique = false; index.unique = false;
if (e.index_type === "unique") index.unique = true; if (e.index_type === "unique") index.unique = true;
index.fields = []; index.fields = [];
e.index_columns.forEach(f => index.fields.push(f.column)); e.index_columns.forEach((f) => index.fields.push(f.column));
let found = -1; let found = -1;
tables.forEach((t, i) => { tables.forEach((t, i) => {
@ -1386,34 +1402,45 @@ export default function ControlPanel({
} }
}); });
if (found !== -1) if (found !== -1) tables[found].indices.forEach((i, j) => (i.id = j));
tables[found].indices.forEach((i, j) => i.id = j);
} }
} else if (e.type === "alter") { } else if (e.type === "alter") {
if (e.expr[0].action === "add" && e.expr[0].create_definitions.constraint_type === "FOREIGN KEY") { if (
e.expr[0].action === "add" &&
e.expr[0].create_definitions.constraint_type === "FOREIGN KEY"
) {
const relationship = {}; const relationship = {};
const startTable = e.table[0].table; const startTable = e.table[0].table;
const startField = e.expr[0].create_definitions.definition[0].column; const startField = e.expr[0].create_definitions.definition[0].column;
const endTable = e.expr[0].create_definitions.reference_definition.table[0].table; const endTable =
const endField = e.expr[0].create_definitions.reference_definition.definition[0].column; e.expr[0].create_definitions.reference_definition.table[0].table;
const endField =
e.expr[0].create_definitions.reference_definition.definition[0]
.column;
let updateConstraint = "No action"; let updateConstraint = "No action";
let deleteConstraint = "No action"; let deleteConstraint = "No action";
e.expr[0].create_definitions.reference_definition.on_action.forEach(c => { e.expr[0].create_definitions.reference_definition.on_action.forEach(
(c) => {
if (c.type === "on update") { if (c.type === "on update") {
updateConstraint = c.value.value; updateConstraint = c.value.value;
updateConstraint = updateConstraint[0].toUpperCase() + updateConstraint.substring(1); updateConstraint =
updateConstraint[0].toUpperCase() +
updateConstraint.substring(1);
} else if (c.type === "on delete") { } else if (c.type === "on delete") {
deleteConstraint = c.value.value; deleteConstraint = c.value.value;
deleteConstraint = deleteConstraint[0].toUpperCase() + deleteConstraint.substring(1); deleteConstraint =
deleteConstraint[0].toUpperCase() +
deleteConstraint.substring(1);
} }
}); }
);
let startTableId = -1; let startTableId = -1;
let startFieldId = -1; let startFieldId = -1;
let endTableId = -1; let endTableId = -1;
let endFieldId = -1; let endFieldId = -1;
tables.forEach(t => { tables.forEach((t) => {
if (t.name === startTable) { if (t.name === startTable) {
startTableId = t.id; startTableId = t.id;
return; return;
@ -1422,11 +1449,11 @@ export default function ControlPanel({
if (t.name === endTable) { if (t.name === endTable) {
endTableId = t.id; endTableId = t.id;
} }
}) });
if (startTableId === -1 || endTableId === -1) return; if (startTableId === -1 || endTableId === -1) return;
tables[startTableId].fields.forEach(f => { tables[startTableId].fields.forEach((f) => {
if (f.name === startField) { if (f.name === startField) {
startFieldId = f.id; startFieldId = f.id;
return; return;
@ -1435,7 +1462,7 @@ export default function ControlPanel({
if (f.name === endField) { if (f.name === endField) {
endFieldId = f.id; endFieldId = f.id;
} }
}) });
if (startFieldId === -1 || endFieldId === -1) return; if (startFieldId === -1 || endFieldId === -1) return;
@ -1460,10 +1487,10 @@ export default function ControlPanel({
relationship.endY = endY; relationship.endY = endY;
relationships.push(relationship); relationships.push(relationship);
relationships.forEach((r, i) => r.id = i); relationships.forEach((r, i) => (r.id = i));
} }
} }
})); });
inlineForeignKeys.forEach((fk) => { inlineForeignKeys.forEach((fk) => {
const relationship = {}; const relationship = {};
@ -1473,13 +1500,15 @@ export default function ControlPanel({
const endField = fk.reference_definition.definition[0].column; const endField = fk.reference_definition.definition[0].column;
let updateConstraint = "No action"; let updateConstraint = "No action";
let deleteConstraint = "No action"; let deleteConstraint = "No action";
fk.reference_definition.on_action.forEach(c => { fk.reference_definition.on_action.forEach((c) => {
if (c.type === "on update") { if (c.type === "on update") {
updateConstraint = c.value.value; updateConstraint = c.value.value;
updateConstraint = updateConstraint[0].toUpperCase() + updateConstraint.substring(1); updateConstraint =
updateConstraint[0].toUpperCase() + updateConstraint.substring(1);
} else if (c.type === "on delete") { } else if (c.type === "on delete") {
deleteConstraint = c.value.value; deleteConstraint = c.value.value;
deleteConstraint = deleteConstraint[0].toUpperCase() + deleteConstraint.substring(1); deleteConstraint =
deleteConstraint[0].toUpperCase() + deleteConstraint.substring(1);
} }
}); });
@ -1488,7 +1517,7 @@ export default function ControlPanel({
let endTableId = -1; let endTableId = -1;
let endFieldId = -1; let endFieldId = -1;
tables.forEach(t => { tables.forEach((t) => {
if (t.name === startTable) { if (t.name === startTable) {
startTableId = t.id; startTableId = t.id;
return; return;
@ -1497,11 +1526,11 @@ export default function ControlPanel({
if (t.name === endTable) { if (t.name === endTable) {
endTableId = t.id; endTableId = t.id;
} }
}) });
if (startTableId === -1 || endTableId === -1) return; if (startTableId === -1 || endTableId === -1) return;
tables[startTableId].fields.forEach(f => { tables[startTableId].fields.forEach((f) => {
if (f.name === startField) { if (f.name === startField) {
startFieldId = f.id; startFieldId = f.id;
return; return;
@ -1510,7 +1539,7 @@ export default function ControlPanel({
if (f.name === endField) { if (f.name === endField) {
endFieldId = f.id; endFieldId = f.id;
} }
}) });
if (startFieldId === -1 || endFieldId === -1) return; if (startFieldId === -1 || endFieldId === -1) return;
@ -1534,7 +1563,7 @@ export default function ControlPanel({
relationships.push(relationship); relationships.push(relationship);
}); });
relationships.forEach((r, i) => r.id = i); relationships.forEach((r, i) => (r.id = i));
if (data.overwrite) { if (data.overwrite) {
setTables(tables); setTables(tables);
@ -1545,13 +1574,13 @@ export default function ControlPanel({
setUndoStack([]); setUndoStack([]);
setRedoStack([]); setRedoStack([]);
} else { } else {
setTables(prev => [...prev, ...tables]); setTables((prev) => [...prev, ...tables]);
setRelationships(prev => [...prev, ...relationships]) setRelationships((prev) => [...prev, ...relationships]);
} }
console.log(tables); console.log(tables);
console.log(relationships); console.log(relationships);
} };
const getModalOnOk = async () => { const getModalOnOk = async () => {
switch (visible) { switch (visible) {
@ -1580,7 +1609,7 @@ export default function ControlPanel({
return; return;
case MODAL.IMPORT_SRC: case MODAL.IMPORT_SRC:
parseSQLAndLoadDiagram(); parseSQLAndLoadDiagram();
setVisible(MODAL.NONE) setVisible(MODAL.NONE);
return; return;
case MODAL.OPEN: case MODAL.OPEN:
if (selectedDiagramId === 0) return; if (selectedDiagramId === 0) return;
@ -1732,7 +1761,7 @@ export default function ControlPanel({
} }
const reader = new FileReader(); const reader = new FileReader();
reader.onload = async (e) => { reader.onload = async (e) => {
setData(prev => ({ ...prev, src: e.target.result })) setData((prev) => ({ ...prev, src: e.target.result }));
}; };
reader.readAsText(f); reader.readAsText(f);
@ -1752,9 +1781,8 @@ export default function ControlPanel({
type: STATUS.NONE, type: STATUS.NONE,
message: "", message: "",
}); });
setData(prev => ({ ...prev, src: "" })); setData((prev) => ({ ...prev, src: "" }));
} }}
}
onFileChange={() => onFileChange={() =>
setError({ setError({
type: STATUS.NONE, type: STATUS.NONE,
@ -1765,18 +1793,24 @@ export default function ControlPanel({
></Upload> ></Upload>
<div className="my-2"> <div className="my-2">
<div className="text-sm font-semibold mb-1">Select DBMS</div> <div className="text-sm font-semibold mb-1">Select DBMS</div>
<Select defaultValue="MySQL" <Select
defaultValue="MySQL"
optionList={[ optionList={[
{ value: 'MySQL', label: 'MySQL' }, { value: "MySQL", label: "MySQL" },
{ value: 'Postgresql', label: 'PostgreSQL' }, { value: "Postgresql", label: "PostgreSQL" },
]} ]}
onChange={(e) => setData(prev => ({ ...prev, dbms: e }))} onChange={(e) => setData((prev) => ({ ...prev, dbms: e }))}
className="w-full"></Select> className="w-full"
<Checkbox aria-label="overwrite checkbox" ></Select>
<Checkbox
aria-label="overwrite checkbox"
checked={data.overwrite} checked={data.overwrite}
defaultChecked defaultChecked
onChange={e => setData(prev => ({ ...prev, overwrite: e.target.checked }))} onChange={(e) =>
className="my-2"> setData((prev) => ({ ...prev, overwrite: e.target.checked }))
}
className="my-2"
>
Overwrite existing diagram Overwrite existing diagram
</Checkbox> </Checkbox>
</div> </div>
@ -1788,7 +1822,8 @@ export default function ControlPanel({
<div className="h-[360px] grid grid-cols-3 gap-2 overflow-auto px-1"> <div className="h-[360px] grid grid-cols-3 gap-2 overflow-auto px-1">
<div> <div>
<div <div
className={`h-[180px] w-full bg-blue-400 bg-opacity-30 flex justify-center items-center rounded hover:bg-opacity-40 hover:border-2 hover:border-dashed ${settings.mode === "light" className={`h-[180px] w-full bg-blue-400 bg-opacity-30 flex justify-center items-center rounded hover:bg-opacity-40 hover:border-2 hover:border-dashed ${
settings.mode === "light"
? "hover:border-blue-500" ? "hover:border-blue-500"
: "hover:border-white" : "hover:border-white"
} ${selectedTemplateId === 0 && "border-2 border-blue-500"}`} } ${selectedTemplateId === 0 && "border-2 border-blue-500"}`}
@ -1801,7 +1836,8 @@ export default function ControlPanel({
{[1, 2, 3, 4, 5, 6, 7, 8].map((i) => ( {[1, 2, 3, 4, 5, 6, 7, 8].map((i) => (
<div key={i}> <div key={i}>
<div <div
className={`h-[180px] w-full bg-blue-400 bg-opacity-30 flex justify-center items-center rounded hover:bg-opacity-40 hover:border-2 hover:border-dashed ${settings.mode === "light" className={`h-[180px] w-full bg-blue-400 bg-opacity-30 flex justify-center items-center rounded hover:bg-opacity-40 hover:border-2 hover:border-dashed ${
settings.mode === "light"
? "hover:border-blue-500" ? "hover:border-blue-500"
: "hover:border-white" : "hover:border-white"
} ${selectedTemplateId === i && "border-2 border-blue-500"}`} } ${selectedTemplateId === i && "border-2 border-blue-500"}`}
@ -1865,7 +1901,8 @@ export default function ControlPanel({
return ( return (
<tr <tr
key={d.id} key={d.id}
className={`${selectedDiagramId === d.id className={`${
selectedDiagramId === d.id
? "bg-blue-300 bg-opacity-30" ? "bg-blue-300 bg-opacity-30"
: "hover-1" : "hover-1"
}`} }`}
@ -1973,7 +2010,8 @@ export default function ControlPanel({
closeOnEsc={true} closeOnEsc={true}
okText={getOkText()} okText={getOkText()}
okButtonProps={{ okButtonProps={{
disabled: (error && error.type && error.type === STATUS.ERROR) || disabled:
(error && error.type && error.type === STATUS.ERROR) ||
(visible === MODAL.IMPORT && (visible === MODAL.IMPORT &&
(error.type === STATUS.ERROR || !data)) || (error.type === STATUS.ERROR || !data)) ||
((visible === MODAL.IMG || visible === MODAL.CODE) && ((visible === MODAL.IMG || visible === MODAL.CODE) &&
@ -2199,12 +2237,18 @@ export default function ControlPanel({
</button> </button>
</Tooltip> </Tooltip>
<Tooltip content="Timeline" position="bottom"> <Tooltip content="Timeline" position="bottom">
<button className="py-1 px-2 hover-2 rounded text-xl" onClick={() => setSidesheet(SIDESHEET.TIMELINE)}> <button
className="py-1 px-2 hover-2 rounded text-xl"
onClick={() => setSidesheet(SIDESHEET.TIMELINE)}
>
<i className="fa-solid fa-timeline"></i> <i className="fa-solid fa-timeline"></i>
</button> </button>
</Tooltip> </Tooltip>
<Tooltip content="To-do" position="bottom"> <Tooltip content="To-do" position="bottom">
<button className="py-1 px-2 hover-2 rounded text-xl" onClick={() => setSidesheet(SIDESHEET.TODO)}> <button
className="py-1 px-2 hover-2 rounded text-xl"
onClick={() => setSidesheet(SIDESHEET.TODO)}
>
<i className="fa-regular fa-calendar-check"></i> <i className="fa-regular fa-calendar-check"></i>
</button> </button>
</Tooltip> </Tooltip>

View File

@ -1,7 +1,7 @@
// import React from 'react'; // import React from 'react';
import ReactDOM from 'react-dom/client' import ReactDOM from 'react-dom/client';
import App from './App.jsx' import App from './App.jsx';
import './index.css' import './index.css';
import { LocaleProvider } from "@douyinfe/semi-ui"; import { LocaleProvider } from "@douyinfe/semi-ui";
import en_US from "@douyinfe/semi-ui/lib/es/locale/source/en_US"; import en_US from "@douyinfe/semi-ui/lib/es/locale/source/en_US";