@brotu/ai 0.1.0 → 0.2.0

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/dist/index.cjs CHANGED
@@ -37,8 +37,11 @@ __export(index_exports, {
37
37
  ELEVENLABS_MODELS: () => ELEVENLABS_MODELS,
38
38
  ELEVENLABS_OUTPUT_FORMATS: () => ELEVENLABS_OUTPUT_FORMATS,
39
39
  ElevenLabsAdapter: () => ElevenLabsAdapter,
40
+ GOOGLE_AUDIO_MODELS: () => GOOGLE_AUDIO_MODELS,
40
41
  GOOGLE_CATALOG: () => GOOGLE_CATALOG,
41
42
  GOOGLE_IMAGE_MODELS: () => GOOGLE_IMAGE_MODELS,
43
+ GOOGLE_TEXT_MODELS: () => GOOGLE_TEXT_MODELS,
44
+ GOOGLE_TTS_VOICES: () => GOOGLE_TTS_VOICES,
42
45
  GOOGLE_VIDEO_MODELS: () => GOOGLE_VIDEO_MODELS,
43
46
  GoogleAdapter: () => GoogleAdapter,
44
47
  KLING_CAPABILITIES: () => KLING_CAPABILITIES,
@@ -47,6 +50,7 @@ __export(index_exports, {
47
50
  KlingAdapter: () => KlingAdapter,
48
51
  OPENAI_CATALOG: () => OPENAI_CATALOG,
49
52
  OPENAI_IMAGE_MODELS: () => OPENAI_IMAGE_MODELS,
53
+ OPENAI_TEXT_MODELS: () => OPENAI_TEXT_MODELS,
50
54
  OpenAIAdapter: () => OpenAIAdapter,
51
55
  PendingJob: () => PendingJob,
52
56
  QWEN_AUDIO_MODELS: () => QWEN_AUDIO_MODELS,
@@ -398,6 +402,55 @@ var GOOGLE_VIDEO_MODELS = {
398
402
  conversationalEditing: true
399
403
  }
400
404
  };
405
+ var GOOGLE_TEXT_MODELS = {
406
+ "gemini-3.7-flash": { usdPerMillionOutput: 3.75 },
407
+ "gemini-3.6-flash": { usdPerMillionOutput: 3.75 },
408
+ "gemini-3.5-flash": { usdPerMillionOutput: 9 },
409
+ "gemini-3.5-flash-lite": {},
410
+ "gemini-3.1-flash-lite": {},
411
+ "gemini-3.1-pro-preview": { usdPerMillionOutput: 12 },
412
+ "gemini-3-flash-preview": {},
413
+ "gemini-2.5-pro": {},
414
+ "gemini-2.5-flash": {},
415
+ "gemini-2.5-flash-lite": {}
416
+ };
417
+ var GOOGLE_TTS_VOICES = [
418
+ "Zephyr",
419
+ "Puck",
420
+ "Charon",
421
+ "Kore",
422
+ "Fenrir",
423
+ "Leda",
424
+ "Orus",
425
+ "Aoede",
426
+ "Callirrhoe",
427
+ "Autonoe",
428
+ "Enceladus",
429
+ "Iapetus",
430
+ "Umbriel",
431
+ "Algieba",
432
+ "Despina",
433
+ "Erinome",
434
+ "Algenib",
435
+ "Rasalgethi",
436
+ "Laomedeia",
437
+ "Achernar",
438
+ "Alnilam",
439
+ "Schedar",
440
+ "Gacrux",
441
+ "Pulcherrima",
442
+ "Achird",
443
+ "Zubenelgenubi",
444
+ "Vindemiatrix",
445
+ "Sadachbia",
446
+ "Sadaltager",
447
+ "Sulafat"
448
+ ];
449
+ var GOOGLE_AUDIO_MODELS = {
450
+ "gemini-3.1-flash-tts-preview": { voices: GOOGLE_TTS_VOICES },
451
+ "gemini-2.5-flash-preview-tts": { voices: GOOGLE_TTS_VOICES },
452
+ "gemini-2.5-pro-preview-tts": { voices: GOOGLE_TTS_VOICES }
453
+ };
401
454
  var GOOGLE_CATALOG = [
402
455
  ...Object.entries(GOOGLE_IMAGE_MODELS).map(
403
456
  ([id, binding]) => ({
@@ -434,6 +487,35 @@ var GOOGLE_CATALOG = [
434
487
  byResolution: binding.usdByResolution
435
488
  }
436
489
  })
490
+ ),
491
+ ...Object.entries(GOOGLE_TEXT_MODELS).map(
492
+ ([id, binding]) => ({
493
+ id,
494
+ name: id,
495
+ category: "text",
496
+ inputType: "image_optional",
497
+ nodeTypes: ["text"],
498
+ creditsPerUnit: 0,
499
+ creditUnit: "token",
500
+ provider: "google",
501
+ pricing: binding.usdPerMillionOutput === void 0 ? void 0 : {
502
+ unit: "token",
503
+ usdPerUnit: binding.usdPerMillionOutput / 1e6
504
+ }
505
+ })
506
+ ),
507
+ ...Object.entries(GOOGLE_AUDIO_MODELS).map(
508
+ ([id, binding]) => ({
509
+ id,
510
+ name: id,
511
+ category: "audio",
512
+ inputType: "text_only",
513
+ nodeTypes: ["text"],
514
+ creditsPerUnit: 0,
515
+ creditUnit: "character",
516
+ provider: "google",
517
+ description: `Voices: ${binding.voices.join(", ")}`
518
+ })
437
519
  )
438
520
  ];
439
521
 
@@ -824,23 +906,42 @@ var OPENAI_IMAGE_MODELS = {
824
906
  usd: { low: 0.011, medium: 0.042, high: 0.167 }
825
907
  }
826
908
  };
827
- var OPENAI_CATALOG = Object.entries(
828
- OPENAI_IMAGE_MODELS
829
- ).map(([id, binding]) => ({
830
- id,
831
- name: id,
832
- category: "image",
833
- inputType: "image_optional",
834
- nodeTypes: ["image_gen"],
835
- creditsPerUnit: 0,
836
- creditUnit: "image",
837
- supportedResolutions: binding.sizes === "any" ? void 0 : binding.sizes,
838
- provider: "openai",
839
- // Medium is the sane middle; `quality: auto` can silently pick high, which
840
- // is 35x the low tier.
841
- pricing: { usdPerUnit: binding.usd.medium, unit: "image" },
842
- description: binding.shutdownOn ? `Deprecated \u2014 OpenAI shuts this down on ${binding.shutdownOn}.` : void 0
843
- }));
909
+ var OPENAI_TEXT_MODELS = {
910
+ "gpt-5.6-sol": { usdPerMillionOutput: 30 },
911
+ "gpt-5.6-terra": { usdPerMillionOutput: 12 },
912
+ "gpt-5.6-luna": { usdPerMillionOutput: 1.2 }
913
+ };
914
+ var OPENAI_CATALOG = [
915
+ ...Object.entries(OPENAI_IMAGE_MODELS).map(([id, binding]) => ({
916
+ id,
917
+ name: id,
918
+ category: "image",
919
+ inputType: "image_optional",
920
+ nodeTypes: ["image_gen"],
921
+ creditsPerUnit: 0,
922
+ creditUnit: "image",
923
+ supportedResolutions: binding.sizes === "any" ? void 0 : binding.sizes,
924
+ provider: "openai",
925
+ // Medium is the sane middle; `quality: auto` can silently pick high, which
926
+ // is 35x the low tier.
927
+ pricing: { usdPerUnit: binding.usd.medium, unit: "image" },
928
+ description: binding.shutdownOn ? `Deprecated \u2014 OpenAI shuts this down on ${binding.shutdownOn}.` : void 0
929
+ })),
930
+ ...Object.entries(OPENAI_TEXT_MODELS).map(([id, binding]) => ({
931
+ id,
932
+ name: id,
933
+ category: "text",
934
+ inputType: "image_optional",
935
+ nodeTypes: ["text"],
936
+ creditsPerUnit: 0,
937
+ creditUnit: "token",
938
+ provider: "openai",
939
+ pricing: {
940
+ unit: "token",
941
+ usdPerUnit: binding.usdPerMillionOutput / 1e6
942
+ }
943
+ }))
944
+ ];
844
945
 
845
946
  // src/providers/qwen.models.ts
846
947
  var VIDEO_PATH = "/api/v1/services/aigc/video-generation/video-synthesis";
@@ -1763,7 +1864,12 @@ var POLL_INTERVAL_MS2 = 1e4;
1763
1864
  var DEFAULT_MAX_POLL_ATTEMPTS2 = 120;
1764
1865
  var GoogleAdapter = class {
1765
1866
  providerName = "google";
1766
- supportedTypes = ["image", "video"];
1867
+ supportedTypes = [
1868
+ "image",
1869
+ "video",
1870
+ "text",
1871
+ "audio"
1872
+ ];
1767
1873
  opts;
1768
1874
  constructor(opts) {
1769
1875
  this.opts = opts;
@@ -2085,17 +2191,143 @@ var GoogleAdapter = class {
2085
2191
  generateVideo(params) {
2086
2192
  return this.runVideo(params);
2087
2193
  }
2088
- generateAudio(_params) {
2089
- throw new Error("Google has no speech synthesis wired up here.");
2194
+ textBody(modelId, params) {
2195
+ const input = [
2196
+ { type: "text", text: params.prompt }
2197
+ ];
2198
+ for (const image of params.referenceImages ?? []) {
2199
+ const [meta, data] = image.split(",");
2200
+ input.push({
2201
+ type: "image",
2202
+ mime_type: meta?.match(/data:([^;]+)/)?.[1] ?? "image/png",
2203
+ data: data ?? image
2204
+ });
2205
+ }
2206
+ return {
2207
+ model: modelId,
2208
+ input,
2209
+ ...params.systemPrompt ? { instructions: params.systemPrompt } : {},
2210
+ generation_config: {
2211
+ ...params.maxTokens ? { max_output_tokens: params.maxTokens } : {},
2212
+ ...params.temperature !== void 0 ? { temperature: params.temperature } : {},
2213
+ ...params.topP !== void 0 ? { top_p: params.topP } : {}
2214
+ },
2215
+ ...params.providerOptions?.google ?? {}
2216
+ };
2090
2217
  }
2091
- generateText(_params) {
2092
- throw new Error("The Google adapter here covers image and video only.");
2218
+ speechBody(modelId, params, voice) {
2219
+ return {
2220
+ model: modelId,
2221
+ input: params.prompt,
2222
+ response_format: { type: "audio" },
2223
+ generation_config: {
2224
+ speech_config: [{ voice }]
2225
+ },
2226
+ ...params.providerOptions?.google ?? {}
2227
+ };
2228
+ }
2229
+ async generateText(params) {
2230
+ const startedAt = Date.now();
2231
+ const modelId = params.model ?? "";
2232
+ const failure = (error) => ({
2233
+ success: false,
2234
+ outputs: [],
2235
+ creditsUsed: 0,
2236
+ provider: this.providerName,
2237
+ model: modelId,
2238
+ processingTimeMs: Date.now() - startedAt,
2239
+ error
2240
+ });
2241
+ if (!(modelId in GOOGLE_TEXT_MODELS)) {
2242
+ return failure(
2243
+ `"${modelId}" is not a Gemini text model. Known: ${Object.keys(GOOGLE_TEXT_MODELS).join(", ")}.`
2244
+ );
2245
+ }
2246
+ try {
2247
+ const payload = await this.request(
2248
+ INTERACTIONS_PATH,
2249
+ {
2250
+ method: "POST",
2251
+ body: this.textBody(modelId, params)
2252
+ }
2253
+ );
2254
+ const text = payload.output_text ?? payload.steps?.flatMap((step) => step.content ?? []).find((part) => part.type === "text" || part.text)?.text;
2255
+ if (!text) return failure("Google returned no text.");
2256
+ return {
2257
+ success: true,
2258
+ outputs: [
2259
+ {
2260
+ url: `data:text/plain;base64,${Buffer.from(text).toString("base64")}`,
2261
+ mimeType: "text/plain",
2262
+ raw: { text }
2263
+ }
2264
+ ],
2265
+ creditsUsed: 0,
2266
+ provider: this.providerName,
2267
+ model: modelId,
2268
+ processingTimeMs: Date.now() - startedAt
2269
+ };
2270
+ } catch (error) {
2271
+ return failure(error instanceof Error ? error.message : String(error));
2272
+ }
2273
+ }
2274
+ async generateAudio(params) {
2275
+ const startedAt = Date.now();
2276
+ const modelId = params.model ?? "";
2277
+ const failure = (error) => ({
2278
+ success: false,
2279
+ outputs: [],
2280
+ creditsUsed: 0,
2281
+ provider: this.providerName,
2282
+ model: modelId,
2283
+ processingTimeMs: Date.now() - startedAt,
2284
+ error
2285
+ });
2286
+ const binding = GOOGLE_AUDIO_MODELS[modelId];
2287
+ if (!binding) {
2288
+ return failure(
2289
+ `"${modelId}" is not a Gemini speech model. Known: ${Object.keys(GOOGLE_AUDIO_MODELS).join(", ")}.`
2290
+ );
2291
+ }
2292
+ const voice = params.voice ?? "Kore";
2293
+ if (!binding.voices.includes(voice)) {
2294
+ return failure(
2295
+ `Gemini TTS offers ${GOOGLE_TTS_VOICES.join(", ")}, not "${voice}".`
2296
+ );
2297
+ }
2298
+ try {
2299
+ const payload = await this.request(
2300
+ INTERACTIONS_PATH,
2301
+ {
2302
+ method: "POST",
2303
+ body: this.speechBody(modelId, params, voice)
2304
+ }
2305
+ );
2306
+ const data = payload.output_audio?.data;
2307
+ if (!data) return failure("Google returned no audio.");
2308
+ return {
2309
+ success: true,
2310
+ outputs: [
2311
+ {
2312
+ url: `data:audio/wav;base64,${data}`,
2313
+ mimeType: "audio/wav",
2314
+ raw: { inline: true, voice }
2315
+ }
2316
+ ],
2317
+ creditsUsed: 0,
2318
+ provider: this.providerName,
2319
+ model: modelId,
2320
+ processingTimeMs: Date.now() - startedAt
2321
+ };
2322
+ } catch (error) {
2323
+ return failure(error instanceof Error ? error.message : String(error));
2324
+ }
2093
2325
  }
2094
2326
  async estimateCost(type, params) {
2095
2327
  return estimateFor(this.providerName, type, params);
2096
2328
  }
2097
2329
  supportsModel(model) {
2098
- return model in GOOGLE_IMAGE_MODELS || model in GOOGLE_VIDEO_MODELS;
2330
+ return model in GOOGLE_IMAGE_MODELS || model in GOOGLE_VIDEO_MODELS || model in GOOGLE_TEXT_MODELS || model in GOOGLE_AUDIO_MODELS;
2099
2331
  }
2100
2332
  getAvailableModels() {
2101
2333
  return [
@@ -2108,6 +2340,16 @@ var GoogleAdapter = class {
2108
2340
  id,
2109
2341
  name: id,
2110
2342
  type: "video"
2343
+ })),
2344
+ ...Object.keys(GOOGLE_TEXT_MODELS).map((id) => ({
2345
+ id,
2346
+ name: id,
2347
+ type: "text"
2348
+ })),
2349
+ ...Object.keys(GOOGLE_AUDIO_MODELS).map((id) => ({
2350
+ id,
2351
+ name: id,
2352
+ type: "audio"
2111
2353
  }))
2112
2354
  ];
2113
2355
  }
@@ -2464,7 +2706,7 @@ var IMAGES_PATH2 = "/v1/images/generations";
2464
2706
  var OpenAIAdapter = class {
2465
2707
  providerName = "openai";
2466
2708
  // No video: the Videos API shuts down on 24 September 2026.
2467
- supportedTypes = ["image"];
2709
+ supportedTypes = ["image", "text"];
2468
2710
  opts;
2469
2711
  constructor(opts) {
2470
2712
  this.opts = opts;
@@ -2579,8 +2821,79 @@ var OpenAIAdapter = class {
2579
2821
  generateAudio(_params) {
2580
2822
  throw new Error("OpenAI has no speech synthesis wired up here.");
2581
2823
  }
2582
- generateText(_params) {
2583
- throw new Error("The OpenAI adapter here covers images only.");
2824
+ textBody(params) {
2825
+ const content = params.referenceImages?.length ? [
2826
+ { type: "input_text", text: params.prompt },
2827
+ ...params.referenceImages.map((url) => ({
2828
+ type: "input_image",
2829
+ image_url: url
2830
+ }))
2831
+ ] : params.prompt;
2832
+ const input = [];
2833
+ if (params.systemPrompt) {
2834
+ input.push({ role: "system", content: params.systemPrompt });
2835
+ }
2836
+ input.push({ role: "user", content });
2837
+ return {
2838
+ model: params.model,
2839
+ input,
2840
+ ...params.maxTokens ? { max_output_tokens: params.maxTokens } : {},
2841
+ ...params.temperature !== void 0 ? { temperature: params.temperature } : {},
2842
+ ...params.topP !== void 0 ? { top_p: params.topP } : {},
2843
+ ...params.providerOptions?.openai ?? {}
2844
+ };
2845
+ }
2846
+ async generateText(params) {
2847
+ const startedAt = Date.now();
2848
+ const modelId = params.model ?? "";
2849
+ const failure = (error) => ({
2850
+ success: false,
2851
+ outputs: [],
2852
+ creditsUsed: 0,
2853
+ provider: this.providerName,
2854
+ model: modelId,
2855
+ processingTimeMs: Date.now() - startedAt,
2856
+ error
2857
+ });
2858
+ if (!(modelId in OPENAI_TEXT_MODELS)) {
2859
+ return failure(
2860
+ `"${modelId}" is not an OpenAI text model. Known: ${Object.keys(OPENAI_TEXT_MODELS).join(", ")}.`
2861
+ );
2862
+ }
2863
+ try {
2864
+ const response = await fetch(`${this.baseUrl}/v1/responses`, {
2865
+ method: "POST",
2866
+ headers: {
2867
+ Authorization: `Bearer ${this.opts.apiKey}`,
2868
+ "Content-Type": "application/json",
2869
+ ...this.opts.organization ? { "OpenAI-Organization": this.opts.organization } : {}
2870
+ },
2871
+ body: JSON.stringify(this.textBody(params))
2872
+ });
2873
+ const payload = await response.json();
2874
+ if (payload.error) throw new Error(payload.error.message);
2875
+ if (!response.ok) {
2876
+ throw new Error(`OpenAI returned ${response.status}.`);
2877
+ }
2878
+ const text = payload.output_text ?? payload.output?.flatMap((item) => item.content ?? []).find((part) => part.type === "output_text" || part.text)?.text;
2879
+ if (!text) return failure("OpenAI returned no text.");
2880
+ return {
2881
+ success: true,
2882
+ outputs: [
2883
+ {
2884
+ url: `data:text/plain;base64,${Buffer.from(text).toString("base64")}`,
2885
+ mimeType: "text/plain",
2886
+ raw: { text, tokens: payload.usage?.output_tokens }
2887
+ }
2888
+ ],
2889
+ creditsUsed: 0,
2890
+ provider: this.providerName,
2891
+ model: modelId,
2892
+ processingTimeMs: Date.now() - startedAt
2893
+ };
2894
+ } catch (error) {
2895
+ return failure(error instanceof Error ? error.message : String(error));
2896
+ }
2584
2897
  }
2585
2898
  /** Synchronous provider: there is never a queued job to come back to. */
2586
2899
  async completeJob(job) {
@@ -2601,14 +2914,21 @@ var OpenAIAdapter = class {
2601
2914
  };
2602
2915
  }
2603
2916
  supportsModel(model) {
2604
- return model in OPENAI_IMAGE_MODELS;
2917
+ return model in OPENAI_IMAGE_MODELS || model in OPENAI_TEXT_MODELS;
2605
2918
  }
2606
2919
  getAvailableModels() {
2607
- return Object.keys(OPENAI_IMAGE_MODELS).map((id) => ({
2608
- id,
2609
- name: id,
2610
- type: "image"
2611
- }));
2920
+ return [
2921
+ ...Object.keys(OPENAI_IMAGE_MODELS).map((id) => ({
2922
+ id,
2923
+ name: id,
2924
+ type: "image"
2925
+ })),
2926
+ ...Object.keys(OPENAI_TEXT_MODELS).map((id) => ({
2927
+ id,
2928
+ name: id,
2929
+ type: "text"
2930
+ }))
2931
+ ];
2612
2932
  }
2613
2933
  };
2614
2934
 
@@ -3533,8 +3853,11 @@ function brotuClient(options) {
3533
3853
  ELEVENLABS_MODELS,
3534
3854
  ELEVENLABS_OUTPUT_FORMATS,
3535
3855
  ElevenLabsAdapter,
3856
+ GOOGLE_AUDIO_MODELS,
3536
3857
  GOOGLE_CATALOG,
3537
3858
  GOOGLE_IMAGE_MODELS,
3859
+ GOOGLE_TEXT_MODELS,
3860
+ GOOGLE_TTS_VOICES,
3538
3861
  GOOGLE_VIDEO_MODELS,
3539
3862
  GoogleAdapter,
3540
3863
  KLING_CAPABILITIES,
@@ -3543,6 +3866,7 @@ function brotuClient(options) {
3543
3866
  KlingAdapter,
3544
3867
  OPENAI_CATALOG,
3545
3868
  OPENAI_IMAGE_MODELS,
3869
+ OPENAI_TEXT_MODELS,
3546
3870
  OpenAIAdapter,
3547
3871
  PendingJob,
3548
3872
  QWEN_AUDIO_MODELS,
package/dist/index.d.ts CHANGED
@@ -20,10 +20,10 @@ export { createS3Storage, persistOutputs, type S3StorageConfig, type Storage, }
20
20
  export type * from "./ports/content-generator.port";
21
21
  export { BYTEPLUS_CATALOG, BYTEPLUS_MODELS, type BytePlusModelBinding, } from "./providers/byteplus.models";
22
22
  export { ELEVENLABS_CATALOG, ELEVENLABS_MODELS, ELEVENLABS_OUTPUT_FORMATS, } from "./providers/elevenlabs.models";
23
- export { GOOGLE_CATALOG, GOOGLE_IMAGE_MODELS, GOOGLE_VIDEO_MODELS, } from "./providers/google.models";
23
+ export { GOOGLE_AUDIO_MODELS, GOOGLE_CATALOG, GOOGLE_IMAGE_MODELS, GOOGLE_TEXT_MODELS, GOOGLE_TTS_VOICES, GOOGLE_VIDEO_MODELS, } from "./providers/google.models";
24
24
  export type { KlingModelBinding } from "./providers/kling.models";
25
25
  export { type AvatarInput, type ImageOmniInput, KLING_CAPABILITIES, KLING_CATALOG, KLING_MODELS, type KlingCapability, type KlingRequestOptions, type KlingResultField, type MotionControlInput, type OmniVideoInput, type OutpaintingInput, } from "./providers/kling.models";
26
- export { OPENAI_CATALOG, OPENAI_IMAGE_MODELS, } from "./providers/openai.models";
26
+ export { OPENAI_CATALOG, OPENAI_IMAGE_MODELS, OPENAI_TEXT_MODELS, } from "./providers/openai.models";
27
27
  export { QWEN_AUDIO_MODELS, QWEN_CATALOG, QWEN_IMAGE_MODELS, QWEN_TEXT_MODELS, QWEN_VIDEO_MODELS, type QwenImageBinding, type QwenVideoBinding, } from "./providers/qwen.models";
28
28
  export type { BrotuAIOptions, ProviderConfig, ReferenceVideoInfo, ResolvedProvider, } from "./types";
29
29
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,YAAY,EACX,wBAAwB,EACxB,eAAe,GACf,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,YAAY,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,YAAY,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,YAAY,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EACN,kBAAkB,EAClB,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,eAAe,GACf,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,mBAAmB,yBAAyB,CAAC;AAC7C,OAAO,EACN,KAAK,OAAO,EACZ,KAAK,WAAW,EAChB,IAAI,EACJ,KAAK,UAAU,EACf,EAAE,EACF,KAAK,MAAM,GACX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,YAAY,EACZ,KAAK,GAAG,EACR,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,UAAU,GACV,MAAM,YAAY,CAAC;AACpB,OAAO,EACN,eAAe,EACf,cAAc,EACd,KAAK,eAAe,EACpB,KAAK,OAAO,GACZ,MAAM,eAAe,CAAC;AACvB,mBAAmB,gCAAgC,CAAC;AACpD,OAAO,EACN,gBAAgB,EAChB,eAAe,EACf,KAAK,oBAAoB,GACzB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACN,kBAAkB,EAClB,iBAAiB,EACjB,yBAAyB,GACzB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACN,cAAc,EACd,mBAAmB,EACnB,mBAAmB,GACnB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EACN,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,gBAAgB,GACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACN,cAAc,EACd,mBAAmB,GACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACN,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,GACrB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACX,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,gBAAgB,GAChB,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,YAAY,EACX,wBAAwB,EACxB,eAAe,GACf,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,YAAY,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,YAAY,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,YAAY,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EACN,kBAAkB,EAClB,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,eAAe,GACf,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,mBAAmB,yBAAyB,CAAC;AAC7C,OAAO,EACN,KAAK,OAAO,EACZ,KAAK,WAAW,EAChB,IAAI,EACJ,KAAK,UAAU,EACf,EAAE,EACF,KAAK,MAAM,GACX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,YAAY,EACZ,KAAK,GAAG,EACR,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,UAAU,GACV,MAAM,YAAY,CAAC;AACpB,OAAO,EACN,eAAe,EACf,cAAc,EACd,KAAK,eAAe,EACpB,KAAK,OAAO,GACZ,MAAM,eAAe,CAAC;AACvB,mBAAmB,gCAAgC,CAAC;AACpD,OAAO,EACN,gBAAgB,EAChB,eAAe,EACf,KAAK,oBAAoB,GACzB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACN,kBAAkB,EAClB,iBAAiB,EACjB,yBAAyB,GACzB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACN,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,GACnB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EACN,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,gBAAgB,GACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACN,cAAc,EACd,mBAAmB,EACnB,kBAAkB,GAClB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACN,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,GACrB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACX,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,gBAAgB,GAChB,MAAM,SAAS,CAAC"}