jest-fuzzy 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +55 -5
- package/dist/cjs/index.d.ts +2 -2
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +2 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/matchers/index.d.ts +1 -0
- package/dist/cjs/matchers/index.d.ts.map +1 -1
- package/dist/cjs/matchers/index.js +3 -1
- package/dist/cjs/matchers/index.js.map +1 -1
- package/dist/cjs/matchers/toSemanticallyMatch.js +1 -1
- package/dist/cjs/matchers/toSemanticallyMatch.js.map +1 -1
- package/dist/cjs/matchers/toVisuallyMatch.d.ts +3 -0
- package/dist/cjs/matchers/toVisuallyMatch.d.ts.map +1 -0
- package/dist/cjs/matchers/toVisuallyMatch.js +62 -0
- package/dist/cjs/matchers/toVisuallyMatch.js.map +1 -0
- package/dist/cjs/providers/anthropic.d.ts +2 -1
- package/dist/cjs/providers/anthropic.d.ts.map +1 -1
- package/dist/cjs/providers/anthropic.js +46 -0
- package/dist/cjs/providers/anthropic.js.map +1 -1
- package/dist/cjs/providers/google.d.ts +2 -1
- package/dist/cjs/providers/google.d.ts.map +1 -1
- package/dist/cjs/providers/google.js +39 -0
- package/dist/cjs/providers/google.js.map +1 -1
- package/dist/cjs/providers/openai.d.ts +2 -1
- package/dist/cjs/providers/openai.d.ts.map +1 -1
- package/dist/cjs/providers/openai.js +46 -0
- package/dist/cjs/providers/openai.js.map +1 -1
- package/dist/cjs/types.d.ts +13 -1
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/cjs/utils/imageUtils.d.ts +8 -0
- package/dist/cjs/utils/imageUtils.d.ts.map +1 -0
- package/dist/cjs/utils/imageUtils.js +89 -0
- package/dist/cjs/utils/imageUtils.js.map +1 -0
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/matchers/index.d.ts +1 -0
- package/dist/esm/matchers/index.d.ts.map +1 -1
- package/dist/esm/matchers/index.js +1 -0
- package/dist/esm/matchers/index.js.map +1 -1
- package/dist/esm/matchers/toSemanticallyMatch.js +1 -1
- package/dist/esm/matchers/toSemanticallyMatch.js.map +1 -1
- package/dist/esm/matchers/toVisuallyMatch.d.ts +3 -0
- package/dist/esm/matchers/toVisuallyMatch.d.ts.map +1 -0
- package/dist/esm/matchers/toVisuallyMatch.js +59 -0
- package/dist/esm/matchers/toVisuallyMatch.js.map +1 -0
- package/dist/esm/providers/anthropic.d.ts +2 -1
- package/dist/esm/providers/anthropic.d.ts.map +1 -1
- package/dist/esm/providers/anthropic.js +46 -0
- package/dist/esm/providers/anthropic.js.map +1 -1
- package/dist/esm/providers/google.d.ts +2 -1
- package/dist/esm/providers/google.d.ts.map +1 -1
- package/dist/esm/providers/google.js +39 -0
- package/dist/esm/providers/google.js.map +1 -1
- package/dist/esm/providers/openai.d.ts +2 -1
- package/dist/esm/providers/openai.d.ts.map +1 -1
- package/dist/esm/providers/openai.js +46 -0
- package/dist/esm/providers/openai.js.map +1 -1
- package/dist/esm/types.d.ts +13 -1
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/esm/utils/imageUtils.d.ts +8 -0
- package/dist/esm/utils/imageUtils.d.ts.map +1 -0
- package/dist/esm/utils/imageUtils.js +81 -0
- package/dist/esm/utils/imageUtils.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { readFile } from "fs/promises";
|
|
2
|
+
import { existsSync } from "fs";
|
|
3
|
+
export function isUrl(input) {
|
|
4
|
+
try {
|
|
5
|
+
const url = new URL(input);
|
|
6
|
+
return url.protocol === "http:" || url.protocol === "https:";
|
|
7
|
+
}
|
|
8
|
+
catch {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export function isFilePath(input) {
|
|
13
|
+
return existsSync(input);
|
|
14
|
+
}
|
|
15
|
+
const BASE64_SIGNATURES = {
|
|
16
|
+
"/9j/": "image/jpeg",
|
|
17
|
+
"iVBORw0KGgo": "image/png",
|
|
18
|
+
"R0lGOD": "image/gif",
|
|
19
|
+
"UklGR": "image/webp",
|
|
20
|
+
};
|
|
21
|
+
export function detectMimeTypeFromBase64(base64) {
|
|
22
|
+
for (const [signature, type] of Object.entries(BASE64_SIGNATURES)) {
|
|
23
|
+
if (base64.startsWith(signature))
|
|
24
|
+
return type;
|
|
25
|
+
}
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
export function isBase64Image(input) {
|
|
29
|
+
return detectMimeTypeFromBase64(input) !== null;
|
|
30
|
+
}
|
|
31
|
+
export function detectMimeTypeFromExtension(path) {
|
|
32
|
+
const ext = path.toLowerCase().split(".").pop();
|
|
33
|
+
switch (ext) {
|
|
34
|
+
case "jpg":
|
|
35
|
+
case "jpeg":
|
|
36
|
+
return "image/jpeg";
|
|
37
|
+
case "png":
|
|
38
|
+
return "image/png";
|
|
39
|
+
case "gif":
|
|
40
|
+
return "image/gif";
|
|
41
|
+
case "webp":
|
|
42
|
+
return "image/webp";
|
|
43
|
+
default:
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export async function normalizeImageInput(input, mimeTypeOverride) {
|
|
48
|
+
let base64;
|
|
49
|
+
let detectedMimeType = null;
|
|
50
|
+
if (Buffer.isBuffer(input)) {
|
|
51
|
+
base64 = input.toString("base64");
|
|
52
|
+
detectedMimeType = detectMimeTypeFromBase64(base64);
|
|
53
|
+
}
|
|
54
|
+
else if (isUrl(input)) {
|
|
55
|
+
const response = await fetch(input);
|
|
56
|
+
if (!response.ok) {
|
|
57
|
+
throw new Error(`Failed to fetch image from URL: ${response.status} ${response.statusText}`);
|
|
58
|
+
}
|
|
59
|
+
const buffer = Buffer.from(await response.arrayBuffer());
|
|
60
|
+
base64 = buffer.toString("base64");
|
|
61
|
+
detectedMimeType = detectMimeTypeFromBase64(base64);
|
|
62
|
+
}
|
|
63
|
+
else if (isFilePath(input)) {
|
|
64
|
+
const buffer = await readFile(input);
|
|
65
|
+
base64 = buffer.toString("base64");
|
|
66
|
+
detectedMimeType = detectMimeTypeFromExtension(input) ?? detectMimeTypeFromBase64(base64);
|
|
67
|
+
}
|
|
68
|
+
else if (isBase64Image(input)) {
|
|
69
|
+
base64 = input;
|
|
70
|
+
detectedMimeType = detectMimeTypeFromBase64(base64);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
throw new Error("Invalid image input. Expected a file path, URL, base64 string, or Buffer.");
|
|
74
|
+
}
|
|
75
|
+
const mediaType = mimeTypeOverride ?? detectedMimeType;
|
|
76
|
+
if (!mediaType) {
|
|
77
|
+
throw new Error("Could not detect image MIME type. Please provide it via the mimeType option.");
|
|
78
|
+
}
|
|
79
|
+
return { base64, mediaType };
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=imageUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imageUtils.js","sourceRoot":"","sources":["../../../src/utils/imageUtils.ts"],"names":[],"mappings":"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"}
|