File size: 1,111 Bytes
e43a4a9
 
 
 
 
 
 
8b5482f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e43a4a9
 
 
 
8b5482f
 
e43a4a9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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;
}