From 9d99b559d0f31b659f7e113fba5f7cde3edda7b5 Mon Sep 17 00:00:00 2001 From: Joel Date: Fri, 10 Mar 2023 17:40:39 -0800 Subject: [PATCH] chore: add eslint to project --- .eslintrc.js | 49 + .idea/inspectionProfiles/Project_Default.xml | 6 + app.vue | 7 +- components/Chat.vue | 56 +- components/Chat/ClientDropdown.vue | 13 +- components/Chat/ClientSettings.vue | 208 +- components/Icons/BingIcon.vue | 4 + components/Icons/GPTIcon.vue | 4 + package-lock.json | 1790 +++++++++++++++++- package.json | 7 +- stores/presets.js | 2 - tailwind.config.js | 1 + 12 files changed, 1987 insertions(+), 160 deletions(-) create mode 100644 .eslintrc.js create mode 100644 .idea/inspectionProfiles/Project_Default.xml diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..2700ec4 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,49 @@ +module.exports = { + env: { + browser: true, + es2021: true, + }, + extends: [ + 'plugin:vue/vue3-essential', + 'airbnb-base', + ], + overrides: [], + parserOptions: { + ecmaVersion: 'latest', + sourceType: 'module', + }, + plugins: [ + 'vue', + ], + rules: { + 'vue/multi-word-component-names': ['error', { + ignores: ['Chat'], + }], + 'import/no-unresolved': 'off', + indent: ['error', 4, { SwitchCase: 1 }], + 'max-len': [ + 'error', { + code: 150, + ignoreStrings: true, + ignoreTemplateLiterals: true, + ignoreComments: true, + }, + ], + 'linebreak-style': 0, + 'arrow-parens': [2, 'as-needed', { requireForBlockBody: true }], + 'no-plusplus': ['error', { allowForLoopAfterthoughts: true }], + 'no-console': 'off', + 'import/extensions': 'off', + 'no-use-before-define': [ + 'error', { + functions: false, + }, + ], + 'no-promise-executor-return': 'off', + 'no-param-reassign': 'off', + 'no-continue': 'off', + 'no-restricted-syntax': 'off', + 'no-undef': 'off', + 'import/prefer-default-export': 'off', + }, +}; diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..03d9549 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app.vue b/app.vue index c547314..8408e2c 100644 --- a/app.vue +++ b/app.vue @@ -7,7 +7,12 @@ diff --git a/components/Chat.vue b/components/Chat.vue index a3a3dbe..7eef77c 100644 --- a/components/Chat.vue +++ b/components/Chat.vue @@ -4,11 +4,11 @@ import { marked } from 'marked'; import DOMPurify from 'isomorphic-dompurify'; import hljs from 'highlight.js'; import { v4 as uuidv4 } from 'uuid'; +import { storeToRefs } from 'pinia'; import BingIcon from '~/components/Icons/BingIcon.vue'; import GPTIcon from '~/components/Icons/GPTIcon.vue'; import ClientDropdown from '~/components/Chat/ClientDropdown.vue'; import ClientSettings from '~/components/Chat/ClientSettings.vue'; -import { storeToRefs } from 'pinia'; marked.setOptions({ silent: true, @@ -60,13 +60,6 @@ const inputRows = computed(() => { return Math.min(newlines + 1, 7); }); -// watch inputRows for change and call `setChatContainerHeight` to adjust height -watch(inputRows, () => { - nextTick(() => { - setChatContainerHeight(); - }); -}); - const scrollToBottom = () => { messagesContainerElement.value.scrollTop = messagesContainerElement.value.scrollHeight; }; @@ -163,18 +156,18 @@ const sendMessage = async (input) => { throw new Error(`Failed to send message. HTTP ${response.status} - ${response.statusText}`); }, onclose() { - throw new Error(`Failed to send message. Server closed the connection unexpectedly.`); + throw new Error('Failed to send message. Server closed the connection unexpectedly.'); }, onerror(err) { throw err; }, - onmessage(message) { - if (message.data === '[DONE]') { + onmessage(eventMessage) { + if (eventMessage.data === '[DONE]') { processingController.value.abort(); return; } - if (message.event === 'result') { - const result = JSON.parse(message.data); + if (eventMessage.event === 'result') { + const result = JSON.parse(eventMessage.data); if (result.jailbreakConversationId) { conversationData.value = { jailbreakConversationId: result.jailbreakConversationId, @@ -208,15 +201,15 @@ const sendMessage = async (input) => { nextTick().then(() => scrollToBottom()); return; } - if (message.event === 'error') { - const data = JSON.parse(message.data); - botMessage.text = data.error || 'An error occurred. Please try again.'; + if (eventMessage.event === 'error') { + const eventMessageData = JSON.parse(eventMessage.data); + botMessage.text = eventMessageData.error || 'An error occurred. Please try again.'; botMessage.error = true; - botMessage.raw = data; + botMessage.raw = eventMessageData; nextTick().then(() => scrollToBottom()); return; } - botMessage.text += JSON.parse(message.data); + botMessage.text += JSON.parse(eventMessage.data); nextTick().then(() => scrollToBottom()); }, }); @@ -237,7 +230,10 @@ const setChatContainerHeight = () => { const footerElementHeight = document.querySelector('footer').offsetHeight; const inputContainerElementHeight = inputContainerElement.value.offsetHeight; const heightOffset = window.document.documentElement.clientHeight - window.innerHeight + 50; - const containerHeight = window.document.documentElement.clientHeight - (headerElementHeight + footerElementHeight) - inputContainerElementHeight - (heightOffset / 2); + const containerHeight = window.document.documentElement.clientHeight + - (headerElementHeight + footerElementHeight) + - inputContainerElementHeight + - (heightOffset / 2); // set container height messagesContainerElement.value.style.height = `${containerHeight}px`; // move input container element bottom down @@ -295,6 +291,13 @@ if (!process.server) { window.removeEventListener('resize', setChatContainerHeight); stopProcessing(); }); + + // watch inputRows for change and call `setChatContainerHeight` to adjust height + watch(inputRows, () => { + nextTick(() => { + setChatContainerHeight(); + }); + }); } @@ -359,7 +362,10 @@ if (!process.server) { @@ -367,7 +373,10 @@ if (!process.server) { v-for="response in suggestedResponses" :key="response" @click="sendMessage(response)" - class="flex-1 py-2 px-3 bg-white/10 backdrop-blur-sm text-slate-300 text-sm shadow rounded transition duration-300 ease-in-out hover:bg-white/20" + class=" + flex-1 py-2 px-3 bg-white/10 backdrop-blur-sm text-slate-300 text-sm + shadow rounded transition duration-300 ease-in-out hover:bg-white/20 + " > {{ response }} @@ -425,7 +434,10 @@ if (!process.server) { @keydown.enter.exact.prevent="sendMessage(message)" placeholder="Type your message here..." :disabled="!!processingController" - class="py-4 pl-14 pr-14 rounded-l-sm text-slate-100 w-full bg-white/5 backdrop-blur-sm placeholder-white/40 focus:outline-none resize-none placeholder:truncate" + class=" + py-4 pl-14 pr-14 rounded-l-sm text-slate-100 w-full bg-white/5 backdrop-blur-sm + placeholder-white/40 focus:outline-none resize-none placeholder:truncate + " :class="{ 'opacity-50 cursor-not-allowed': !!processingController, }" diff --git a/components/Chat/ClientDropdown.vue b/components/Chat/ClientDropdown.vue index f1fdef8..0117142 100644 --- a/components/Chat/ClientDropdown.vue +++ b/components/Chat/ClientDropdown.vue @@ -1,8 +1,8 @@ +