check for Windows absolute url in URLAbsoluteSpecifier util

This commit is contained in:
Ivan Kopeykin 2020-06-29 12:24:44 +03:00
parent f4abe4a550
commit d42d2b51df
3 changed files with 8 additions and 20 deletions

View File

@ -29,7 +29,7 @@ const RuntimeGlobals = require("./RuntimeGlobals");
const UnsupportedSchemeError = require("./UnsupportedSchemeError"); const UnsupportedSchemeError = require("./UnsupportedSchemeError");
const WebpackError = require("./WebpackError"); const WebpackError = require("./WebpackError");
const { decodeDataURI } = require("./util/DataURI"); const { decodeDataURI } = require("./util/DataURI");
const { getScheme, isSchemeSupported } = require("./util/URLAbsoluteSpecifier"); const { getScheme } = require("./util/URLAbsoluteSpecifier");
const { const {
compareLocations, compareLocations,
concatComparators, concatComparators,
@ -137,7 +137,7 @@ const asBuffer = input => {
const readResourceFn = fs => { const readResourceFn = fs => {
return (resource, callback) => { return (resource, callback) => {
const scheme = getScheme(resource); const scheme = getScheme(resource);
if (scheme && isSchemeSupported(scheme)) { if (scheme) {
switch (scheme) { switch (scheme) {
case "data": case "data":
return process.nextTick(() => { return process.nextTick(() => {

View File

@ -22,11 +22,7 @@ const BasicMatcherRulePlugin = require("./rules/BasicMatcherRulePlugin");
const RuleSetCompiler = require("./rules/RuleSetCompiler"); const RuleSetCompiler = require("./rules/RuleSetCompiler");
const UseEffectRulePlugin = require("./rules/UseEffectRulePlugin"); const UseEffectRulePlugin = require("./rules/UseEffectRulePlugin");
const LazySet = require("./util/LazySet"); const LazySet = require("./util/LazySet");
const { const { getScheme, getMimetype } = require("./util/URLAbsoluteSpecifier");
getScheme,
getMimetype,
isSchemeSupported
} = require("./util/URLAbsoluteSpecifier");
const { cachedCleverMerge, cachedSetProperty } = require("./util/cleverMerge"); const { cachedCleverMerge, cachedSetProperty } = require("./util/cleverMerge");
const { join } = require("./util/fs"); const { join } = require("./util/fs");
@ -327,7 +323,6 @@ class NormalModuleFactory extends ModuleFactory {
let resource; let resource;
/** @type {string | undefined} */ /** @type {string | undefined} */
const scheme = getScheme(unresolvedResource); const scheme = getScheme(unresolvedResource);
const supportedScheme = scheme ? isSchemeSupported(scheme) : false;
let resourceResolveData; let resourceResolveData;
let loaders; let loaders;
@ -391,7 +386,7 @@ class NormalModuleFactory extends ModuleFactory {
? resource.replace(/\?.*/, "") ? resource.replace(/\?.*/, "")
: resourcePath, : resourcePath,
resourceQuery, resourceQuery,
mimetype: supportedScheme ? getMimetype(scheme, resource) : "", mimetype: scheme ? getMimetype(scheme, resource) : "",
issuer: contextInfo.issuer, issuer: contextInfo.issuer,
compiler: contextInfo.compiler compiler: contextInfo.compiler
}); });
@ -515,7 +510,7 @@ class NormalModuleFactory extends ModuleFactory {
return continueCallback(); return continueCallback();
} }
if (supportedScheme) { if (scheme) {
resource = unresolvedResource; resource = unresolvedResource;
continueCallback(); continueCallback();
} else { } else {

View File

@ -10,7 +10,7 @@ const { getMimetype: getDataUrlMimetype } = require("./DataURI");
/** @typedef {import("./fs").InputFileSystem} InputFileSystem */ /** @typedef {import("./fs").InputFileSystem} InputFileSystem */
/** @typedef {(error: Error|null, result?: Buffer) => void} ErrorFirstCallback */ /** @typedef {(error: Error|null, result?: Buffer) => void} ErrorFirstCallback */
const supportedSchemes = new Set(["data", "file", "http", "https"]); const backSlashCharCode = "\\".charCodeAt(0);
const aLowerCaseCharCode = "a".charCodeAt(0); const aLowerCaseCharCode = "a".charCodeAt(0);
const zLowerCaseCharCode = "z".charCodeAt(0); const zLowerCaseCharCode = "z".charCodeAt(0);
const aUpperCaseCharCode = "A".charCodeAt(0); const aUpperCaseCharCode = "A".charCodeAt(0);
@ -53,6 +53,8 @@ function getScheme(specifier) {
// Scheme must end with colon // Scheme must end with colon
if (ch !== colonCharCode) return undefined; if (ch !== colonCharCode) return undefined;
// Check for Windows absolute path
if (specifier.charCodeAt(i + 1) === backSlashCharCode) return undefined;
return specifier.slice(0, i).toLowerCase(); return specifier.slice(0, i).toLowerCase();
} }
@ -79,15 +81,6 @@ function getMimetype(scheme, specifier) {
} }
} }
/**
* @param {string} scheme scheme
* @returns {boolean} supported or not
*/
function isSchemeSupported(scheme) {
return supportedSchemes.has(scheme);
}
exports.getScheme = getScheme; exports.getScheme = getScheme;
exports.getMimetype = getMimetype; exports.getMimetype = getMimetype;
exports.getProtocol = getProtocol; exports.getProtocol = getProtocol;
exports.isSchemeSupported = isSchemeSupported;