mirror of https://github.com/webpack/webpack.git
refactor: move asset type determination logic from util module to URLDependency class
This commit is contained in:
parent
0e3dfa1a38
commit
719e2b13ca
|
@ -11,7 +11,6 @@ const RawDataUrlModule = require("../asset/RawDataUrlModule");
|
|||
const {
|
||||
getDependencyUsedByExportsCondition
|
||||
} = require("../optimize/InnerGraph");
|
||||
const getAssetType = require("../util/assetType");
|
||||
const makeSerializable = require("../util/makeSerializable");
|
||||
const memoize = require("../util/memoize");
|
||||
const ModuleDependency = require("./ModuleDependency");
|
||||
|
@ -115,6 +114,32 @@ class URLDependency extends ModuleDependency {
|
|||
URLDependency.Template = class URLDependencyTemplate extends (
|
||||
ModuleDependency.Template
|
||||
) {
|
||||
/**
|
||||
* Determines the 'as' attribute value for prefetch/preload based on file extension
|
||||
* https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Attributes/rel/preload#what_types_of_content_can_be_preloaded
|
||||
* @param {string} request module request string or filename
|
||||
* @returns {string} asset type for link element 'as' attribute
|
||||
*/
|
||||
static _getAssetType(request) {
|
||||
if (/\.(png|jpe?g|gif|svg|webp|avif|bmp|ico|tiff?)$/i.test(request)) {
|
||||
return "image";
|
||||
} else if (/\.(woff2?|ttf|otf|eot)$/i.test(request)) {
|
||||
return "font";
|
||||
} else if (/\.(js|mjs|jsx|ts|tsx)$/i.test(request)) {
|
||||
return "script";
|
||||
} else if (/\.css$/i.test(request)) {
|
||||
return "style";
|
||||
} else if (/\.vtt$/i.test(request)) {
|
||||
return "track";
|
||||
} else if (
|
||||
/\.(mp4|webm|ogg|mp3|wav|flac|aac|m4a|avi|mov|wmv|mkv)$/i.test(request)
|
||||
) {
|
||||
// Audio/video files use 'fetch' as browser support varies
|
||||
return "fetch";
|
||||
}
|
||||
return "fetch";
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Dependency} dependency the dependency for which the template should be applied
|
||||
* @param {ReplaceSource} source the current replace source which can be modified
|
||||
|
@ -178,7 +203,7 @@ URLDependency.Template = class URLDependencyTemplate extends (
|
|||
// Prefetch/Preload via InitFragment
|
||||
if ((dep.prefetch || dep.preload) && module) {
|
||||
const request = dep.request;
|
||||
const assetType = getAssetType(request);
|
||||
const assetType = URLDependencyTemplate._getAssetType(request);
|
||||
const id = chunkGraph.getModuleId(module);
|
||||
if (id !== null) {
|
||||
const moduleId = runtimeTemplate.moduleId({
|
||||
|
|
|
@ -1,34 +0,0 @@
|
|||
/*
|
||||
MIT License http://www.opensource.org/licenses/mit-license.php
|
||||
Author Tobias Koppers @sokra
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
/**
|
||||
* Determines the 'as' attribute value for prefetch/preload based on file extension
|
||||
* https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Attributes/rel/preload#what_types_of_content_can_be_preloaded
|
||||
* @param {string} request module request string or filename
|
||||
* @returns {string} asset type for link element 'as' attribute
|
||||
*/
|
||||
const getAssetType = (request) => {
|
||||
if (/\.(png|jpe?g|gif|svg|webp|avif|bmp|ico|tiff?)$/i.test(request)) {
|
||||
return "image";
|
||||
} else if (/\.(woff2?|ttf|otf|eot)$/i.test(request)) {
|
||||
return "font";
|
||||
} else if (/\.(js|mjs|jsx|ts|tsx)$/i.test(request)) {
|
||||
return "script";
|
||||
} else if (/\.css$/i.test(request)) {
|
||||
return "style";
|
||||
} else if (/\.vtt$/i.test(request)) {
|
||||
return "track";
|
||||
} else if (
|
||||
/\.(mp4|webm|ogg|mp3|wav|flac|aac|m4a|avi|mov|wmv|mkv)$/i.test(request)
|
||||
) {
|
||||
// Audio/video files use 'fetch' as browser support varies
|
||||
return "fetch";
|
||||
}
|
||||
return "fetch";
|
||||
};
|
||||
|
||||
module.exports = getAssetType;
|
Loading…
Reference in New Issue