| const BASE64_PATTERN = /^[A-Za-z0-9+/=]+$/; |
|
|
| export function isDataUrl(value) { |
| return typeof value === "string" && value.startsWith("data:"); |
| } |
|
|
| export function parseDataUrl(value) { |
| if (!isDataUrl(value)) { |
| return null; |
| } |
|
|
| const commaIndex = value.indexOf(","); |
| if (commaIndex === -1) { |
| return null; |
| } |
|
|
| const metadata = value.slice(5, commaIndex); |
| const base64 = value.slice(commaIndex + 1); |
| const metadataParts = metadata.split(";"); |
| const mimeType = metadataParts[0] || ""; |
| const isBase64 = metadataParts.slice(1).some((part) => part.toLowerCase() === "base64"); |
|
|
| if (!mimeType || !isBase64 || !base64) { |
| return null; |
| } |
|
|
| return { |
| mimeType, |
| base64 |
| }; |
| } |
|
|
| export function isLikelyBase64(value) { |
| if (typeof value !== "string") { |
| return false; |
| } |
|
|
| const compact = value.replace(/\s+/g, ""); |
| return compact.length > 0 && compact.length % 4 === 0 && BASE64_PATTERN.test(compact); |
| } |
|
|
| export function stripDataUrl(value) { |
| if (!isDataUrl(value)) { |
| return value; |
| } |
|
|
| const parsed = parseDataUrl(value); |
| return parsed ? parsed.base64 : value; |
| } |
|
|