ci(backend-review.yml): add linter step to the backend review workflow (#625)

* ci(backend-review.yml): add linter step to the backend review workflow

* chore(backend-review.yml): remove prettier from lint-action configuration

* chore: apply new linting workflow

* chore(lint-staged.config.js): reorder lint-staged tasks for JavaScript and TypeScript files

* chore(eslint): update ignorePatterns in .eslintrc.js
chore(lint-action): remove prettier option in backend-review.yml
chore(package.json): add lint and lint:fix scripts

* chore(lint-staged.config.js): remove prettier --write command for js, jsx, ts, tsx files

* chore(titleConvo.js): remove unnecessary console.log statement
chore(titleConvo.js): add missing comma in options object

* chore: apply linting to all files

* chore(lint-staged.config.js): update lint-staged configuration to include prettier formatting
This commit is contained in:
Danny Avila 2023-07-14 09:36:49 -04:00 committed by GitHub
parent 637bb6bc11
commit e5336039fc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
231 changed files with 1688 additions and 1526 deletions

View file

@ -28,7 +28,7 @@ export default function ExportModel({ open, onOpenChange }) {
({ snapshot }) =>
async (messageId) =>
await snapshot.getPromise(store.messagesSiblingIdxFamily(messageId)),
[]
[],
);
const typeOptions = [
@ -36,7 +36,7 @@ export default function ExportModel({ open, onOpenChange }) {
{ value: 'text', display: 'text (.txt)' },
{ value: 'markdown', display: 'markdown (.md)' },
{ value: 'json', display: 'json (.json)' },
{ value: 'csv', display: 'csv (.csv)' }
{ value: 'csv', display: 'csv (.csv)' },
]; //,, 'webpage'];
useEffect(() => {
@ -67,7 +67,7 @@ export default function ExportModel({ open, onOpenChange }) {
message,
messages,
branches = false,
recursive = false
recursive = false,
}) => {
let children = [];
if (messages?.length)
@ -79,8 +79,8 @@ export default function ExportModel({ open, onOpenChange }) {
message: message,
messages: message?.children,
branches,
recursive
})
recursive,
}),
);
else {
let message = messages[0];
@ -95,8 +95,8 @@ export default function ExportModel({ open, onOpenChange }) {
message: message,
messages: message?.children,
branches,
recursive
})
recursive,
}),
];
}
@ -126,7 +126,7 @@ export default function ExportModel({ open, onOpenChange }) {
message: null,
messages: messagesTree,
branches: exportBranches,
recursive: false
recursive: false,
});
for (const message of messages) {
@ -141,51 +141,51 @@ export default function ExportModel({ open, onOpenChange }) {
beforeTableEncode: (entries) => [
{
fieldName: 'sender',
fieldValues: entries.find((e) => e.fieldName == 'sender').fieldValues
fieldValues: entries.find((e) => e.fieldName == 'sender').fieldValues,
},
{ fieldName: 'text', fieldValues: entries.find((e) => e.fieldName == 'text').fieldValues },
{
fieldName: 'isCreatedByUser',
fieldValues: entries.find((e) => e.fieldName == 'isCreatedByUser').fieldValues
fieldValues: entries.find((e) => e.fieldName == 'isCreatedByUser').fieldValues,
},
{
fieldName: 'error',
fieldValues: entries.find((e) => e.fieldName == 'error').fieldValues
fieldValues: entries.find((e) => e.fieldName == 'error').fieldValues,
},
{
fieldName: 'unfinished',
fieldValues: entries.find((e) => e.fieldName == 'unfinished').fieldValues
fieldValues: entries.find((e) => e.fieldName == 'unfinished').fieldValues,
},
{
fieldName: 'cancelled',
fieldValues: entries.find((e) => e.fieldName == 'cancelled').fieldValues
fieldValues: entries.find((e) => e.fieldName == 'cancelled').fieldValues,
},
{
fieldName: 'messageId',
fieldValues: entries.find((e) => e.fieldName == 'messageId').fieldValues
fieldValues: entries.find((e) => e.fieldName == 'messageId').fieldValues,
},
{
fieldName: 'parentMessageId',
fieldValues: entries.find((e) => e.fieldName == 'parentMessageId').fieldValues
fieldValues: entries.find((e) => e.fieldName == 'parentMessageId').fieldValues,
},
{
fieldName: 'createdAt',
fieldValues: entries.find((e) => e.fieldName == 'createdAt').fieldValues
}
]
fieldValues: entries.find((e) => e.fieldName == 'createdAt').fieldValues,
},
],
});
};
const exportMarkdown = async () => {
let data =
`# Conversation\n` +
'# Conversation\n' +
`- conversationId: ${conversation?.conversationId}\n` +
`- endpoint: ${conversation?.endpoint}\n` +
`- title: ${conversation?.title}\n` +
`- exportAt: ${new Date().toTimeString()}\n`;
if (includeOptions) {
data += `\n## Options\n`;
data += '\n## Options\n';
const options = cleanupPreset({ preset: conversation, endpointsConfig });
for (const key of Object.keys(options)) {
@ -198,15 +198,15 @@ export default function ExportModel({ open, onOpenChange }) {
message: null,
messages: messagesTree,
branches: false,
recursive: false
recursive: false,
});
data += `\n## History\n`;
data += '\n## History\n';
for (const message of messages) {
data += `**${message?.sender}:**\n${message?.text}\n`;
if (message.error) data += `*(This is an error message)*\n`;
if (message.unfinished) data += `*(This is an unfinished message)*\n`;
if (message.cancelled) data += `*(This is a cancelled message)*\n`;
if (message.error) data += '*(This is an error message)*\n';
if (message.unfinished) data += '*(This is an unfinished message)*\n';
if (message.cancelled) data += '*(This is a cancelled message)*\n';
data += '\n\n';
}
@ -214,21 +214,21 @@ export default function ExportModel({ open, onOpenChange }) {
data: data,
fileName: filename,
extension: 'md',
exportType: exportFromJSON.types.text
exportType: exportFromJSON.types.text,
});
};
const exportText = async () => {
let data =
`Conversation\n` +
`########################\n` +
'Conversation\n' +
'########################\n' +
`conversationId: ${conversation?.conversationId}\n` +
`endpoint: ${conversation?.endpoint}\n` +
`title: ${conversation?.title}\n` +
`exportAt: ${new Date().toTimeString()}\n`;
if (includeOptions) {
data += `\nOptions\n########################\n`;
data += '\nOptions\n########################\n';
const options = cleanupPreset({ preset: conversation, endpointsConfig });
for (const key of Object.keys(options)) {
@ -241,15 +241,15 @@ export default function ExportModel({ open, onOpenChange }) {
message: null,
messages: messagesTree,
branches: false,
recursive: false
recursive: false,
});
data += `\nHistory\n########################\n`;
data += '\nHistory\n########################\n';
for (const message of messages) {
data += `>> ${message?.sender}:\n${message?.text}\n`;
if (message.error) data += `(This is an error message)\n`;
if (message.unfinished) data += `(This is an unfinished message)\n`;
if (message.cancelled) data += `(This is a cancelled message)\n`;
if (message.error) data += '(This is an error message)\n';
if (message.unfinished) data += '(This is an unfinished message)\n';
if (message.cancelled) data += '(This is a cancelled message)\n';
data += '\n\n';
}
@ -257,7 +257,7 @@ export default function ExportModel({ open, onOpenChange }) {
data: data,
fileName: filename,
extension: 'txt',
exportType: exportFromJSON.types.text
exportType: exportFromJSON.types.text,
});
};
@ -268,7 +268,7 @@ export default function ExportModel({ open, onOpenChange }) {
title: conversation?.title,
exportAt: new Date().toTimeString(),
branches: exportBranches,
recursive: recursive
recursive: recursive,
};
if (includeOptions) data.options = cleanupPreset({ preset: conversation, endpointsConfig });
@ -278,7 +278,7 @@ export default function ExportModel({ open, onOpenChange }) {
message: null,
messages: messagesTree,
branches: exportBranches,
recursive: recursive
recursive: recursive,
});
if (recursive) data.messagesTree = messages.children;
@ -288,7 +288,7 @@ export default function ExportModel({ open, onOpenChange }) {
data: data,
fileName: filename,
extension: 'json',
exportType: exportFromJSON.types.json
exportType: exportFromJSON.types.json,
});
};
@ -322,7 +322,7 @@ export default function ExportModel({ open, onOpenChange }) {
placeholder="Set the filename"
className={cn(
defaultTextProps,
'flex h-10 max-h-10 w-full resize-none px-3 py-2 focus:outline-none focus:ring-0 focus:ring-opacity-0 focus:ring-offset-0'
'flex h-10 max-h-10 w-full resize-none px-3 py-2 focus:outline-none focus:ring-0 focus:ring-opacity-0 focus:ring-offset-0',
)}
/>
</div>
@ -337,7 +337,7 @@ export default function ExportModel({ open, onOpenChange }) {
options={typeOptions}
className={cn(
defaultTextProps,
'flex h-10 max-h-10 w-full resize-none focus:outline-none focus:ring-0 focus:ring-opacity-0 focus:ring-offset-0'
'flex h-10 max-h-10 w-full resize-none focus:outline-none focus:ring-0 focus:ring-opacity-0 focus:ring-offset-0',
)}
containerClassName="flex w-full resize-none"
/>

View file

@ -26,7 +26,7 @@ const ExportConversation = forwardRef(() => {
<button
className={cn(
'flex w-full cursor-pointer items-center gap-3 px-3 py-3 text-sm text-white transition-colors duration-200 hover:bg-gray-700',
exportable ? 'cursor-pointer text-white' : 'cursor-not-allowed text-gray-400'
exportable ? 'cursor-pointer text-white' : 'cursor-not-allowed text-gray-400',
)}
onClick={clickHandler}
>

View file

@ -7,7 +7,7 @@ const NavLink = forwardRef((props, ref) => {
defaultProps.className = cn(
'flex cursor-pointer items-center gap-3 rounded-md py-3 px-3 text-sm text-white transition-colors duration-200 hover:bg-gray-500/10',
className
className,
);
if (clickHandler) {

View file

@ -41,7 +41,7 @@ export default function NavLinks({ clearSearch, isSearchEnabled }) {
<Menu.Button
className={cn(
'group-ui-open:bg-gray-800 flex w-full items-center gap-2.5 rounded-md px-3 py-3 text-sm transition-colors duration-200 hover:bg-gray-800',
open ? 'bg-gray-800' : ''
open ? 'bg-gray-800' : '',
)}
>
<div className="-ml-0.5 h-5 w-5 flex-shrink-0">
@ -80,7 +80,7 @@ export default function NavLinks({ clearSearch, isSearchEnabled }) {
<NavLink
className={cn(
'flex w-full cursor-pointer items-center gap-3 px-3 py-3 text-sm text-white transition-colors duration-200 hover:bg-gray-700 rounded-none',
exportable ? 'cursor-pointer text-white' : 'cursor-not-allowed text-white/50'
exportable ? 'cursor-pointer text-white' : 'cursor-not-allowed text-white/50',
)}
svg={() => <Download size={16} />}
text="Export conversation"

View file

@ -29,7 +29,6 @@ const SearchBar = forwardRef((props, ref) => {
setShowClearIcon(true);
}
}, [searchQuery])
return (
<div

View file

@ -71,7 +71,7 @@ export default function Settings({ open, onOpenChange }) {
aria-orientation="vertical"
className={cn(
'-ml-[8px] flex min-w-[180px] flex-shrink-0 flex-col',
isMobile && 'flex-row rounded-lg bg-gray-100 p-1 dark:bg-gray-800/30'
isMobile && 'flex-row rounded-lg bg-gray-100 p-1 dark:bg-gray-800/30',
)}
style={{ outline: 'none' }}
>
@ -79,7 +79,7 @@ export default function Settings({ open, onOpenChange }) {
className={cn(
'radix-state-active:bg-gray-800 radix-state-active:text-white flex items-center justify-start gap-2 rounded-md px-2 py-1.5 text-sm',
isMobile &&
'dark:radix-state-active:text-white group flex-1 items-center justify-center text-sm dark:text-gray-500'
'dark:radix-state-active:text-white group flex-1 items-center justify-center text-sm dark:text-gray-500',
)}
value="general"
>

View file

@ -12,7 +12,7 @@ describe('ClearChatsButton', () => {
it('renders correctly', () => {
const { getByText } = render(
<ClearChatsButton confirmClear={false} showText={true} onClick={mockOnClick} />
<ClearChatsButton confirmClear={false} showText={true} onClick={mockOnClick} />,
);
expect(getByText('Clear all chats')).toBeInTheDocument();
@ -21,7 +21,7 @@ describe('ClearChatsButton', () => {
it('renders confirm clear when confirmClear is true', () => {
const { getByText } = render(
<ClearChatsButton confirmClear={true} showText={true} onClick={mockOnClick} />
<ClearChatsButton confirmClear={true} showText={true} onClick={mockOnClick} />,
);
expect(getByText('Confirm Clear')).toBeInTheDocument();
@ -29,7 +29,7 @@ describe('ClearChatsButton', () => {
it('calls onClick when the button is clicked', () => {
const { getByText } = render(
<ClearChatsButton confirmClear={false} showText={true} onClick={mockOnClick} />
<ClearChatsButton confirmClear={false} showText={true} onClick={mockOnClick} />,
);
fireEvent.click(getByText('Clear'));

View file

@ -6,7 +6,7 @@ import { useClearConversationsMutation } from '@librechat/data-provider';
export const ThemeSelector = ({
theme,
onChange
onChange,
}: {
theme: string;
onChange: (value: string) => void;
@ -28,7 +28,7 @@ export const ThemeSelector = ({
export const ClearChatsButton = ({
confirmClear,
showText = true,
onClick
onClick,
}: {
confirmClear: boolean;
showText: boolean;
@ -74,7 +74,7 @@ function General() {
(value: string) => {
setTheme(value);
},
[setTheme]
[setTheme],
);
return (

View file

@ -12,7 +12,7 @@ describe('ThemeSelector', () => {
it('renders correctly', () => {
const { getByText, getByDisplayValue } = render(
<ThemeSelector theme="system" onChange={mockOnChange} />
<ThemeSelector theme="system" onChange={mockOnChange} />,
);
expect(getByText('Theme')).toBeInTheDocument();
@ -21,7 +21,7 @@ describe('ThemeSelector', () => {
it('calls onChange when the select value changes', () => {
const { getByDisplayValue } = render(
<ThemeSelector theme="system" onChange={mockOnChange} />
<ThemeSelector theme="system" onChange={mockOnChange} />,
);
fireEvent.change(getByDisplayValue('System'), { target: { value: 'dark' } });

View file

@ -67,7 +67,7 @@ export default function Nav({ navVisible, setNavVisible }) {
const debouncedSearchTerm = useDebounce(searchQuery, 750);
const searchQueryFn = useSearchQuery(debouncedSearchTerm, pageNumber, {
enabled:
!!debouncedSearchTerm && debouncedSearchTerm.length > 0 && isSearchEnabled && isSearching
!!debouncedSearchTerm && debouncedSearchTerm.length > 0 && isSearchEnabled && isSearching,
});
const onSearchSuccess = (data, expectedPage) => {
@ -127,7 +127,7 @@ export default function Nav({ navVisible, setNavVisible }) {
} else {
if (!isSearching) {
conversations = conversations.sort(
(a, b) => new Date(b.createdAt) - new Date(a.createdAt)
(a, b) => new Date(b.createdAt) - new Date(a.createdAt),
);
}
setConversations(conversations);