Skip to content

Commit eeb284c

Browse files
refactor: code (#343)
1 parent d6590b0 commit eeb284c

12 files changed

+127
-63
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,5 @@ Thumbs.db
2020
.vscode
2121
*.sublime-project
2222
*.sublime-workspace
23+
/test/fixtures/generated-1.html
24+
/test/fixtures/generated-2.html

src/index.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import {
55
getImportCode,
66
getModuleCode,
77
getExportCode,
8-
stringifyRequest,
98
} from './utils';
109

1110
import schema from './options.json';
@@ -27,10 +26,9 @@ export default async function loader(content) {
2726
if (options.attributes) {
2827
plugins.push(
2928
sourcePlugin({
30-
urlHandler: (url) =>
31-
url[0] === '/' ? `"${url}"` : stringifyRequest(this, url),
3229
attributes: options.attributes,
3330
resourcePath: this.resourcePath,
31+
context: this.context,
3432
imports,
3533
errors,
3634
replacements,

src/plugins/source-plugin.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,16 @@ import {
99
requestify,
1010
isUrlRequestable,
1111
c0ControlCodesExclude,
12-
isUrlRequest,
12+
stringifyRequest,
1313
} from '../utils';
1414

1515
export default (options) =>
1616
function process(html) {
1717
const { list, urlFilter: maybeUrlFilter } = options.attributes;
1818
const sources = [];
19-
const urlFilter = getFilter(maybeUrlFilter, (value) => isUrlRequest(value));
19+
const urlFilter = getFilter(maybeUrlFilter, (value) =>
20+
isUrlRequestable(value)
21+
);
2022
const getAttribute = (tag, attribute, attributes, resourcePath) =>
2123
list.find((element) => {
2224
const foundTag =
@@ -220,7 +222,7 @@ export default (options) =>
220222

221223
options.imports.push({
222224
importName,
223-
source: options.urlHandler(newUrl),
225+
source: stringifyRequest(options.context, newUrl),
224226
});
225227
}
226228

src/utils.js

Lines changed: 18 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -377,35 +377,29 @@ export function normalizeUrl(url) {
377377
const moduleRequestRegex = /^[^?]*~/;
378378
const matchNativeWin32Path = /^[A-Z]:[/\\]|^\\\\/i;
379379

380-
function urlToRequest(url) {
381-
if (url === '') {
382-
return '';
380+
export function requestify(url) {
381+
if (matchNativeWin32Path.test(url) || url[0] === '/') {
382+
return url;
383383
}
384384

385-
let request = url;
385+
if (/^file:/i.test(url)) {
386+
return url;
387+
}
386388

387-
if (matchNativeWin32Path.test(url) || url[0] === '/') {
388-
request = url;
389-
} else if (/^\.\.?\//.test(url)) {
390-
request = url;
391-
} else {
392-
// every other url is threaded like a relative url
393-
request = `./${url}`;
389+
if (/^\.\.?\//.test(url)) {
390+
return url;
394391
}
395392

396393
// A `~` makes the url an module
397-
if (moduleRequestRegex.test(request)) {
398-
request = request.replace(moduleRequestRegex, '');
394+
if (moduleRequestRegex.test(url)) {
395+
return url.replace(moduleRequestRegex, '');
399396
}
400397

401-
return request;
402-
}
403-
404-
export function requestify(url) {
405-
return urlToRequest(url);
398+
// every other url is threaded like a relative url
399+
return `./${url}`;
406400
}
407401

408-
export function isUrlRequest(url) {
402+
export function isUrlRequestable(url) {
409403
// Protocol-relative URLs
410404
if (/^\/\//.test(url)) {
411405
return false;
@@ -429,25 +423,18 @@ export function isUrlRequest(url) {
429423
return true;
430424
}
431425

432-
export function isUrlRequestable(url) {
433-
return isUrlRequest(url);
434-
}
435-
436426
const matchRelativePath = /^\.\.?[/\\]/;
437427

438428
function isAbsolutePath(str) {
439-
return path.posix.isAbsolute(str) || path.win32.isAbsolute(str);
429+
return matchNativeWin32Path.test(str) && path.win32.isAbsolute(str);
440430
}
441431

442432
function isRelativePath(str) {
443433
return matchRelativePath.test(str);
444434
}
445435

446-
export function stringifyRequest(loaderContext, request) {
436+
export function stringifyRequest(context, request) {
447437
const splitted = request.split('!');
448-
const context =
449-
loaderContext.context ||
450-
(loaderContext.options && loaderContext.options.context);
451438

452439
return JSON.stringify(
453440
splitted
@@ -836,10 +823,9 @@ export function getImportCode(html, loaderContext, imports, options) {
836823
return '';
837824
}
838825

839-
const stringifiedHelperRequest = stringifyRequest(
840-
loaderContext,
841-
require.resolve('./runtime/getUrl.js')
842-
);
826+
const stringifiedHelperRequest = `"${path
827+
.relative(loaderContext.context, require.resolve('./runtime/getUrl.js'))
828+
.replace(/\\/g, '/')}"`;
843829

844830
let code = options.esModule
845831
? `import ${GET_SOURCE_FROM_IMPORT_NAME} from ${stringifiedHelperRequest};\n`

test/__snapshots__/attributes-option.test.js.snap

Lines changed: 24 additions & 12 deletions
Large diffs are not rendered by default.

test/__snapshots__/esModule-option.test.js.snap

Lines changed: 6 additions & 3 deletions
Large diffs are not rendered by default.

test/__snapshots__/loader.test.js.snap

Lines changed: 14 additions & 1 deletion
Large diffs are not rendered by default.

test/__snapshots__/minimize-option.test.js.snap

Lines changed: 12 additions & 9 deletions
Large diffs are not rendered by default.

test/fixtures/absolute.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import html from './generated-1.html';
2+
3+
export default html;

test/fixtures/file-protocol.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import html from './generated-2.html';
2+
3+
export default html;

0 commit comments

Comments
 (0)