fix: logic
This commit is contained in:
parent
f21930b588
commit
420e8b6815
|
@ -185,7 +185,38 @@ class AssetGenerator extends Generator {
|
|||
);
|
||||
}
|
||||
|
||||
const encodedContent = encodeDataUri(encoding, originalSource);
|
||||
let encodedContent;
|
||||
|
||||
const decodeDataURI = uri => {
|
||||
const match = URIRegEx.exec(uri);
|
||||
if (!match) return null;
|
||||
|
||||
const isBase64 = match[3];
|
||||
const body = match[4];
|
||||
return isBase64
|
||||
? Buffer.from(body, "base64")
|
||||
: Buffer.from(decodeURIComponent(body), "ascii");
|
||||
};
|
||||
|
||||
const decodeDataUriContent = (encoding, content) => {
|
||||
const isBase64 = encoding === "base64";
|
||||
return isBase64
|
||||
? Buffer.from(content, "base64")
|
||||
: Buffer.from(decodeURIComponent(content), "ascii");
|
||||
};
|
||||
|
||||
if (
|
||||
module.resourceResolveData &&
|
||||
module.resourceResolveData.encoding === encoding &&
|
||||
decodeDataUriContent(
|
||||
module.resourceResolveData.encoding,
|
||||
module.resourceResolveData.encodedContent,
|
||||
).equals(originalSource.buffer())
|
||||
) {
|
||||
encodedContent = module.resourceResolveData.encodedContent;
|
||||
} else {
|
||||
encodedContent = encodeDataUri(encoding, originalSource);
|
||||
}
|
||||
|
||||
encodedSource = `data:${mimeType}${
|
||||
encoding ? `;${encoding}` : ""
|
||||
|
|
|
@ -5,7 +5,15 @@ import dataSvg from "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53M
|
|||
const urlSvg = new URL(
|
||||
"data:image/svg;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MDAgNjAwIj48dGl0bGU+aWNvbi1zcXVhcmUtc21hbGw8L3RpdGxlPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0zMDAgLjFMNTY1IDE1MHYyOTkuOUwzMDAgNTk5LjggMzUgNDQ5LjlWMTUweiIvPjxwYXRoIGZpbGw9IiM4RUQ2RkIiIGQ9Ik01MTcuNyA0MzkuNUwzMDguOCA1NTcuOHYtOTJMNDM5IDM5NC4xbDc4LjcgNDUuNHptMTQuMy0xMi45VjE3OS40bC03Ni40IDQ0LjF2MTU5bDc2LjQgNDQuMXpNODEuNSA0MzkuNWwyMDguOSAxMTguMnYtOTJsLTEzMC4yLTcxLjYtNzguNyA0NS40em0tMTQuMy0xMi45VjE3OS40bDc2LjQgNDQuMXYxNTlsLTc2LjQgNDQuMXptOC45LTI2My4yTDI5MC40IDQyLjJ2ODlsLTEzNy4zIDc1LjUtMS4xLjYtNzUuOS00My45em00NDYuOSAwTDMwOC44IDQyLjJ2ODlMNDQ2IDIwNi44bDEuMS42IDc1LjktNDR6Ii8+PHBhdGggZmlsbD0iIzFDNzhDMCIgZD0iTTI5MC40IDQ0NC44TDE2MiAzNzQuMVYyMzQuMmwxMjguNCA3NC4xdjEzNi41em0xOC40IDBsMTI4LjQtNzAuNnYtMTQwbC0xMjguNCA3NC4xdjEzNi41ek0yOTkuNiAzMDN6bS0xMjktODVsMTI5LTcwLjlMNDI4LjUgMjE4bC0xMjguOSA3NC40LTEyOS03NC40eiIvPjwvc3ZnPgo="
|
||||
);
|
||||
const urlSvg2 = new URL(
|
||||
"data:image/svg+xml;p=1;q=2,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke=\"%23343a40\" stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e",
|
||||
import.meta.url
|
||||
);
|
||||
const helloWorld = new URL("data:text/plain,Hello", import.meta.url);
|
||||
const helloWorldBase64 = new URL(
|
||||
"data:text/plain;base64,SGVsbG8=",
|
||||
import.meta.url
|
||||
);
|
||||
|
||||
it("should generate various data-url types", () => {
|
||||
expect(png).toContain("data:image/png;base64,");
|
||||
|
@ -13,5 +21,11 @@ it("should generate various data-url types", () => {
|
|||
expect(jpg).toContain("data:image/jpeg;base64,");
|
||||
expect(dataSvg).toContain("data:image/svg+xml;base64,");
|
||||
expect(urlSvg.href).toContain("data:image/svg;base64,");
|
||||
expect(urlSvg2.href).toContain(
|
||||
"data:image/svg+xml;p=1;q=2,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke=\"%23343a40\" stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"
|
||||
);
|
||||
expect(helloWorld.href).toContain("data:text/plain,Hello%2C%20World%21");
|
||||
expect(helloWorldBase64.href).toContain(
|
||||
"data:text/plain;base64,SGVsbG8sIFdvcmxkIQ=="
|
||||
);
|
||||
});
|
||||
|
|
|
@ -4,7 +4,7 @@ it("should keep original encoding", () => {
|
|||
import.meta.url
|
||||
);
|
||||
expect(url.href).toBe(
|
||||
"data:image/svg+xml;p=1;q=2,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2016%2016%27%3E%3Cpath%20fill%3D%27none%27%20stroke%3D%22%23343a40%22%20stroke-linecap%3D%27round%27%20stroke-linejoin%3D%27round%27%20stroke-width%3D%272%27%20d%3D%27M2%205l6%206%206-6%27%2F%3E%3C%2Fsvg%3E"
|
||||
"data:image/svg+xml;p=1;q=2,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke=\"%23343a40\" stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"
|
||||
);
|
||||
});
|
||||
|
||||
|
|
Loading…
Reference in New Issue