jest-fuzzy 0.1.0 → 0.1.1

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.
Files changed (52) hide show
  1. package/README.md +69 -46
  2. package/dist/cjs/config.d.ts +5 -2
  3. package/dist/cjs/config.d.ts.map +1 -1
  4. package/dist/cjs/config.js +4 -1
  5. package/dist/cjs/config.js.map +1 -1
  6. package/dist/cjs/index.d.ts +2 -2
  7. package/dist/cjs/index.d.ts.map +1 -1
  8. package/dist/cjs/index.js.map +1 -1
  9. package/dist/cjs/providers/anthropic.d.ts +2 -2
  10. package/dist/cjs/providers/anthropic.d.ts.map +1 -1
  11. package/dist/cjs/providers/anthropic.js +45 -73
  12. package/dist/cjs/providers/anthropic.js.map +1 -1
  13. package/dist/cjs/providers/google.d.ts +2 -2
  14. package/dist/cjs/providers/google.d.ts.map +1 -1
  15. package/dist/cjs/providers/google.js +50 -75
  16. package/dist/cjs/providers/google.js.map +1 -1
  17. package/dist/cjs/providers/index.d.ts +2 -2
  18. package/dist/cjs/providers/index.d.ts.map +1 -1
  19. package/dist/cjs/providers/index.js +4 -4
  20. package/dist/cjs/providers/index.js.map +1 -1
  21. package/dist/cjs/providers/openai.d.ts +2 -2
  22. package/dist/cjs/providers/openai.d.ts.map +1 -1
  23. package/dist/cjs/providers/openai.js +37 -58
  24. package/dist/cjs/providers/openai.js.map +1 -1
  25. package/dist/cjs/types.d.ts +6 -0
  26. package/dist/cjs/types.d.ts.map +1 -1
  27. package/dist/esm/config.d.ts +5 -2
  28. package/dist/esm/config.d.ts.map +1 -1
  29. package/dist/esm/config.js +4 -1
  30. package/dist/esm/config.js.map +1 -1
  31. package/dist/esm/index.d.ts +2 -2
  32. package/dist/esm/index.d.ts.map +1 -1
  33. package/dist/esm/index.js.map +1 -1
  34. package/dist/esm/providers/anthropic.d.ts +2 -2
  35. package/dist/esm/providers/anthropic.d.ts.map +1 -1
  36. package/dist/esm/providers/anthropic.js +45 -40
  37. package/dist/esm/providers/anthropic.js.map +1 -1
  38. package/dist/esm/providers/google.d.ts +2 -2
  39. package/dist/esm/providers/google.d.ts.map +1 -1
  40. package/dist/esm/providers/google.js +50 -42
  41. package/dist/esm/providers/google.js.map +1 -1
  42. package/dist/esm/providers/index.d.ts +2 -2
  43. package/dist/esm/providers/index.d.ts.map +1 -1
  44. package/dist/esm/providers/index.js +4 -4
  45. package/dist/esm/providers/index.js.map +1 -1
  46. package/dist/esm/providers/openai.d.ts +2 -2
  47. package/dist/esm/providers/openai.d.ts.map +1 -1
  48. package/dist/esm/providers/openai.js +37 -25
  49. package/dist/esm/providers/openai.js.map +1 -1
  50. package/dist/esm/types.d.ts +6 -0
  51. package/dist/esm/types.d.ts.map +1 -1
  52. package/package.json +1 -20
@@ -1,8 +1,8 @@
1
- import type { ModelName, LLMProvider } from "../types.js";
1
+ import type { ModelName, ApiKeys, LLMProvider } from "../types.js";
2
2
  import { AnthropicProvider } from "./anthropic.js";
3
3
  import { GoogleProvider } from "./google.js";
4
4
  import { OpenAIProvider } from "./openai.js";
5
- export declare function createProvider(model: ModelName): Promise<LLMProvider>;
5
+ export declare function createProvider(model: ModelName, apiKeys?: ApiKeys): Promise<LLMProvider>;
6
6
  export { AnthropicProvider, GoogleProvider, OpenAIProvider };
7
7
  export type { LLMProvider };
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,wBAAsB,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAW3E;AAED,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC;AAC7D,YAAY,EAAE,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,wBAAsB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAW9F;AAED,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC;AAC7D,YAAY,EAAE,WAAW,EAAE,CAAC"}
@@ -8,14 +8,14 @@ const google_js_1 = require("./google.js");
8
8
  Object.defineProperty(exports, "GoogleProvider", { enumerable: true, get: function () { return google_js_1.GoogleProvider; } });
9
9
  const openai_js_1 = require("./openai.js");
10
10
  Object.defineProperty(exports, "OpenAIProvider", { enumerable: true, get: function () { return openai_js_1.OpenAIProvider; } });
