mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-20 18:30:15 +01:00
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:
parent
637bb6bc11
commit
e5336039fc
231 changed files with 1688 additions and 1526 deletions
|
|
@ -14,7 +14,7 @@ function LoginForm({ onSubmit }: TLoginFormProps) {
|
|||
const {
|
||||
register,
|
||||
handleSubmit,
|
||||
formState: { errors }
|
||||
formState: { errors },
|
||||
} = useForm<TLoginUser>();
|
||||
|
||||
return (
|
||||
|
|
@ -35,16 +35,16 @@ function LoginForm({ onSubmit }: TLoginFormProps) {
|
|||
required: localize(lang, 'com_auth_email_required'),
|
||||
minLength: {
|
||||
value: 3,
|
||||
message: localize(lang, 'com_auth_email_min_length')
|
||||
message: localize(lang, 'com_auth_email_min_length'),
|
||||
},
|
||||
maxLength: {
|
||||
value: 120,
|
||||
message: localize(lang, 'com_auth_email_max_length')
|
||||
message: localize(lang, 'com_auth_email_max_length'),
|
||||
},
|
||||
pattern: {
|
||||
value: /\S+@\S+\.\S+/,
|
||||
message: localize(lang, 'com_auth_email_pattern')
|
||||
}
|
||||
message: localize(lang, 'com_auth_email_pattern'),
|
||||
},
|
||||
})}
|
||||
aria-invalid={!!errors.email}
|
||||
className="peer block w-full appearance-none rounded-t-md border-0 border-b-2 border-gray-300 bg-gray-50 px-2.5 pb-2.5 pt-5 text-sm text-gray-900 focus:border-green-500 focus:outline-none focus:ring-0"
|
||||
|
|
@ -75,12 +75,12 @@ function LoginForm({ onSubmit }: TLoginFormProps) {
|
|||
required: localize(lang, 'com_auth_password_required'),
|
||||
minLength: {
|
||||
value: 8,
|
||||
message: localize(lang, 'com_auth_password_min_length')
|
||||
message: localize(lang, 'com_auth_password_min_length'),
|
||||
},
|
||||
maxLength: {
|
||||
value: 40,
|
||||
message: localize(lang, 'com_auth_password_max_length')
|
||||
}
|
||||
message: localize(lang, 'com_auth_password_max_length'),
|
||||
},
|
||||
})}
|
||||
aria-invalid={!!errors.password}
|
||||
className="peer block w-full appearance-none rounded-t-md border-0 border-b-2 border-gray-300 bg-gray-50 px-2.5 pb-2.5 pt-5 text-sm text-gray-900 focus:border-green-500 focus:outline-none focus:ring-0"
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ import { localize } from '~/localization/Translation';
|
|||
import {
|
||||
useRegisterUserMutation,
|
||||
TRegisterUser,
|
||||
useGetStartupConfig
|
||||
useGetStartupConfig,
|
||||
} from '@librechat/data-provider';
|
||||
import { GoogleIcon, OpenIDIcon, GithubIcon, DiscordIcon } from '~/components'
|
||||
|
||||
|
|
@ -21,7 +21,7 @@ function Registration() {
|
|||
register,
|
||||
watch,
|
||||
handleSubmit,
|
||||
formState: { errors }
|
||||
formState: { errors },
|
||||
} = useForm<TRegisterUser>({ mode: 'onChange' });
|
||||
|
||||
const [error, setError] = useState<boolean>(false);
|
||||
|
|
@ -42,7 +42,7 @@ function Registration() {
|
|||
//@ts-ignore - error is of type unknown
|
||||
setErrorMessage(error.response?.data?.message);
|
||||
}
|
||||
}
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
|
|
@ -81,12 +81,12 @@ function Registration() {
|
|||
required: localize(lang, 'com_auth_name_required'),
|
||||
minLength: {
|
||||
value: 3,
|
||||
message: localize(lang, 'com_auth_name_min_length')
|
||||
message: localize(lang, 'com_auth_name_min_length'),
|
||||
},
|
||||
maxLength: {
|
||||
value: 80,
|
||||
message: localize(lang, 'com_auth_name_max_length')
|
||||
}
|
||||
message: localize(lang, 'com_auth_name_max_length'),
|
||||
},
|
||||
})}
|
||||
aria-invalid={!!errors.name}
|
||||
className="peer block w-full appearance-none rounded-t-md border-0 border-b-2 border-gray-300 bg-gray-50 px-2.5 pb-2.5 pt-5 text-sm text-gray-900 focus:border-green-500 focus:outline-none focus:ring-0"
|
||||
|
|
@ -117,12 +117,12 @@ function Registration() {
|
|||
required: localize(lang, 'com_auth_username_required'),
|
||||
minLength: {
|
||||
value: 3,
|
||||
message: localize(lang, 'com_auth_username_min_length')
|
||||
message: localize(lang, 'com_auth_username_min_length'),
|
||||
},
|
||||
maxLength: {
|
||||
value: 20,
|
||||
message: localize(lang, 'com_auth_username_max_length')
|
||||
}
|
||||
message: localize(lang, 'com_auth_username_max_length'),
|
||||
},
|
||||
})}
|
||||
aria-invalid={!!errors.username}
|
||||
className="peer block w-full appearance-none rounded-t-md border-0 border-b-2 border-gray-300 bg-gray-50 px-2.5 pb-2.5 pt-5 text-sm text-gray-900 focus:border-green-500 focus:outline-none focus:ring-0"
|
||||
|
|
@ -155,16 +155,16 @@ function Registration() {
|
|||
required: localize(lang, 'com_auth_email_required'),
|
||||
minLength: {
|
||||
value: 3,
|
||||
message: localize(lang, 'com_auth_email_min_length')
|
||||
message: localize(lang, 'com_auth_email_min_length'),
|
||||
},
|
||||
maxLength: {
|
||||
value: 120,
|
||||
message: localize(lang, 'com_auth_email_max_length')
|
||||
message: localize(lang, 'com_auth_email_max_length'),
|
||||
},
|
||||
pattern: {
|
||||
value: /\S+@\S+\.\S+/,
|
||||
message: localize(lang, 'com_auth_email_pattern')
|
||||
}
|
||||
message: localize(lang, 'com_auth_email_pattern'),
|
||||
},
|
||||
})}
|
||||
aria-invalid={!!errors.email}
|
||||
className="peer block w-full appearance-none rounded-t-md border-0 border-b-2 border-gray-300 bg-gray-50 px-2.5 pb-2.5 pt-5 text-sm text-gray-900 focus:border-green-500 focus:outline-none focus:ring-0"
|
||||
|
|
@ -196,12 +196,12 @@ function Registration() {
|
|||
required: localize(lang, 'com_auth_password_required'),
|
||||
minLength: {
|
||||
value: 8,
|
||||
message: localize(lang, 'com_auth_password_min_length')
|
||||
message: localize(lang, 'com_auth_password_min_length'),
|
||||
},
|
||||
maxLength: {
|
||||
value: 128,
|
||||
message: localize(lang, 'com_auth_password_max_length')
|
||||
}
|
||||
message: localize(lang, 'com_auth_password_max_length'),
|
||||
},
|
||||
})}
|
||||
aria-invalid={!!errors.password}
|
||||
className="peer block w-full appearance-none rounded-t-md border-0 border-b-2 border-gray-300 bg-gray-50 px-2.5 pb-2.5 pt-5 text-sm text-gray-900 focus:border-green-500 focus:outline-none focus:ring-0"
|
||||
|
|
@ -235,7 +235,7 @@ function Registration() {
|
|||
// return false;
|
||||
// }}
|
||||
{...register('confirm_password', {
|
||||
validate: (value) => value === password || localize(lang, 'com_auth_password_not_match')
|
||||
validate: (value) => value === password || localize(lang, 'com_auth_password_not_match'),
|
||||
})}
|
||||
aria-invalid={!!errors.confirm_password}
|
||||
className="peer block w-full appearance-none rounded-t-md border-0 border-b-2 border-gray-300 bg-gray-50 px-2.5 pb-2.5 pt-5 text-sm text-gray-900 focus:border-green-500 focus:outline-none focus:ring-0"
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import { localize } from '~/localization/Translation';
|
|||
import {
|
||||
useRequestPasswordResetMutation,
|
||||
TRequestPasswordReset,
|
||||
TRequestPasswordResetResponse
|
||||
TRequestPasswordResetResponse,
|
||||
} from '@librechat/data-provider';
|
||||
|
||||
function RequestPasswordReset() {
|
||||
|
|
@ -14,7 +14,7 @@ function RequestPasswordReset() {
|
|||
const {
|
||||
register,
|
||||
handleSubmit,
|
||||
formState: { errors }
|
||||
formState: { errors },
|
||||
} = useForm<TRequestPasswordReset>();
|
||||
const requestPasswordReset = useRequestPasswordResetMutation();
|
||||
const [success, setSuccess] = useState<boolean>(false);
|
||||
|
|
@ -32,7 +32,7 @@ function RequestPasswordReset() {
|
|||
setTimeout(() => {
|
||||
setRequestError(false);
|
||||
}, 5000);
|
||||
}
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
|
|
@ -78,16 +78,16 @@ function RequestPasswordReset() {
|
|||
required: localize(lang, 'com_auth_email_required'),
|
||||
minLength: {
|
||||
value: 3,
|
||||
message: localize(lang, 'com_auth_email_min_length')
|
||||
message: localize(lang, 'com_auth_email_min_length'),
|
||||
},
|
||||
maxLength: {
|
||||
value: 120,
|
||||
message: localize(lang, 'com_auth_email_max_length')
|
||||
message: localize(lang, 'com_auth_email_max_length'),
|
||||
},
|
||||
pattern: {
|
||||
value: /\S+@\S+\.\S+/,
|
||||
message: localize(lang, 'com_auth_email_pattern')
|
||||
}
|
||||
message: localize(lang, 'com_auth_email_pattern'),
|
||||
},
|
||||
})}
|
||||
aria-invalid={!!errors.email}
|
||||
className="peer block w-full appearance-none rounded-t-md border-0 border-b-2 border-gray-300 bg-gray-50 px-2.5 pb-2.5 pt-5 text-sm text-gray-900 focus:border-green-500 focus:outline-none focus:ring-0"
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ function ResetPassword() {
|
|||
register,
|
||||
handleSubmit,
|
||||
watch,
|
||||
formState: { errors }
|
||||
formState: { errors },
|
||||
} = useForm<TResetPassword>();
|
||||
const resetPassword = useResetPasswordMutation();
|
||||
const [resetError, setResetError] = useState<boolean>(false);
|
||||
|
|
@ -24,7 +24,7 @@ function ResetPassword() {
|
|||
resetPassword.mutate(data, {
|
||||
onError: () => {
|
||||
setResetError(true);
|
||||
}
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
|
|
@ -97,12 +97,12 @@ function ResetPassword() {
|
|||
required: localize(lang, 'com_auth_password_required'),
|
||||
minLength: {
|
||||
value: 8,
|
||||
message: localize(lang, 'com_auth_password_min_length')
|
||||
message: localize(lang, 'com_auth_password_min_length'),
|
||||
},
|
||||
maxLength: {
|
||||
value: 128,
|
||||
message: localize(lang, 'com_auth_password_max_length')
|
||||
}
|
||||
message: localize(lang, 'com_auth_password_max_length'),
|
||||
},
|
||||
})}
|
||||
aria-invalid={!!errors.password}
|
||||
className="peer block w-full appearance-none rounded-t-md border-0 border-b-2 border-gray-300 bg-gray-50 px-2.5 pb-2.5 pt-5 text-sm text-gray-900 focus:border-green-500 focus:outline-none focus:ring-0"
|
||||
|
|
@ -135,7 +135,7 @@ function ResetPassword() {
|
|||
return false;
|
||||
}}
|
||||
{...register('confirm_password', {
|
||||
validate: (value) => value === password || localize(lang, 'com_auth_password_not_match')
|
||||
validate: (value) => value === password || localize(lang, 'com_auth_password_not_match'),
|
||||
})}
|
||||
aria-invalid={!!errors.confirm_password}
|
||||
className="peer block w-full appearance-none rounded-t-md border-0 border-b-2 border-gray-300 bg-gray-50 px-2.5 pb-2.5 pt-5 text-sm text-gray-900 focus:border-green-500 focus:outline-none focus:ring-0"
|
||||
|
|
|
|||
|
|
@ -9,14 +9,14 @@ const setup = ({
|
|||
useGetUserQueryReturnValue = {
|
||||
isLoading: false,
|
||||
isError: false,
|
||||
data: {}
|
||||
data: {},
|
||||
},
|
||||
useLoginUserReturnValue = {
|
||||
isLoading: false,
|
||||
isError: false,
|
||||
mutate: jest.fn(),
|
||||
data: {},
|
||||
isSuccess: false
|
||||
isSuccess: false,
|
||||
},
|
||||
useGetStartupCongfigReturnValue = {
|
||||
isLoading: false,
|
||||
|
|
@ -30,9 +30,9 @@ const setup = ({
|
|||
discordLoginEnabled: true,
|
||||
registrationEnabled: true,
|
||||
socialLoginEnabled: true,
|
||||
serverDomain: 'mock-server'
|
||||
}
|
||||
}
|
||||
serverDomain: 'mock-server',
|
||||
},
|
||||
},
|
||||
} = {}) => {
|
||||
const mockUseLoginUser = jest
|
||||
.spyOn(mockDataProvider, 'useLoginUserMutation')
|
||||
|
|
@ -51,7 +51,7 @@ const setup = ({
|
|||
...renderResult,
|
||||
mockUseLoginUser,
|
||||
mockUseGetUserQuery,
|
||||
mockUseGetStartupConfig
|
||||
mockUseGetStartupConfig,
|
||||
};
|
||||
};
|
||||
|
||||
|
|
@ -65,7 +65,7 @@ test('renders login form', () => {
|
|||
expect(getByRole('link', { name: /Login with Google/i })).toBeInTheDocument();
|
||||
expect(getByRole('link', { name: /Login with Google/i })).toHaveAttribute(
|
||||
'href',
|
||||
'mock-server/oauth/google'
|
||||
'mock-server/oauth/google',
|
||||
);
|
||||
});
|
||||
|
||||
|
|
@ -76,8 +76,8 @@ test('calls loginUser.mutate on login', async () => {
|
|||
useLoginUserReturnValue: {
|
||||
isLoading: false,
|
||||
mutate: mutate,
|
||||
isError: false
|
||||
}
|
||||
isError: false,
|
||||
},
|
||||
});
|
||||
|
||||
const emailInput = getByLabelText(/email/i);
|
||||
|
|
@ -98,8 +98,8 @@ test('Navigates to / on successful login', async () => {
|
|||
isLoading: false,
|
||||
mutate: jest.fn(),
|
||||
isError: false,
|
||||
isSuccess: true
|
||||
}
|
||||
isSuccess: true,
|
||||
},
|
||||
});
|
||||
|
||||
const emailInput = getByLabelText(/email/i);
|
||||
|
|
|
|||
|
|
@ -9,14 +9,14 @@ const setup = ({
|
|||
useGetUserQueryReturnValue = {
|
||||
isLoading: false,
|
||||
isError: false,
|
||||
data: {}
|
||||
data: {},
|
||||
},
|
||||
useRegisterUserMutationReturnValue = {
|
||||
isLoading: false,
|
||||
isError: false,
|
||||
mutate: jest.fn(),
|
||||
data: {},
|
||||
isSuccess: false
|
||||
isSuccess: false,
|
||||
},
|
||||
useGetStartupCongfigReturnValue = {
|
||||
isLoading: false,
|
||||
|
|
@ -30,9 +30,9 @@ const setup = ({
|
|||
discordLoginEnabled: true,
|
||||
registrationEnabled: true,
|
||||
socialLoginEnabled: true,
|
||||
serverDomain: 'mock-server'
|
||||
}
|
||||
}
|
||||
serverDomain: 'mock-server',
|
||||
},
|
||||
},
|
||||
} = {}) => {
|
||||
const mockUseRegisterUserMutation = jest
|
||||
.spyOn(mockDataProvider, 'useRegisterUserMutation')
|
||||
|
|
@ -53,7 +53,7 @@ const setup = ({
|
|||
...renderResult,
|
||||
mockUseRegisterUserMutation,
|
||||
mockUseGetUserQuery,
|
||||
mockUseGetStartupConfig
|
||||
mockUseGetStartupConfig,
|
||||
};
|
||||
};
|
||||
|
||||
|
|
@ -72,7 +72,7 @@ test('renders registration form', () => {
|
|||
expect(getByRole('link', { name: /Login with Google/i })).toBeInTheDocument();
|
||||
expect(getByRole('link', { name: /Login with Google/i })).toHaveAttribute(
|
||||
'href',
|
||||
'mock-server/oauth/google'
|
||||
'mock-server/oauth/google',
|
||||
);
|
||||
});
|
||||
|
||||
|
|
@ -84,8 +84,8 @@ test('calls registerUser.mutate on registration', async () => {
|
|||
isLoading: false,
|
||||
mutate: mutate,
|
||||
isError: false,
|
||||
isSuccess: true
|
||||
}
|
||||
isSuccess: true,
|
||||
},
|
||||
});
|
||||
|
||||
await userEvent.type(getByRole('textbox', { name: /Full name/i }), 'John Doe');
|
||||
|
|
@ -126,8 +126,8 @@ test('shows error message when registration fails', async () => {
|
|||
mutate: mutate,
|
||||
error: new Error('Registration failed'),
|
||||
data: {},
|
||||
isSuccess: false
|
||||
}
|
||||
isSuccess: false,
|
||||
},
|
||||
});
|
||||
|
||||
await userEvent.type(getByRole('textbox', { name: /Full name/i }), 'John Doe');
|
||||
|
|
@ -140,7 +140,7 @@ test('shows error message when registration fails', async () => {
|
|||
waitFor(() => {
|
||||
expect(screen.getByRole('alert')).toBeInTheDocument();
|
||||
expect(screen.getByRole('alert')).toHaveTextContent(
|
||||
/There was an error attempting to register your account. Please try again. Registration failed/i
|
||||
/There was an error attempting to register your account. Please try again. Registration failed/i,
|
||||
);
|
||||
});
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue