jest-fuzzy 0.1.2 → 0.1.4
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 +65 -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 +172 -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 +131 -0
- package/dist/esm/utils/imageUtils.js.map +1 -0
- package/package.json +10 -1
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ImageMediaType, ImageData } from "../types.js";
|
|
2
|
+
export declare function isUrl(input: string): boolean;
|
|
3
|
+
export declare function isFilePath(input: string): boolean;
|
|
4
|
+
export declare function detectMimeTypeFromBase64(base64: string): ImageMediaType | null;
|
|
5
|
+
export declare function isBase64Image(input: string): boolean;
|
|
6
|
+
export declare function detectMimeTypeFromExtension(path: string): ImageMediaType | null;
|
|
7
|
+
export declare function normalizeImageInput(input: string | Buffer, mimeTypeOverride?: ImageMediaType): Promise<ImageData>;
|
|
8
|
+
//# sourceMappingURL=imageUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imageUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/imageUtils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAqE7D,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAO5C;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEjD;AASD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAK9E;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAe/E;AAED,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,gBAAgB,CAAC,EAAE,cAAc,GAChC,OAAO,CAAC,SAAS,CAAC,CA4CpB"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { readFile } from "fs/promises";
|
|
2
|
+
import { existsSync } from "fs";
|
|
3
|
+
// 4MB limit (Anthropic's limit is 5MB, leaving buffer)
|
|
4
|
+
const MAX_IMAGE_SIZE_BYTES = 4 * 1024 * 1024;
|
|
5
|
+
let sharpModule = undefined;
|
|
6
|
+
async function getSharp() {
|
|
7
|
+
if (sharpModule === undefined) {
|
|
8
|
+
try {
|
|
9
|
+
const mod = await import("sharp");
|
|
10
|
+
sharpModule = mod.default;
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
sharpModule = null;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return sharpModule;
|
|
17
|
+
}
|
|
18
|
+
async function resizeImageIfNeeded(buffer, mediaType) {
|
|
19
|
+
const base64Size = Math.ceil(buffer.length * 4 / 3);
|
|
20
|
+
if (base64Size <= MAX_IMAGE_SIZE_BYTES) {
|
|
21
|
+
return buffer;
|
|
22
|
+
}
|
|
23
|
+
const sharp = await getSharp();
|
|
24
|
+
if (!sharp) {
|
|
25
|
+
const sizeMB = (base64Size / (1024 * 1024)).toFixed(1);
|
|
26
|
+
throw new Error(`Image size (${sizeMB}MB) exceeds the 4MB limit for vision APIs. ` +
|
|
27
|
+
`Install 'sharp' to enable automatic resizing: npm install sharp`);
|
|
28
|
+
}
|
|
29
|
+
let currentBuffer = buffer;
|
|
30
|
+
let quality = 85;
|
|
31
|
+
while (Math.ceil(currentBuffer.length * 4 / 3) > MAX_IMAGE_SIZE_BYTES && quality >= 20) {
|
|
32
|
+
const image = sharp(buffer);
|
|
33
|
+
const metadata = await image.metadata();
|
|
34
|
+
const currentWidth = metadata.width ?? 1920;
|
|
35
|
+
// Calculate scale factor based on how much we need to reduce
|
|
36
|
+
const currentSize = Math.ceil(currentBuffer.length * 4 / 3);
|
|
37
|
+
const scaleFactor = Math.sqrt(MAX_IMAGE_SIZE_BYTES / currentSize) * 0.9;
|
|
38
|
+
const newWidth = Math.floor(currentWidth * scaleFactor);
|
|
39
|
+
currentBuffer = await sharp(buffer)
|
|
40
|
+
.resize(newWidth, null, { withoutEnlargement: true })
|
|
41
|
+
.jpeg({ quality })
|
|
42
|
+
.toBuffer();
|
|
43
|
+
quality -= 10;
|
|
44
|
+
}
|
|
45
|
+
return currentBuffer;
|
|
46
|
+
}
|
|
47
|
+
export function isUrl(input) {
|
|
48
|
+
try {
|
|
49
|
+
const url = new URL(input);
|
|
50
|
+
return url.protocol === "http:" || url.protocol === "https:";
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
export function isFilePath(input) {
|
|
57
|
+
return existsSync(input);
|
|
58
|
+
}
|
|
59
|
+
const BASE64_SIGNATURES = {
|
|
60
|
+
"/9j/": "image/jpeg",
|
|
61
|
+
"iVBORw0KGgo": "image/png",
|
|
62
|
+
"R0lGOD": "image/gif",
|
|
63
|
+
"UklGR": "image/webp",
|
|
64
|
+
};
|
|
65
|
+
export function detectMimeTypeFromBase64(base64) {
|
|
66
|
+
for (const [signature, type] of Object.entries(BASE64_SIGNATURES)) {
|
|
67
|
+
if (base64.startsWith(signature))
|
|
68
|
+
return type;
|
|
69
|
+
}
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
export function isBase64Image(input) {
|
|
73
|
+
return detectMimeTypeFromBase64(input) !== null;
|
|
74
|
+
}
|
|
75
|
+
export function detectMimeTypeFromExtension(path) {
|
|
76
|
+
const ext = path.toLowerCase().split(".").pop();
|
|
77
|
+
switch (ext) {
|
|
78
|
+
case "jpg":
|
|
79
|
+
case "jpeg":
|
|
80
|
+
return "image/jpeg";
|
|
81
|
+
case "png":
|
|
82
|
+
return "image/png";
|
|
83
|
+
case "gif":
|
|
84
|
+
return "image/gif";
|
|
85
|
+
case "webp":
|
|
86
|
+
return "image/webp";
|
|
87
|
+
default:
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
export async function normalizeImageInput(input, mimeTypeOverride) {
|
|
92
|
+
let buffer;
|
|
93
|
+
let detectedMimeType = null;
|
|
94
|
+
if (Buffer.isBuffer(input)) {
|
|
95
|
+
buffer = input;
|
|
96
|
+
detectedMimeType = detectMimeTypeFromBase64(buffer.toString("base64").slice(0, 20));
|
|
97
|
+
}
|
|
98
|
+
else if (isUrl(input)) {
|
|
99
|
+
const response = await fetch(input);
|
|
100
|
+
if (!response.ok) {
|
|
101
|
+
throw new Error(`Failed to fetch image from URL: ${response.status} ${response.statusText}`);
|
|
102
|
+
}
|
|
103
|
+
buffer = Buffer.from(await response.arrayBuffer());
|
|
104
|
+
detectedMimeType = detectMimeTypeFromBase64(buffer.toString("base64").slice(0, 20));
|
|
105
|
+
}
|
|
106
|
+
else if (isFilePath(input)) {
|
|
107
|
+
buffer = await readFile(input);
|
|
108
|
+
detectedMimeType = detectMimeTypeFromExtension(input) ??
|
|
109
|
+
detectMimeTypeFromBase64(buffer.toString("base64").slice(0, 20));
|
|
110
|
+
}
|
|
111
|
+
else if (isBase64Image(input)) {
|
|
112
|
+
buffer = Buffer.from(input, "base64");
|
|
113
|
+
detectedMimeType = detectMimeTypeFromBase64(input);
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
throw new Error("Invalid image input. Expected a file path, URL, base64 string, or Buffer.");
|
|
117
|
+
}
|
|
118
|
+
let mediaType = mimeTypeOverride ?? detectedMimeType;
|
|
119
|
+
if (!mediaType) {
|
|
120
|
+
throw new Error("Could not detect image MIME type. Please provide it via the mimeType option.");
|
|
121
|
+
}
|
|
122
|
+
// Resize if needed (converts to JPEG if resizing occurs)
|
|
123
|
+
const originalSize = buffer.length;
|
|
124
|
+
const resizedBuffer = await resizeImageIfNeeded(buffer, mediaType);
|
|
125
|
+
if (resizedBuffer.length !== originalSize) {
|
|
126
|
+
// Image was resized, it's now JPEG
|
|
127
|
+
mediaType = "image/jpeg";
|
|
128
|
+
}
|
|
129
|
+
return { base64: resizedBuffer.toString("base64"), mediaType };
|
|
130
|
+
}
|
|
131
|
+
//# 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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "jest-fuzzy",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "LLM-powered fuzzy matchers for Jest",
|
|
5
5
|
"main": "dist/cjs/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -36,8 +36,17 @@
|
|
|
36
36
|
"ai"
|
|
37
37
|
],
|
|
38
38
|
"license": "MIT",
|
|
39
|
+
"peerDependencies": {
|
|
40
|
+
"sharp": ">=0.33.0"
|
|
41
|
+
},
|
|
42
|
+
"peerDependenciesMeta": {
|
|
43
|
+
"sharp": {
|
|
44
|
+
"optional": true
|
|
45
|
+
}
|
|
46
|
+
},
|
|
39
47
|
"devDependencies": {
|
|
40
48
|
"@types/jest": "^29.5.14",
|
|
49
|
+
"sharp": "^0.33.0",
|
|
41
50
|
"@types/node": "^22.10.5",
|
|
42
51
|
"dotenv": "^16.4.7",
|
|
43
52
|
"jest": "^29.7.0",
|