diff --git a/src/authz-module/libraries-manager/components/AddNewTeamMemberModal/AddNewTeamMemberTrigger.tsx b/src/authz-module/libraries-manager/components/AddNewTeamMemberModal/AddNewTeamMemberTrigger.tsx
index e21da8d9..02cc33a1 100644
--- a/src/authz-module/libraries-manager/components/AddNewTeamMemberModal/AddNewTeamMemberTrigger.tsx
+++ b/src/authz-module/libraries-manager/components/AddNewTeamMemberModal/AddNewTeamMemberTrigger.tsx
@@ -87,7 +87,7 @@ const AddNewTeamMemberTrigger = ({ libraryId }: AddNewTeamMemberTriggerProps) =>
errorTypes.forEach(({ errorMessageId, users }) => {
if (users.length === 0) { return; }
- const errorMessage = intl.formatMessage(messages[errorMessageId], {
+ const errorMessage = intl.formatMessage(messages[errorMessageId as keyof typeof messages], {
count: users.length,
userIds: users.join(', '),
Bold,
diff --git a/src/authz-module/libraries-manager/components/AssignNewRoleModal/AssignNewRoleModal.test.tsx b/src/authz-module/libraries-manager/components/AssignNewRoleModal/AssignNewRoleModal.test.tsx
index e8780570..8ccad40f 100644
--- a/src/authz-module/libraries-manager/components/AssignNewRoleModal/AssignNewRoleModal.test.tsx
+++ b/src/authz-module/libraries-manager/components/AssignNewRoleModal/AssignNewRoleModal.test.tsx
@@ -1,7 +1,7 @@
import { screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { renderWrapper } from '@src/setupTest';
-import { Role } from 'types';
+import { Role } from '@src/types';
import AssignNewRoleModal from './AssignNewRoleModal';
describe('AssignNewRoleModal', () => {
diff --git a/src/authz-module/libraries-manager/components/AssignNewRoleModal/AssignNewRoleModal.tsx b/src/authz-module/libraries-manager/components/AssignNewRoleModal/AssignNewRoleModal.tsx
index 634f42fe..c971f0ae 100644
--- a/src/authz-module/libraries-manager/components/AssignNewRoleModal/AssignNewRoleModal.tsx
+++ b/src/authz-module/libraries-manager/components/AssignNewRoleModal/AssignNewRoleModal.tsx
@@ -2,7 +2,7 @@ import { useIntl } from '@edx/frontend-platform/i18n';
import {
ActionRow, Button, Form, ModalDialog,
} from '@openedx/paragon';
-import { Role } from 'types';
+import { Role } from '@src/types';
import messages from '../messages';
interface AssignNewRoleModalProps {
diff --git a/src/authz-module/libraries-manager/components/TeamTable/components/Cells.test.tsx b/src/authz-module/libraries-manager/components/TeamTable/components/Cells.test.tsx
index ce627b32..d2f87775 100644
--- a/src/authz-module/libraries-manager/components/TeamTable/components/Cells.test.tsx
+++ b/src/authz-module/libraries-manager/components/TeamTable/components/Cells.test.tsx
@@ -45,6 +45,9 @@ const mockTeamMember = {
email: 'john.doe@example.com',
roles: ['instructor', 'author'],
createdAt: '2023-01-01T00:00:00Z',
+ scope: { resource: 'lib123', type: 'LIBRARY' as const },
+ organization: 'OpenedX',
+ role: 'instructor',
};
const mockSkeletonMember = {
@@ -53,6 +56,9 @@ const mockSkeletonMember = {
email: '',
roles: [],
createdAt: '',
+ scope: { resource: '', type: 'LIBRARY' as const },
+ organization: '',
+ role: '',
};
const mockCellProps = {
diff --git a/src/authz-module/libraries-manager/components/TeamTable/components/Cells.tsx b/src/authz-module/libraries-manager/components/TeamTable/components/Cells.tsx
index 9f0faa43..63a0a13c 100644
--- a/src/authz-module/libraries-manager/components/TeamTable/components/Cells.tsx
+++ b/src/authz-module/libraries-manager/components/TeamTable/components/Cells.tsx
@@ -1,7 +1,8 @@
import { useIntl } from '@edx/frontend-platform/i18n';
import { Button, Chip, Skeleton } from '@openedx/paragon';
import { Edit } from '@openedx/paragon/icons';
-import { TableCellValue, TeamMember } from '@src/types';
+import { TeamMember } from '@src/types';
+import type { TableCellValue } from '@src/paragon';
import { useLibraryAuthZ } from '@src/authz-module/libraries-manager/context';
import { useNavigate } from 'react-router-dom';
import { useTeamMembers } from '@src/authz-module/data/hooks';
@@ -14,7 +15,7 @@ type CellProps = TableCellValue
;
const EmailCell = ({ row }: CellProps) => (row.original?.username === SKELETON_ROWS[0].username ? (
) : (
- row.original.email
+ {row.original.email}
));
const NameCell = ({ row }: CellProps) => {
@@ -33,7 +34,7 @@ const NameCell = ({ row }: CellProps) => {
);
}
- return row.original.username;
+ return {row.original.username};
};
const ActionCell = ({ row }: CellProps) => {
@@ -63,9 +64,11 @@ const RolesCell = ({ row }: CellProps) => {
return (row.original.username === SKELETON_ROWS[0].username ? (
) : (
- row.original.roles.map((role) => (
- {roleLabels[role]}
- ))
+
+ {row.original.roles.map((role) => (
+ {roleLabels[role]}
+ ))}
+
));
};
diff --git a/src/authz-module/libraries-manager/components/TeamTable/components/MultipleChoiceFilter.tsx b/src/authz-module/libraries-manager/components/TeamTable/components/MultipleChoiceFilter.tsx
index 3821f05b..c8e55615 100644
--- a/src/authz-module/libraries-manager/components/TeamTable/components/MultipleChoiceFilter.tsx
+++ b/src/authz-module/libraries-manager/components/TeamTable/components/MultipleChoiceFilter.tsx
@@ -15,7 +15,7 @@ const MultipleChoiceFilter = ({
}: MultipleChoiceFilterProps) => {
const checkedBoxes = filterValue || [];
- const changeCheckbox = (value) => {
+ const changeCheckbox = (value: string) => {
if (checkedBoxes.includes(value)) {
const newCheckedBoxes = checkedBoxes.filter((val) => val !== value);
return setFilter(newCheckedBoxes);
diff --git a/src/authz-module/libraries-manager/components/TeamTable/components/SearchFilter.test.tsx b/src/authz-module/libraries-manager/components/TeamTable/components/SearchFilter.test.tsx
index f216f649..d7f18476 100644
--- a/src/authz-module/libraries-manager/components/TeamTable/components/SearchFilter.test.tsx
+++ b/src/authz-module/libraries-manager/components/TeamTable/components/SearchFilter.test.tsx
@@ -11,7 +11,7 @@ describe('SearchFilter', () => {
const SearchFilterWrapper = ({
initFilterValue = '', customPlaceholder = 'Search placeholder',
}:{ initFilterValue?: string; customPlaceholder?:string }) => {
- const [filter, setFilter] = useState(initFilterValue);
+ const [filter, setFilter] = useState(initFilterValue);
return (
void;
+ filterValue: string | undefined;
+ setFilter: (value: string | undefined) => void;
placeholder: string;
}
@@ -18,7 +18,7 @@ const SearchFilter = ({
trailingElement={}
value={filterValue || ''}
type="text"
- onChange={e => {
+ onChange={(e: React.ChangeEvent) => {
setFilter(e.target.value || undefined); // Set undefined to remove the filter entirely
}}
placeholder={placeholder}
diff --git a/src/authz-module/libraries-manager/components/TeamTable/components/SortDropdown.tsx b/src/authz-module/libraries-manager/components/TeamTable/components/SortDropdown.tsx
index 7f2bef04..174a5927 100644
--- a/src/authz-module/libraries-manager/components/TeamTable/components/SortDropdown.tsx
+++ b/src/authz-module/libraries-manager/components/TeamTable/components/SortDropdown.tsx
@@ -1,4 +1,5 @@
import {
+ Context,
useContext, useState, useMemo, useCallback,
useEffect,
FC,
@@ -11,6 +12,7 @@ import {
Stack,
} from '@openedx/paragon';
import { SwapVert } from '@openedx/paragon/icons';
+import type { DataTableContextShape } from '@src/paragon';
interface SortOption {
id: string;
@@ -29,7 +31,7 @@ const SORT_BY_OPTIONS: SortByOptions = {
const SortDropdown: FC = () => {
const intl = useIntl();
- const { toggleSortBy, state } = useContext(DataTableContext);
+ const { toggleSortBy, state } = useContext(DataTableContext as unknown as Context);
const [sortOrder, setSortOrder] = useState(undefined);
const SORT_LABELS: Record = useMemo(() => ({
diff --git a/src/authz-module/libraries-manager/components/TeamTable/components/TableControlBar.test.tsx b/src/authz-module/libraries-manager/components/TeamTable/components/TableControlBar.test.tsx
index 0c814776..6ae165ae 100644
--- a/src/authz-module/libraries-manager/components/TeamTable/components/TableControlBar.test.tsx
+++ b/src/authz-module/libraries-manager/components/TeamTable/components/TableControlBar.test.tsx
@@ -28,7 +28,9 @@ jest.mock('./SortDropdown', () => {
jest.mock('./SearchFilter', () => {
// eslint-disable-next-line react/prop-types
- const MockSearchFilter = (props) => (
+ const MockSearchFilter = (props: {
+ placeholder?: string; filterValue?: string; setFilter: (value: string) => void;
+ }) => (
{
columns,
setAllFilters,
state,
- } = useContext
(DataTableContext);
+ } = useContext(DataTableContext as unknown as Context);
const availableFilters = columns.filter((column) => column.canFilter);
@@ -28,8 +29,8 @@ const TableControlBar = () => {
.map((column) => column.Header);
const getSearchPlaceholder = () => intl.formatMessage(messages['authz.libraries.team.table.search'], {
- firstField: columnTextFilterHeaders[0] || 'field',
- secondField: columnTextFilterHeaders[1] || 'field',
+ firstField: String(columnTextFilterHeaders[0] || 'field'),
+ secondField: String(columnTextFilterHeaders[1] || 'field'),
});
return (
@@ -37,7 +38,7 @@ const TableControlBar = () => {
{availableFilters.map((column) => {
if (column.Filter === CheckboxFilter) {
- return ;
+ return )} />;
}
if (column.Filter === TextFilter) {
@@ -45,7 +46,7 @@ const TableControlBar = () => {
);
diff --git a/src/authz-module/libraries-manager/context.tsx b/src/authz-module/libraries-manager/context.tsx
index a6ad0035..b38e68f0 100644
--- a/src/authz-module/libraries-manager/context.tsx
+++ b/src/authz-module/libraries-manager/context.tsx
@@ -5,7 +5,7 @@ import { useParams } from 'react-router-dom';
import { AppContext } from '@edx/frontend-platform/react';
import { useValidateUserPermissions } from '@src/data/hooks';
import { usePermissionsByRole } from '@src/authz-module/data/hooks';
-import { PermissionMetadata, ResourceMetadata, Role } from 'types';
+import { PermissionMetadata, ResourceMetadata, Role } from '@src/types';
import { CustomErrors } from '@src/constants';
import {
CONTENT_LIBRARY_PERMISSIONS, libraryPermissions, libraryResourceTypes, libraryRolesMetadata,
@@ -16,13 +16,6 @@ const LIBRARY_TEAM_PERMISSIONS = [
CONTENT_LIBRARY_PERMISSIONS.MANAGE_LIBRARY_TEAM,
];
-export type AppContextType = {
- authenticatedUser: {
- username: string;
- email: string;
- };
-};
-
type LibraryAuthZContextType = {
canManageTeam: boolean;
username: string;
@@ -40,7 +33,7 @@ type AuthZProviderProps = {
export const LibraryAuthZProvider = ({ children }: AuthZProviderProps) => {
const { libraryId } = useParams<{ libraryId: string }>();
- const { authenticatedUser } = useContext(AppContext) as AppContextType;
+ const { authenticatedUser } = useContext(AppContext) as React.ContextType;
// TODO: Implement a custom error view
if (!libraryId) {
@@ -62,13 +55,13 @@ export const LibraryAuthZProvider = ({ children }: AuthZProviderProps) => {
} as Role));
const value = useMemo((): LibraryAuthZContextType => ({
- username: authenticatedUser.username,
+ username: authenticatedUser?.username ?? '',
libraryId,
roles,
permissions: libraryPermissions,
resources: libraryResourceTypes,
canManageTeam,
- }), [libraryId, authenticatedUser.username, canManageTeam, roles]);
+ }), [libraryId, authenticatedUser?.username, canManageTeam, roles]);
return (
diff --git a/src/authz-module/libraries-manager/utils.test.ts b/src/authz-module/libraries-manager/utils.test.ts
index 07d6600a..cd444dc1 100644
--- a/src/authz-module/libraries-manager/utils.test.ts
+++ b/src/authz-module/libraries-manager/utils.test.ts
@@ -1,6 +1,7 @@
+import type { IntlShape } from '@edx/frontend-platform/i18n';
import { buildPermissionMatrixByResource, buildPermissionMatrixByRole } from './utils';
-const intl = { formatMessage: jest.fn((msg: any) => msg) };
+const intl = { formatMessage: jest.fn((msg: any) => msg) } as unknown as IntlShape;
const permissions = [
{
diff --git a/src/authz-module/libraries-manager/utils.ts b/src/authz-module/libraries-manager/utils.ts
index 17ff64cc..6db95b3e 100644
--- a/src/authz-module/libraries-manager/utils.ts
+++ b/src/authz-module/libraries-manager/utils.ts
@@ -1,4 +1,4 @@
-import { IntlShape } from '@edx/frontend-platform/i18n';
+import type { IntlShape } from '@edx/frontend-platform/i18n';
import { actionKeys } from '@src/authz-module/components/RoleCard/constants';
import {
EnrichedPermission, PermissionMetadata, PermissionsResourceGrouped,
@@ -33,7 +33,7 @@ const getPermissionMetadata = (permission: PermissionMetadata, intl: IntlShape):
messageResource = actionKey === 'tag' ? 'Tags' : '';
}
- const messageDescriptor = actionMessages[messageKey];
+ const messageDescriptor = actionMessages[messageKey as keyof typeof actionMessages];
const label = permission.label || (messageDescriptor
? intl.formatMessage(messageDescriptor, { resource: messageResource })
: permission.key);
diff --git a/src/authz-module/roles-permissions/courses/constants.ts b/src/authz-module/roles-permissions/courses/constants.ts
index f8b498e8..effdc110 100644
--- a/src/authz-module/roles-permissions/courses/constants.ts
+++ b/src/authz-module/roles-permissions/courses/constants.ts
@@ -1,4 +1,4 @@
-import { PermissionMetadata, ResourceMetadata } from 'types';
+import { PermissionMetadata, ResourceMetadata } from '@src/types';
import {
LibraryBooks, Article, Group, LocalOffer,
BookOpen,
diff --git a/src/authz-module/roles-permissions/libraries/constants.ts b/src/authz-module/roles-permissions/libraries/constants.ts
index 9c2b3dc9..4eac8927 100644
--- a/src/authz-module/roles-permissions/libraries/constants.ts
+++ b/src/authz-module/roles-permissions/libraries/constants.ts
@@ -1,4 +1,4 @@
-import { PermissionMetadata, ResourceMetadata, RoleMetadata } from 'types';
+import { PermissionMetadata, ResourceMetadata, RoleMetadata } from '@src/types';
import {
Group, CollectionsBookmark, Notes, AutoAwesomeMosaic,
} from '@openedx/paragon/icons';
diff --git a/src/authz-module/roles-permissions/libraries/utils.test.ts b/src/authz-module/roles-permissions/libraries/utils.test.ts
index 07d6600a..cd444dc1 100644
--- a/src/authz-module/roles-permissions/libraries/utils.test.ts
+++ b/src/authz-module/roles-permissions/libraries/utils.test.ts
@@ -1,6 +1,7 @@
+import type { IntlShape } from '@edx/frontend-platform/i18n';
import { buildPermissionMatrixByResource, buildPermissionMatrixByRole } from './utils';
-const intl = { formatMessage: jest.fn((msg: any) => msg) };
+const intl = { formatMessage: jest.fn((msg: any) => msg) } as unknown as IntlShape;
const permissions = [
{
diff --git a/src/authz-module/roles-permissions/libraries/utils.ts b/src/authz-module/roles-permissions/libraries/utils.ts
index 7dd5cf53..81c99f98 100644
--- a/src/authz-module/roles-permissions/libraries/utils.ts
+++ b/src/authz-module/roles-permissions/libraries/utils.ts
@@ -31,7 +31,7 @@ const getPermissionMetadata = (permission: PermissionMetadata, intl: IntlShape):
messageKey = 'authz.permissions.actions.manage';
}
- const messageDescriptor = actionMessages[messageKey];
+ const messageDescriptor = actionMessages[messageKey as keyof typeof actionMessages];
const label = permission.label || (messageDescriptor
? intl.formatMessage(messageDescriptor, { resource: '' })
: permission.key);
diff --git a/src/authz-module/team-members/TeamMembersTable.test.tsx b/src/authz-module/team-members/TeamMembersTable.test.tsx
index 7619b88c..944c76c3 100644
--- a/src/authz-module/team-members/TeamMembersTable.test.tsx
+++ b/src/authz-module/team-members/TeamMembersTable.test.tsx
@@ -112,9 +112,9 @@ jest.mock('@src/authz-module/data/hooks', () => ({
}));
const mockApiResponses = (
- allAsignmentsResponse = mockedAllRoleAssignments,
- orgResponse = mockedOrgs,
- scopesResponse = mockedScopes,
+ allAsignmentsResponse: Record = mockedAllRoleAssignments,
+ orgResponse: Record = mockedOrgs,
+ scopesResponse: Record = mockedScopes,
) => {
(useAllRoleAssignments as jest.Mock).mockReturnValue(allAsignmentsResponse);
(useOrgs as jest.Mock).mockReturnValue(orgResponse);
@@ -150,9 +150,10 @@ describe('TeamMembersTable', () => {
...mockedAllRoleAssignments,
isLoading: false,
error: new Error('Failed to fetch'),
- data: { results: [] },
+ data: {
+ results: [], count: 0, next: null, previous: null,
+ },
};
- // @ts-ignore
mockApiResponses(allAsignmentsResponse);
renderWithAllProviders();
expect(screen.getByText(/Something went wrong on our end./)).toBeInTheDocument();
diff --git a/src/data/hooks.test.tsx b/src/data/hooks.test.tsx
index a2e284cc..480e3a3c 100644
--- a/src/data/hooks.test.tsx
+++ b/src/data/hooks.test.tsx
@@ -88,7 +88,7 @@ describe('useValidateUserPermissions', () => {
});
it('returns allowed true when permissions are valid', async () => {
- getAuthenticatedHttpClient.mockReturnValue({
+ (getAuthenticatedHttpClient as jest.Mock).mockReturnValue({
post: jest.fn().mockResolvedValueOnce({ data: mockValidPermissions }),
});
@@ -103,7 +103,7 @@ describe('useValidateUserPermissions', () => {
});
it('returns allowed false when permissions are invalid', async () => {
- getAuthenticatedHttpClient.mockReturnValue({
+ (getAuthenticatedHttpClient as jest.Mock).mockReturnValue({
post: jest.fn().mockResolvedValue({ data: mockInvalidPermissions }),
});
@@ -120,7 +120,7 @@ describe('useValidateUserPermissions', () => {
it('handles error when the API call fails', async () => {
const mockError = new Error('API Error');
- getAuthenticatedHttpClient.mockReturnValue({
+ (getAuthenticatedHttpClient as jest.Mock).mockReturnValue({
post: jest.fn().mockRejectedValue(new Error('API Error')),
});
diff --git a/src/global.d.ts b/src/global.d.ts
new file mode 100644
index 00000000..a07597b0
--- /dev/null
+++ b/src/global.d.ts
@@ -0,0 +1,10 @@
+declare module 'lodash.debounce' {
+ const debounce: any>(
+ fn: T,
+ wait?: number,
+ options?: { leading?: boolean; trailing?: boolean; maxWait?: number },
+ ) => T & { cancel: () => void; flush: () => void };
+ export default debounce;
+}
+
+declare module '@edx/frontend-component-header';
diff --git a/src/index.tsx b/src/index.tsx
index 7e5ee477..fb33467f 100644
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -30,12 +30,13 @@ subscribe(APP_READY, () => {
);
});
-subscribe(APP_INIT_ERROR, (error) => {
+subscribe(APP_INIT_ERROR, (_message, data) => {
const root = createRoot(document.getElementById('root') as HTMLElement);
+ const error = data as { message?: string } | undefined;
root.render(
-
+
,
);
});
@@ -47,7 +48,7 @@ initialize({
config: () => {
mergeConfig({
COURSE_AUTHORING_MICROFRONTEND_URL: process.env.COURSE_AUTHORING_MICROFRONTEND_URL || null,
- }, 'AdminConsoleAppConfig');
+ });
},
},
});
diff --git a/src/paragon.d.ts b/src/paragon.d.ts
new file mode 100644
index 00000000..164965be
--- /dev/null
+++ b/src/paragon.d.ts
@@ -0,0 +1,35 @@
+export interface TableCellValue {
+ row: {
+ original: T;
+ };
+}
+
+export interface DataTableColumn {
+ id?: string;
+ accessor?: string;
+ Header?: string | React.ReactNode;
+ Filter?: React.ComponentType;
+ canFilter?: boolean;
+ filterValue?: any;
+ setFilter?: (value: any) => void;
+ filterChoices?: Array<{ name: string; number: number; value: string }>;
+ filterOrder?: number;
+ filterButtonText?: string;
+ [key: string]: any;
+}
+
+export interface DataTableContextShape {
+ columns: DataTableColumn[];
+ setAllFilters: (filters: any[]) => void;
+ toggleSortBy: (columnId: string, desc: boolean) => void;
+ gotoPage: (pageIndex: number) => void;
+ pageCount: number;
+ itemCount: number;
+ rows: Array<{ original: any }>;
+ state: {
+ sortBy?: Array<{ id: string; desc: boolean }>;
+ filters: Array<{ id: string; value: any }>;
+ pageIndex: number;
+ pageSize: number;
+ };
+}
diff --git a/src/setupTest.tsx b/src/setupTest.tsx
index a6375170..ad7ccedb 100644
--- a/src/setupTest.tsx
+++ b/src/setupTest.tsx
@@ -9,19 +9,21 @@ import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
const mockAppContext = {
authenticatedUser: {
+ userId: 1,
username: 'testuser',
- email: 'testuser@example.com',
+ roles: [],
+ administrator: false,
},
config: {
...process.env,
},
-};
+} as unknown as React.ContextType;
interface WrapperProps {
children: ReactNode;
}
-export const renderWithAllProviders = (ui, options = {}) => {
+export const renderWithAllProviders = (ui: ReactNode, options = {}) => {
const queryClient = new QueryClient({
defaultOptions: {
queries: {
@@ -44,7 +46,7 @@ export const renderWithAllProviders = (ui, options = {}) => {
return render(ui, { wrapper: Wrapper, ...options });
};
-export const renderWrapper = (ui, options = {}) => {
+export const renderWrapper = (ui: ReactNode, options = {}) => {
const Wrapper = ({ children }: WrapperProps) => (
diff --git a/src/types.ts b/src/types.ts
index 1ce1c194..b44b3ff4 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -7,7 +7,7 @@ export interface PermissionValidationResponse extends PermissionValidationReques
allowed: boolean;
}
-// Libraries AuthZ types
+// AuthZ types
export interface TeamMember {
username: string;
fullName: string;
@@ -93,20 +93,6 @@ export type PermissionsRoleGrouped = Role & {
resources: RoleResourceGroup[];
};
-// Paragon table type
-export interface TableCellValue {
- row: {
- original: T;
- };
-}
-
-export type AppContextType = {
- authenticatedUser: {
- username: string;
- email: string;
- };
-};
-
export interface UserRole {
isSuperadmin?: boolean;
role: string;
diff --git a/tsconfig.json b/tsconfig.json
index a45a627a..b28ec0ff 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -3,12 +3,12 @@
"compilerOptions": {
"outDir": "dist",
"rootDir": ".",
- "baseUrl": "./src",
- "paths": {
- "*": ["*"],
- "@src/*": ["*"]
- }
- },
- "include": ["*.js", ".eslintrc.js", "src/**/*", "plugins/**/*"],
- "exclude": ["dist", "node_modules"]
+ // Ignore deprecation warnings for TypeScript 6.0, which will be used in the next major release of TypeScript.
+ "ignoreDeprecations": "6.0",
+ "paths": {
+ "@src/*": ["./src/*"]
+ }
+ },
+ "include": ["*.js", ".eslintrc.js", "src/**/*", "plugins/**/*"],
+ "exclude": ["dist", "node_modules"]
}