[6a3a178] | 1 | 'use strict';
|
---|
| 2 |
|
---|
| 3 | const path = require('path');
|
---|
| 4 |
|
---|
| 5 | const matchRelativePath = /^\.\.?[/\\]/;
|
---|
| 6 |
|
---|
| 7 | function isAbsolutePath(str) {
|
---|
| 8 | return path.posix.isAbsolute(str) || path.win32.isAbsolute(str);
|
---|
| 9 | }
|
---|
| 10 |
|
---|
| 11 | function isRelativePath(str) {
|
---|
| 12 | return matchRelativePath.test(str);
|
---|
| 13 | }
|
---|
| 14 |
|
---|
| 15 | function stringifyRequest(loaderContext, request) {
|
---|
| 16 | const splitted = request.split('!');
|
---|
| 17 | const context =
|
---|
| 18 | loaderContext.context ||
|
---|
| 19 | (loaderContext.options && loaderContext.options.context);
|
---|
| 20 |
|
---|
| 21 | return JSON.stringify(
|
---|
| 22 | splitted
|
---|
| 23 | .map((part) => {
|
---|
| 24 | // First, separate singlePath from query, because the query might contain paths again
|
---|
| 25 | const splittedPart = part.match(/^(.*?)(\?.*)/);
|
---|
| 26 | const query = splittedPart ? splittedPart[2] : '';
|
---|
| 27 | let singlePath = splittedPart ? splittedPart[1] : part;
|
---|
| 28 |
|
---|
| 29 | if (isAbsolutePath(singlePath) && context) {
|
---|
| 30 | singlePath = path.relative(context, singlePath);
|
---|
| 31 |
|
---|
| 32 | if (isAbsolutePath(singlePath)) {
|
---|
| 33 | // If singlePath still matches an absolute path, singlePath was on a different drive than context.
|
---|
| 34 | // In this case, we leave the path platform-specific without replacing any separators.
|
---|
| 35 | // @see https://github.com/webpack/loader-utils/pull/14
|
---|
| 36 | return singlePath + query;
|
---|
| 37 | }
|
---|
| 38 |
|
---|
| 39 | if (isRelativePath(singlePath) === false) {
|
---|
| 40 | // Ensure that the relative path starts at least with ./ otherwise it would be a request into the modules directory (like node_modules).
|
---|
| 41 | singlePath = './' + singlePath;
|
---|
| 42 | }
|
---|
| 43 | }
|
---|
| 44 |
|
---|
| 45 | return singlePath.replace(/\\/g, '/') + query;
|
---|
| 46 | })
|
---|
| 47 | .join('!')
|
---|
| 48 | );
|
---|
| 49 | }
|
---|
| 50 |
|
---|
| 51 | module.exports = stringifyRequest;
|
---|