1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| import path from 'path';
|
| import type {LoaderContext, StyleResource} from '../types';
|
| /* eslint-disable-next-line prefer-named-capture-group */
| const regex = /@(?:import|require)\s+(?:\([a-z,\s]+\)\s*)?['"]?([^'"\s;]+)['"]?;?/gu;
|
| export const resolveImportUrl = (ctx: LoaderContext, {file, content}: StyleResource): StyleResource => ({
| file,
| content: content.replace(regex, (match: string, pathToResource?: string) => {
| if (!pathToResource || /^[~/]/u.test(pathToResource)) {
| return match;
| }
|
| const absolutePathToResource = path.resolve(path.dirname(file), pathToResource);
| const relativePathFromContextToResource = path
| .relative(ctx.context, absolutePathToResource)
| .split(path.sep)
| .join('/');
|
| return match.replace(pathToResource, relativePathFromContextToResource);
| }),
| });
|
|