Переглянути джерело

don't use custom properties when content > 2MB (Firefox)

Former-commit-id: 4ac9c7635e3c6bee4a83f502928ee5ace2c1ffcd
Gildas 6 роки тому
батько
коміт
2ebd49df46
1 змінених файлів з 3 додано та 2 видалено
  1. 3 2
      lib/single-file/single-file-core.js

+ 3 - 2
lib/single-file/single-file-core.js

@@ -1363,6 +1363,7 @@ this.singlefile.lib.core = this.singlefile.lib.core || (() => {
 	const EMPTY_DATA_URI = "data:base64,";
 	const REGEXP_URL_HASH = /(#.+?)$/;
 	const SINGLE_FILE_VARIABLE_NAME_PREFIX = "--sf-img-";
+	const VAR_MAX_SIZE = 1024 * 1024 * 2;
 
 	class ProcessorHelper {
 		static async evalTemplate(template = "", options, content, dontReplaceSlash) {
@@ -1622,7 +1623,7 @@ this.singlefile.lib.core = this.singlefile.lib.core || (() => {
 								const tokens = [];
 								findURLToken(originalResourceURL, declaration.value.children, (token, parent, rootFunction) => {
 									if (!originalResourceURL.startsWith("#")) {
-										if (duplicate && options.groupDuplicateImages && rootFunction) {
+										if (duplicate && options.groupDuplicateImages && rootFunction && util.getContentSize(content) < VAR_MAX_SIZE) {
 											const value = cssTree.parse("var(" + SINGLE_FILE_VARIABLE_NAME_PREFIX + indexResource + ")", { context: "value" }).children.head;
 											tokens.push({ parent, token, value });
 											variableDefined = true;
@@ -1673,7 +1674,7 @@ this.singlefile.lib.core = this.singlefile.lib.core || (() => {
 								const forbiddenPrefixFound = PREFIXES_FORBIDDEN_DATA_URI.filter(prefixDataURI => content.startsWith(prefixDataURI)).length;
 								if (!forbiddenPrefixFound) {
 									const isSVG = content.startsWith(PREFIX_DATA_URI_IMAGE_SVG);
-									if (processDuplicates && duplicate && options.groupDuplicateImages && !isSVG) {
+									if (processDuplicates && duplicate && options.groupDuplicateImages && !isSVG && util.getContentSize(content) < VAR_MAX_SIZE) {
 										if (ProcessorHelper.replaceImageSource(resourceElement, SINGLE_FILE_VARIABLE_NAME_PREFIX + indexResource, options)) {
 											cssVariables.set(indexResource, content);
 											const declarationList = cssTree.parse(resourceElement.getAttribute("style"), { context: "declarationList" });