-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpostProcessImport.ts
More file actions
32 lines (29 loc) · 1.21 KB
/
postProcessImport.ts
File metadata and controls
32 lines (29 loc) · 1.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import adapterDependencies from './adapter-dependencies.json';
export const ADAPTER_TO_LIBRARY: Record<string, keyof typeof adapterDependencies> = {
AdapterDateFns: 'date-fns',
AdapterDateFnsJalali: 'date-fns-jalali',
AdapterDayjs: 'dayjs',
AdapterLuxon: 'luxon',
AdapterMoment: 'moment',
AdapterMomentHijri: 'moment-hijri',
AdapterMomentJalaali: 'moment-jalaali',
};
const PICKERS_ADAPTER_REGEX = /^@mui\/(lab|x-date-pickers(?:-pro)?)\/(?<adapterName>Adapter.*)/;
export const postProcessImport = (importName: string): Record<string, string> | null => {
// for example date-fns
const dateAdapterMatch = PICKERS_ADAPTER_REGEX.exec(importName);
if (dateAdapterMatch !== null) {
/**
* Mapping from the date adapter sub-packages to the npm packages they require.
* @example `@mui/x-date-pickers/AdapterDayjs` has a peer dependency on `dayjs`.
*/
const packageName = ADAPTER_TO_LIBRARY[dateAdapterMatch.groups?.adapterName || ''];
if (packageName === undefined) {
throw new TypeError(
`Can't determine required npm package for adapter '${dateAdapterMatch[1]}'`,
);
}
return { [packageName]: adapterDependencies[packageName] ?? 'latest' };
}
return null;
};