11
- async function createProvider(model) {
11
+ async function createProvider(model, apiKeys) {
12
12
  switch (model) {
13
13
  case "claude-haiku-4-5":
14
- return anthropic_js_1.AnthropicProvider.create();
14
+ return anthropic_js_1.AnthropicProvider.create(apiKeys?.anthropic);
15
15
  case "gemini-3-flash-preview":
16
- return google_js_1.GoogleProvider.create();
16
+ return google_js_1.GoogleProvider.create(apiKeys?.google);
17
17
  case "gpt-5-nano":
18
- return openai_js_1.OpenAIProvider.create();
18
+ return openai_js_1.OpenAIProvider.create(apiKeys?.openai);
19
19
  default:
20
20
  throw new Error(`jest-fuzzy: Unknown model: ${model}`);
21
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/index.ts"],"names":[],"mappings":";;;AAKA,wCAWC;AAfD,iDAAmD;AAiB1C,kGAjBA,gCAAiB,OAiBA;AAhB1B,2CAA6C;AAgBjB,+FAhBnB,0BAAc,OAgBmB;AAf1C,2CAA6C;AAeD,+FAfnC,0BAAc,OAemC;AAbnD,KAAK,UAAU,cAAc,CAAC,KAAgB;IACnD,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,kBAAkB;YACrB,OAAO,gCAAiB,CAAC,MAAM,EAAE,CAAC;QACpC,KAAK,wBAAwB;YAC3B,OAAO,0BAAc,CAAC,MAAM,EAAE,CAAC;QACjC,KAAK,YAAY;YACf,OAAO,0BAAc,CAAC,MAAM,EAAE,CAAC;QACjC;YACE,MAAM,IAAI,KAAK,CAAC,8BAA8B,KAAK,EAAE,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/index.ts"],"names":[],"mappings":";;;AAKA,wCAWC;AAfD,iDAAmD;AAiB1C,kGAjBA,gCAAiB,OAiBA;AAhB1B,2CAA6C;AAgBjB,+FAhBnB,0BAAc,OAgBmB;AAf1C,2CAA6C;AAeD,+FAfnC,0BAAc,OAemC;AAbnD,KAAK,UAAU,cAAc,CAAC,KAAgB,EAAE,OAAiB;IACtE,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,kBAAkB;YACrB,OAAO,gCAAiB,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACtD,KAAK,wBAAwB;YAC3B,OAAO,0BAAc,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAChD,KAAK,YAAY;YACf,OAAO,0BAAc,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAChD;YACE,MAAM,IAAI,KAAK,CAAC,8BAA8B,KAAK,EAAE,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC"}
@@ -1,8 +1,8 @@
1
1
  import type { LLMProvider, JudgmentResult } from "../types.js";
2
2
  export declare class OpenAIProvider implements LLMProvider {
3
- private client;
3
+ private apiKey;
4
4
  private constructor();
5
- static create(): Promise<OpenAIProvider>;
5
+ static create(apiKey?: string): Promise<OpenAIProvider>;
6
6
  judge(prompt: string): Promise<JudgmentResult>;
7
7
  }
8
8
  //# sourceMappingURL=openai.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/providers/openai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAkB/D,qBAAa,cAAe,YAAW,WAAW;IAChD,OAAO,CAAC,MAAM,CAAM;IAEpB,OAAO;WAIM,MAAM,IAAI,OAAO,CAAC,cAAc,CAAC;IAkBxC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;CA8BrD"}
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/providers/openai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAoB/D,qBAAa,cAAe,YAAW,WAAW;IAChD,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO;WAIM,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAWvD,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;CAgDrD"}
@@ -1,39 +1,7 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
2
  Object.defineProperty(exports, "__esModule", { value: true });
36
3
  exports.OpenAIProvider = void 0;
4
+ const OPENAI_API_URL = "https://api.openai.com/v1/chat/completions";
37
5
  const JUDGMENT_SCHEMA = {
38
6
  type: "object",
39
7
  properties: {
@@ -50,31 +18,37 @@ const JUDGMENT_SCHEMA = {
50
18
  additionalProperties: false,
51
19
  };
52
20
  class OpenAIProvider {
53
- client;
54
- constructor(client) {
55
- this.client = client;
21
+ apiKey;
22
+ constructor(apiKey) {
23
+ this.apiKey = apiKey;
56
24
  }
57
- static async create() {
58
- const apiKey = process.env.OPENAI_API_KEY;
59
- if (!apiKey) {
60
- throw new Error("jest-fuzzy: Missing OPENAI_API_KEY environment variable for gpt-5-nano model");
61
- }
62
- try {
63
- const module = await Promise.resolve().then(() => __importStar(require("openai")));
64
- const OpenAI = module.default;
65
- const client = new OpenAI({ apiKey });
66
- return new OpenAIProvider(client);
67
- }
68
- catch (e) {
69
- throw new Error("jest-fuzzy: To use gpt-5-nano, install openai");
25
+ static async create(apiKey) {
26
+ const key = apiKey ?? process.env.OPENAI_API_KEY;
27
+ if (!key) {
28
+ throw new Error("jest-fuzzy: Missing API key for gpt-5-nano model. " +
29
+ "Either pass it via configure({ apiKeys: { openai: '...' } }) or set OPENAI_API_KEY environment variable.");
70
30
  }
31
+ return new OpenAIProvider(key);
71
32
  }
72
33
  async judge(prompt) {
73
- try {
74
- const response = await this.client.chat.completions.create({
34
+ const response = await fetch(OPENAI_API_URL, {
35
+ method: "POST",
36
+ headers: {
37
+ "Content-Type": "application/json",
38
+ Authorization: `Bearer ${this.apiKey}`,
39
+ },
40
+ body: JSON.stringify({
75
41
  model: "gpt-4o-mini",
76
- messages: [{ role: "user", content: prompt }],
77
42
  max_tokens: 1024,
43
+ messages: [
44
+ {
45
+ role: "system",
46
+ content: 'You must respond with valid JSON matching this schema: {"verdict": boolean, "explanation": string}. ' +
47
+ '"verdict" should be true if the condition is satisfied, false otherwise. ' +
48
+ '"explanation" should briefly explain your reasoning.',
49
+ },
50
+ { role: "user", content: prompt },
51
+ ],
78
52
  response_format: {
79
53
  type: "json_schema",
80
54
  json_schema: {
@@ -83,14 +57,19 @@ class OpenAIProvider {
83
57
  schema: JUDGMENT_SCHEMA,
84
58
  },
85
59
  },
86
- });
87
- const content = response.choices[0].message.content ?? "{}";
88
- const parsed = JSON.parse(content);
89
- return { verdict: parsed.verdict, explanation: parsed.explanation };
60
+ }),
61
+ });
62
+ if (!response.ok) {
63
+ const errorText = await response.text();
64
+ throw new Error(`jest-fuzzy: OpenAI API error (${response.status}): ${errorText}`);
90
65
  }
91
- catch (error) {
92
- throw new Error(`jest-fuzzy: LLM API call failed: ${error instanceof Error ? error.message : String(error)}`);
66
+ const data = (await response.json());
67
+ const content = data.choices?.[0]?.message?.content;
68
+ if (!content) {
69
+ throw new Error("jest-fuzzy: OpenAI API returned no content");
93
70
  }
71
+ const parsed = JSON.parse(content);
72
+ return { verdict: parsed.verdict, explanation: parsed.explanation };
94
73
  }
95
74
  }
96
75
  exports.OpenAIProvider = OpenAIProvider;
@@ -1 +1 @@
1
- {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/providers/openai.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,MAAM,eAAe,GAAG;IACtB,IAAI,EAAE,QAAiB;IACvB,UAAU,EAAE;QACV,OAAO,EAAE;YACP,IAAI,EAAE,SAAkB;YACxB,WAAW,EAAE,qDAAqD;SACnE;QACD,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,WAAW,EAAE,oCAAoC;SAClD;KACF;IACD,QAAQ,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC;IACpC,oBAAoB,EAAE,KAAK;CAC5B,CAAC;AAEF,MAAa,cAAc;IACjB,MAAM,CAAM;IAEpB,YAAoB,MAAW;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM;QACjB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CACb,8EAA8E,CAC/E,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,wDAAa,QAAQ,GAAC,CAAC;YACtC,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;YAC9B,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;YACtC,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,MAAc;QACxB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBACzD,KAAK,EAAE,aAAa;gBACpB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;gBAC7C,UAAU,EAAE,IAAI;gBAChB,eAAe,EAAE;oBACf,IAAI,EAAE,aAAa;oBACnB,WAAW,EAAE;wBACX,IAAI,EAAE,UAAU;wBAChB,MAAM,EAAE,IAAI;wBACZ,MAAM,EAAE,eAAe;qBACxB;iBACF;aACF,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC;YAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAGhC,CAAC;YACF,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC;QACtE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,oCACE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CACvD,EAAE,CACH,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAvDD,wCAuDC"}
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/providers/openai.ts"],"names":[],"mappings":";;;AAEA,MAAM,cAAc,GAAG,4CAA4C,CAAC;AAEpE,MAAM,eAAe,GAAG;IACtB,IAAI,EAAE,QAAiB;IACvB,UAAU,EAAE;QACV,OAAO,EAAE;YACP,IAAI,EAAE,SAAkB;YACxB,WAAW,EAAE,qDAAqD;SACnE;QACD,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,WAAW,EAAE,oCAAoC;SAClD;KACF;IACD,QAAQ,EAAE,CAAC,SAAS,EAAE,aAAa,CAAU;IAC7C,oBAAoB,EAAE,KAAK;CAC5B,CAAC;AAEF,MAAa,cAAc;IACjB,MAAM,CAAS;IAEvB,YAAoB,MAAc;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAe;QACjC,MAAM,GAAG,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QACjD,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CACb,oDAAoD;gBAClD,0GAA0G,CAC7G,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,MAAc;QACxB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,cAAc,EAAE;YAC3C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;aACvC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,KAAK,EAAE,aAAa;gBACpB,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,QAAQ;wBACd,OAAO,EACL,sGAAsG;4BACtG,2EAA2E;4BAC3E,sDAAsD;qBACzD;oBACD,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;iBAClC;gBACD,eAAe,EAAE;oBACf,IAAI,EAAE,aAAa;oBACnB,WAAW,EAAE;wBACX,IAAI,EAAE,UAAU;wBAChB,MAAM,EAAE,IAAI;wBACZ,MAAM,EAAE,eAAe;qBACxB;iBACF;aACF,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,iCAAiC,QAAQ,CAAC,MAAM,MAAM,SAAS,EAAE,CAAC,CAAC;QACrF,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAElC,CAAC;QACF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC;QAEpD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA8C,CAAC;QAChF,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC;IACtE,CAAC;CACF;AAlED,wCAkEC"}
@@ -1,6 +1,12 @@
1
1
  export type ModelName = "claude-haiku-4-5" | "gemini-3-flash-preview" | "gpt-5-nano";
2
+ export interface ApiKeys {
3
+ anthropic?: string;
4
+ google?: string;
5
+ openai?: string;
6
+ }
2
7
  export interface JestFuzzyConfig {
3
8
  model?: ModelName;
9
+ apiKeys?: ApiKeys;
4
10
  }
5
11
  export interface SemanticMatchOptions {
6
12
  threshold?: "strict" | "loose";
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GACjB,kBAAkB,GAClB,wBAAwB,GACxB,YAAY,CAAC;AAEjB,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,MAAM,CAAC;CACvB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,IAAI,CAAC;QACb,UAAU,QAAQ,CAAC,CAAC;YAClB,mBAAmB,CACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,CAAC,CAAC,CAAC;YACd,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;SACzC;KACF;CACF"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GACjB,kBAAkB,GAClB,wBAAwB,GACxB,YAAY,CAAC;AAEjB,MAAM,WAAW,OAAO;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,MAAM,CAAC;CACvB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,IAAI,CAAC;QACb,UAAU,QAAQ,CAAC,CAAC;YAClB,mBAAmB,CACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,CAAC,CAAC,CAAC;YACd,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;SACzC;KACF;CACF"}
@@ -1,5 +1,8 @@
1
- import type { JestFuzzyConfig, LLMProvider } from "./types.js";
1
+ import type { JestFuzzyConfig, ModelName, ApiKeys, LLMProvider } from "./types.js";
2
2
  export declare function configure(config?: JestFuzzyConfig): void;
3
- export declare function getConfig(): Required<JestFuzzyConfig>;
3
+ export declare function getConfig(): {
4
+ model: ModelName;
5
+ apiKeys?: ApiKeys;
6
+ };
4
7
  export declare function getProvider(): Promise<LLMProvider>;
5
8
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAa,WAAW,EAAE,MAAM,YAAY,CAAC;AAY1E,wBAAgB,SAAS,CAAC,MAAM,GAAE,eAAoB,GAAG,IAAI,CAQ5D;AAED,wBAAgB,SAAS,IAAI,QAAQ,CAAC,eAAe,CAAC,CAIrD;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CAaxD"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAYnF,wBAAgB,SAAS,CAAC,MAAM,GAAE,eAAoB,GAAG,IAAI,CAS5D;AAED,wBAAgB,SAAS,IAAI;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAKnE;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CAcxD"}
@@ -8,6 +8,7 @@ let providerPromise = null;
8
8
  export function configure(config = {}) {
9
9
  currentConfig = {
10
10
  model: config.model ?? DEFAULT_MODEL,
11
+ apiKeys: config.apiKeys,
11
12
  };
12
13
  // Reset provider so it will be re-created with new config
13
14
  providerInstance = null;
@@ -16,6 +17,7 @@ export function configure(config = {}) {
16
17
  export function getConfig() {
17
18
  return {
18
19
  model: currentConfig.model ?? DEFAULT_MODEL,
20
+ apiKeys: currentConfig.apiKeys,
19
21
  };
20
22
  }
21
23
  export async function getProvider() {
@@ -23,7 +25,8 @@ export async function getProvider() {
23
25
  return providerInstance;
24
26
  }
25
27
  if (!providerPromise) {
26
- providerPromise = createProvider(getConfig().model).then((provider) => {
28
+ const config = getConfig();
29
+ providerPromise = createProvider(config.model, config.apiKeys).then((provider) => {
27
30
  providerInstance = provider;
28
31
  return provider;
29
32
  });
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,aAAa,GAAc,kBAAkB,CAAC;AAEpD,IAAI,aAAa,GAAoB;IACnC,KAAK,EAAE,aAAa;CACrB,CAAC;AAEF,IAAI,gBAAgB,GAAuB,IAAI,CAAC;AAChD,IAAI,eAAe,GAAgC,IAAI,CAAC;AAExD,MAAM,UAAU,SAAS,CAAC,SAA0B,EAAE;IACpD,aAAa,GAAG;QACd,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,aAAa;KACrC,CAAC;IAEF,0DAA0D;IAC1D,gBAAgB,GAAG,IAAI,CAAC;IACxB,eAAe,GAAG,IAAI,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO;QACL,KAAK,EAAE,aAAa,CAAC,KAAK,IAAI,aAAa;KAC5C,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,eAAe,GAAG,cAAc,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;YACpE,gBAAgB,GAAG,QAAQ,CAAC;YAC5B,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,aAAa,GAAc,kBAAkB,CAAC;AAEpD,IAAI,aAAa,GAAoB;IACnC,KAAK,EAAE,aAAa;CACrB,CAAC;AAEF,IAAI,gBAAgB,GAAuB,IAAI,CAAC;AAChD,IAAI,eAAe,GAAgC,IAAI,CAAC;AAExD,MAAM,UAAU,SAAS,CAAC,SAA0B,EAAE;IACpD,aAAa,GAAG;QACd,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,aAAa;QACpC,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC;IAEF,0DAA0D;IAC1D,gBAAgB,GAAG,IAAI,CAAC;IACxB,eAAe,GAAG,IAAI,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO;QACL,KAAK,EAAE,aAAa,CAAC,KAAK,IAAI,aAAa;QAC3C,OAAO,EAAE,aAAa,CAAC,OAAO;KAC/B,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,eAAe,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC/E,gBAAgB,GAAG,QAAQ,CAAC;YAC5B,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { configure, getConfig, getProvider } from "./config.js";
2
- import type { JestFuzzyConfig, SemanticMatchOptions, ModelName, LLMProvider } from "./types.js";
2
+ import type { JestFuzzyConfig, SemanticMatchOptions, ModelName, ApiKeys, LLMProvider } from "./types.js";
3
3
  export { configure, getConfig, getProvider };
4
- export type { JestFuzzyConfig, SemanticMatchOptions, ModelName, LLMProvider, };
4
+ export type { JestFuzzyConfig, SemanticMatchOptions, ModelName, ApiKeys, LLMProvider, };
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAGhE,OAAO,KAAK,EACV,eAAe,EACf,oBAAoB,EACpB,SAAS,EACT,WAAW,EACZ,MAAM,YAAY,CAAC;AAUpB,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;AAC7C,YAAY,EACV,eAAe,EACf,oBAAoB,EACpB,SAAS,EACT,WAAW,GACZ,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAGhE,OAAO,KAAK,EACV,eAAe,EACf,oBAAoB,EACpB,SAAS,EACT,OAAO,EACP,WAAW,EACZ,MAAM,YAAY,CAAC;AAUpB,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;AAC7C,YAAY,EACV,eAAe,EACf,oBAAoB,EACpB,SAAS,EACT,OAAO,EACP,WAAW,GACZ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAQpD,8BAA8B;AAC9B,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;IACnD,MAAM,CAAC,MAAM,CAAC;QACZ,mBAAmB;QACnB,SAAS;KACV,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AASpD,8BAA8B;AAC9B,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;IACnD,MAAM,CAAC,MAAM,CAAC;QACZ,mBAAmB;QACnB,SAAS;KACV,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC"}
@@ -1,8 +1,8 @@
1
1
  import type { LLMProvider, JudgmentResult } from "../types.js";
2
2
  export declare class AnthropicProvider implements LLMProvider {
3
- private client;
3
+ private apiKey;
4
4
  private constructor();
5
- static create(): Promise<AnthropicProvider>;
5
+ static create(apiKey?: string): Promise<AnthropicProvider>;
6
6
  judge(prompt: string): Promise<JudgmentResult>;
7
7
  }
8
8
  //# sourceMappingURL=anthropic.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/providers/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAqB/D,qBAAa,iBAAkB,YAAW,WAAW;IACnD,OAAO,CAAC,MAAM,CAAM;IAEpB,OAAO;WAIM,MAAM,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAoB3C,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;CAyBrD"}
1
+ {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/providers/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAoB/D,qBAAa,iBAAkB,YAAW,WAAW;IACnD,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO;WAIM,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAW1D,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;CAmCrD"}
@@ -1,57 +1,62 @@
1
+ const ANTHROPIC_API_URL = "https://api.anthropic.com/v1/messages";
1
2
  const JUDGMENT_SCHEMA = {
2
- type: "json_schema",
3
- schema: {
4
- type: "object",
5
- properties: {
6
- verdict: {
7
- type: "boolean",
8
- description: "true if the condition is satisfied, false otherwise",
9
- },
10
- explanation: {
11
- type: "string",
12
- description: "Brief explanation of the reasoning",
13
- },
3
+ type: "object",
4
+ properties: {
5
+ verdict: {
6
+ type: "boolean",
7
+ description: "true if the condition is satisfied, false otherwise",
8
+ },
9
+ explanation: {
10
+ type: "string",
11
+ description: "Brief explanation of the reasoning",
14
12
  },
15
- required: ["verdict", "explanation"],
16
- additionalProperties: false,
17
13
  },
14
+ required: ["verdict", "explanation"],
15
+ additionalProperties: false,
18
16
  };
19
17
  export class AnthropicProvider {
20
- client;
21
- constructor(client) {
22
- this.client = client;
18
+ apiKey;
19
+ constructor(apiKey) {
20
+ this.apiKey = apiKey;
23
21
  }
24
- static async create() {
25
- const apiKey = process.env.ANTHROPIC_API_KEY;
26
- if (!apiKey) {
27
- throw new Error("jest-fuzzy: Missing ANTHROPIC_API_KEY environment variable for claude-haiku-4-5 model");
28
- }
29
- try {
30
- const module = await import("@anthropic-ai/sdk");
31
- const Anthropic = module.default;
32
- const client = new Anthropic({ apiKey });
33
- return new AnthropicProvider(client);
34
- }
35
- catch (e) {
36
- throw new Error("jest-fuzzy: To use claude-haiku-4-5, install @anthropic-ai/sdk");
22
+ static async create(apiKey) {
23
+ const key = apiKey ?? process.env.ANTHROPIC_API_KEY;
24
+ if (!key) {
25
+ throw new Error("jest-fuzzy: Missing API key for claude-haiku-4-5 model. " +
26
+ "Either pass it via configure({ apiKeys: { anthropic: '...' } }) or set ANTHROPIC_API_KEY environment variable.");
37
27
  }
28
+ return new AnthropicProvider(key);
38
29
  }
39
30
  async judge(prompt) {
40
- try {
41
- const response = await this.client.beta.messages.create({
31
+ const response = await fetch(ANTHROPIC_API_URL, {
32
+ method: "POST",
33
+ headers: {
34
+ "content-type": "application/json",
35
+ "x-api-key": this.apiKey,
36
+ "anthropic-version": "2023-06-01",
37
+ "anthropic-beta": "structured-outputs-2025-11-13",
38
+ },
39
+ body: JSON.stringify({
42
40
  model: "claude-haiku-4-5",
43
41
  max_tokens: 1024,
44
- betas: ["structured-outputs-2025-11-13"],
45
42
  messages: [{ role: "user", content: prompt }],
46
- output_format: JUDGMENT_SCHEMA,
47
- });
48
- const text = response.content[0].text;
49
- const parsed = JSON.parse(text);
50
- return { verdict: parsed.verdict, explanation: parsed.explanation };
43
+ output_format: {
44
+ type: "json_schema",
45
+ schema: JUDGMENT_SCHEMA,
46
+ },
47
+ }),
48
+ });
49
+ if (!response.ok) {
50
+ const errorText = await response.text();
51
+ throw new Error(`jest-fuzzy: Anthropic API error (${response.status}): ${errorText}`);
51
52
  }
52
- catch (error) {
53
- throw new Error(`jest-fuzzy: LLM API call failed: ${error instanceof Error ? error.message : String(error)}`);
53
+ const data = (await response.json());
54
+ const text = data.content?.[0]?.text;
55
+ if (!text) {
56
+ throw new Error("jest-fuzzy: Anthropic API returned no content");
54
57
  }
58
+ const parsed = JSON.parse(text);
59
+ return { verdict: parsed.verdict, explanation: parsed.explanation };
55
60
  }
56
61
  }
57
62
  //# sourceMappingURL=anthropic.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../src/providers/anthropic.ts"],"names":[],"mappings":"AAEA,MAAM,eAAe,GAAG;IACtB,IAAI,EAAE,aAAsB;IAC5B,MAAM,EAAE;QACN,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,SAAkB;gBACxB,WAAW,EAAE,qDAAqD;aACnE;YACD,WAAW,EAAE;gBACX,IAAI,EAAE,QAAiB;gBACvB,WAAW,EAAE,oCAAoC;aAClD;SACF;QACD,QAAQ,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC;QACpC,oBAAoB,EAAE,KAAK;KAC5B;CACF,CAAC;AAEF,MAAM,OAAO,iBAAiB;IACpB,MAAM,CAAM;IAEpB,YAAoB,MAAW;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM;QACjB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;QAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CACb,uFAAuF,CACxF,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;YACjD,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC;YACjC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;YACzC,OAAO,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CACb,gEAAgE,CACjE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,MAAc;QACxB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACtD,KAAK,EAAE,kBAAkB;gBACzB,UAAU,EAAE,IAAI;gBAChB,KAAK,EAAE,CAAC,+BAA+B,CAAC;gBACxC,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;gBAC7C,aAAa,EAAE,eAAe;aAC/B,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACtC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAG7B,CAAC;YAEF,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC;QACtE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,oCACE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CACvD,EAAE,CACH,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../src/providers/anthropic.ts"],"names":[],"mappings":"AAEA,MAAM,iBAAiB,GAAG,uCAAuC,CAAC;AAElE,MAAM,eAAe,GAAG;IACtB,IAAI,EAAE,QAAiB;IACvB,UAAU,EAAE;QACV,OAAO,EAAE;YACP,IAAI,EAAE,SAAkB;YACxB,WAAW,EAAE,qDAAqD;SACnE;QACD,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,WAAW,EAAE,oCAAoC;SAClD;KACF;IACD,QAAQ,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC;IACpC,oBAAoB,EAAE,KAAK;CAC5B,CAAC;AAEF,MAAM,OAAO,iBAAiB;IACpB,MAAM,CAAS;IAEvB,YAAoB,MAAc;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAe;QACjC,MAAM,GAAG,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;QACpD,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CACb,0DAA0D;gBACxD,gHAAgH,CACnH,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,MAAc;QACxB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,iBAAiB,EAAE;YAC9C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,WAAW,EAAE,IAAI,CAAC,MAAM;gBACxB,mBAAmB,EAAE,YAAY;gBACjC,gBAAgB,EAAE,+BAA+B;aAClD;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,KAAK,EAAE,kBAAkB;gBACzB,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;gBAC7C,aAAa,EAAE;oBACb,IAAI,EAAE,aAAa;oBACnB,MAAM,EAAE,eAAe;iBACxB;aACF,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,oCAAoC,QAAQ,CAAC,MAAM,MAAM,SAAS,EAAE,CAAC,CAAC;QACxF,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA2C,CAAC;QAC/E,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;QAErC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA8C,CAAC;QAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC;IACtE,CAAC;CACF"}
@@ -1,8 +1,8 @@
1
1
  import type { LLMProvider, JudgmentResult } from "../types.js";
2
2
  export declare class GoogleProvider implements LLMProvider {
3
- private model;
3
+ private apiKey;
4
4
  private constructor();
5
- static create(): Promise<GoogleProvider>;
5
+ static create(apiKey?: string): Promise<GoogleProvider>;
6
6
  judge(prompt: string): Promise<JudgmentResult>;
7
7
  }
8
8
  //# sourceMappingURL=google.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../../src/providers/google.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE/D,qBAAa,cAAe,YAAW,WAAW;IAChD,OAAO,CAAC,KAAK,CAAM;IAEnB,OAAO;WAIM,MAAM,IAAI,OAAO,CAAC,cAAc,CAAC;IAyCxC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;CAcrD"}
1
+ {"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../../src/providers/google.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAmB/D,qBAAa,cAAe,YAAW,WAAW;IAChD,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO;WAIM,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAWvD,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;CAsCrD"}
@@ -1,53 +1,61 @@
1
+ const GEMINI_API_URL = "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent";
2
+ const JUDGMENT_SCHEMA = {
3
+ type: "OBJECT",
4
+ properties: {
5
+ verdict: {
6
+ type: "BOOLEAN",
7
+ description: "true if the condition is satisfied, false otherwise",
8
+ },
9
+ explanation: {
10
+ type: "STRING",
11
+ description: "Brief explanation of the reasoning",
12
+ },
13
+ },
14
+ required: ["verdict", "explanation"],
15
+ };
1
16
  export class GoogleProvider {
2
- model;
3
- constructor(model) {
4
- this.model = model;
17
+ apiKey;
18
+ constructor(apiKey) {
19
+ this.apiKey = apiKey;
5
20
  }
6
- static async create() {
7
- const apiKey = process.env.GOOGLE_API_KEY;
8
- if (!apiKey) {
9
- throw new Error("jest-fuzzy: Missing GOOGLE_API_KEY environment variable for gemini-3-flash-preview model");
21
+ static async create(apiKey) {
22
+ const key = apiKey ?? process.env.GOOGLE_API_KEY;
23
+ if (!key) {
24
+ throw new Error("jest-fuzzy: Missing API key for gemini-3-flash-preview model. " +
25
+ "Either pass it via configure({ apiKeys: { google: '...' } }) or set GOOGLE_API_KEY environment variable.");
10
26
  }
11
- try {
12
- const module = await import("@google/generative-ai");
13
- const { GoogleGenerativeAI, SchemaType } = module;
14
- const genAI = new GoogleGenerativeAI(apiKey);
15
- const model = genAI.getGenerativeModel({
16
- model: "gemini-2.0-flash",
27
+ return new GoogleProvider(key);
28
+ }
29
+ async judge(prompt) {
30
+ const url = `${GEMINI_API_URL}?key=${this.apiKey}`;
31
+ const response = await fetch(url, {
32
+ method: "POST",
33
+ headers: {
34
+ "Content-Type": "application/json",
35
+ },
36
+ body: JSON.stringify({
37
+ contents: [
38
+ {
39
+ parts: [{ text: prompt }],
40
+ },
41
+ ],
17
42
  generationConfig: {
18
43
  responseMimeType: "application/json",
19
- responseSchema: {
20
- type: SchemaType.OBJECT,
21
- properties: {
22
- verdict: {
23
- type: SchemaType.BOOLEAN,
24
- description: "true if the condition is satisfied, false otherwise",
25
- },
26
- explanation: {
27
- type: SchemaType.STRING,
28
- description: "Brief explanation of the reasoning",
29
- },
30
- },
31
- required: ["verdict", "explanation"],
32
- },
44
+ responseSchema: JUDGMENT_SCHEMA,
33
45
  },
34
- });
35
- return new GoogleProvider(model);
36
- }
37
- catch (e) {
38
- throw new Error("jest-fuzzy: To use gemini-3-flash-preview, install @google/generative-ai");
39
- }
40
- }
41
- async judge(prompt) {
42
- try {
43
- const result = await this.model.generateContent(prompt);
44
- const text = result.response.text();
45
- const parsed = JSON.parse(text);
46
- return { verdict: parsed.verdict, explanation: parsed.explanation };
46
+ }),
47
+ });
48
+ if (!response.ok) {
49
+ const errorText = await response.text();
50
+ throw new Error(`jest-fuzzy: Google API error (${response.status}): ${errorText}`);
47
51
  }
48
- catch (error) {
49
- throw new Error(`jest-fuzzy: LLM API call failed: ${error instanceof Error ? error.message : String(error)}`);
52
+ const data = (await response.json());
53
+ const text = data.candidates?.[0]?.content?.parts?.[0]?.text;
54
+ if (!text) {
55
+ throw new Error("jest-fuzzy: Google API returned no content");
50
56
  }
57
+ const parsed = JSON.parse(text);
58
+ return { verdict: parsed.verdict, explanation: parsed.explanation };
51
59
  }
52
60
  }
53
61
  //# sourceMappingURL=google.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"google.js","sourceRoot":"","sources":["../../../src/providers/google.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,cAAc;IACjB,KAAK,CAAM;IAEnB,YAAoB,KAAU;QAC5B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM;QACjB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CACb,0FAA0F,CAC3F,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;YACrD,MAAM,EAAE,kBAAkB,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;YAClD,MAAM,KAAK,GAAG,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAC7C,MAAM,KAAK,GAAG,KAAK,CAAC,kBAAkB,CAAC;gBACrC,KAAK,EAAE,kBAAkB;gBACzB,gBAAgB,EAAE;oBAChB,gBAAgB,EAAE,kBAAkB;oBACpC,cAAc,EAAE;wBACd,IAAI,EAAE,UAAU,CAAC,MAAM;wBACvB,UAAU,EAAE;4BACV,OAAO,EAAE;gCACP,IAAI,EAAE,UAAU,CAAC,OAAO;gCACxB,WAAW,EACT,qDAAqD;6BACxD;4BACD,WAAW,EAAE;gCACX,IAAI,EAAE,UAAU,CAAC,MAAM;gCACvB,WAAW,EAAE,oCAAoC;6BAClD;yBACF;wBACD,QAAQ,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC;qBACrC;iBACF;aACF,CAAC,CAAC;YACH,OAAO,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CACb,0EAA0E,CAC3E,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,MAAc;QACxB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YACxD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA8C,CAAC;YAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC;QACtE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,oCACE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CACvD,EAAE,CACH,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"google.js","sourceRoot":"","sources":["../../../src/providers/google.ts"],"names":[],"mappings":"AAEA,MAAM,cAAc,GAAG,0FAA0F,CAAC;AAElH,MAAM,eAAe,GAAG;IACtB,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,OAAO,EAAE;YACP,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,qDAAqD;SACnE;QACD,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,oCAAoC;SAClD;KACF;IACD,QAAQ,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC;CACrC,CAAC;AAEF,MAAM,OAAO,cAAc;IACjB,MAAM,CAAS;IAEvB,YAAoB,MAAc;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAe;QACjC,MAAM,GAAG,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QACjD,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CACb,gEAAgE;gBAC9D,0GAA0G,CAC7G,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,MAAc;QACxB,MAAM,GAAG,GAAG,GAAG,cAAc,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;QAEnD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,QAAQ,EAAE;oBACR;wBACE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;qBAC1B;iBACF;gBACD,gBAAgB,EAAE;oBAChB,gBAAgB,EAAE,kBAAkB;oBACpC,cAAc,EAAE,eAAe;iBAChC;aACF,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,iCAAiC,QAAQ,CAAC,MAAM,MAAM,SAAS,EAAE,CAAC,CAAC;QACrF,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAElC,CAAC;QACF,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;QAE7D,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA8C,CAAC;QAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC;IACtE,CAAC;CACF"}
@@ -1,8 +1,8 @@
1
- import type { ModelName, LLMProvider } from "../types.js";
1
+ import type { ModelName, ApiKeys, LLMProvider } from "../types.js";
2
2
  import { AnthropicProvider } from "./anthropic.js";
3
3
  import { GoogleProvider } from "./google.js";
4
4
  import { OpenAIProvider } from "./openai.js";
5
- export declare function createProvider(model: ModelName): Promise<LLMProvider>;
5
+ export declare function createProvider(model: ModelName, apiKeys?: ApiKeys): Promise<LLMProvider>;
6
6
  export { AnthropicProvider, GoogleProvider, OpenAIProvider };
7
7
  export type { LLMProvider };
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,wBAAsB,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAW3E;AAED,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC;AAC7D,YAAY,EAAE,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,wBAAsB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAW9F;AAED,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC;AAC7D,YAAY,EAAE,WAAW,EAAE,CAAC"}
@@ -1,14 +1,14 @@
1
1
  import { AnthropicProvider } from "./anthropic.js";
2
2
  import { GoogleProvider } from "./google.js";
3
3
  import { OpenAIProvider } from "./openai.js";
4
- export async function createProvider(model) {
4
+ export async function createProvider(model, apiKeys) {
5
5
  switch (model) {
6
6
  case "claude-haiku-4-5":
7
- return AnthropicProvider.create();
7
+ return AnthropicProvider.create(apiKeys?.anthropic);
8
8
  case "gemini-3-flash-preview":
9
- return GoogleProvider.create();
9
+ return GoogleProvider.create(apiKeys?.google);
10
10
  case "gpt-5-nano":
11
- return OpenAIProvider.create();
11
+ return OpenAIProvider.create(apiKeys?.openai);
12
12
  default:
13
13
  throw new Error(`jest-fuzzy: Unknown model: ${model}`);
14
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAgB;IACnD,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,kBAAkB;YACrB,OAAO,iBAAiB,CAAC,MAAM,EAAE,CAAC;QACpC,KAAK,wBAAwB;YAC3B,OAAO,cAAc,CAAC,MAAM,EAAE,CAAC;QACjC,KAAK,YAAY;YACf,OAAO,cAAc,CAAC,MAAM,EAAE,CAAC;QACjC;YACE,MAAM,IAAI,KAAK,CAAC,8BAA8B,KAAK,EAAE,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC;AAED,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAgB,EAAE,OAAiB;IACtE,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,kBAAkB;YACrB,OAAO,iBAAiB,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACtD,KAAK,wBAAwB;YAC3B,OAAO,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAChD,KAAK,YAAY;YACf,OAAO,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAChD;YACE,MAAM,IAAI,KAAK,CAAC,8BAA8B,KAAK,EAAE,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC;AAED,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC"}