From c75e1a05167178213dd45f4a69af9fd3081f2701 Mon Sep 17 00:00:00 2001 From: Chris Watts Date: Tue, 14 Jan 2025 10:37:25 -0800 Subject: [PATCH] feat: generation for react working feat: added nextjs-plugin package for quick next.js config setup --- engine/baml-lib/baml-types/src/generator.rs | 6 +- engine/baml-runtime/src/cli/generate.rs | 4 + engine/baml-runtime/src/cli/init.rs | 4 +- engine/baml-runtime/src/cli/serve/mod.rs | 5 +- engine/baml-runtime/src/lib.rs | 1 + engine/language_client_codegen/src/lib.rs | 6 + .../src/typescript/mod.rs | 105 +- .../typescript/templates/async_client.ts.j2 | 9 + .../typescript/templates/react/client.tsx.j2 | 512 + .../typescript/templates/react/server.ts.j2 | 48 + .../typescript/templates/react/types.ts.j2 | 155 + .../typescript/templates/sync_client.ts.j2 | 15 +- .../typescript/templates/type_builder.ts.j2 | 7 +- .../src/typescript/templates/types.ts.j2 | 6 + .../src/version_check.rs | 3 + engine/language_client_typescript/.gitignore | 2 + .../{ => artifacts}/async_context_vars.d.ts | 0 .../artifacts/async_context_vars.d.ts.map | 1 + .../{ => artifacts}/async_context_vars.js | 0 .../{index.d.ts => artifacts/errors.d.ts} | 5 +- .../artifacts/errors.d.ts.map | 1 + .../{index.js => artifacts/errors.js} | 19 +- .../artifacts/index.d.ts | 5 + .../artifacts/index.d.ts.map | 1 + .../artifacts/index.js | 33 + .../artifacts/native.d.ts | 133 + .../{ => artifacts}/native.js | 0 .../{ => artifacts}/stream.d.ts | 5 + .../artifacts/stream.d.ts.map | 1 + .../artifacts/stream.js | 122 + .../{ => artifacts}/type_builder.d.ts | 0 .../artifacts/type_builder.d.ts.map | 1 + .../{ => artifacts}/type_builder.js | 0 .../async_context_vars.d.ts.map | 1 - engine/language_client_typescript/cli.js | 2 +- .../language_client_typescript/index.d.ts.map | 1 - .../language_client_typescript/package.json | 64 +- .../stream.d.ts.map | 1 - engine/language_client_typescript/stream.js | 23 + .../type_builder.d.ts.map | 1 - .../typescript_src/errors.ts | 111 + .../typescript_src/index.ts | 113 +- .../typescript_src/stream.ts | 74 +- fern/.cursorrules | 320 + .../08-integrations/02-nextjs-app-router.mdx | 219 + fern/docs.yml | 70 +- fern/snippets/baml/cli/generate.mdx | 13 + fern/snippets/baml/cli/install/nodejs.mdx | 13 + fern/snippets/baml/clients/openai.mdx | 9 + fern/snippets/baml/prompts/story.mdx | 26 + .../frameworks/nextjs/baml-generator.mdx | 7 + .../frameworks/nextjs/custom-client-hook.mdx | 53 + .../nextjs/custom-server-action.mdx | 17 + .../frameworks/nextjs/env-vars/openai.mdx | 18 + .../nextjs/generated-client-hook.mdx | 54 + .../frameworks/nextjs/install-baml.mdx | 19 + .../frameworks/nextjs/next-config.mdx | 34 + integ-tests/README.md | 6 + integ-tests/baml_src/generators.baml | 18 +- .../baml_src/test-files/providers/aws.baml | 25 + integ-tests/openapi/baml_client/openapi.yaml | 3032 ++- .../python/baml_client/async_client.py | 53 + integ-tests/python/baml_client/inlinedbaml.py | 4 +- .../python/baml_client/partial_types.py | 7 + integ-tests/python/baml_client/sync_client.py | 53 + integ-tests/python/baml_client/types.py | 7 + integ-tests/react/.gitignore | 41 + integ-tests/react/README.md | 36 + integ-tests/react/baml_client/async_client.ts | 8468 +++++++ integ-tests/react/baml_client/globals.ts | 37 + integ-tests/react/baml_client/index.ts | 24 + integ-tests/react/baml_client/inlinedbaml.ts | 116 + .../react/baml_client/partial_types.ts | 523 + .../react/baml_client/react/client.tsx | 19536 ++++++++++++++++ integ-tests/react/baml_client/react/server.ts | 4240 ++++ integ-tests/react/baml_client/react/types.ts | 172 + integ-tests/react/baml_client/sync_client.ts | 3676 +++ integ-tests/react/baml_client/tracing.ts | 33 + integ-tests/react/baml_client/type_builder.ts | 167 + integ-tests/react/baml_client/types.ts | 758 + integ-tests/react/components.json | 21 + integ-tests/react/eslint.config.mjs | 16 + integ-tests/react/jest.config.js | 12 + integ-tests/react/next.config.ts | 7 + integ-tests/react/package.json | 68 + integ-tests/react/pnpm-lock.yaml | 9415 ++++++++ integ-tests/react/pnpm-workspace.yaml | 10 + integ-tests/react/postcss.config.mjs | 8 + integ-tests/react/public/file.svg | 1 + integ-tests/react/public/globe.svg | 1 + integ-tests/react/public/next.svg | 1 + integ-tests/react/public/vercel.svg | 1 + integ-tests/react/public/window.svg | 1 + integ-tests/react/src/app/actions.ts | 33 + .../src/app/api/baml/[baml_function]/route.ts | 88 + integ-tests/react/src/app/favicon.ico | Bin 0 -> 25931 bytes integ-tests/react/src/app/globals.css | 68 + integ-tests/react/src/app/layout.tsx | 49 + integ-tests/react/src/app/page.tsx | 100 + integ-tests/react/src/app/test-client.tsx | 202 + .../react/src/components/mode-toggle.tsx | 40 + .../react/src/components/theme-provider.tsx | 9 + integ-tests/react/src/components/ui/alert.tsx | 59 + integ-tests/react/src/components/ui/badge.tsx | 36 + .../react/src/components/ui/button.tsx | 56 + integ-tests/react/src/components/ui/card.tsx | 79 + .../react/src/components/ui/dropdown-menu.tsx | 200 + integ-tests/react/src/components/ui/input.tsx | 22 + integ-tests/react/src/components/ui/label.tsx | 26 + .../react/src/components/ui/progress.tsx | 28 + .../react/src/components/ui/skeleton.tsx | 15 + .../react/src/components/ui/sonner.tsx | 31 + .../react/src/components/ui/switch.tsx | 29 + integ-tests/react/src/components/ui/table.tsx | 117 + integ-tests/react/src/components/ui/tabs.tsx | 55 + .../react/src/components/ui/textarea.tsx | 22 + integ-tests/react/src/lib/utils.ts | 6 + integ-tests/react/tailwind.config.ts | 62 + integ-tests/react/test-report.html | 260 + integ-tests/react/tests/test-setup.ts | 106 + integ-tests/react/tsconfig.json | 33 + integ-tests/ruby/baml_client/client.rb | 67 + integ-tests/ruby/baml_client/inlined.rb | 4 +- integ-tests/ruby/baml_client/partial-types.rb | 28 + integ-tests/ruby/baml_client/types.rb | 28 + .../typescript/baml_client/inlinedbaml.ts | 4 +- .../typescript/baml_client/partial_types.ts | 9 + integ-tests/typescript/baml_client/types.ts | 17 + integ-tests/typescript/test-report.html | 2 +- integ-tests/typescript/tests/test-setup.ts | 10 + typescript/nextjs-plugin/README.md | 113 + typescript/nextjs-plugin/package.json | 50 + typescript/nextjs-plugin/pnpm-lock.yaml | 3594 +++ typescript/nextjs-plugin/src/index.ts | 94 + typescript/nextjs-plugin/tsconfig.json | 15 + typescript/pnpm-lock.yaml | 655 +- typescript/pnpm-workspace.yaml | 1 + .../packages/vscode/src/extension.ts | 2 + 138 files changed, 58783 insertions(+), 813 deletions(-) create mode 100644 engine/language_client_codegen/src/typescript/templates/react/client.tsx.j2 create mode 100644 engine/language_client_codegen/src/typescript/templates/react/server.ts.j2 create mode 100644 engine/language_client_codegen/src/typescript/templates/react/types.ts.j2 rename engine/language_client_typescript/{ => artifacts}/async_context_vars.d.ts (100%) create mode 100644 engine/language_client_typescript/artifacts/async_context_vars.d.ts.map rename engine/language_client_typescript/{ => artifacts}/async_context_vars.js (100%) rename engine/language_client_typescript/{index.d.ts => artifacts/errors.d.ts} (67%) create mode 100644 engine/language_client_typescript/artifacts/errors.d.ts.map rename engine/language_client_typescript/{index.js => artifacts/errors.js} (62%) create mode 100644 engine/language_client_typescript/artifacts/index.d.ts create mode 100644 engine/language_client_typescript/artifacts/index.d.ts.map create mode 100644 engine/language_client_typescript/artifacts/index.js create mode 100644 engine/language_client_typescript/artifacts/native.d.ts rename engine/language_client_typescript/{ => artifacts}/native.js (100%) rename engine/language_client_typescript/{ => artifacts}/stream.d.ts (77%) create mode 100644 engine/language_client_typescript/artifacts/stream.d.ts.map create mode 100644 engine/language_client_typescript/artifacts/stream.js rename engine/language_client_typescript/{ => artifacts}/type_builder.d.ts (100%) create mode 100644 engine/language_client_typescript/artifacts/type_builder.d.ts.map rename engine/language_client_typescript/{ => artifacts}/type_builder.js (100%) delete mode 100644 engine/language_client_typescript/async_context_vars.d.ts.map delete mode 100644 engine/language_client_typescript/index.d.ts.map delete mode 100644 engine/language_client_typescript/stream.d.ts.map delete mode 100644 engine/language_client_typescript/type_builder.d.ts.map create mode 100644 engine/language_client_typescript/typescript_src/errors.ts create mode 100644 fern/.cursorrules create mode 100644 fern/01-guide/08-integrations/02-nextjs-app-router.mdx create mode 100644 fern/snippets/baml/cli/generate.mdx create mode 100644 fern/snippets/baml/cli/install/nodejs.mdx create mode 100644 fern/snippets/baml/clients/openai.mdx create mode 100644 fern/snippets/baml/prompts/story.mdx create mode 100644 fern/snippets/frameworks/nextjs/baml-generator.mdx create mode 100644 fern/snippets/frameworks/nextjs/custom-client-hook.mdx create mode 100644 fern/snippets/frameworks/nextjs/custom-server-action.mdx create mode 100644 fern/snippets/frameworks/nextjs/env-vars/openai.mdx create mode 100644 fern/snippets/frameworks/nextjs/generated-client-hook.mdx create mode 100644 fern/snippets/frameworks/nextjs/install-baml.mdx create mode 100644 fern/snippets/frameworks/nextjs/next-config.mdx create mode 100644 integ-tests/react/.gitignore create mode 100644 integ-tests/react/README.md create mode 100644 integ-tests/react/baml_client/async_client.ts create mode 100644 integ-tests/react/baml_client/globals.ts create mode 100644 integ-tests/react/baml_client/index.ts create mode 100644 integ-tests/react/baml_client/inlinedbaml.ts create mode 100644 integ-tests/react/baml_client/partial_types.ts create mode 100644 integ-tests/react/baml_client/react/client.tsx create mode 100644 integ-tests/react/baml_client/react/server.ts create mode 100644 integ-tests/react/baml_client/react/types.ts create mode 100644 integ-tests/react/baml_client/sync_client.ts create mode 100644 integ-tests/react/baml_client/tracing.ts create mode 100644 integ-tests/react/baml_client/type_builder.ts create mode 100644 integ-tests/react/baml_client/types.ts create mode 100644 integ-tests/react/components.json create mode 100644 integ-tests/react/eslint.config.mjs create mode 100644 integ-tests/react/jest.config.js create mode 100644 integ-tests/react/next.config.ts create mode 100644 integ-tests/react/package.json create mode 100644 integ-tests/react/pnpm-lock.yaml create mode 100644 integ-tests/react/pnpm-workspace.yaml create mode 100644 integ-tests/react/postcss.config.mjs create mode 100644 integ-tests/react/public/file.svg create mode 100644 integ-tests/react/public/globe.svg create mode 100644 integ-tests/react/public/next.svg create mode 100644 integ-tests/react/public/vercel.svg create mode 100644 integ-tests/react/public/window.svg create mode 100644 integ-tests/react/src/app/actions.ts create mode 100644 integ-tests/react/src/app/api/baml/[baml_function]/route.ts create mode 100644 integ-tests/react/src/app/favicon.ico create mode 100644 integ-tests/react/src/app/globals.css create mode 100644 integ-tests/react/src/app/layout.tsx create mode 100644 integ-tests/react/src/app/page.tsx create mode 100644 integ-tests/react/src/app/test-client.tsx create mode 100644 integ-tests/react/src/components/mode-toggle.tsx create mode 100644 integ-tests/react/src/components/theme-provider.tsx create mode 100644 integ-tests/react/src/components/ui/alert.tsx create mode 100644 integ-tests/react/src/components/ui/badge.tsx create mode 100644 integ-tests/react/src/components/ui/button.tsx create mode 100644 integ-tests/react/src/components/ui/card.tsx create mode 100644 integ-tests/react/src/components/ui/dropdown-menu.tsx create mode 100644 integ-tests/react/src/components/ui/input.tsx create mode 100644 integ-tests/react/src/components/ui/label.tsx create mode 100644 integ-tests/react/src/components/ui/progress.tsx create mode 100644 integ-tests/react/src/components/ui/skeleton.tsx create mode 100644 integ-tests/react/src/components/ui/sonner.tsx create mode 100644 integ-tests/react/src/components/ui/switch.tsx create mode 100644 integ-tests/react/src/components/ui/table.tsx create mode 100644 integ-tests/react/src/components/ui/tabs.tsx create mode 100644 integ-tests/react/src/components/ui/textarea.tsx create mode 100644 integ-tests/react/src/lib/utils.ts create mode 100644 integ-tests/react/tailwind.config.ts create mode 100644 integ-tests/react/test-report.html create mode 100644 integ-tests/react/tests/test-setup.ts create mode 100644 integ-tests/react/tsconfig.json create mode 100644 typescript/nextjs-plugin/README.md create mode 100644 typescript/nextjs-plugin/package.json create mode 100644 typescript/nextjs-plugin/pnpm-lock.yaml create mode 100644 typescript/nextjs-plugin/src/index.ts create mode 100644 typescript/nextjs-plugin/tsconfig.json diff --git a/engine/baml-lib/baml-types/src/generator.rs b/engine/baml-lib/baml-types/src/generator.rs index c6927c02d..cc869a79b 100644 --- a/engine/baml-lib/baml-types/src/generator.rs +++ b/engine/baml-lib/baml-types/src/generator.rs @@ -20,6 +20,9 @@ pub enum GeneratorOutputType { #[strum(serialize = "typescript")] Typescript, + #[strum(serialize = "typescript/react")] + TypescriptReact, + #[strum(serialize = "ruby/sorbet")] RubySorbet, } @@ -38,6 +41,7 @@ impl GeneratorOutputType { // DO NOT CHANGE THIS DEFAULT EVER OR YOU WILL BREAK EXISTING USERS Self::PythonPydantic => GeneratorDefaultClientMode::Async, Self::Typescript => GeneratorDefaultClientMode::Async, + Self::TypescriptReact => GeneratorDefaultClientMode::Async, Self::RubySorbet => GeneratorDefaultClientMode::Sync, } } @@ -48,6 +52,7 @@ impl GeneratorOutputType { Self::OpenApi => GeneratorDefaultClientMode::Sync, Self::PythonPydantic => GeneratorDefaultClientMode::Sync, Self::Typescript => GeneratorDefaultClientMode::Async, + Self::TypescriptReact => GeneratorDefaultClientMode::Async, Self::RubySorbet => GeneratorDefaultClientMode::Sync, } } @@ -56,7 +61,6 @@ impl GeneratorOutputType { impl clap::ValueEnum for GeneratorOutputType { fn value_variants<'a>() -> &'a [Self] { use strum::VariantArray; - Self::VARIANTS } diff --git a/engine/baml-runtime/src/cli/generate.rs b/engine/baml-runtime/src/cli/generate.rs index 4719a3422..b19e8ba7d 100644 --- a/engine/baml-runtime/src/cli/generate.rs +++ b/engine/baml-runtime/src/cli/generate.rs @@ -61,6 +61,9 @@ impl GenerateArgs { // this has no meaning GeneratorDefaultClientMode::Sync } + internal_baml_core::configuration::GeneratorOutputType::TypescriptReact => { + GeneratorDefaultClientMode::Async + } }; // Normally `baml_client` is added via the generator, but since we're not running the generator, we need to add it manually. let output_dir_relative_to_baml_src = PathBuf::from(".."); @@ -77,6 +80,7 @@ impl GenerateArgs { default_client_mode, // TODO: this should be set if user is asking for openapi vec![], + None, ) .context("Failed while resolving .baml paths in baml_src/")?, ) diff --git a/engine/baml-runtime/src/cli/init.rs b/engine/baml-runtime/src/cli/init.rs index aaad095da..e71769e99 100644 --- a/engine/baml-runtime/src/cli/init.rs +++ b/engine/baml-runtime/src/cli/init.rs @@ -91,6 +91,7 @@ impl InitArgs { Some(s) => format!("{} clients via OpenAPI", s), None => "REST clients".to_string(), }, + GeneratorOutputType::TypescriptReact => "TypeScript React clients".to_string(), } ); log::info!( @@ -100,6 +101,7 @@ impl InitArgs { GeneratorOutputType::Typescript => "typescript", GeneratorOutputType::RubySorbet => "ruby", GeneratorOutputType::OpenApi => "openapi", + GeneratorOutputType::TypescriptReact => "typescript-react", } ); @@ -114,7 +116,7 @@ fn generate_main_baml_content( ) -> String { let default_client_mode = match output_type { GeneratorOutputType::OpenApi | GeneratorOutputType::RubySorbet => "".to_string(), - GeneratorOutputType::PythonPydantic | GeneratorOutputType::Typescript => format!( + GeneratorOutputType::PythonPydantic | GeneratorOutputType::Typescript | GeneratorOutputType::TypescriptReact => format!( r#" // Valid values: "sync", "async" // This controls what `b.FunctionName()` will be (sync or async). diff --git a/engine/baml-runtime/src/cli/serve/mod.rs b/engine/baml-runtime/src/cli/serve/mod.rs index 7c4a6e0d0..1be8853ef 100644 --- a/engine/baml-runtime/src/cli/serve/mod.rs +++ b/engine/baml-runtime/src/cli/serve/mod.rs @@ -23,7 +23,7 @@ use axum_extra::{ headers::{self, authorization::Basic, Authorization, Header}, TypedHeader, }; -use baml_types::{BamlValue, GeneratorDefaultClientMode}; +use baml_types::{BamlValue, GeneratorDefaultClientMode, GeneratorOutputType}; use core::pin::Pin; use futures::Stream; use serde::{Deserialize, Serialize}; @@ -67,7 +67,7 @@ impl ServeArgs { if !self.preview { log::warn!( r#"BAML-over-HTTP API is a preview feature. - + Please run with --preview, like so: {} serve --preview @@ -623,6 +623,7 @@ Tip: test that the server is up using `curl http://localhost:{}/_debug/ping` true, GeneratorDefaultClientMode::Sync, Vec::new(), + None, ) .map_err(|_| BamlError::InternalError { message: "Failed to make placeholder generator".to_string(), diff --git a/engine/baml-runtime/src/lib.rs b/engine/baml-runtime/src/lib.rs index 5dc493846..49a98ef56 100644 --- a/engine/baml-runtime/src/lib.rs +++ b/engine/baml-runtime/src/lib.rs @@ -448,6 +448,7 @@ impl BamlRuntime { no_version_check, generator.default_client_mode(), generator.on_generate.clone(), + Some(generator.output_type), )?, )) }) diff --git a/engine/language_client_codegen/src/lib.rs b/engine/language_client_codegen/src/lib.rs index a67167550..871e060c7 100644 --- a/engine/language_client_codegen/src/lib.rs +++ b/engine/language_client_codegen/src/lib.rs @@ -33,6 +33,9 @@ pub struct GeneratorArgs { // Default call mode for functions default_client_mode: GeneratorDefaultClientMode, on_generate: Vec, + + // The type of client to generate + client_type: Option, } fn relative_path_to_baml_src(path: &Path, baml_src: &Path) -> Result { @@ -54,6 +57,7 @@ impl GeneratorArgs { no_version_check: bool, default_client_mode: GeneratorDefaultClientMode, on_generate: Vec, + client_type: Option, ) -> Result { let baml_src = baml_src_dir.into(); let input_file_map: BTreeMap = input_files @@ -70,6 +74,7 @@ impl GeneratorArgs { no_version_check, default_client_mode, on_generate, + client_type, }) } @@ -185,6 +190,7 @@ impl GenerateClient for GeneratorOutputType { GeneratorOutputType::PythonPydantic => python::generate(ir, gen), GeneratorOutputType::RubySorbet => ruby::generate(ir, gen), GeneratorOutputType::Typescript => typescript::generate(ir, gen), + GeneratorOutputType::TypescriptReact => typescript::generate(ir, gen), }?; #[cfg(not(target_arch = "wasm32"))] diff --git a/engine/language_client_codegen/src/typescript/mod.rs b/engine/language_client_codegen/src/typescript/mod.rs index 867d293c2..25703cb61 100644 --- a/engine/language_client_codegen/src/typescript/mod.rs +++ b/engine/language_client_codegen/src/typescript/mod.rs @@ -8,13 +8,55 @@ use baml_types::LiteralValue; use generate_types::{render_docstring, type_name_for_checks}; use indexmap::IndexMap; use internal_baml_core::{ - configuration::GeneratorDefaultClientMode, + configuration::{GeneratorDefaultClientMode, GeneratorOutputType}, ir::{repr::IntermediateRepr, FieldType, IRHelper}, }; use self::typescript_language_features::{ToTypescript, TypescriptLanguageFeatures}; use crate::{dir_writer::FileCollector, field_type_attributes}; +mod framework { + use internal_baml_core::configuration::GeneratorOutputType; + + #[derive(Debug, Clone, Copy)] + pub enum TypescriptFramework { + None, + React + } + + impl TypescriptFramework { + pub fn from_generator_type(output_type: Option) -> Self { + match output_type { + Some(GeneratorOutputType::TypescriptReact) => Self::React, + Some(GeneratorOutputType::Typescript) | None => Self::None, + Some(_) => panic!("Invalid generator type for TypeScript framework"), + } + } + } +} + +use framework::TypescriptFramework; + +mod filters { + pub fn length(v: &Vec) -> Result { + Ok(v.len()) + } +} + +#[derive(askama::Template)] +#[template(path = "react/server.ts.j2", escape = "none")] +struct ReactServerActions { + funcs: Vec, + types: Vec, +} + +#[derive(askama::Template)] +#[template(path = "react/client.tsx.j2", escape = "none")] +struct ReactClientHooks { + funcs: Vec, + types: Vec, +} + #[derive(askama::Template)] #[template(path = "async_client.ts.j2", escape = "none")] struct AsyncTypescriptClient { @@ -52,6 +94,24 @@ impl From for SyncTypescriptClient { } } +impl From for ReactServerActions { + fn from(value: TypescriptClient) -> Self { + Self { + funcs: value.funcs, + types: value.types, + } + } +} + +impl From for ReactClientHooks { + fn from(value: TypescriptClient) -> Self { + Self { + funcs: value.funcs, + types: value.types, + } + } +} + #[derive(Debug)] struct TypescriptFunction { name: String, @@ -82,11 +142,18 @@ struct InlinedBaml { #[template(path = "tracing.ts.j2", escape = "none")] struct TypescriptTracing {} +#[derive(askama::Template)] +#[template(path = "react/types.ts.j2", escape = "none")] +struct ReactTypes {} + pub(crate) fn generate( ir: &IntermediateRepr, generator: &crate::GeneratorArgs, ) -> Result> { + let framework = TypescriptFramework::from_generator_type(generator.client_type); let mut collector = FileCollector::::new(); + + // Add base TypeScript files collector.add_template::("types.ts", (ir, generator))?; collector.add_template::( "partial_types.ts", @@ -100,6 +167,16 @@ pub(crate) fn generate( collector.add_template::("index.ts", (ir, generator))?; collector.add_template::("inlinedbaml.ts", (ir, generator))?; + // Add framework-specific files + match framework { + TypescriptFramework::React => { + collector.add_template::("react/types.ts", (ir, generator))?; + collector.add_template::("react/server.ts", (ir, generator))?; + collector.add_template::("react/client.tsx", (ir, generator))?; + } + TypescriptFramework::None => {} + } + collector.commit(&generator.output_dir()) } @@ -206,6 +283,32 @@ impl TryFrom<(&'_ IntermediateRepr, &'_ crate::GeneratorArgs)> for TypescriptIni } } +impl TryFrom<(&'_ IntermediateRepr, &'_ crate::GeneratorArgs)> for ReactServerActions { + type Error = anyhow::Error; + + fn try_from(params: (&'_ IntermediateRepr, &'_ crate::GeneratorArgs)) -> Result { + let typscript_client = TypescriptClient::try_from(params)?; + Ok(typscript_client.into()) + } +} + +impl TryFrom<(&'_ IntermediateRepr, &'_ crate::GeneratorArgs)> for ReactClientHooks { + type Error = anyhow::Error; + + fn try_from(params: (&'_ IntermediateRepr, &'_ crate::GeneratorArgs)) -> Result { + let typscript_client = TypescriptClient::try_from(params)?; + Ok(typscript_client.into()) + } +} + +impl TryFrom<(&'_ IntermediateRepr, &'_ crate::GeneratorArgs)> for ReactTypes { + type Error = anyhow::Error; + + fn try_from(_: (&IntermediateRepr, &crate::GeneratorArgs)) -> Result { + Ok(ReactTypes {}) + } +} + trait ToTypeReferenceInClientDefinition { fn to_type_ref(&self, ir: &IntermediateRepr, use_module_prefix: bool) -> String; /// The string representation of a field type, and whether the field is optional. diff --git a/engine/language_client_codegen/src/typescript/templates/async_client.ts.j2 b/engine/language_client_codegen/src/typescript/templates/async_client.ts.j2 index a8d19eb4f..a222f01df 100644 --- a/engine/language_client_codegen/src/typescript/templates/async_client.ts.j2 +++ b/engine/language_client_codegen/src/typescript/templates/async_client.ts.j2 @@ -7,6 +7,15 @@ import { import TypeBuilder from "./type_builder" import { DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX, DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_RUNTIME } from "./globals" +/** + * @deprecated Use RecursivePartialNull from 'baml_client/types' instead. + */ +export type RecursivePartialNull = T extends object + ? { + [P in keyof T]?: RecursivePartialNull; + } + : T | null; + export class BamlAsyncClient { private runtime: BamlRuntime private ctx_manager: BamlCtxManager diff --git a/engine/language_client_codegen/src/typescript/templates/react/client.tsx.j2 b/engine/language_client_codegen/src/typescript/templates/react/client.tsx.j2 new file mode 100644 index 000000000..fe284f94c --- /dev/null +++ b/engine/language_client_codegen/src/typescript/templates/react/client.tsx.j2 @@ -0,0 +1,512 @@ +'use client' + +import { useCallback, useMemo, useReducer, useTransition } from 'react'; +import type { + PartialResponse, + FinalResponse, + StreamingProps, + NonStreamingProps, + StreamingHookResult, + NonStreamingHookResult, + HookProps, + HookResult +} from './types'; +import type { RecursivePartialNull, Check, Checked } from '../types'; +import type { Image, Audio } from "@boundaryml/baml" +import { BamlValidationError, BamlClientFinishReasonError } from "@boundaryml/baml/errors" +import * as ServerActions from './server'; + +import type { + {%- for t in types %}{{ t }}{% if !loop.last %}, {% endif %}{% endfor -%} +} from "../types" + +/** + * Type guard to check if props are for streaming mode + */ +function isStreamingProps( + props: HookProps +): props is StreamingProps { + return props.stream === true; +} + +interface HookState { + isSuccess: boolean; + error: Error | BamlValidationError | BamlClientFinishReasonError | null; + data: TFinal | null; + partialData: TPartial | null; +} + +type HookStateAction = + | { type: 'START_REQUEST' } + | { type: 'SET_ERROR'; payload: Error | BamlValidationError | BamlClientFinishReasonError } + | { type: 'SET_PARTIAL'; payload: TPartial } + | { type: 'SET_FINAL'; payload: TFinal } + | { type: 'RESET' }; + +function hookReducer( + state: HookState, + action: HookStateAction +): HookState { + switch (action.type) { + case 'START_REQUEST': + return { + ...state, + isSuccess: false, + error: null, + data: null, + partialData: null, + }; + case 'SET_ERROR': + return { + ...state, + isSuccess: false, + error: action.payload, + data: null, + partialData: null, + }; + case 'SET_PARTIAL': + return { + ...state, + partialData: action.payload, + }; + case 'SET_FINAL': + return { + ...state, + isSuccess: true, + data: action.payload, + partialData: null, + }; + case 'RESET': + return { + isSuccess: false, + error: null, + data: null, + partialData: null, + }; + default: + return state; + } +} + +/** + * Base hook for making BAML function calls with support for both streaming and non-streaming modes. + * Provides a unified interface for handling loading states, errors, and data updates. + * + * This hook can be used directly with any BAML server action, or through the specialized hooks + * generated for each BAML function. + * + * Features: + * 1. Streaming Support + * - Real-time partial updates via `partialData` + * - Progress indicators and incremental UI updates + * - Automatic stream cleanup and error handling + * + * 2. State Management + * - Loading state via `isPending` + * - Success/error states + * - Final result in `data` + * - Partial results in `partialData` (streaming mode) + * + * 3. Error Handling + * - Type-safe error handling with three possible error types: + * 1. BamlValidationError: Thrown when BAML fails to parse LLM output + * - Access error.prompt for the original prompt + * - Access error.raw_output for the LLM's raw response + * - Access error.message for parsing error details + * 2. BamlClientFinishReasonError: Thrown when LLM terminates with disallowed finish reason + * - Access error.prompt for the original prompt + * - Access error.raw_output for the LLM's raw response + * - Access error.message for error details + * - Access error.finish_reason for the specific termination reason + * 3. Error: Standard JavaScript errors for other cases + * - Example error handling: + * ```typescript + * try { + * await mutate(params); + * } catch (e) { + * if (e instanceof BamlValidationError) { + * console.error('Failed to parse LLM output:', e.raw_output); + * console.error('Original prompt:', e.prompt); + * } else if (e instanceof BamlClientFinishReasonError) { + * console.error('LLM terminated early:', e.finish_reason); + * console.error('Partial output:', e.raw_output); + * } else { + * console.error('Other error:', e); + * } + * } + * ``` + * - Network error detection + * - Stream interruption handling + * + * 4. Type Safety + * - Full TypeScript support + * - Inferred types from server actions + * - Proper typing for streaming/non-streaming modes + * + * @template Action The type of the server action + * @param serverAction The server action function to execute + * @param props Configuration props for the hook + * @returns An object containing the current state and controls + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useBamlAction(myServerAction); + * + * // 2. Streaming with Progress + * const { + * data, // Final result (Action's return type | null) + * partialData, // Latest partial update (RecursivePartialNull | null) + * isPending, // Whether a request is in progress + * isSuccess, // Whether the last request succeeded + * isError, // Whether the last request failed + * error, // Error object if failed + * status, // 'idle' | 'pending' | 'success' | 'error' + * mutate // Function to trigger the action + * } = useBamlAction(myServerAction, { + * stream: true, + * + * // Called on each partial update + * onPartial: (partial) => { + * console.log('Partial update:', partial); + * }, + * + * // Called when streaming completes successfully + * onFinal: (final) => { + * console.log('Final result:', final); + * }, + * + * // Called on any error + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making Requests + * const handleClick = async () => { + * try { + * const result = await mutate({ + * // your action's parameters + * param1: 'value1', + * param2: 'value2' + * }); + * + * if (result) { + * // Handle success + * } + * } catch (e) { + * // Handle errors + * } + * }; + * + * // 4. Using with React Effects + * useEffect(() => { + * if (data) { + * // Handle final data + * } + * }, [data]); + * + * useEffect(() => { + * if (partialData) { + * // Handle streaming updates + * } + * }, [partialData]); + * + * // 5. Error Handling + * useEffect(() => { + * if (error) { + * console.error('Request failed:', error); + * } + * }, [error]); + * + * // 6. Conditional Rendering + * if (isPending) return ; + * if (error) return ; + * if (data) return ; + * + * // 7. Streaming Progress + * return ( + *
+ * {isPending && } + * {partialData && } + * {data && } + * + * + *
+ * ); + * ``` + */ +export function useBamlAction( + action: Action, + props: StreamingProps +): StreamingHookResult; + +export function useBamlAction( + action: Action, + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useBamlAction( + serverAction: Action, + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + const { onFinal, onError, onPartial } = props; + const isStreaming = isStreamingProps(props); + const [isPending, startTransition] = useTransition(); + + const [state, dispatch] = useReducer(hookReducer>>, Awaited>>, { + isSuccess: false, + error: null, + data: null, + partialData: null, + }); + + const mutate = useCallback( + async (...input: Parameters) => { + dispatch({ type: 'START_REQUEST' }); + + try { + let response: Awaited>; + await startTransition(async () => { + response = await serverAction(...input); + + if (isStreaming && response instanceof ReadableStream) { + const reader = response.getReader(); + const decoder = new TextDecoder(); + + try { + while (true) { + const { value, done } = await reader.read(); + + if (done) break; + + if (value) { + const chunk = decoder.decode(value, { stream: true }).trim(); + try { + const parsed: BamlStreamResponse>> = JSON.parse(chunk); + + if (parsed.error) { + // Create appropriate error type + let error: Error | BamlValidationError | BamlClientFinishReasonError; + if (parsed.error.type === "BamlValidationError") { + error = new BamlValidationError( + parsed.error.prompt, + parsed.error.raw_output, + parsed.error.message + ); + } else if (parsed.error.type === "BamlClientFinishReasonError") { + error = new BamlClientFinishReasonError( + parsed.error.prompt, + parsed.error.raw_output, + parsed.error.message + ); + } else { + error = new Error(parsed.error.message); + } + throw error; + } + + if (parsed.partial !== undefined) { + dispatch({ type: 'SET_PARTIAL', payload: parsed.partial }); + onPartial?.(parsed.partial); + } + + if (parsed.final !== undefined) { + dispatch({ type: 'SET_FINAL', payload: parsed.final }); + onFinal?.(parsed.final); + return parsed.final; + } + } catch (err) { + dispatch({ type: "SET_ERROR", payload: err }); + onError?.(err); + break; + } + } + } + } finally { + reader.releaseLock(); + } + return response; + } + + // Non-streaming case + dispatch({ type: 'SET_FINAL', payload: response }); + onFinal?.(response); + }); + return response; + } catch (error_) { + dispatch({ type: 'SET_ERROR', payload: error_ }); + onError?.(error_); + throw error_; + } + }, + [serverAction, isStreaming, onPartial, onFinal, onError], + ); + + const status = useMemo<"idle" | "pending" | "success" | "error">(() => { + if (isPending) return "pending"; + if (state.error) return "error"; + if (state.isSuccess) return "success"; + return "idle"; + }, [isPending, state.error, state.isSuccess]); + + const result = { + data: state.data, + error: state.error, + isError: state.error !== null, + isSuccess: state.isSuccess, + isPending, + mutate, + status, + }; + + return { + ...result, + partialData: isStreaming ? state.partialData : undefined, + }; +} + +{%- for func in funcs %} +/** + * A specialized hook for the {{ func.name }} BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * {%- for (name, optional, type) in func.args %} + * - {{ name }}{% if optional %} (optional){% endif %}: {{ type }} + * {%- endfor %} + * + * Return Type: + * - Non-streaming: {{ func.return_type }} + * - Streaming Partial: RecursivePartialNull<{{ func.return_type }}> + * - Streaming Final: {{ func.return_type }} + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = use{{ func.name }}(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to {{ func.return_type }} + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: {{ func.return_type }} | null + * partialData, // Type: RecursivePartialNull<{{ func.return_type }}> | null + * isPending, + * error, + * mutate + * } = use{{ func.name }}({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: +{%- for (name, optional, type) in func.args %} + * {{ name }}: someValue as {{ type }}, // Replace someValue with your data +{%- endfor %} + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ +{%- for (name, optional, type) in func.args %} + * {{ name }}: firstValue as {{ type }}, +{%- endfor %} + * }), + * mutate({ +{%- for (name, optional, type) in func.args %} + * {{ name }}: secondValue as {{ type }}, +{%- endfor %} + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function use{{ func.name }}( + props: StreamingProps +): StreamingHookResult; + +export function use{{ func.name }}( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function use{{ func.name }}( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.{{ func.name }}StreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.{{ func.name }}Action, + props + ); +} +{% endfor -%} diff --git a/engine/language_client_codegen/src/typescript/templates/react/server.ts.j2 b/engine/language_client_codegen/src/typescript/templates/react/server.ts.j2 new file mode 100644 index 000000000..ccddf923a --- /dev/null +++ b/engine/language_client_codegen/src/typescript/templates/react/server.ts.j2 @@ -0,0 +1,48 @@ +'use server' + +import { b } from '../index'; +import type { Check, Checked } from "../types" +import type { ServerAction } from "./types" +import type { Image, Audio } from "@boundaryml/baml" +import type { + {%- for t in types %}{{ t }}{% if !loop.last %}, {% endif %}{% endfor -%} +} from "../types" + +{%- for func in funcs %} +/** + * Server action for the {{ func.name }} BAML function. + * + * Input Types: + * {%- for (name, optional, type) in func.args %} + * - {{ name }}{% if optional %} (optional){% endif %}: {{ type }} + * {%- endfor %} + * + * Return Type: + * - Non-streaming: {{ func.return_type }} + * - Streaming: ReadableStream + */ +export const {{ func.name }}Action = async ( + {%- for (name, optional, type) in func.args %} + {{ name }}{% if optional %}?{% endif %}: {{ type }}, + {%- endfor %} +): Promise<{{ func.return_type }}> => { + return b.{{ func.name }}( + {%- for (name, _, _) in func.args %} + {{ name }}, + {%- endfor %} + ); +}; + +export const {{ func.name }}StreamingAction = async ( + {%- for (name, optional, type) in func.args %} + {{ name }}{% if optional %}?{% endif %}: {{ type }}, + {%- endfor %} +): Promise> => { + const stream = b.stream.{{ func.name }}( + {%- for (name, _, _) in func.args %} + {{ name }}, + {%- endfor %} + ); + return stream.toStreamable(); +}; +{% endfor -%} diff --git a/engine/language_client_codegen/src/typescript/templates/react/types.ts.j2 b/engine/language_client_codegen/src/typescript/templates/react/types.ts.j2 new file mode 100644 index 000000000..cb69c387c --- /dev/null +++ b/engine/language_client_codegen/src/typescript/templates/react/types.ts.j2 @@ -0,0 +1,155 @@ +import type { BamlStream } from '@boundaryml/baml'; +import type { RecursivePartialNull } from '../types'; +import type { BamlValidationError, BamlClientFinishReasonError } from '@boundaryml/baml/errors'; +/** + * Type for representing a partial response with type safety + * @template Output The type of the partial response data + */ +export type PartialResponse = { + partial?: RecursivePartialNull | null + final?: never +} + +/** + * Type for representing a final response with type safety + * @template Output The type of the final response data + */ +export type FinalResponse = { + partial?: never + final: Output +} + +export type ServerAction = (...args: Input extends any[] ? Input : [Input]) => Promise | Output>; + + +/** + * Props for streaming mode, which provides incremental updates. + * Use this when you want to show partial results as they become available. + * + * @template Action The server action type + */ +export type StreamingProps = { + stream: true + onPartial?: (response?: RecursivePartialNull>>) => void + onFinal?: (response?: Awaited>) => void + /** Called if the operation fails */ + onError?: (error: Error | BamlValidationError | BamlClientFinishReasonError) => void +} + +/** + * Props for non-streaming mode. + * @template Action The server action type + */ +export type NonStreamingProps = { + stream?: false + onPartial?: never + onFinal?: (response?: Awaited>) => void + /** Called if the operation fails */ + onError?: (error: Error | BamlValidationError | BamlClientFinishReasonError) => void +} + +/** + * Union type of all possible props for a BAML hook. + * @template Action The server action type + */ +export type HookProps = StreamingProps | NonStreamingProps + +/** + * Base return type for all BAML hooks + */ +export type BaseHookResult = { + /** + * The complete, final result of the operation. + * Only available after successful completion (when isSuccess is true). + * Null during loading or if an error occurred. + */ + data?: Awaited>; + /** + * Error details if the operation failed. + * Check this when isError is true to handle the failure. + */ + error: Error | BamlValidationError | BamlClientFinishReasonError | null; + /** + * True if the operation failed. + * Use this to conditionally render error states or retry options. + */ + isError: boolean; + /** + * True while the operation is in progress. + * Use this to show loading states, spinners, or disable controls. + */ + isPending: boolean; + /** + * True if the operation completed successfully. + * Check this before accessing the final data. + */ + isSuccess: boolean; + /** + * The current phase of the operation: + * - idle: Initial state, ready to start + * - loading: Operation in progress + * - success: Completed successfully + * - error: Failed with an error + */ + status: "idle" | "pending" | "success" | "error"; +} + +/** + * Return type for streaming mode BAML hooks + */ +export type StreamingHookResult = BaseHookResult & { + /** + * The most recent partial result from the stream. + * Updates continuously while streaming, showing interim progress. + * Use this to implement real-time UI updates, typing effects, + * or progress indicators. + */ + partialData?: RecursivePartialNull>>; + + /** + * Call this function to start the operation. + * Returns a promise that resolves with the final result or null if it failed. + */ + mutate: (...input: Parameters) => Promise>; +}; + +/** + * Return type for non-streaming mode BAML hooks + */ +export type NonStreamingHookResult = BaseHookResult & { + /** Not available in non-streaming mode */ + partialData?: never; + /** + * Call this function to start the operation. + * Returns a promise that resolves with the final result or null if it failed. + */ + mutate: (...input: Parameters) => Promise>>; +}; + +/** + * Conditional return type for BAML hooks based on the provided props + */ +export type HookResult< + Action extends ServerAction = ServerAction, + Props extends HookProps = HookProps +> = Props extends { stream: true } + ? StreamingHookResult + : NonStreamingHookResult; + +/** + * Helper type to extract the non-null partial data type from a BAML hook result. + * This is useful when you want to work with the type of the partial streaming data + * without dealing with undefined or null values. + * + * @template T The server action type that defines the input/output types + */ +export type HookResultPartialData = NonNullable['partialData']>; + +/** + * Helper type to extract the non-null final data type from a BAML hook result. + * This is useful when you want to work with the type of the final response data + * without dealing with undefined or null values. + * + * @template T The server action type that defines the input/output types + */ +export type HookResultData = NonNullable['data']>; \ No newline at end of file diff --git a/engine/language_client_codegen/src/typescript/templates/sync_client.ts.j2 b/engine/language_client_codegen/src/typescript/templates/sync_client.ts.j2 index 170a411ca..75ebf47ec 100644 --- a/engine/language_client_codegen/src/typescript/templates/sync_client.ts.j2 +++ b/engine/language_client_codegen/src/typescript/templates/sync_client.ts.j2 @@ -1,11 +1,20 @@ import { BamlRuntime, FunctionResult, BamlCtxManager, BamlSyncStream, Image, ClientRegistry, createBamlValidationError, BamlValidationError } from "@boundaryml/baml" -import { Checked, Check } from "./types" +import { Checked, Check, RecursivePartialNull } from "./types" import { - {%- for t in types %}{{ t }}{% if !loop.last %}, {% endif %}{% endfor -%} + {%- for t in types %}{{ t }}{% if !loop.last %}, {% endif %}{% endfor -%} } from "./types" import TypeBuilder from "./type_builder" import { DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX, DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_RUNTIME } from "./globals" +/** + * @deprecated Use RecursivePartialNull from 'baml_client/types' instead. + */ +export type RecursivePartialNull = T extends object + ? { + [P in keyof T]?: RecursivePartialNull; + } + : T | null; + export class BamlSyncClient { private runtime: BamlRuntime private ctx_manager: BamlCtxManager @@ -19,7 +28,7 @@ export class BamlSyncClient { */ get stream() { throw new Error("stream is not available in BamlSyncClient. Use `import { b } from 'baml_client/async_client") - } + } {% for fn in funcs %} {{ fn.name }}( diff --git a/engine/language_client_codegen/src/typescript/templates/type_builder.ts.j2 b/engine/language_client_codegen/src/typescript/templates/type_builder.ts.j2 index c41456628..d559c2607 100644 --- a/engine/language_client_codegen/src/typescript/templates/type_builder.ts.j2 +++ b/engine/language_client_codegen/src/typescript/templates/type_builder.ts.j2 @@ -1,5 +1,6 @@ -import { FieldType } from '@boundaryml/baml/native' -import { TypeBuilder as _TypeBuilder, EnumBuilder, ClassBuilder } from '@boundaryml/baml/type_builder' +import type { FieldType } from '@boundaryml/baml/native' +import { TypeBuilder as _TypeBuilder } from '@boundaryml/baml/type_builder' +import type { EnumBuilder, ClassBuilder } from '@boundaryml/baml/type_builder' export default class TypeBuilder { private tb: _TypeBuilder; @@ -36,7 +37,7 @@ export default class TypeBuilder { __tb() { return this.tb._tb(); } - + string(): FieldType { return this.tb.string() } diff --git a/engine/language_client_codegen/src/typescript/templates/types.ts.j2 b/engine/language_client_codegen/src/typescript/templates/types.ts.j2 index 308967604..edbfa1a49 100644 --- a/engine/language_client_codegen/src/typescript/templates/types.ts.j2 +++ b/engine/language_client_codegen/src/typescript/templates/types.ts.j2 @@ -1,5 +1,11 @@ import { Image } from "@boundaryml/baml" +export type RecursivePartialNull = T extends object + ? { + [P in keyof T]?: RecursivePartialNull; + } + : T | null; + export interface Checked { value: T, checks: Record, diff --git a/engine/language_client_codegen/src/version_check.rs b/engine/language_client_codegen/src/version_check.rs index 7d4c9b38d..758f76c8b 100644 --- a/engine/language_client_codegen/src/version_check.rs +++ b/engine/language_client_codegen/src/version_check.rs @@ -109,6 +109,9 @@ pub fn check_version( GeneratorOutputType::Typescript => { format!("npm install --save-dev @boundaryml/baml@{}", gen_version) } + GeneratorOutputType::TypescriptReact => { + format!("npm install --save-dev @boundaryml/baml@{}", gen_version) + } GeneratorOutputType::RubySorbet => format!("gem install baml -v {}", gen_version), }; ( diff --git a/engine/language_client_typescript/.gitignore b/engine/language_client_typescript/.gitignore index 94da22175..18b335bf7 100644 --- a/engine/language_client_typescript/.gitignore +++ b/engine/language_client_typescript/.gitignore @@ -1,2 +1,4 @@ # autogenerated by NAPI npm +artifacts +dist diff --git a/engine/language_client_typescript/async_context_vars.d.ts b/engine/language_client_typescript/artifacts/async_context_vars.d.ts similarity index 100% rename from engine/language_client_typescript/async_context_vars.d.ts rename to engine/language_client_typescript/artifacts/async_context_vars.d.ts diff --git a/engine/language_client_typescript/artifacts/async_context_vars.d.ts.map b/engine/language_client_typescript/artifacts/async_context_vars.d.ts.map new file mode 100644 index 000000000..80a0c06c8 --- /dev/null +++ b/engine/language_client_typescript/artifacts/async_context_vars.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"async_context_vars.d.ts","sourceRoot":"","sources":["../typescript_src/async_context_vars.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAGrF,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAa;IACvB,OAAO,CAAC,GAAG,CAA0C;gBAEzC,EAAE,EAAE,WAAW;IAS3B,WAAW,IAAI,OAAO;IAYtB,KAAK,IAAI,IAAI;IAKb,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAK9C,YAAY,IAAI,qBAAqB;IASrC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,qBAAqB,EAAE,QAAQ,CAAC;IAKtF,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,GAAG,IAAI;IAa7C,KAAK,IAAI,IAAI;IAIb,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI;IAYvE,WAAW,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC;IAuB3F,YAAY,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC;CAuBtG"} \ No newline at end of file diff --git a/engine/language_client_typescript/async_context_vars.js b/engine/language_client_typescript/artifacts/async_context_vars.js similarity index 100% rename from engine/language_client_typescript/async_context_vars.js rename to engine/language_client_typescript/artifacts/async_context_vars.js diff --git a/engine/language_client_typescript/index.d.ts b/engine/language_client_typescript/artifacts/errors.d.ts similarity index 67% rename from engine/language_client_typescript/index.d.ts rename to engine/language_client_typescript/artifacts/errors.d.ts index 96f7782aa..17d6bf497 100644 --- a/engine/language_client_typescript/index.d.ts +++ b/engine/language_client_typescript/artifacts/errors.d.ts @@ -1,6 +1,3 @@ -export { BamlRuntime, FunctionResult, FunctionResultStream, BamlImage as Image, ClientBuilder, BamlAudio as Audio, invoke_runtime_cli, ClientRegistry, BamlLogEvent, } from "./native"; -export { BamlStream } from "./stream"; -export { BamlCtxManager } from "./async_context_vars"; export declare class BamlClientFinishReasonError extends Error { prompt: string; raw_output: string; @@ -16,4 +13,4 @@ export declare class BamlValidationError extends Error { static from(error: Error): BamlValidationError | undefined; } export declare function createBamlValidationError(error: Error): BamlValidationError | BamlClientFinishReasonError | Error; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file +//# sourceMappingURL=errors.d.ts.map \ No newline at end of file diff --git a/engine/language_client_typescript/artifacts/errors.d.ts.map b/engine/language_client_typescript/artifacts/errors.d.ts.map new file mode 100644 index 000000000..48102e1d2 --- /dev/null +++ b/engine/language_client_typescript/artifacts/errors.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../typescript_src/errors.ts"],"names":[],"mappings":"AACA,qBAAa,2BAA4B,SAAQ,KAAK;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;gBAEP,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAS/D,MAAM,IAAI,MAAM;IAahB,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,2BAA2B,GAAG,SAAS;CAoBnE;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;gBAEP,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAS/D,MAAM,IAAI,MAAM;IAahB,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,mBAAmB,GAAG,SAAS;CAiB3D;AAGD,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,KAAK,GACX,mBAAmB,GAAG,2BAA2B,GAAG,KAAK,CAa3D"} \ No newline at end of file diff --git a/engine/language_client_typescript/index.js b/engine/language_client_typescript/artifacts/errors.js similarity index 62% rename from engine/language_client_typescript/index.js rename to engine/language_client_typescript/artifacts/errors.js index cdef3fe1b..187833c5e 100644 --- a/engine/language_client_typescript/index.js +++ b/engine/language_client_typescript/artifacts/errors.js @@ -1,20 +1,7 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.createBamlValidationError = exports.BamlValidationError = exports.BamlClientFinishReasonError = exports.BamlCtxManager = exports.BamlStream = exports.BamlLogEvent = exports.ClientRegistry = exports.invoke_runtime_cli = exports.Audio = exports.ClientBuilder = exports.Image = exports.FunctionResultStream = exports.FunctionResult = exports.BamlRuntime = void 0; -var native_1 = require("./native"); -Object.defineProperty(exports, "BamlRuntime", { enumerable: true, get: function () { return native_1.BamlRuntime; } }); -Object.defineProperty(exports, "FunctionResult", { enumerable: true, get: function () { return native_1.FunctionResult; } }); -Object.defineProperty(exports, "FunctionResultStream", { enumerable: true, get: function () { return native_1.FunctionResultStream; } }); -Object.defineProperty(exports, "Image", { enumerable: true, get: function () { return native_1.BamlImage; } }); -Object.defineProperty(exports, "ClientBuilder", { enumerable: true, get: function () { return native_1.ClientBuilder; } }); -Object.defineProperty(exports, "Audio", { enumerable: true, get: function () { return native_1.BamlAudio; } }); -Object.defineProperty(exports, "invoke_runtime_cli", { enumerable: true, get: function () { return native_1.invoke_runtime_cli; } }); -Object.defineProperty(exports, "ClientRegistry", { enumerable: true, get: function () { return native_1.ClientRegistry; } }); -Object.defineProperty(exports, "BamlLogEvent", { enumerable: true, get: function () { return native_1.BamlLogEvent; } }); -var stream_1 = require("./stream"); -Object.defineProperty(exports, "BamlStream", { enumerable: true, get: function () { return stream_1.BamlStream; } }); -var async_context_vars_1 = require("./async_context_vars"); -Object.defineProperty(exports, "BamlCtxManager", { enumerable: true, get: function () { return async_context_vars_1.BamlCtxManager; } }); +exports.BamlValidationError = exports.BamlClientFinishReasonError = void 0; +exports.createBamlValidationError = createBamlValidationError; class BamlClientFinishReasonError extends Error { prompt; raw_output; @@ -100,5 +87,3 @@ function createBamlValidationError(error) { // otherwise return the original error return error; } -exports.createBamlValidationError = createBamlValidationError; -// No need for a separate throwBamlValidationError function in TypeScript diff --git a/engine/language_client_typescript/artifacts/index.d.ts b/engine/language_client_typescript/artifacts/index.d.ts new file mode 100644 index 000000000..7cb6b7e0d --- /dev/null +++ b/engine/language_client_typescript/artifacts/index.d.ts @@ -0,0 +1,5 @@ +export { BamlRuntime, FunctionResult, FunctionResultStream, BamlImage as Image, ClientBuilder, BamlAudio as Audio, invoke_runtime_cli, ClientRegistry, BamlLogEvent, } from "./native"; +export { BamlStream } from "./stream"; +export { BamlCtxManager } from "./async_context_vars"; +export * from "./errors"; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/engine/language_client_typescript/artifacts/index.d.ts.map b/engine/language_client_typescript/artifacts/index.d.ts.map new file mode 100644 index 000000000..127851105 --- /dev/null +++ b/engine/language_client_typescript/artifacts/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../typescript_src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,cAAc,EACd,oBAAoB,EACpB,SAAS,IAAI,KAAK,EAClB,aAAa,EACb,SAAS,IAAI,KAAK,EAClB,kBAAkB,EAClB,cAAc,EACd,YAAY,GACb,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,cAAc,UAAU,CAAC"} \ No newline at end of file diff --git a/engine/language_client_typescript/artifacts/index.js b/engine/language_client_typescript/artifacts/index.js new file mode 100644 index 000000000..e6225253b --- /dev/null +++ b/engine/language_client_typescript/artifacts/index.js @@ -0,0 +1,33 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BamlCtxManager = exports.BamlStream = exports.BamlLogEvent = exports.ClientRegistry = exports.invoke_runtime_cli = exports.Audio = exports.ClientBuilder = exports.Image = exports.FunctionResultStream = exports.FunctionResult = exports.BamlRuntime = void 0; +var native_1 = require("./native"); +Object.defineProperty(exports, "BamlRuntime", { enumerable: true, get: function () { return native_1.BamlRuntime; } }); +Object.defineProperty(exports, "FunctionResult", { enumerable: true, get: function () { return native_1.FunctionResult; } }); +Object.defineProperty(exports, "FunctionResultStream", { enumerable: true, get: function () { return native_1.FunctionResultStream; } }); +Object.defineProperty(exports, "Image", { enumerable: true, get: function () { return native_1.BamlImage; } }); +Object.defineProperty(exports, "ClientBuilder", { enumerable: true, get: function () { return native_1.ClientBuilder; } }); +Object.defineProperty(exports, "Audio", { enumerable: true, get: function () { return native_1.BamlAudio; } }); +Object.defineProperty(exports, "invoke_runtime_cli", { enumerable: true, get: function () { return native_1.invoke_runtime_cli; } }); +Object.defineProperty(exports, "ClientRegistry", { enumerable: true, get: function () { return native_1.ClientRegistry; } }); +Object.defineProperty(exports, "BamlLogEvent", { enumerable: true, get: function () { return native_1.BamlLogEvent; } }); +var stream_1 = require("./stream"); +Object.defineProperty(exports, "BamlStream", { enumerable: true, get: function () { return stream_1.BamlStream; } }); +var async_context_vars_1 = require("./async_context_vars"); +Object.defineProperty(exports, "BamlCtxManager", { enumerable: true, get: function () { return async_context_vars_1.BamlCtxManager; } }); +__exportStar(require("./errors"), exports); +// No need for a separate throwBamlValidationError function in TypeScript diff --git a/engine/language_client_typescript/artifacts/native.d.ts b/engine/language_client_typescript/artifacts/native.d.ts new file mode 100644 index 000000000..19dd51610 --- /dev/null +++ b/engine/language_client_typescript/artifacts/native.d.ts @@ -0,0 +1,133 @@ +/* auto-generated by NAPI-RS */ +/* eslint-disable */ +export declare class BamlAudio { + static fromUrl(url: string): BamlAudio + static fromBase64(mediaType: string, base64: string): BamlAudio + isUrl(): boolean + asUrl(): string + asBase64(): [string, string] + toJSON(): any +} + +export declare class BamlImage { + static fromUrl(url: string): BamlImage + static fromBase64(mediaType: string, base64: string): BamlImage + isUrl(): boolean + asUrl(): string + asBase64(): [string, string] + toJSON(): any +} + +export declare class BamlRuntime { + static fromDirectory(directory: string, envVars: Record): BamlRuntime + static fromFiles(rootPath: string, files: Record, envVars: Record): BamlRuntime + reset(rootPath: string, files: Record, envVars: Record): void + createContextManager(): RuntimeContextManager + callFunction(functionName: string, args: { [string]: any }, ctx: RuntimeContextManager, tb?: TypeBuilder | undefined | null, cb?: ClientRegistry | undefined | null): Promise + callFunctionSync(functionName: string, args: { [string]: any }, ctx: RuntimeContextManager, tb?: TypeBuilder | undefined | null, cb?: ClientRegistry | undefined | null): FunctionResult + streamFunction(functionName: string, args: { [string]: any }, cb: ((err: any, param: FunctionResult) => void) | undefined, ctx: RuntimeContextManager, tb?: TypeBuilder | undefined | null, clientRegistry?: ClientRegistry | undefined | null): FunctionResultStream + streamFunctionSync(functionName: string, args: { [string]: any }, cb: ((err: any, param: FunctionResult) => void) | undefined, ctx: RuntimeContextManager, tb?: TypeBuilder | undefined | null, clientRegistry?: ClientRegistry | undefined | null): FunctionResultStream + setLogEventCallback(func?: undefined | ((err: any, param: BamlLogEvent) => void)): void + flush(): void + drainStats(): TraceStats +} + +export declare class BamlSpan { + static new(runtime: BamlRuntime, functionName: string, args: any, ctx: RuntimeContextManager): BamlSpan + finish(result: any, ctx: RuntimeContextManager): any +} + +export declare class ClassBuilder { + field(): FieldType + property(name: string): ClassPropertyBuilder +} + +export declare class ClassPropertyBuilder { + setType(fieldType: FieldType): ClassPropertyBuilder + alias(alias?: string | undefined | null): ClassPropertyBuilder + description(description?: string | undefined | null): ClassPropertyBuilder +} + +export declare class ClientRegistry { + constructor() + addLlmClient(name: string, provider: string, options: { [string]: any }, retryPolicy?: string | undefined | null): void + setPrimary(primary: string): void +} + +export declare class EnumBuilder { + value(name: string): EnumValueBuilder + alias(alias?: string | undefined | null): EnumBuilder + field(): FieldType +} + +export declare class EnumValueBuilder { + alias(alias?: string | undefined | null): EnumValueBuilder + skip(skip?: boolean | undefined | null): EnumValueBuilder + description(description?: string | undefined | null): EnumValueBuilder +} + +export declare class FieldType { + list(): FieldType + optional(): FieldType +} + +export declare class FunctionResult { + isOk(): boolean + parsed(allowPartials: boolean): any +} + +export declare class FunctionResultStream { + onEvent(func: (err: any, param: FunctionResult) => void): void + done(rctx: RuntimeContextManager): Promise +} + +export declare class RuntimeContextManager { + upsertTags(tags: any): void + deepClone(): RuntimeContextManager + contextDepth(): number +} + +export declare class TraceStats { + get failed(): number + get started(): number + get finalized(): number + get submitted(): number + get sent(): number + get done(): number + toJson(): string +} + +export declare class TypeBuilder { + constructor() + getEnum(name: string): EnumBuilder + getClass(name: string): ClassBuilder + list(inner: FieldType): FieldType + optional(inner: FieldType): FieldType + string(): FieldType + literalString(value: string): FieldType + literalInt(value: number): FieldType + literalBool(value: boolean): FieldType + int(): FieldType + float(): FieldType + bool(): FieldType + null(): FieldType + map(key: FieldType, value: FieldType): FieldType + union(types: Array): FieldType +} + +export interface BamlLogEvent { + metadata: LogEventMetadata + prompt?: string + rawOutput?: string + parsedOutput?: string + startTime: string +} + +export declare export declare function invoke_runtime_cli(params: Array): void + +export interface LogEventMetadata { + eventId: string + parentId?: string + rootEventId: string +} + diff --git a/engine/language_client_typescript/native.js b/engine/language_client_typescript/artifacts/native.js similarity index 100% rename from engine/language_client_typescript/native.js rename to engine/language_client_typescript/artifacts/native.js diff --git a/engine/language_client_typescript/stream.d.ts b/engine/language_client_typescript/artifacts/stream.d.ts similarity index 77% rename from engine/language_client_typescript/stream.d.ts rename to engine/language_client_typescript/artifacts/stream.d.ts index dd7f000cd..e2fd47ae2 100644 --- a/engine/language_client_typescript/stream.d.ts +++ b/engine/language_client_typescript/artifacts/stream.d.ts @@ -11,5 +11,10 @@ export declare class BamlStream { private driveToCompletionInBg; [Symbol.asyncIterator](): AsyncIterableIterator; getFinalResponse(): Promise; + /** + * Converts the BAML stream to a Next.js compatible stream. + * This is used for server-side streaming in Next.js API routes and Server Actions. + */ + toStreamable(): ReadableStream; } //# sourceMappingURL=stream.d.ts.map \ No newline at end of file diff --git a/engine/language_client_typescript/artifacts/stream.d.ts.map b/engine/language_client_typescript/artifacts/stream.d.ts.map new file mode 100644 index 000000000..7eba8a475 --- /dev/null +++ b/engine/language_client_typescript/artifacts/stream.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../typescript_src/stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AAGtF,qBAAa,UAAU,CAAC,iBAAiB,EAAE,eAAe;IAMtD,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,UAAU;IARpB,OAAO,CAAC,IAAI,CAAuC;IAEnD,OAAO,CAAC,UAAU,CAAgC;gBAGxC,SAAS,EAAE,oBAAoB,EAC/B,aAAa,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,iBAAiB,EAC5D,WAAW,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,eAAe,EACxD,UAAU,EAAE,qBAAqB;YAG7B,iBAAiB;IAiB/B,OAAO,CAAC,qBAAqB;IAQtB,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,qBAAqB,CAAC,iBAAiB,CAAC;IAqBnE,gBAAgB,IAAI,OAAO,CAAC,eAAe,CAAC;IAMlD;;;OAGG;IACH,YAAY,IAAI,cAAc,CAAC,UAAU,CAAC;CAkE3C"} \ No newline at end of file diff --git a/engine/language_client_typescript/artifacts/stream.js b/engine/language_client_typescript/artifacts/stream.js new file mode 100644 index 000000000..f0f4f09ba --- /dev/null +++ b/engine/language_client_typescript/artifacts/stream.js @@ -0,0 +1,122 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BamlStream = void 0; +const errors_1 = require("./errors"); +class BamlStream { + ffiStream; + partialCoerce; + finalCoerce; + ctxManager; + task = null; + eventQueue = []; + constructor(ffiStream, partialCoerce, finalCoerce, ctxManager) { + this.ffiStream = ffiStream; + this.partialCoerce = partialCoerce; + this.finalCoerce = finalCoerce; + this.ctxManager = ctxManager; + } + async driveToCompletion() { + try { + this.ffiStream.onEvent((err, data) => { + if (err) { + return; + } + else { + this.eventQueue.push(data); + } + }); + const retval = await this.ffiStream.done(this.ctxManager); + return retval; + } + finally { + this.eventQueue.push(null); + } + } + driveToCompletionInBg() { + if (this.task === null) { + this.task = this.driveToCompletion(); + } + return this.task; + } + async *[Symbol.asyncIterator]() { + this.driveToCompletionInBg(); + while (true) { + const event = this.eventQueue.shift(); + if (event === undefined) { + await new Promise((resolve) => setTimeout(resolve, 100)); + continue; + } + if (event === null) { + break; + } + if (event.isOk()) { + yield this.partialCoerce(event.parsed(true)); + } + } + } + async getFinalResponse() { + const final = await this.driveToCompletionInBg(); + return this.finalCoerce(final.parsed(false)); + } + /** + * Converts the BAML stream to a Next.js compatible stream. + * This is used for server-side streaming in Next.js API routes and Server Actions. + */ + toStreamable() { + const stream = this; + const encoder = new TextEncoder(); + return new ReadableStream({ + async start(controller) { + try { + // Stream partials + for await (const partial of stream) { + controller.enqueue(encoder.encode(JSON.stringify({ + partial, + error: null + }))); + } + let final; + try { + final = await stream.getFinalResponse(); + controller.enqueue(encoder.encode(JSON.stringify({ + final, + error: null + }))); + controller.close(); + return; + } + catch (err) { + const bamlError = (0, errors_1.createBamlValidationError)(err instanceof Error ? err : new Error(String(err))); + const errorPayload = bamlError instanceof errors_1.BamlValidationError || bamlError instanceof errors_1.BamlClientFinishReasonError + ? { + type: bamlError.name, + message: bamlError.message, + prompt: bamlError.prompt, + raw_output: bamlError.raw_output + } + : { + type: "UnknownError", + message: bamlError.message, + prompt: "", + raw_output: "" + }; + controller.enqueue(encoder.encode(JSON.stringify({ error: errorPayload }))); + controller.close(); + return; + } + } + catch (streamErr) { + const errorPayload = { + type: "StreamError", + message: streamErr instanceof Error ? streamErr.message : "Error in stream processing", + prompt: "", + raw_output: "" + }; + controller.enqueue(encoder.encode(JSON.stringify({ error: errorPayload }))); + controller.close(); + } + } + }); + } +} +exports.BamlStream = BamlStream; diff --git a/engine/language_client_typescript/type_builder.d.ts b/engine/language_client_typescript/artifacts/type_builder.d.ts similarity index 100% rename from engine/language_client_typescript/type_builder.d.ts rename to engine/language_client_typescript/artifacts/type_builder.d.ts diff --git a/engine/language_client_typescript/artifacts/type_builder.d.ts.map b/engine/language_client_typescript/artifacts/type_builder.d.ts.map new file mode 100644 index 000000000..ccb773b51 --- /dev/null +++ b/engine/language_client_typescript/artifacts/type_builder.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"type_builder.d.ts","sourceRoot":"","sources":["../typescript_src/type_builder.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/engine/language_client_typescript/type_builder.js b/engine/language_client_typescript/artifacts/type_builder.js similarity index 100% rename from engine/language_client_typescript/type_builder.js rename to engine/language_client_typescript/artifacts/type_builder.js diff --git a/engine/language_client_typescript/async_context_vars.d.ts.map b/engine/language_client_typescript/async_context_vars.d.ts.map deleted file mode 100644 index 55cedafcf..000000000 --- a/engine/language_client_typescript/async_context_vars.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"async_context_vars.d.ts","sourceRoot":"","sources":["typescript_src/async_context_vars.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAGrF,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAa;IACvB,OAAO,CAAC,GAAG,CAA0C;gBAEzC,EAAE,EAAE,WAAW;IAS3B,WAAW,IAAI,OAAO;IAYtB,KAAK,IAAI,IAAI;IAKb,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAK9C,YAAY,IAAI,qBAAqB;IASrC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,qBAAqB,EAAE,QAAQ,CAAC;IAKtF,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,GAAG,IAAI;IAa7C,KAAK,IAAI,IAAI;IAIb,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI;IAYvE,WAAW,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC;IAuB3F,YAAY,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC;CAuBtG"} \ No newline at end of file diff --git a/engine/language_client_typescript/cli.js b/engine/language_client_typescript/cli.js index 713c64d0a..e88c61d33 100755 --- a/engine/language_client_typescript/cli.js +++ b/engine/language_client_typescript/cli.js @@ -5,6 +5,6 @@ if (require.main === module) { process.env.BAML_LOG = 'info' } - const baml = require('./native') + const baml = require('./artifacts/native') baml.invoke_runtime_cli(process.argv.slice(1)) } diff --git a/engine/language_client_typescript/index.d.ts.map b/engine/language_client_typescript/index.d.ts.map deleted file mode 100644 index c1b009247..000000000 --- a/engine/language_client_typescript/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["typescript_src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,cAAc,EACd,oBAAoB,EACpB,SAAS,IAAI,KAAK,EAClB,aAAa,EACb,SAAS,IAAI,KAAK,EAClB,kBAAkB,EAClB,cAAc,EACd,YAAY,GACb,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,qBAAa,2BAA4B,SAAQ,KAAK;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;gBAEP,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAS/D,MAAM,IAAI,MAAM;IAahB,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,2BAA2B,GAAG,SAAS;CAoBnE;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;gBAEP,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAS/D,MAAM,IAAI,MAAM;IAahB,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,mBAAmB,GAAG,SAAS;CAiB3D;AAGD,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,KAAK,GACX,mBAAmB,GAAG,2BAA2B,GAAG,KAAK,CAa3D"} \ No newline at end of file diff --git a/engine/language_client_typescript/package.json b/engine/language_client_typescript/package.json index 000636e49..de4a59f96 100644 --- a/engine/language_client_typescript/package.json +++ b/engine/language_client_typescript/package.json @@ -21,19 +21,48 @@ }, "files": [ "./cli.js", - "./index.d.ts", - "./index.js", - "./native.d.ts", - "./native.js", - "./async_context_vars.d.ts", - "./async_context_vars.js", - "./stream.d.ts", - "./stream.js", - "./type_builder.d.ts", - "./type_builder.js" + "./artifacts/index.d.ts", + "./artifacts/index.js", + "./artifacts/native.d.ts", + "./artifacts/native.js", + "./artifacts/async_context_vars.d.ts", + "./artifacts/async_context_vars.js", + "./artifacts/stream.d.ts", + "./artifacts/stream.js", + "./artifacts/type_builder.d.ts", + "./artifacts/type_builder.js", + "./artifacts/errors.d.ts", + "./artifacts/errors.js" ], - "main": "./index.js", - "types": "./index.d.ts", + "main": "./artifacts/index.js", + "types": "./artifacts/index.d.ts", + "exports": { + ".": { + "types": "./artifacts/index.d.ts", + "node": "./artifacts/index.js", + "default": "./artifacts/client.js" + }, + "./type_builder": { + "types": "./artifacts/type_builder.d.ts", + "default": "./artifacts/type_builder.js" + }, + "./async_context_vars": { + "types": "./artifacts/async_context_vars.d.ts", + "default": "./artifacts/async_context_vars.js" + }, + "./stream": { + "types": "./artifacts/stream.d.ts", + "default": "./artifacts/stream.js" + }, + "./native": { + "types": "./artifacts/native.d.ts", + "default": "./artifacts/native.js" + }, + "./errors": { + "types": "./artifacts/errors.d.ts", + "default": "./artifacts/errors.js" + } + }, "napi": { "binaryName": "baml", "targets": [ @@ -44,7 +73,8 @@ "x86_64-pc-windows-msvc", "x86_64-unknown-linux-gnu", "x86_64-unknown-linux-musl" - ] + ], + "npmClient": "pnpm" }, "engines": { "node": ">= 10" @@ -56,10 +86,10 @@ "scripts": { "artifacts": "napi artifacts", "build": "pnpm build:napi-release && pnpm build:ts_build", - "build:debug": "pnpm build:napi-debug && pnpm build:ts_build", + "build:debug": "pnpm build:napi-debug && pnpm build:ts_build && pnpm napi create-npm-dirs && pnpm artifacts", "build:napi-release": "pnpm build:napi-debug --release", - "build:napi-debug": "napi build --js ./native.js --dts ./native.d.ts --platform", - "build:ts_build": "tsc ./typescript_src/*.ts --outDir ./ --module nodenext --module nodenext --allowJs --declaration true --declarationMap true || true", + "build:napi-debug": "napi build -o ./artifacts --js ./native.js --dts ./native.d.ts --platform", + "build:ts_build": "tsc ./typescript_src/*.ts --outDir ./artifacts --module nodenext --module nodenext --allowJs --declaration true --declarationMap true || true", "format": "run-p format:biome format:rs format:toml", "format:biome": "biome --write .", "format:rs": "cargo fmt", @@ -84,4 +114,4 @@ "dependencies": { "@scarf/scarf": "^1.3.0" } -} +} \ No newline at end of file diff --git a/engine/language_client_typescript/stream.d.ts.map b/engine/language_client_typescript/stream.d.ts.map deleted file mode 100644 index c780c7a95..000000000 --- a/engine/language_client_typescript/stream.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["typescript_src/stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AAEtF,qBAAa,UAAU,CAAC,iBAAiB,EAAE,eAAe;IAMtD,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,UAAU;IARpB,OAAO,CAAC,IAAI,CAAuC;IAEnD,OAAO,CAAC,UAAU,CAAgC;gBAGxC,SAAS,EAAE,oBAAoB,EAC/B,aAAa,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,iBAAiB,EAC5D,WAAW,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,eAAe,EACxD,UAAU,EAAE,qBAAqB;YAG7B,iBAAiB;IAiB/B,OAAO,CAAC,qBAAqB;IAQtB,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,qBAAqB,CAAC,iBAAiB,CAAC;IAqBnE,gBAAgB,IAAI,OAAO,CAAC,eAAe,CAAC;CAKnD"} \ No newline at end of file diff --git a/engine/language_client_typescript/stream.js b/engine/language_client_typescript/stream.js index 168cd054f..1813b4482 100644 --- a/engine/language_client_typescript/stream.js +++ b/engine/language_client_typescript/stream.js @@ -57,5 +57,28 @@ class BamlStream { const final = await this.driveToCompletionInBg(); return this.finalCoerce(final.parsed(false)); } + /** + * Converts the BAML stream to a Next.js compatible stream. + * This is used for server-side streaming in Next.js API routes and Server Actions. + */ + toStreamable() { + const stream = this; + return new ReadableStream({ + async start(controller) { + const encoder = new TextEncoder(); + try { + for await (const partial of stream) { + controller.enqueue(encoder.encode(JSON.stringify({ partial }))); + } + const final = await stream.getFinalResponse(); + controller.enqueue(encoder.encode(JSON.stringify({ final: final }))); + controller.close(); + } + catch (error) { + controller.error(error); + } + } + }); + } } exports.BamlStream = BamlStream; diff --git a/engine/language_client_typescript/type_builder.d.ts.map b/engine/language_client_typescript/type_builder.d.ts.map deleted file mode 100644 index b94fbf2e0..000000000 --- a/engine/language_client_typescript/type_builder.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"type_builder.d.ts","sourceRoot":"","sources":["typescript_src/type_builder.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/engine/language_client_typescript/typescript_src/errors.ts b/engine/language_client_typescript/typescript_src/errors.ts new file mode 100644 index 000000000..953aab6da --- /dev/null +++ b/engine/language_client_typescript/typescript_src/errors.ts @@ -0,0 +1,111 @@ + +export class BamlClientFinishReasonError extends Error { + prompt: string; + raw_output: string; + + constructor(prompt: string, raw_output: string, message: string) { + super(message); + this.name = "BamlClientFinishReasonError"; + this.prompt = prompt; + this.raw_output = raw_output; + + Object.setPrototypeOf(this, BamlClientFinishReasonError.prototype); + } + + toJSON(): string { + return JSON.stringify( + { + name: this.name, + message: this.message, + raw_output: this.raw_output, + prompt: this.prompt, + }, + null, + 2 + ); + } + + static from(error: Error): BamlClientFinishReasonError | undefined { + if (error.message.includes("BamlClientFinishReasonError")) { + try { + const errorData = JSON.parse(error.message); + if (errorData.type === "BamlClientFinishReasonError") { + return new BamlClientFinishReasonError( + errorData.prompt || "", + errorData.raw_output || "", + errorData.message || error.message + ); + } else { + console.warn("Not a BamlClientFinishReasonError:", error); + } + } catch (parseError) { + // If JSON parsing fails, fall back to the original error + console.warn("Failed to parse BamlClientFinishReasonError:", parseError); + } + } + return undefined; + } +} + +export class BamlValidationError extends Error { + prompt: string; + raw_output: string; + + constructor(prompt: string, raw_output: string, message: string) { + super(message); + this.name = "BamlValidationError"; + this.prompt = prompt; + this.raw_output = raw_output; + + Object.setPrototypeOf(this, BamlValidationError.prototype); + } + + toJSON(): string { + return JSON.stringify( + { + name: this.name, + message: this.message, + raw_output: this.raw_output, + prompt: this.prompt, + }, + null, + 2 + ); + } + + static from(error: Error): BamlValidationError | undefined { + if (error.message.includes("BamlValidationError")) { + try { + const errorData = JSON.parse(error.message); + if (errorData.type === "BamlValidationError") { + return new BamlValidationError( + errorData.prompt || "", + errorData.raw_output || "", + errorData.message || error.message + ); + } + } catch (parseError) { + console.warn("Failed to parse BamlValidationError:", parseError); + } + } + return undefined; + } +} + +// Helper function to safely create a BamlValidationError +export function createBamlValidationError( + error: Error +): BamlValidationError | BamlClientFinishReasonError | Error { + const bamlValidationError = BamlValidationError.from(error); + if (bamlValidationError) { + return bamlValidationError; + } + + const bamlClientFinishReasonError = BamlClientFinishReasonError.from(error); + if (bamlClientFinishReasonError) { + return bamlClientFinishReasonError; + } + + // otherwise return the original error + return error; +} diff --git a/engine/language_client_typescript/typescript_src/index.ts b/engine/language_client_typescript/typescript_src/index.ts index d0aff086d..1cb7f5901 100644 --- a/engine/language_client_typescript/typescript_src/index.ts +++ b/engine/language_client_typescript/typescript_src/index.ts @@ -11,116 +11,5 @@ export { } from "./native"; export { BamlStream } from "./stream"; export { BamlCtxManager } from "./async_context_vars"; - -export class BamlClientFinishReasonError extends Error { - prompt: string; - raw_output: string; - - constructor(prompt: string, raw_output: string, message: string) { - super(message); - this.name = "BamlClientFinishReasonError"; - this.prompt = prompt; - this.raw_output = raw_output; - - Object.setPrototypeOf(this, BamlClientFinishReasonError.prototype); - } - - toJSON(): string { - return JSON.stringify( - { - name: this.name, - message: this.message, - raw_output: this.raw_output, - prompt: this.prompt, - }, - null, - 2 - ); - } - - static from(error: Error): BamlClientFinishReasonError | undefined { - if (error.message.includes("BamlClientFinishReasonError")) { - try { - const errorData = JSON.parse(error.message); - if (errorData.type === "BamlClientFinishReasonError") { - return new BamlClientFinishReasonError( - errorData.prompt || "", - errorData.raw_output || "", - errorData.message || error.message - ); - } else { - console.warn("Not a BamlClientFinishReasonError:", error); - } - } catch (parseError) { - // If JSON parsing fails, fall back to the original error - console.warn("Failed to parse BamlClientFinishReasonError:", parseError); - } - } - return undefined; - } -} - -export class BamlValidationError extends Error { - prompt: string; - raw_output: string; - - constructor(prompt: string, raw_output: string, message: string) { - super(message); - this.name = "BamlValidationError"; - this.prompt = prompt; - this.raw_output = raw_output; - - Object.setPrototypeOf(this, BamlValidationError.prototype); - } - - toJSON(): string { - return JSON.stringify( - { - name: this.name, - message: this.message, - raw_output: this.raw_output, - prompt: this.prompt, - }, - null, - 2 - ); - } - - static from(error: Error): BamlValidationError | undefined { - if (error.message.includes("BamlValidationError")) { - try { - const errorData = JSON.parse(error.message); - if (errorData.type === "BamlValidationError") { - return new BamlValidationError( - errorData.prompt || "", - errorData.raw_output || "", - errorData.message || error.message - ); - } - } catch (parseError) { - console.warn("Failed to parse BamlValidationError:", parseError); - } - } - return undefined; - } -} - -// Helper function to safely create a BamlValidationError -export function createBamlValidationError( - error: Error -): BamlValidationError | BamlClientFinishReasonError | Error { - const bamlValidationError = BamlValidationError.from(error); - if (bamlValidationError) { - return bamlValidationError; - } - - const bamlClientFinishReasonError = BamlClientFinishReasonError.from(error); - if (bamlClientFinishReasonError) { - return bamlClientFinishReasonError; - } - - // otherwise return the original error - return error; -} - +export * from "./errors"; // No need for a separate throwBamlValidationError function in TypeScript diff --git a/engine/language_client_typescript/typescript_src/stream.ts b/engine/language_client_typescript/typescript_src/stream.ts index fd30645c3..b1b2c6254 100644 --- a/engine/language_client_typescript/typescript_src/stream.ts +++ b/engine/language_client_typescript/typescript_src/stream.ts @@ -1,4 +1,5 @@ import { FunctionResult, FunctionResultStream, RuntimeContextManager } from './native' +import { BamlValidationError, BamlClientFinishReasonError, createBamlValidationError } from './errors' export class BamlStream { private task: Promise | null = null @@ -14,7 +15,7 @@ export class BamlStream { private async driveToCompletion(): Promise { try { - this.ffiStream.onEvent((err, data) => { + this.ffiStream.onEvent((err: Error | null, data: FunctionResult | null) => { if (err) { return } else { @@ -63,4 +64,75 @@ export class BamlStream { return this.finalCoerce(final.parsed(false)) } + + /** + * Converts the BAML stream to a Next.js compatible stream. + * This is used for server-side streaming in Next.js API routes and Server Actions. + */ + toStreamable(): ReadableStream { + const stream = this; + const encoder = new TextEncoder(); + + return new ReadableStream({ + async start(controller) { + try { + // Stream partials + for await (const partial of stream) { + controller.enqueue( + encoder.encode(JSON.stringify({ + partial, + error: null + })) + ); + } + + let final; + try { + final = await stream.getFinalResponse(); + controller.enqueue( + encoder.encode(JSON.stringify({ + final, + error: null + })) + ); + controller.close(); + return; + } catch (err: any) { + const bamlError = createBamlValidationError(err instanceof Error ? err : new Error(String(err))); + const errorPayload = bamlError instanceof BamlValidationError || bamlError instanceof BamlClientFinishReasonError + ? { + type: bamlError.name, + message: bamlError.message, + prompt: bamlError.prompt, + raw_output: bamlError.raw_output + } + : { + type: "UnknownError", + message: bamlError.message, + prompt: "", + raw_output: "" + }; + + controller.enqueue( + encoder.encode(JSON.stringify({ error: errorPayload })) + ); + controller.close(); + return; + } + } catch (streamErr: unknown) { + const errorPayload = { + type: "StreamError", + message: streamErr instanceof Error ? streamErr.message : "Error in stream processing", + prompt: "", + raw_output: "" + }; + + controller.enqueue( + encoder.encode(JSON.stringify({ error: errorPayload })) + ); + controller.close(); + } + } + }); + } } diff --git a/fern/.cursorrules b/fern/.cursorrules new file mode 100644 index 000000000..ddc9e6c06 --- /dev/null +++ b/fern/.cursorrules @@ -0,0 +1,320 @@ +You are the world's best documentation writer, renowned for your clarity, precision, and engaging style. Every piece of documentation you produce is: + +1. Clear and precise - no ambiguity, jargon, marketing language or unnecssarily complex language. +2. Concise—short, direct sentences and paragraphs. +3. Scientifically structured—organized like a research paper or technical white paper, with a logical flow and strict attention to detail. +4. Visually engaging—using line breaks, headings, and components to enhance readability. +5. Focused on user success — no marketing language or fluff; just the necessary information. + +# Writing guidelines + +- Titles must always start with an uppercase letter, followed by lowercase letters unless it is a name. Examples: Getting started, Text to speech, Conversational AI... +- No emojis or icons unless absolutely necessary. +- Scientific research tone—professional, factual, and straightforward. +- Avoid long text blocks. Use short paragraphs and line breaks. +- Do not use marketing/promotional language. +- Be concise, direct, and avoid wordiness. +- Tailor the tone and style depending on the location of the content. + - The `docs` tab (/fern/docs folder) contains a mixture of technical and non-technical content. + - The /fern/docs/pages/capabilities folder should not contain any code and should be easy to read for both non-technical and technical readers. + - The /fern/docs/pages/workflows folder is tailored to non-technical readers (specifically enterprise customers) who need detailed step-by-step visual guides. + - The /fern/docs/pages/developer-guides is strictly for technical readers. This contains detailed guides on how to use the SDK or API. + - The best-practices folder contains both tech & non-technical content. + - The `conversational-ai` tab (/fern/conversational-ai) contains content for the conversational-ai product. It is tailored to technical people but may be read by non-technical people. + - The `api-reference` tab (/fern/api-reference) contains content for the API. It is tailored to technical people only. +- If the user asks you to update the changelog, you must create a new changelog file in the /fern/docs/pages/changelog folder with the following file name: `2024-10-13.md` (the date should be the current date). + + - The structure of the changelog should look something like this: + +- Ensure there are well-designed links (if applicable) to take the technical or non-technical reader to the relevant page. + +# Page structure + +- Every `.mdx` file starts with: + ``` + --- + title: + subtitle: + --- + ``` + - Example titles (good, short, first word capitalized): + - Getting started + - Text to speech + - Streaming + - API reference + - Conversational AI + - Example subtitles (concise, some starting with "Learn how to …" for guides): + - Build your first conversational AI voice agent in 5 minutes. + - Learn how to control delivery, pronunciation & emotion of text to speech. +- All documentation images are located in the non-nested /fern/assets/images folder. The path can be referenced in `.mdx` files as /assets/images/.jpg/png/svg. + +## Components + +Use the following components whenever possible to enhance readability and structure. + +### Accordions + +```` + + + You can put other components inside Accordions. + ```ts + export function generateRandomNumber() { + return Math.random(); + } + ``` + + + This is a second option. + + + + This is a third option. + + +```` + +### Callouts (Tips, Notes, Warnings, etc.) + +``` + +This Callout uses a title and a custom icon. + +This adds a note in the content +This raises a warning to watch out for +This indicates a potential error +This draws attention to important information +This suggests a helpful tip +This brings us a checked status +``` + +### Cards & Card Groups + +``` + +View Fern's Python SDK generator. + + + + This is the first card. + + + This is the second card. + + + This is the third card. + + + This is the fourth and final card. + + +``` + +### Code snippets + +- Always use the focus attribute to highlight the code you want to highlight. +- `maxLines` is optional if it's long. +- `wordWrap` is optional if the full text should wrap and be visible. + +```javascript focus={2-4} maxLines=10 wordWrap +console.log('Line 1'); +console.log('Line 2'); +console.log('Line 3'); +console.log('Line 4'); +console.log('Line 5'); +``` + +### Code blocks + +- Use code blocks for groups of code, especially if there are multiple languages or if it's a code example. Always start with Python as the default. + +```` + +```javascript title="helloWorld.js" +console.log("Hello World"); +```` + +```python title="hello_world.py" +print('Hello World!') +``` + +```java title="HelloWorld.java" + class HelloWorld { + public static void main(String[] args) { + System.out.println("Hello, World!"); + } + } +``` + + +``` + +### Steps (for step-by-step guides) + +``` + + ### First Step + Initial instructions. + + ### Second Step + More instructions. + + ### Third Step + Final Instructions + + +``` + +### Frames + +- You must wrap every single image in a frame. +- Every frame must have `background="subtle"` +- Use captions only if the image is not self-explanatory. +- Use ![alt-title](image-url) as opposed to HTML `` tags unless styling. + +``` + + Sample photo of mountains + + +``` + +### Tabs (split up content into different sections) + +``` + + + ☝️ Welcome to the content that you can only see inside the first Tab. + + + ✌️ Here's content that's only inside the second Tab. + + + 💪 Here's content that's only inside the third Tab. + + + +``` + +# Examples of a well-structured piece of documentation + +- Ideally there would be links to either go to the workflows for non-technical users or the developer-guides for technical users. +- The page should be split into sections with a clear structure. + +``` +--- +title: Text to speech +subtitle: Learn how to turn text into lifelike spoken audio with ElevenLabs. +--- + +## Overview + +ElevenLabs [Text to Speech (TTS)](/docs/api-reference/text-to-speech) API turns text into lifelike audio with nuanced intonation, pacing and emotional awareness. [Our models](/docs/models) adapt to textual cues across 32 languages and multiple voice styles and can be used to: + +- Narrate global media campaigns & ads +- Produce audiobooks in multiple languages with complex emotional delivery +- Stream real-time audio from text + +Listen to a sample: + + + +Explore our [Voice Library](https://elevenlabs.io/community) to find the perfect voice for your project. + +## Parameters + +The `text-to-speech` endpoint converts text into natural-sounding speech using three core parameters: + +- `model_id`: Determines the quality, speed, and language support +- `voice_id`: Specifies which voice to use (explore our [Voice Library](https://elevenlabs.io/community)) +- `text`: The input text to be converted to speech +- `output_format`: Determines the audio format, quality, sampling rate & bitrate + +### Voice quality + +For real-time applications, Flash v2.5 provides ultra-low 75ms latency optimized for streaming, while Multilingual v2 delivers the highest quality audio with more nuanced expression. + +Learn more about our [models](/docs/models). + +### Voice options + +ElevenLabs offers thousands of voices across 32 languages through multiple creation methods: + +- [Voice Library](/docs/voice-library) with 3,000+ community-shared voices +- [Professional Voice Cloning](/docs/voice-cloning/professional) for highest-fidelity replicas +- [Instant Voice Cloning](/docs/voice-cloning/instant) for quick voice replication +- [Voice Design](/docs/voice-design) to generate custom voices from text descriptions + +Learn more about our [voice creation options](/docs/voices). + +## Supported formats + +The default response format is "mp3", but other formats like "PCM", & "μ-law" are available. + +- **MP3** + - Sample rates: 22.05kHz - 44.1kHz + - Bitrates: 32kbps - 192kbps + - **Note**: Higher quality options require Creator tier or higher +- **PCM (S16LE)** + - Sample rates: 16kHz - 44.1kHz + - **Note**: Higher quality options require Pro tier or higher +- **μ-law** + - 8kHz sample rate + - Optimized for telephony applications + + + Higher quality audio options are only available on paid tiers - see our [pricing + page](https://elevenlabs.io/pricing) for details. + + +## Supported languages + + + + + +Simply input text in any of our supported languages and select a matching voice from our [Voice Library](https://elevenlabs.io/community). For the most natural results, choose a voice with an accent that matches your target language and region. + +## FAQ + + + + The models interpret emotional context directly from the text input. For example, adding + descriptive text like "she said excitedly" or using exclamation marks will influence the speech + emotion. Voice settings like Stability and Similarity help control the consistency, while the + underlying emotion comes from textual cues. + + + Yes. Instant Voice Cloning quickly mimics another speaker from short clips. For high-fidelity + clones, check out our Professional Voice Clone. + + + Yes. You retain ownership of any audio you generate. However, commercial usage rights are only + available with paid plans. With a paid subscription, you may use generated audio for commercial + purposes and monetize the outputs if you own the IP rights to the input content. + + + Use the low-latency Flash models (Flash v2 or v2.5) optimized for near real-time conversational + or interactive scenarios. See our [latency optimization guide](/docs/latency-optimization) for + more details. + + + The models are nondeterministic. For consistency, use the optional seed parameter, though subtle + differences may still occur. + + + Split long text into segments and use streaming for real-time playback and efficient processing. + To maintain natural prosody flow between chunks, use `previous_text` or `previous_request_ids`. + + +``` diff --git a/fern/01-guide/08-integrations/02-nextjs-app-router.mdx b/fern/01-guide/08-integrations/02-nextjs-app-router.mdx new file mode 100644 index 000000000..7e4da92bf --- /dev/null +++ b/fern/01-guide/08-integrations/02-nextjs-app-router.mdx @@ -0,0 +1,219 @@ +--- +title: Next.js App Router Setup +--- + +This guide walks you through setting up BAML with Next.js App Router, leveraging Server Actions and React Server Components for optimal performance. + +## Quick Start + +Follow the step-by-step instructions below to set up BAML in a new or existing Next.js project. + + +### Create a New Next.js Project + +First, create a new Next.js project with the App Router: + + +```bash npm +npx create-next-app@latest my-baml-app +``` + +```bash pnpm +pnpm create next-app my-baml-app +``` + +```bash yarn +yarn create next-app my-baml-app +``` + + +When prompted, make sure to: +- Select **Yes** for "Would you like to use TypeScript?" +- Select **Yes** for "Would you like to use the App Router? (recommended)" +- Configure other options as needed for your project + +### Install Dependencies + +Next, install BAML and its dependencies: + + + +### Configure Next.js + +Update your `next.config.mjs`: + + + +### Initialize BAML + +Create a new BAML project in your Next.js application: + + +This will create a `baml_src` directory with starter code. + +### Setup Environment Variables + + + +### Setup BAML Client Provider + + + +### Setup BAML Next.js Generator + + + +### Generate BAML Client + + + +### Generated Server Actions + +BAML automatically generates type-safe Next.js server actions and React hooks for your BAML functions. When you create a BAML function like `WriteMeAStory`, the BAML CLI will generate: + +- A server action that handles the API call +- A React hook (`useWriteMeAStoryAction`) that provides streaming, loading states, and error handling +- TypeScript types for all inputs and outputs + +Here's an example of using the auto-generated hook: + + + + + + +### Custom Server Actions + +Custom Server Actions wrap BAML functions with your own server-side logic. Use them when you need to: + +- Add authentication or authorization checks +- Validate or sanitize inputs +- Implement rate limiting +- Add custom error handling +- Transform inputs or responses + + + + + + + +### Update Package Scripts + +Update your `package.json` scripts: + +```json {3,4} +{ + "scripts": { + "prebuild": "npm run generate", + "generate": "baml-cli generate", + "dev": "next dev", + "build": "next build", + "start": "next start", + } +} +``` + + + +## Best Practices + +1. **Component Organization** + - Keep BAML calls in server components + - Use server actions for mutations + - Implement proper error boundaries + - Handle cleanup on unmount + +2. **Performance** + - Use streaming for long responses + - Implement proper loading states + - Cache results when appropriate + - Monitor memory usage + +3. **Error Handling** + - BAML provides three types of errors you need to handle: + ```typescript + import { BamlValidationError, BamlClientFinishReasonError } from "@boundaryml/baml/errors" + + try { + const result = await myBamlFunction(params); + } catch (e) { + if (e instanceof BamlValidationError) { + // Thrown when BAML fails to parse LLM output + console.error('Parsing error:', e.message); + console.error('Original prompt:', e.prompt); + console.error('Raw LLM output:', e.raw_output); + } else if (e instanceof BamlClientFinishReasonError) { + // Thrown when LLM terminates with disallowed finish reason + console.error('LLM terminated early:', e.finish_reason); + console.error('Error message:', e.message); + console.error('Original prompt:', e.prompt); + console.error('Partial output:', e.raw_output); + } else { + // Handle other errors (network, etc) + console.error('Other error:', e); + } + } + ``` + - Create error boundaries for graceful UI fallbacks: + ```typescript + 'use client'; + + import { useEffect } from 'react'; + import { useWriteMeAStoryAction } from './baml_client'; + + export function StoryGenerator() { + const { + data, + error, + isPending, + mutate + } = useWriteMeAStoryAction(); + + useEffect(() => { + if (error) { + if (error instanceof BamlValidationError) { + // Show parsing error UI + toast.error('Failed to understand AI response'); + } else if (error instanceof BamlClientFinishReasonError) { + // Show early termination UI + toast.error('AI response was cut off'); + } else { + // Show generic error UI + toast.error('Something went wrong'); + } + } + }, [error]); + + return ( +
+ {isPending && } + {error && } + {data && } + + +
+ ); + } + ``` + - Implement retry mechanisms + - Show meaningful error messages + - Handle network errors + - Clean up resources + +4. **Security** + - Never expose API keys + - Validate user input + - Implement rate limiting + - Use proper authentication + +## Next Steps + +- Learn about [Streaming](./nextjs-streaming) for real-time updates +- Explore [Environment Setup](./nextjs-environment) for configuration +- Check out [Examples](./nextjs-examples) for more use cases diff --git a/fern/docs.yml b/fern/docs.yml index d24a0660e..3fee1c17b 100644 --- a/fern/docs.yml +++ b/fern/docs.yml @@ -83,10 +83,36 @@ navigation: - page: REST API (other languages) icon: fa-regular fa-network-wired path: 01-guide/02-languages/rest.mdx - - - page: NextJS + - section: Framework Integration + icon: fa-solid fa-plug + contents: + - section: Next.js icon: fa-brands fa-react - path: 01-guide/08-integrations/nextjs.mdx + contents: + # - page: Overview + # icon: fa-regular fa-circle-info + # path: 01-guide/08-integrations/01-nextjs-overview.mdx + - page: App Router Setup + icon: fa-regular fa-route + path: 01-guide/08-integrations/02-nextjs-app-router.mdx + # - page: Pages Router Setup + # icon: fa-regular fa-file-code + # path: 01-guide/08-integrations/03-nextjs-pages-router.mdx + # - page: React Server Components + # icon: fa-regular fa-server + # path: 01-guide/08-integrations/04-nextjs-rsc.mdx + # - page: Streaming + # icon: fa-regular fa-faucet + # path: 01-guide/08-integrations/05-nextjs-streaming.mdx + # - page: Environment Setup + # icon: fa-regular fa-gear + # path: 01-guide/08-integrations/06-nextjs-environment.mdx + # - page: Deployment + # icon: fa-regular fa-rocket + # path: 01-guide/08-integrations/07-nextjs-deployment.mdx + # - page: Examples + # icon: fa-regular fa-code + # path: 01-guide/08-integrations/08-nextjs-examples.mdx - section: Development contents: - page: Environment Variables @@ -289,6 +315,44 @@ navigation: # - page: PHP # icon: fa-brands fa-php # path: 01-guide/introduction.mdx + # - page: b + # path: 01-guide/introduction.mdx + # - page: async_client + # path: 01-guide/introduction.mdx + # - page: sync_client + # path: 01-guide/introduction.mdx + # - page: reset_baml_env_vars + # path: 01-guide/introduction.mdx + # - page: trace + # path: 01-guide/introduction.mdx + # - page: set_tags + # path: 01-guide/introduction.mdx + # - section: "baml_client: Typescript" + # contents: + # - page: TypeBuilder + # path: 01-guide/introduction.mdx + # - page: ClientRegistry + # path: 01-guide/introduction.mdx + # - page: BamlError + # path: 01-guide/introduction.mdx + # - page: BamlImageTs + # path: 01-guide/introduction.mdx + # - page: BamlAudioTs + # path: 01-guide/introduction.mdx + # - page: b + # path: 01-guide/introduction.mdx + # - page: async_client + # path: 01-guide/introduction.mdx + # - page: sync_client + # path: 01-guide/introduction.mdx + # - page: resetBamlEnvVars + # path: 01-guide/introduction.mdx + # - page: trace_async + # path: 01-guide/introduction.mdx + # - page: trace_sync + # path: 01-guide/introduction.mdx + # - page: set_tags + # path: 01-guide/introduction.mdx - tab: reference layout: # - page: Changelog diff --git a/fern/snippets/baml/cli/generate.mdx b/fern/snippets/baml/cli/generate.mdx new file mode 100644 index 000000000..bd56bd10b --- /dev/null +++ b/fern/snippets/baml/cli/generate.mdx @@ -0,0 +1,13 @@ + +```bash npm +npx baml-cli generate +``` + +```bash pnpm +pnpm exec baml-cli generate +``` + +```bash yarn +yarn baml-cli generate +``` + \ No newline at end of file diff --git a/fern/snippets/baml/cli/install/nodejs.mdx b/fern/snippets/baml/cli/install/nodejs.mdx new file mode 100644 index 000000000..625ba2aac --- /dev/null +++ b/fern/snippets/baml/cli/install/nodejs.mdx @@ -0,0 +1,13 @@ + +```bash npm +npx baml-cli init +``` + +```bash pnpm +pnpm exec baml-cli init +``` + +```bash yarn +yarn baml-cli init +``` + \ No newline at end of file diff --git a/fern/snippets/baml/clients/openai.mdx b/fern/snippets/baml/clients/openai.mdx new file mode 100644 index 000000000..1b5f78698 --- /dev/null +++ b/fern/snippets/baml/clients/openai.mdx @@ -0,0 +1,9 @@ +```baml title="baml_src/clients.baml" +client OpenAI { + provider openai + options { + model gpt-4o + api_key env.OPENAI_API_KEY + } +} +``` diff --git a/fern/snippets/baml/prompts/story.mdx b/fern/snippets/baml/prompts/story.mdx new file mode 100644 index 000000000..36b379615 --- /dev/null +++ b/fern/snippets/baml/prompts/story.mdx @@ -0,0 +1,26 @@ +```baml title="baml_src/story.baml" focus={1-16} +class Story { + title: string + content: string +} + +function WriteMeAStory(prompt: string) -> Story { + client OpenAI + prompt #" + Act as a storyteller. + + { ctx.output_format } + + { _.role('user') } + Once upon a time {prompt} + "# +} + +test WriteMeAStory { + functions [WriteMeAStory] + args { + prompt "The Universe" + } + +} +``` \ No newline at end of file diff --git a/fern/snippets/frameworks/nextjs/baml-generator.mdx b/fern/snippets/frameworks/nextjs/baml-generator.mdx new file mode 100644 index 000000000..78dfcdf2e --- /dev/null +++ b/fern/snippets/frameworks/nextjs/baml-generator.mdx @@ -0,0 +1,7 @@ +```baml title="baml_src/generators.baml" +generator typescript { + output_type "typescript/react" + output_dir ".." + version "latest" +} +``` diff --git a/fern/snippets/frameworks/nextjs/custom-client-hook.mdx b/fern/snippets/frameworks/nextjs/custom-client-hook.mdx new file mode 100644 index 000000000..68a70751a --- /dev/null +++ b/fern/snippets/frameworks/nextjs/custom-client-hook.mdx @@ -0,0 +1,53 @@ + +```tsx title="app/components/story-form.tsx" {3, 7-14} +'use client' + +import { writeMeAStoryAction } from "@/actions/story"; +import type { Story } from "@/baml_client/types"; + +export function StoryForm() { + const { + data: finalStory, + partialData: streamingStory, + isLoading, + isError, + error, + mutate + } = useBamlStream(writeMeAStoryAction); + + const story = finalStory ?? streamingStory; // Typesafe: Story | undefined + const title = story?.title; // Typesafe: string | undefined + const content = story?.content; // Typesafe: string | undefined + + return ( +
+
{ + const formData = new FormData(e.currentTarget as HTMLFormElement); + + mutate(formData.get('prompt') as string); + }} + > + + +
+ +
+

{streamingStory ? "Streaming Response:" : "Final Response:"}

+

{story?.title}

+
+            {story?.content}
+          
+
+ + {isError && ( +
+ Error: {error?.message} +
+ )} +
+ ); +} +``` \ No newline at end of file diff --git a/fern/snippets/frameworks/nextjs/custom-server-action.mdx b/fern/snippets/frameworks/nextjs/custom-server-action.mdx new file mode 100644 index 000000000..56edd828d --- /dev/null +++ b/fern/snippets/frameworks/nextjs/custom-server-action.mdx @@ -0,0 +1,17 @@ +```ts title="app/actions/story.ts" {5} +'use server' + +import { b } from "@/baml_client"; + +// Custom Server Action +export async function writeMeAStoryAction(prompt: string) { + // You can add any server logic here, like auth, validation, rate limiting, etc. + const auth = await auth(); + + if (!auth) { + throw new Error("Unauthorized"); + } + + return b.stream.WriteMeAStory(prompt).toStreamable(); +} +``` \ No newline at end of file diff --git a/fern/snippets/frameworks/nextjs/env-vars/openai.mdx b/fern/snippets/frameworks/nextjs/env-vars/openai.mdx new file mode 100644 index 000000000..4d0481873 --- /dev/null +++ b/fern/snippets/frameworks/nextjs/env-vars/openai.mdx @@ -0,0 +1,18 @@ +Setup provider specific API Keys. + +```.env .env.local +OPENAI_API_KEY=sk-... +``` + + +To enable observability with BAML, you'll first need to sign up for a [Boundary Studio](https://app.boundaryml.com) account. + + +```.env .env.local +BOUNDARY_PROJECT_ID=sk-... +BOUNDARY_SECRET=sk-... + +OPENAI_API_KEY=sk-... +``` + + \ No newline at end of file diff --git a/fern/snippets/frameworks/nextjs/generated-client-hook.mdx b/fern/snippets/frameworks/nextjs/generated-client-hook.mdx new file mode 100644 index 000000000..deeaae41c --- /dev/null +++ b/fern/snippets/frameworks/nextjs/generated-client-hook.mdx @@ -0,0 +1,54 @@ + +```tsx title="app/components/story-form.tsx" {3, 7-15} +'use client' + +import { useWriteMeAStoryAction } from "@/baml_client/nextjs"; +import type { Story } from "@/baml_client/types"; + +export function StoryForm() { + // Generated hook from BAML Function WriteMeAStory + const { + data: finalStory, + partialData: streamingStory, + isLoading, + isError, + error, + mutate + } = useWriteMeAStoryAction(); + + const story = isLoading ? streamingStory : finalStory; // Typesafe: Story | undefined + const title = story?.title; // Typesafe: string | undefined + const content = story?.content; // Typesafe: string | undefined + + return ( +
+
{ + const formData = new FormData(e.currentTarget as HTMLFormElement); + + mutate(formData.get('prompt') as string); + }} + > + + +
+ +
+

{streamingStory ? "Streaming Response:" : "Final Response:"}

+

{story?.title}

+
+            {story?.content}
+          
+
+ + {isError && ( +
+ Error: {error?.message} +
+ )} +
+ ); +} +``` \ No newline at end of file diff --git a/fern/snippets/frameworks/nextjs/install-baml.mdx b/fern/snippets/frameworks/nextjs/install-baml.mdx new file mode 100644 index 000000000..4b8a60037 --- /dev/null +++ b/fern/snippets/frameworks/nextjs/install-baml.mdx @@ -0,0 +1,19 @@ + +```bash npm +npm install @boundaryml/baml +npm install @boundaryml/nextjs +npm install @boundaryml/react +``` + +```bash pnpm +pnpm add @boundaryml/baml +pnpm add @boundaryml/nextjs +pnpm add @boundaryml/react +``` + +```bash yarn +yarn add @boundaryml/baml +yarn add @boundaryml/nextjs +yarn add @boundaryml/react +``` + diff --git a/fern/snippets/frameworks/nextjs/next-config.mdx b/fern/snippets/frameworks/nextjs/next-config.mdx new file mode 100644 index 000000000..116cb9735 --- /dev/null +++ b/fern/snippets/frameworks/nextjs/next-config.mdx @@ -0,0 +1,34 @@ + +```typescript title="next.config.ts" {1,8} +import { withBaml } from '@boundaryml/nextjs'; +import type { NextConfig } from 'next'; + +const nextConfig: NextConfig = { + // ... existing config +}; + +export default withBaml()(nextConfig); +``` + +```javascript title="next.config.mjs" {1,8} +import { withBaml } from '@boundaryml/nextjs'; +import type { NextConfig } from 'next'; + +const nextConfig: NextConfig = { + // ... existing config +}; + +export default withBaml()(nextConfig); +``` + +```javascript title="next.config.js" {1,8} +const { withBaml } = require('@boundaryml/nextjs'); + +/** @type {import('next').NextConfig} */ +const nextConfig = { + // ... existing config +} + +module.exports = withBaml()(nextConfig) +``` + diff --git a/integ-tests/README.md b/integ-tests/README.md index e2e9c0a61..20784d379 100644 --- a/integ-tests/README.md +++ b/integ-tests/README.md @@ -172,7 +172,13 @@ b. **Using .env File (Recommended for open source contributors)** ```bash # Build the debug version of the client cd typescript && pnpm run build:debug + ``` + + + For local development, use `pnpm run build:debug` which is much faster. The full `pnpm run build` can take several minutes as it creates an optimized production build. + + ```bash # Generate the test code pnpm run generate diff --git a/integ-tests/baml_src/generators.baml b/integ-tests/baml_src/generators.baml index bf14e8dac..cc4651eb9 100644 --- a/integ-tests/baml_src/generators.baml +++ b/integ-tests/baml_src/generators.baml @@ -10,15 +10,21 @@ generator lang_typescript { version "0.74.0" } +generator lang_typescript_react { + output_type typescript/react + output_dir "../react" + version "0.74.0" +} + generator lang_ruby { output_type ruby/sorbet output_dir "../ruby" version "0.74.0" } -// generator openapi { -// output_type rest/openapi -// output_dir "../openapi" -// version "0.74.0" -// on_generate "rm .gitignore" -// } +generator openapi { + output_type rest/openapi + output_dir "../openapi" + version "0.74.0" + on_generate "rm .gitignore" +} \ No newline at end of file diff --git a/integ-tests/baml_src/test-files/providers/aws.baml b/integ-tests/baml_src/test-files/providers/aws.baml index 5428a2d40..70a830cbc 100644 --- a/integ-tests/baml_src/test-files/providers/aws.baml +++ b/integ-tests/baml_src/test-files/providers/aws.baml @@ -5,6 +5,31 @@ function TestAws(input: string) -> string { "# } +class UniverseQuestion { + question string + answer string +} + +class UniverseQuestionInput { + question string +} + +function TestUniverseQuestion(question: UniverseQuestionInput) -> UniverseQuestion { + client AwsBedrock + prompt #" + You are a helpful assistant that answers questions about the universe. + + {{ ctx.output_format }} + + {{ _.role("user")}} + + Question: {{ question }} + + Answer: + "# +} + + function TestAwsInvalidRegion(input: string) -> string { client AwsBedrockInvalidRegion prompt #" diff --git a/integ-tests/openapi/baml_client/openapi.yaml b/integ-tests/openapi/baml_client/openapi.yaml index 526fda7e3..049c81d7f 100644 --- a/integ-tests/openapi/baml_client/openapi.yaml +++ b/integ-tests/openapi/baml_client/openapi.yaml @@ -32,6 +32,47 @@ paths: title: AaaSamOutputFormatResponse $ref: '#/components/schemas/Recipe' operationId: AaaSamOutputFormat + /call/AliasThatPointsToRecursiveType: + post: + requestBody: + $ref: '#/components/requestBodies/AliasThatPointsToRecursiveType' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: AliasThatPointsToRecursiveTypeResponse + $ref: '#/components/schemas/LinkedListAliasNode' + operationId: AliasThatPointsToRecursiveType + /call/AliasWithMultipleAttrs: + post: + requestBody: + $ref: '#/components/requestBodies/AliasWithMultipleAttrs' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: AliasWithMultipleAttrsResponse + type: object + properties: + value: + type: integer + checks: + type: object + properties: + gt_ten: + $ref: '#components/schemas/Check' + required: + - gt_ten + additionalProperties: false + required: + - value + - checks + additionalProperties: false + operationId: AliasWithMultipleAttrs /call/AliasedInputClass: post: requestBody: @@ -97,6 +138,32 @@ paths: title: AliasedInputListResponse type: string operationId: AliasedInputList + /call/AllowedOptionals: + post: + requestBody: + $ref: '#/components/requestBodies/AllowedOptionals' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: AllowedOptionalsResponse + $ref: '#/components/schemas/OptionalListAndMap' + operationId: AllowedOptionals + /call/AssertFn: + post: + requestBody: + $ref: '#/components/requestBodies/AssertFn' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: AssertFnResponse + type: integer + operationId: AssertFn /call/AudioInput: post: requestBody: @@ -110,6 +177,45 @@ paths: title: AudioInputResponse type: string operationId: AudioInput + /call/BuildLinkedList: + post: + requestBody: + $ref: '#/components/requestBodies/BuildLinkedList' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: BuildLinkedListResponse + $ref: '#/components/schemas/LinkedList' + operationId: BuildLinkedList + /call/BuildTree: + post: + requestBody: + $ref: '#/components/requestBodies/BuildTree' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: BuildTreeResponse + $ref: '#/components/schemas/Tree' + operationId: BuildTree + /call/ClassThatPointsToRecursiveClassThroughAlias: + post: + requestBody: + $ref: '#/components/requestBodies/ClassThatPointsToRecursiveClassThroughAlias' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: ClassThatPointsToRecursiveClassThroughAliasResponse + $ref: '#/components/schemas/ClassToRecAlias' + operationId: ClassThatPointsToRecursiveClassThroughAlias /call/ClassifyDynEnumTwo: post: requestBody: @@ -162,6 +268,19 @@ paths: title: ClassifyMessage3Response $ref: '#/components/schemas/Category' operationId: ClassifyMessage3 + /call/Completion: + post: + requestBody: + $ref: '#/components/requestBodies/Completion' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: CompletionResponse + type: string + operationId: Completion /call/CustomTask: post: requestBody: @@ -325,6 +444,21 @@ paths: title: ExtractContactInfoResponse $ref: '#/components/schemas/ContactInfo' operationId: ExtractContactInfo + /call/ExtractHobby: + post: + requestBody: + $ref: '#/components/requestBodies/ExtractHobby' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: ExtractHobbyResponse + type: array + items: + $ref: '#/components/schemas/Hobby' + operationId: ExtractHobby /call/ExtractNames: post: requestBody: @@ -448,6 +582,34 @@ paths: title: FnEnumOutputResponse $ref: '#/components/schemas/EnumOutput' operationId: FnEnumOutput + /call/FnLiteralClassInputOutput: + post: + requestBody: + $ref: '#/components/requestBodies/FnLiteralClassInputOutput' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: FnLiteralClassInputOutputResponse + $ref: '#/components/schemas/LiteralClassHello' + operationId: FnLiteralClassInputOutput + /call/FnLiteralUnionClassInputOutput: + post: + requestBody: + $ref: '#/components/requestBodies/FnLiteralUnionClassInputOutput' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: FnLiteralUnionClassInputOutputResponse + oneOf: + - $ref: '#/components/schemas/LiteralClassOne' + - $ref: '#/components/schemas/LiteralClassTwo' + operationId: FnLiteralUnionClassInputOutput /call/FnNamedArgsSingleStringOptional: post: requestBody: @@ -528,6 +690,58 @@ paths: title: FnOutputClassWithEnumResponse $ref: '#/components/schemas/TestClassWithEnum' operationId: FnOutputClassWithEnum + /call/FnOutputInt: + post: + requestBody: + $ref: '#/components/requestBodies/FnOutputInt' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: FnOutputIntResponse + type: integer + operationId: FnOutputInt + /call/FnOutputLiteralBool: + post: + requestBody: + $ref: '#/components/requestBodies/FnOutputLiteralBool' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: FnOutputLiteralBoolResponse + type: boolean + operationId: FnOutputLiteralBool + /call/FnOutputLiteralInt: + post: + requestBody: + $ref: '#/components/requestBodies/FnOutputLiteralInt' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: FnOutputLiteralIntResponse + type: integer + operationId: FnOutputLiteralInt + /call/FnOutputLiteralString: + post: + requestBody: + $ref: '#/components/requestBodies/FnOutputLiteralString' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: FnOutputLiteralStringResponse + type: string + operationId: FnOutputLiteralString /call/FnOutputStringList: post: requestBody: @@ -621,820 +835,1837 @@ paths: title: GetQueryResponse $ref: '#/components/schemas/SearchParams' operationId: GetQuery - /call/MyFunc: + /call/InOutEnumMapKey: post: requestBody: - $ref: '#/components/requestBodies/MyFunc' + $ref: '#/components/requestBodies/InOutEnumMapKey' responses: '200': description: Successful operation content: application/json: schema: - title: MyFuncResponse - $ref: '#/components/schemas/DynamicOutput' - operationId: MyFunc - /call/OptionalTest_Function: + title: InOutEnumMapKeyResponse + type: object + additionalProperties: + type: string + operationId: InOutEnumMapKey + /call/InOutLiteralStringUnionMapKey: post: requestBody: - $ref: '#/components/requestBodies/OptionalTest_Function' + $ref: '#/components/requestBodies/InOutLiteralStringUnionMapKey' responses: '200': description: Successful operation content: application/json: schema: - title: OptionalTest_FunctionResponse - type: array - items: - $ref: '#/components/schemas/OptionalTest_ReturnType' - operationId: OptionalTest_Function - /call/PredictAge: + title: InOutLiteralStringUnionMapKeyResponse + type: object + additionalProperties: + type: string + operationId: InOutLiteralStringUnionMapKey + /call/InOutSingleLiteralStringMapKey: post: requestBody: - $ref: '#/components/requestBodies/PredictAge' + $ref: '#/components/requestBodies/InOutSingleLiteralStringMapKey' responses: '200': description: Successful operation content: application/json: schema: - title: PredictAgeResponse - $ref: '#/components/schemas/FooAny' - operationId: PredictAge - /call/PredictAgeBare: + title: InOutSingleLiteralStringMapKeyResponse + type: object + additionalProperties: + type: string + operationId: InOutSingleLiteralStringMapKey + /call/JsonTypeAliasCycle: post: requestBody: - $ref: '#/components/requestBodies/PredictAgeBare' + $ref: '#/components/requestBodies/JsonTypeAliasCycle' responses: '200': description: Successful operation content: application/json: schema: - title: PredictAgeBareResponse + title: JsonTypeAliasCycleResponse + anyOf: [] + operationId: JsonTypeAliasCycle + /call/LiteralUnionsTest: + post: + requestBody: + $ref: '#/components/requestBodies/LiteralUnionsTest' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: LiteralUnionsTestResponse + oneOf: + - type: integer + - type: boolean + - type: string + operationId: LiteralUnionsTest + /call/MakeBlockConstraint: + post: + requestBody: + $ref: '#/components/requestBodies/MakeBlockConstraint' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: MakeBlockConstraintResponse type: object properties: value: - type: integer + $ref: '#/components/schemas/BlockConstraint' checks: type: object properties: - too_big: + cross_field: $ref: '#components/schemas/Check' required: - - too_big + - cross_field additionalProperties: false required: - value - checks additionalProperties: false - operationId: PredictAgeBare - /call/PromptTestClaude: + operationId: MakeBlockConstraint + /call/MakeNestedBlockConstraint: post: requestBody: - $ref: '#/components/requestBodies/PromptTestClaude' + $ref: '#/components/requestBodies/MakeNestedBlockConstraint' responses: '200': description: Successful operation content: application/json: schema: - title: PromptTestClaudeResponse - type: string - operationId: PromptTestClaude - /call/PromptTestClaudeChat: + title: MakeNestedBlockConstraintResponse + $ref: '#/components/schemas/NestedBlockConstraint' + operationId: MakeNestedBlockConstraint + /call/MakeSemanticContainer: post: requestBody: - $ref: '#/components/requestBodies/PromptTestClaudeChat' + $ref: '#/components/requestBodies/MakeSemanticContainer' responses: '200': description: Successful operation content: application/json: schema: - title: PromptTestClaudeChatResponse - type: string - operationId: PromptTestClaudeChat - /call/PromptTestClaudeChatNoSystem: + title: MakeSemanticContainerResponse + $ref: '#/components/schemas/SemanticContainer' + operationId: MakeSemanticContainer + /call/MapAlias: post: requestBody: - $ref: '#/components/requestBodies/PromptTestClaudeChatNoSystem' + $ref: '#/components/requestBodies/MapAlias' responses: '200': description: Successful operation content: application/json: schema: - title: PromptTestClaudeChatNoSystemResponse - type: string - operationId: PromptTestClaudeChatNoSystem - /call/PromptTestOpenAI: + title: MapAliasResponse + type: object + additionalProperties: + type: array + items: + type: string + operationId: MapAlias + /call/MergeAliasAttributes: post: requestBody: - $ref: '#/components/requestBodies/PromptTestOpenAI' + $ref: '#/components/requestBodies/MergeAliasAttributes' responses: '200': description: Successful operation content: application/json: schema: - title: PromptTestOpenAIResponse - type: string - operationId: PromptTestOpenAI - /call/PromptTestOpenAIChat: + title: MergeAliasAttributesResponse + $ref: '#/components/schemas/MergeAttrs' + operationId: MergeAliasAttributes + /call/MyFunc: post: requestBody: - $ref: '#/components/requestBodies/PromptTestOpenAIChat' + $ref: '#/components/requestBodies/MyFunc' responses: '200': description: Successful operation content: application/json: schema: - title: PromptTestOpenAIChatResponse - type: string - operationId: PromptTestOpenAIChat - /call/PromptTestOpenAIChatNoSystem: + title: MyFuncResponse + $ref: '#/components/schemas/DynamicOutput' + operationId: MyFunc + /call/NestedAlias: post: requestBody: - $ref: '#/components/requestBodies/PromptTestOpenAIChatNoSystem' + $ref: '#/components/requestBodies/NestedAlias' responses: '200': description: Successful operation content: application/json: schema: - title: PromptTestOpenAIChatNoSystemResponse - type: string - operationId: PromptTestOpenAIChatNoSystem - /call/PromptTestStreaming: + title: NestedAliasResponse + oneOf: + - oneOf: + - type: integer + - type: string + - type: boolean + - type: number + - type: array + items: + type: string + - type: object + additionalProperties: + type: array + items: + type: string + operationId: NestedAlias + /call/NullLiteralClassHello: post: requestBody: - $ref: '#/components/requestBodies/PromptTestStreaming' + $ref: '#/components/requestBodies/NullLiteralClassHello' responses: '200': description: Successful operation content: application/json: schema: - title: PromptTestStreamingResponse - type: string - operationId: PromptTestStreaming - /call/ReturnFailingAssert: + title: NullLiteralClassHelloResponse + $ref: '#/components/schemas/ClassForNullLiteral' + operationId: NullLiteralClassHello + /call/OptionalTest_Function: post: requestBody: - $ref: '#/components/requestBodies/ReturnFailingAssert' + $ref: '#/components/requestBodies/OptionalTest_Function' responses: '200': description: Successful operation content: application/json: schema: - title: ReturnFailingAssertResponse - type: integer - operationId: ReturnFailingAssert - /call/ReturnMalformedConstraints: - post: - requestBody: - $ref: '#/components/requestBodies/ReturnMalformedConstraints' - responses: - '200': - description: Successful operation - content: - application/json: - schema: - title: ReturnMalformedConstraintsResponse - $ref: '#/components/schemas/MalformedConstraints' - operationId: ReturnMalformedConstraints - /call/SchemaDescriptions: + title: OptionalTest_FunctionResponse + type: array + items: + $ref: '#/components/schemas/OptionalTest_ReturnType' + operationId: OptionalTest_Function + /call/PredictAge: post: requestBody: - $ref: '#/components/requestBodies/SchemaDescriptions' + $ref: '#/components/requestBodies/PredictAge' responses: '200': description: Successful operation content: application/json: schema: - title: SchemaDescriptionsResponse - $ref: '#/components/schemas/Schema' - operationId: SchemaDescriptions - /call/StreamBigNumbers: + title: PredictAgeResponse + $ref: '#/components/schemas/FooAny' + operationId: PredictAge + /call/PredictAgeBare: post: requestBody: - $ref: '#/components/requestBodies/StreamBigNumbers' + $ref: '#/components/requestBodies/PredictAgeBare' responses: '200': description: Successful operation content: application/json: schema: - title: StreamBigNumbersResponse - $ref: '#/components/schemas/BigNumbers' - operationId: StreamBigNumbers - /call/StreamFailingAssertion: + title: PredictAgeBareResponse + type: object + properties: + value: + type: integer + checks: + type: object + properties: + too_big: + $ref: '#components/schemas/Check' + required: + - too_big + additionalProperties: false + required: + - value + - checks + additionalProperties: false + operationId: PredictAgeBare + /call/PrimitiveAlias: post: requestBody: - $ref: '#/components/requestBodies/StreamFailingAssertion' + $ref: '#/components/requestBodies/PrimitiveAlias' responses: '200': description: Successful operation content: application/json: schema: - title: StreamFailingAssertionResponse - $ref: '#/components/schemas/TwoStoriesOneTitle' - operationId: StreamFailingAssertion - /call/StreamOneBigNumber: + title: PrimitiveAliasResponse + oneOf: + - type: integer + - type: string + - type: boolean + - type: number + operationId: PrimitiveAlias + /call/PromptTestClaude: post: requestBody: - $ref: '#/components/requestBodies/StreamOneBigNumber' + $ref: '#/components/requestBodies/PromptTestClaude' responses: '200': description: Successful operation content: application/json: schema: - title: StreamOneBigNumberResponse - type: integer - operationId: StreamOneBigNumber - /call/StreamUnionIntegers: + title: PromptTestClaudeResponse + type: string + operationId: PromptTestClaude + /call/PromptTestClaudeChat: post: requestBody: - $ref: '#/components/requestBodies/StreamUnionIntegers' + $ref: '#/components/requestBodies/PromptTestClaudeChat' responses: '200': description: Successful operation content: application/json: schema: - title: StreamUnionIntegersResponse - type: array - items: - oneOf: - - type: integer - - type: string - operationId: StreamUnionIntegers - /call/StreamingCompoundNumbers: + title: PromptTestClaudeChatResponse + type: string + operationId: PromptTestClaudeChat + /call/PromptTestClaudeChatNoSystem: post: requestBody: - $ref: '#/components/requestBodies/StreamingCompoundNumbers' + $ref: '#/components/requestBodies/PromptTestClaudeChatNoSystem' responses: '200': description: Successful operation content: application/json: schema: - title: StreamingCompoundNumbersResponse - $ref: '#/components/schemas/CompoundBigNumbers' - operationId: StreamingCompoundNumbers - /call/TestAnthropic: + title: PromptTestClaudeChatNoSystemResponse + type: string + operationId: PromptTestClaudeChatNoSystem + /call/PromptTestOpenAI: post: requestBody: - $ref: '#/components/requestBodies/TestAnthropic' + $ref: '#/components/requestBodies/PromptTestOpenAI' responses: '200': description: Successful operation content: application/json: schema: - title: TestAnthropicResponse + title: PromptTestOpenAIResponse type: string - operationId: TestAnthropic - /call/TestAnthropicShorthand: + operationId: PromptTestOpenAI + /call/PromptTestOpenAIChat: post: requestBody: - $ref: '#/components/requestBodies/TestAnthropicShorthand' + $ref: '#/components/requestBodies/PromptTestOpenAIChat' responses: '200': description: Successful operation content: application/json: schema: - title: TestAnthropicShorthandResponse + title: PromptTestOpenAIChatResponse type: string - operationId: TestAnthropicShorthand - /call/TestAws: + operationId: PromptTestOpenAIChat + /call/PromptTestOpenAIChatNoSystem: post: requestBody: - $ref: '#/components/requestBodies/TestAws' + $ref: '#/components/requestBodies/PromptTestOpenAIChatNoSystem' responses: '200': description: Successful operation content: application/json: schema: - title: TestAwsResponse + title: PromptTestOpenAIChatNoSystemResponse type: string - operationId: TestAws - /call/TestAzure: + operationId: PromptTestOpenAIChatNoSystem + /call/PromptTestStreaming: post: requestBody: - $ref: '#/components/requestBodies/TestAzure' + $ref: '#/components/requestBodies/PromptTestStreaming' responses: '200': description: Successful operation content: application/json: schema: - title: TestAzureResponse + title: PromptTestStreamingResponse type: string - operationId: TestAzure - /call/TestCaching: + operationId: PromptTestStreaming + /call/RecursiveAliasCycle: post: requestBody: - $ref: '#/components/requestBodies/TestCaching' + $ref: '#/components/requestBodies/RecursiveAliasCycle' responses: '200': description: Successful operation content: application/json: schema: - title: TestCachingResponse - type: string - operationId: TestCaching - /call/TestFallbackClient: + title: RecursiveAliasCycleResponse + anyOf: [] + operationId: RecursiveAliasCycle + /call/RecursiveClassWithAliasIndirection: post: requestBody: - $ref: '#/components/requestBodies/TestFallbackClient' + $ref: '#/components/requestBodies/RecursiveClassWithAliasIndirection' responses: '200': description: Successful operation content: application/json: schema: - title: TestFallbackClientResponse - type: string - operationId: TestFallbackClient - /call/TestFallbackToShorthand: + title: RecursiveClassWithAliasIndirectionResponse + $ref: '#/components/schemas/NodeWithAliasIndirection' + operationId: RecursiveClassWithAliasIndirection + /call/ReturnAliasWithMergedAttributes: post: requestBody: - $ref: '#/components/requestBodies/TestFallbackToShorthand' + $ref: '#/components/requestBodies/ReturnAliasWithMergedAttributes' responses: '200': description: Successful operation content: application/json: schema: - title: TestFallbackToShorthandResponse - type: string - operationId: TestFallbackToShorthand - /call/TestFnNamedArgsSingleBool: + title: ReturnAliasWithMergedAttributesResponse + type: object + properties: + value: + type: integer + checks: + type: object + properties: + gt_ten: + $ref: '#components/schemas/Check' + required: + - gt_ten + additionalProperties: false + required: + - value + - checks + additionalProperties: false + operationId: ReturnAliasWithMergedAttributes + /call/ReturnFailingAssert: post: requestBody: - $ref: '#/components/requestBodies/TestFnNamedArgsSingleBool' + $ref: '#/components/requestBodies/ReturnFailingAssert' responses: '200': description: Successful operation content: application/json: schema: - title: TestFnNamedArgsSingleBoolResponse - type: string - operationId: TestFnNamedArgsSingleBool - /call/TestFnNamedArgsSingleClass: + title: ReturnFailingAssertResponse + type: integer + operationId: ReturnFailingAssert + /call/ReturnMalformedConstraints: post: requestBody: - $ref: '#/components/requestBodies/TestFnNamedArgsSingleClass' + $ref: '#/components/requestBodies/ReturnMalformedConstraints' responses: '200': description: Successful operation content: application/json: schema: - title: TestFnNamedArgsSingleClassResponse - type: string - operationId: TestFnNamedArgsSingleClass - /call/TestFnNamedArgsSingleEnumList: + title: ReturnMalformedConstraintsResponse + $ref: '#/components/schemas/MalformedConstraints' + operationId: ReturnMalformedConstraints + /call/SchemaDescriptions: post: requestBody: - $ref: '#/components/requestBodies/TestFnNamedArgsSingleEnumList' + $ref: '#/components/requestBodies/SchemaDescriptions' responses: '200': description: Successful operation content: application/json: schema: - title: TestFnNamedArgsSingleEnumListResponse - type: string - operationId: TestFnNamedArgsSingleEnumList - /call/TestFnNamedArgsSingleFloat: + title: SchemaDescriptionsResponse + $ref: '#/components/schemas/Schema' + operationId: SchemaDescriptions + /call/SimpleRecursiveListAlias: post: requestBody: - $ref: '#/components/requestBodies/TestFnNamedArgsSingleFloat' + $ref: '#/components/requestBodies/SimpleRecursiveListAlias' responses: '200': description: Successful operation content: application/json: schema: - title: TestFnNamedArgsSingleFloatResponse - type: string - operationId: TestFnNamedArgsSingleFloat - /call/TestFnNamedArgsSingleInt: + title: SimpleRecursiveListAliasResponse + anyOf: [] + operationId: SimpleRecursiveListAlias + /call/SimpleRecursiveMapAlias: post: requestBody: - $ref: '#/components/requestBodies/TestFnNamedArgsSingleInt' + $ref: '#/components/requestBodies/SimpleRecursiveMapAlias' responses: '200': description: Successful operation content: application/json: schema: - title: TestFnNamedArgsSingleIntResponse - type: string - operationId: TestFnNamedArgsSingleInt - /call/TestFnNamedArgsSingleMapStringToClass: + title: SimpleRecursiveMapAliasResponse + anyOf: [] + operationId: SimpleRecursiveMapAlias + /call/StreamBigNumbers: post: requestBody: - $ref: '#/components/requestBodies/TestFnNamedArgsSingleMapStringToClass' + $ref: '#/components/requestBodies/StreamBigNumbers' responses: '200': description: Successful operation content: application/json: schema: - title: TestFnNamedArgsSingleMapStringToClassResponse - type: object - additionalProperties: - $ref: '#/components/schemas/StringToClassEntry' - operationId: TestFnNamedArgsSingleMapStringToClass - /call/TestFnNamedArgsSingleMapStringToMap: + title: StreamBigNumbersResponse + $ref: '#/components/schemas/BigNumbers' + operationId: StreamBigNumbers + /call/StreamFailingAssertion: post: requestBody: - $ref: '#/components/requestBodies/TestFnNamedArgsSingleMapStringToMap' + $ref: '#/components/requestBodies/StreamFailingAssertion' responses: '200': description: Successful operation content: application/json: schema: - title: TestFnNamedArgsSingleMapStringToMapResponse - type: object - additionalProperties: - type: object - additionalProperties: - type: string - operationId: TestFnNamedArgsSingleMapStringToMap - /call/TestFnNamedArgsSingleMapStringToString: + title: StreamFailingAssertionResponse + $ref: '#/components/schemas/TwoStoriesOneTitle' + operationId: StreamFailingAssertion + /call/StreamOneBigNumber: post: requestBody: - $ref: '#/components/requestBodies/TestFnNamedArgsSingleMapStringToString' + $ref: '#/components/requestBodies/StreamOneBigNumber' responses: '200': description: Successful operation content: application/json: schema: - title: TestFnNamedArgsSingleMapStringToStringResponse - type: object - additionalProperties: - type: string - operationId: TestFnNamedArgsSingleMapStringToString - /call/TestFnNamedArgsSingleString: + title: StreamOneBigNumberResponse + type: integer + operationId: StreamOneBigNumber + /call/StreamUnionIntegers: post: requestBody: - $ref: '#/components/requestBodies/TestFnNamedArgsSingleString' + $ref: '#/components/requestBodies/StreamUnionIntegers' responses: '200': description: Successful operation content: application/json: schema: - title: TestFnNamedArgsSingleStringResponse - type: string - operationId: TestFnNamedArgsSingleString - /call/TestFnNamedArgsSingleStringArray: + title: StreamUnionIntegersResponse + type: array + items: + oneOf: + - type: integer + - type: string + operationId: StreamUnionIntegers + /call/StreamingCompoundNumbers: post: requestBody: - $ref: '#/components/requestBodies/TestFnNamedArgsSingleStringArray' + $ref: '#/components/requestBodies/StreamingCompoundNumbers' responses: '200': description: Successful operation content: application/json: schema: - title: TestFnNamedArgsSingleStringArrayResponse - type: string - operationId: TestFnNamedArgsSingleStringArray - /call/TestFnNamedArgsSingleStringList: + title: StreamingCompoundNumbersResponse + $ref: '#/components/schemas/CompoundBigNumbers' + operationId: StreamingCompoundNumbers + /call/TestAnthropic: post: requestBody: - $ref: '#/components/requestBodies/TestFnNamedArgsSingleStringList' + $ref: '#/components/requestBodies/TestAnthropic' responses: '200': description: Successful operation content: application/json: schema: - title: TestFnNamedArgsSingleStringListResponse + title: TestAnthropicResponse type: string - operationId: TestFnNamedArgsSingleStringList - /call/TestGemini: + operationId: TestAnthropic + /call/TestAnthropicShorthand: post: requestBody: - $ref: '#/components/requestBodies/TestGemini' + $ref: '#/components/requestBodies/TestAnthropicShorthand' responses: '200': description: Successful operation content: application/json: schema: - title: TestGeminiResponse + title: TestAnthropicShorthandResponse type: string - operationId: TestGemini - /call/TestImageInput: + operationId: TestAnthropicShorthand + /call/TestAws: post: requestBody: - $ref: '#/components/requestBodies/TestImageInput' + $ref: '#/components/requestBodies/TestAws' responses: '200': description: Successful operation content: application/json: schema: - title: TestImageInputResponse + title: TestAwsResponse type: string - operationId: TestImageInput - /call/TestImageInputAnthropic: + operationId: TestAws + /call/TestAwsInvalidAccessKey: post: requestBody: - $ref: '#/components/requestBodies/TestImageInputAnthropic' + $ref: '#/components/requestBodies/TestAwsInvalidAccessKey' responses: '200': description: Successful operation content: application/json: schema: - title: TestImageInputAnthropicResponse + title: TestAwsInvalidAccessKeyResponse type: string - operationId: TestImageInputAnthropic - /call/TestImageListInput: + operationId: TestAwsInvalidAccessKey + /call/TestAwsInvalidProfile: post: requestBody: - $ref: '#/components/requestBodies/TestImageListInput' + $ref: '#/components/requestBodies/TestAwsInvalidProfile' responses: '200': description: Successful operation content: application/json: schema: - title: TestImageListInputResponse + title: TestAwsInvalidProfileResponse type: string - operationId: TestImageListInput - /call/TestMulticlassNamedArgs: + operationId: TestAwsInvalidProfile + /call/TestAwsInvalidRegion: post: requestBody: - $ref: '#/components/requestBodies/TestMulticlassNamedArgs' + $ref: '#/components/requestBodies/TestAwsInvalidRegion' responses: '200': description: Successful operation content: application/json: schema: - title: TestMulticlassNamedArgsResponse + title: TestAwsInvalidRegionResponse type: string - operationId: TestMulticlassNamedArgs - /call/TestOllama: + operationId: TestAwsInvalidRegion + /call/TestAwsInvalidSessionToken: post: requestBody: - $ref: '#/components/requestBodies/TestOllama' + $ref: '#/components/requestBodies/TestAwsInvalidSessionToken' responses: '200': description: Successful operation content: application/json: schema: - title: TestOllamaResponse + title: TestAwsInvalidSessionTokenResponse type: string - operationId: TestOllama - /call/TestOpenAILegacyProvider: + operationId: TestAwsInvalidSessionToken + /call/TestAzure: post: requestBody: - $ref: '#/components/requestBodies/TestOpenAILegacyProvider' + $ref: '#/components/requestBodies/TestAzure' responses: '200': description: Successful operation content: application/json: schema: - title: TestOpenAILegacyProviderResponse + title: TestAzureResponse type: string - operationId: TestOpenAILegacyProvider - /call/TestOpenAIShorthand: + operationId: TestAzure + /call/TestAzureFailure: post: requestBody: - $ref: '#/components/requestBodies/TestOpenAIShorthand' + $ref: '#/components/requestBodies/TestAzureFailure' responses: '200': description: Successful operation content: application/json: schema: - title: TestOpenAIShorthandResponse + title: TestAzureFailureResponse type: string - operationId: TestOpenAIShorthand - /call/TestRetryConstant: + operationId: TestAzureFailure + /call/TestCaching: post: requestBody: - $ref: '#/components/requestBodies/TestRetryConstant' + $ref: '#/components/requestBodies/TestCaching' responses: '200': description: Successful operation content: application/json: schema: - title: TestRetryConstantResponse + title: TestCachingResponse type: string - operationId: TestRetryConstant - /call/TestRetryExponential: + operationId: TestCaching + /call/TestFallbackClient: post: requestBody: - $ref: '#/components/requestBodies/TestRetryExponential' + $ref: '#/components/requestBodies/TestFallbackClient' responses: '200': description: Successful operation content: application/json: schema: - title: TestRetryExponentialResponse + title: TestFallbackClientResponse type: string - operationId: TestRetryExponential - /call/TestSingleFallbackClient: + operationId: TestFallbackClient + /call/TestFallbackToShorthand: post: requestBody: - $ref: '#/components/requestBodies/TestSingleFallbackClient' + $ref: '#/components/requestBodies/TestFallbackToShorthand' responses: '200': description: Successful operation content: application/json: schema: - title: TestSingleFallbackClientResponse + title: TestFallbackToShorthandResponse type: string - operationId: TestSingleFallbackClient - /call/TestVertex: + operationId: TestFallbackToShorthand + /call/TestFnNamedArgsSingleBool: post: requestBody: - $ref: '#/components/requestBodies/TestVertex' + $ref: '#/components/requestBodies/TestFnNamedArgsSingleBool' responses: '200': description: Successful operation content: application/json: schema: - title: TestVertexResponse + title: TestFnNamedArgsSingleBoolResponse type: string - operationId: TestVertex - /call/UnionTest_Function: + operationId: TestFnNamedArgsSingleBool + /call/TestFnNamedArgsSingleClass: post: requestBody: - $ref: '#/components/requestBodies/UnionTest_Function' + $ref: '#/components/requestBodies/TestFnNamedArgsSingleClass' responses: '200': description: Successful operation content: application/json: schema: - title: UnionTest_FunctionResponse - $ref: '#/components/schemas/UnionTest_ReturnType' - operationId: UnionTest_Function - /call/UseMalformedConstraints: + title: TestFnNamedArgsSingleClassResponse + type: string + operationId: TestFnNamedArgsSingleClass + /call/TestFnNamedArgsSingleEnumList: post: requestBody: - $ref: '#/components/requestBodies/UseMalformedConstraints' + $ref: '#/components/requestBodies/TestFnNamedArgsSingleEnumList' responses: '200': description: Successful operation content: application/json: schema: - title: UseMalformedConstraintsResponse - type: integer - operationId: UseMalformedConstraints -components: - requestBodies: - AaaSamOutputFormat: + title: TestFnNamedArgsSingleEnumListResponse + type: string + operationId: TestFnNamedArgsSingleEnumList + /call/TestFnNamedArgsSingleFloat: + post: + requestBody: + $ref: '#/components/requestBodies/TestFnNamedArgsSingleFloat' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestFnNamedArgsSingleFloatResponse + type: string + operationId: TestFnNamedArgsSingleFloat + /call/TestFnNamedArgsSingleInt: + post: + requestBody: + $ref: '#/components/requestBodies/TestFnNamedArgsSingleInt' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestFnNamedArgsSingleIntResponse + type: string + operationId: TestFnNamedArgsSingleInt + /call/TestFnNamedArgsSingleMapStringToClass: + post: + requestBody: + $ref: '#/components/requestBodies/TestFnNamedArgsSingleMapStringToClass' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestFnNamedArgsSingleMapStringToClassResponse + type: object + additionalProperties: + $ref: '#/components/schemas/StringToClassEntry' + operationId: TestFnNamedArgsSingleMapStringToClass + /call/TestFnNamedArgsSingleMapStringToMap: + post: + requestBody: + $ref: '#/components/requestBodies/TestFnNamedArgsSingleMapStringToMap' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestFnNamedArgsSingleMapStringToMapResponse + type: object + additionalProperties: + type: object + additionalProperties: + type: string + operationId: TestFnNamedArgsSingleMapStringToMap + /call/TestFnNamedArgsSingleMapStringToString: + post: + requestBody: + $ref: '#/components/requestBodies/TestFnNamedArgsSingleMapStringToString' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestFnNamedArgsSingleMapStringToStringResponse + type: object + additionalProperties: + type: string + operationId: TestFnNamedArgsSingleMapStringToString + /call/TestFnNamedArgsSingleString: + post: + requestBody: + $ref: '#/components/requestBodies/TestFnNamedArgsSingleString' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestFnNamedArgsSingleStringResponse + type: string + operationId: TestFnNamedArgsSingleString + /call/TestFnNamedArgsSingleStringArray: + post: + requestBody: + $ref: '#/components/requestBodies/TestFnNamedArgsSingleStringArray' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestFnNamedArgsSingleStringArrayResponse + type: string + operationId: TestFnNamedArgsSingleStringArray + /call/TestFnNamedArgsSingleStringList: + post: + requestBody: + $ref: '#/components/requestBodies/TestFnNamedArgsSingleStringList' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestFnNamedArgsSingleStringListResponse + type: string + operationId: TestFnNamedArgsSingleStringList + /call/TestGemini: + post: + requestBody: + $ref: '#/components/requestBodies/TestGemini' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestGeminiResponse + type: string + operationId: TestGemini + /call/TestGeminiOpenAiGeneric: + post: + requestBody: + $ref: '#/components/requestBodies/TestGeminiOpenAiGeneric' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestGeminiOpenAiGenericResponse + type: string + operationId: TestGeminiOpenAiGeneric + /call/TestGeminiSystem: + post: + requestBody: + $ref: '#/components/requestBodies/TestGeminiSystem' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestGeminiSystemResponse + type: string + operationId: TestGeminiSystem + /call/TestGeminiSystemAsChat: + post: + requestBody: + $ref: '#/components/requestBodies/TestGeminiSystemAsChat' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestGeminiSystemAsChatResponse + type: string + operationId: TestGeminiSystemAsChat + /call/TestImageInput: + post: + requestBody: + $ref: '#/components/requestBodies/TestImageInput' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestImageInputResponse + type: string + operationId: TestImageInput + /call/TestImageInputAnthropic: + post: + requestBody: + $ref: '#/components/requestBodies/TestImageInputAnthropic' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestImageInputAnthropicResponse + type: string + operationId: TestImageInputAnthropic + /call/TestImageListInput: + post: + requestBody: + $ref: '#/components/requestBodies/TestImageListInput' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestImageListInputResponse + type: string + operationId: TestImageListInput + /call/TestMemory: + post: + requestBody: + $ref: '#/components/requestBodies/TestMemory' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestMemoryResponse + $ref: '#/components/schemas/TestMemoryOutput' + operationId: TestMemory + /call/TestMulticlassNamedArgs: + post: + requestBody: + $ref: '#/components/requestBodies/TestMulticlassNamedArgs' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestMulticlassNamedArgsResponse + type: string + operationId: TestMulticlassNamedArgs + /call/TestNamedArgsLiteralBool: + post: + requestBody: + $ref: '#/components/requestBodies/TestNamedArgsLiteralBool' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestNamedArgsLiteralBoolResponse + type: string + operationId: TestNamedArgsLiteralBool + /call/TestNamedArgsLiteralInt: + post: + requestBody: + $ref: '#/components/requestBodies/TestNamedArgsLiteralInt' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestNamedArgsLiteralIntResponse + type: string + operationId: TestNamedArgsLiteralInt + /call/TestNamedArgsLiteralString: + post: + requestBody: + $ref: '#/components/requestBodies/TestNamedArgsLiteralString' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestNamedArgsLiteralStringResponse + type: string + operationId: TestNamedArgsLiteralString + /call/TestOllama: + post: + requestBody: + $ref: '#/components/requestBodies/TestOllama' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestOllamaResponse + type: string + operationId: TestOllama + /call/TestOpenAILegacyProvider: + post: + requestBody: + $ref: '#/components/requestBodies/TestOpenAILegacyProvider' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestOpenAILegacyProviderResponse + type: string + operationId: TestOpenAILegacyProvider + /call/TestOpenAIShorthand: + post: + requestBody: + $ref: '#/components/requestBodies/TestOpenAIShorthand' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestOpenAIShorthandResponse + type: string + operationId: TestOpenAIShorthand + /call/TestRetryConstant: + post: + requestBody: + $ref: '#/components/requestBodies/TestRetryConstant' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestRetryConstantResponse + type: string + operationId: TestRetryConstant + /call/TestRetryExponential: + post: + requestBody: + $ref: '#/components/requestBodies/TestRetryExponential' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestRetryExponentialResponse + type: string + operationId: TestRetryExponential + /call/TestSingleFallbackClient: + post: + requestBody: + $ref: '#/components/requestBodies/TestSingleFallbackClient' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestSingleFallbackClientResponse + type: string + operationId: TestSingleFallbackClient + /call/TestUniverseQuestion: + post: + requestBody: + $ref: '#/components/requestBodies/TestUniverseQuestion' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestUniverseQuestionResponse + $ref: '#/components/schemas/UniverseQuestion' + operationId: TestUniverseQuestion + /call/TestVertex: + post: + requestBody: + $ref: '#/components/requestBodies/TestVertex' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestVertexResponse + type: string + operationId: TestVertex + /call/TestVertexWithSystemInstructions: + post: + requestBody: + $ref: '#/components/requestBodies/TestVertexWithSystemInstructions' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestVertexWithSystemInstructionsResponse + type: string + operationId: TestVertexWithSystemInstructions + /call/UnionTest_Function: + post: + requestBody: + $ref: '#/components/requestBodies/UnionTest_Function' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: UnionTest_FunctionResponse + $ref: '#/components/schemas/UnionTest_ReturnType' + operationId: UnionTest_Function + /call/UseBlockConstraint: + post: + requestBody: + $ref: '#/components/requestBodies/UseBlockConstraint' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: UseBlockConstraintResponse + type: integer + operationId: UseBlockConstraint + /call/UseMalformedConstraints: + post: + requestBody: + $ref: '#/components/requestBodies/UseMalformedConstraints' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: UseMalformedConstraintsResponse + type: integer + operationId: UseMalformedConstraints + /call/UseNestedBlockConstraint: + post: + requestBody: + $ref: '#/components/requestBodies/UseNestedBlockConstraint' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: UseNestedBlockConstraintResponse + type: integer + operationId: UseNestedBlockConstraint +components: + requestBodies: + AaaSamOutputFormat: + required: true + content: + application/json: + schema: + title: AaaSamOutputFormatRequest + type: object + properties: + recipe: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - recipe + additionalProperties: false + AliasThatPointsToRecursiveType: + required: true + content: + application/json: + schema: + title: AliasThatPointsToRecursiveTypeRequest + type: object + properties: + list: + $ref: '#/components/schemas/LinkedListAliasNode' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - list + additionalProperties: false + AliasWithMultipleAttrs: + required: true + content: + application/json: + schema: + title: AliasWithMultipleAttrsRequest + type: object + properties: + money: + type: object + properties: + value: + type: integer + checks: + type: object + properties: + gt_ten: + $ref: '#components/schemas/Check' + required: + - gt_ten + additionalProperties: false + required: + - value + - checks + additionalProperties: false + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - money + additionalProperties: false + AliasedInputClass: + required: true + content: + application/json: + schema: + title: AliasedInputClassRequest + type: object + properties: + input: + $ref: '#/components/schemas/InputClass' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + AliasedInputClass2: + required: true + content: + application/json: + schema: + title: AliasedInputClass2Request + type: object + properties: + input: + $ref: '#/components/schemas/InputClass' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + AliasedInputClassNested: + required: true + content: + application/json: + schema: + title: AliasedInputClassNestedRequest + type: object + properties: + input: + $ref: '#/components/schemas/InputClassNested' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + AliasedInputEnum: + required: true + content: + application/json: + schema: + title: AliasedInputEnumRequest + type: object + properties: + input: + $ref: '#/components/schemas/AliasedEnum' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + AliasedInputList: + required: true + content: + application/json: + schema: + title: AliasedInputListRequest + type: object + properties: + input: + type: array + items: + $ref: '#/components/schemas/AliasedEnum' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + AllowedOptionals: + required: true + content: + application/json: + schema: + title: AllowedOptionalsRequest + type: object + properties: + optionals: + $ref: '#/components/schemas/OptionalListAndMap' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - optionals + additionalProperties: false + AssertFn: + required: true + content: + application/json: + schema: + title: AssertFnRequest + type: object + properties: + a: + type: integer + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - a + additionalProperties: false + AudioInput: + required: true + content: + application/json: + schema: + title: AudioInputRequest + type: object + properties: + aud: + $ref: '#/components/schemas/BamlAudio' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - aud + additionalProperties: false + BuildLinkedList: + required: true + content: + application/json: + schema: + title: BuildLinkedListRequest + type: object + properties: + input: + type: array + items: + type: integer + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + BuildTree: + required: true + content: + application/json: + schema: + title: BuildTreeRequest + type: object + properties: + input: + $ref: '#/components/schemas/BinaryNode' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + ClassThatPointsToRecursiveClassThroughAlias: + required: true + content: + application/json: + schema: + title: ClassThatPointsToRecursiveClassThroughAliasRequest + type: object + properties: + cls: + $ref: '#/components/schemas/ClassToRecAlias' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - cls + additionalProperties: false + ClassifyDynEnumTwo: + required: true + content: + application/json: + schema: + title: ClassifyDynEnumTwoRequest + type: object + properties: + input: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + ClassifyMessage: + required: true + content: + application/json: + schema: + title: ClassifyMessageRequest + type: object + properties: + input: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + ClassifyMessage2: + required: true + content: + application/json: + schema: + title: ClassifyMessage2Request + type: object + properties: + input: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + ClassifyMessage3: + required: true + content: + application/json: + schema: + title: ClassifyMessage3Request + type: object + properties: + input: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + Completion: + required: true + content: + application/json: + schema: + title: CompletionRequest + type: object + properties: + prefix: + type: string + suffix: + type: string + language: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - prefix + - suffix + - language + additionalProperties: false + CustomTask: + required: true + content: + application/json: + schema: + title: CustomTaskRequest + type: object + properties: + input: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + DescribeImage: + required: true + content: + application/json: + schema: + title: DescribeImageRequest + type: object + properties: + img: + $ref: '#/components/schemas/BamlImage' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - img + additionalProperties: false + DescribeImage2: + required: true + content: + application/json: + schema: + title: DescribeImage2Request + type: object + properties: + classWithImage: + $ref: '#/components/schemas/ClassWithImage' + img2: + $ref: '#/components/schemas/BamlImage' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - classWithImage + - img2 + additionalProperties: false + DescribeImage3: + required: true + content: + application/json: + schema: + title: DescribeImage3Request + type: object + properties: + classWithImage: + $ref: '#/components/schemas/ClassWithImage' + img2: + $ref: '#/components/schemas/BamlImage' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - classWithImage + - img2 + additionalProperties: false + DescribeImage4: + required: true + content: + application/json: + schema: + title: DescribeImage4Request + type: object + properties: + classWithImage: + $ref: '#/components/schemas/ClassWithImage' + img2: + $ref: '#/components/schemas/BamlImage' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - classWithImage + - img2 + additionalProperties: false + DifferentiateUnions: + required: true + content: + application/json: + schema: + title: DifferentiateUnionsRequest + type: object + properties: + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: [] + additionalProperties: false + DummyOutputFunction: + required: true + content: + application/json: + schema: + title: DummyOutputFunctionRequest + type: object + properties: + input: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + DynamicFunc: + required: true + content: + application/json: + schema: + title: DynamicFuncRequest + type: object + properties: + input: + $ref: '#/components/schemas/DynamicClassOne' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + DynamicInputOutput: required: true content: application/json: schema: - title: AaaSamOutputFormatRequest + title: DynamicInputOutputRequest type: object properties: - recipe: - type: string + input: + $ref: '#/components/schemas/DynInputOutput' __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - recipe + - input additionalProperties: false - AliasedInputClass: + DynamicListInputOutput: required: true content: application/json: schema: - title: AliasedInputClassRequest + title: DynamicListInputOutputRequest type: object properties: input: - $ref: '#/components/schemas/InputClass' + type: array + items: + $ref: '#/components/schemas/DynInputOutput' __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - input additionalProperties: false - AliasedInputClass2: + ExpectFailure: required: true content: application/json: schema: - title: AliasedInputClass2Request + title: ExpectFailureRequest type: object properties: - input: - $ref: '#/components/schemas/InputClass' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: [] + additionalProperties: false + ExtractContactInfo: + required: true + content: + application/json: + schema: + title: ExtractContactInfoRequest + type: object + properties: + document: + type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - input + - document additionalProperties: false - AliasedInputClassNested: + ExtractHobby: required: true content: application/json: schema: - title: AliasedInputClassNestedRequest + title: ExtractHobbyRequest type: object properties: - input: - $ref: '#/components/schemas/InputClassNested' + text: + type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - input + - text additionalProperties: false - AliasedInputEnum: + ExtractNames: required: true content: application/json: schema: - title: AliasedInputEnumRequest + title: ExtractNamesRequest type: object properties: input: - $ref: '#/components/schemas/AliasedEnum' + type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - input additionalProperties: false - AliasedInputList: + ExtractPeople: required: true content: application/json: schema: - title: AliasedInputListRequest + title: ExtractPeopleRequest type: object properties: - input: - type: array - items: - $ref: '#/components/schemas/AliasedEnum' + text: + type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - input + - text additionalProperties: false - AudioInput: + ExtractReceiptInfo: required: true content: application/json: schema: - title: AudioInputRequest + title: ExtractReceiptInfoRequest type: object properties: - aud: - $ref: '#/components/schemas/BamlAudio' + email: + type: string + reason: + oneOf: + - type: string + - type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - aud + - email + - reason additionalProperties: false - ClassifyDynEnumTwo: + ExtractResume: required: true content: application/json: schema: - title: ClassifyDynEnumTwoRequest + title: ExtractResumeRequest + type: object + properties: + resume: + type: string + img: + $ref: '#/components/schemas/BamlImage' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - resume + additionalProperties: false + ExtractResume2: + required: true + content: + application/json: + schema: + title: ExtractResume2Request + type: object + properties: + resume: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - resume + additionalProperties: false + FnClassOptionalOutput: + required: true + content: + application/json: + schema: + title: FnClassOptionalOutputRequest type: object properties: input: @@ -1445,12 +2676,12 @@ components: required: - input additionalProperties: false - ClassifyMessage: + FnClassOptionalOutput2: required: true content: application/json: schema: - title: ClassifyMessageRequest + title: FnClassOptionalOutput2Request type: object properties: input: @@ -1461,12 +2692,12 @@ components: required: - input additionalProperties: false - ClassifyMessage2: + FnEnumListOutput: required: true content: application/json: schema: - title: ClassifyMessage2Request + title: FnEnumListOutputRequest type: object properties: input: @@ -1477,12 +2708,12 @@ components: required: - input additionalProperties: false - ClassifyMessage3: + FnEnumOutput: required: true content: application/json: schema: - title: ClassifyMessage3Request + title: FnEnumOutputRequest type: object properties: input: @@ -1493,12 +2724,61 @@ components: required: - input additionalProperties: false - CustomTask: + FnLiteralClassInputOutput: required: true content: application/json: schema: - title: CustomTaskRequest + title: FnLiteralClassInputOutputRequest + type: object + properties: + input: + $ref: '#/components/schemas/LiteralClassHello' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + FnLiteralUnionClassInputOutput: + required: true + content: + application/json: + schema: + title: FnLiteralUnionClassInputOutputRequest + type: object + properties: + input: + oneOf: + - $ref: '#/components/schemas/LiteralClassOne' + - $ref: '#/components/schemas/LiteralClassTwo' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + FnNamedArgsSingleStringOptional: + required: true + content: + application/json: + schema: + title: FnNamedArgsSingleStringOptionalRequest + type: object + properties: + myString: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: [] + additionalProperties: false + FnOutputBool: + required: true + content: + application/json: + schema: + title: FnOutputBoolRequest type: object properties: input: @@ -1509,98 +2789,92 @@ components: required: - input additionalProperties: false - DescribeImage: + FnOutputClass: required: true content: application/json: schema: - title: DescribeImageRequest + title: FnOutputClassRequest type: object properties: - img: - $ref: '#/components/schemas/BamlImage' + input: + type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - img + - input additionalProperties: false - DescribeImage2: + FnOutputClassList: required: true content: application/json: schema: - title: DescribeImage2Request + title: FnOutputClassListRequest type: object properties: - classWithImage: - $ref: '#/components/schemas/ClassWithImage' - img2: - $ref: '#/components/schemas/BamlImage' + input: + type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - classWithImage - - img2 + - input additionalProperties: false - DescribeImage3: + FnOutputClassNested: required: true content: application/json: schema: - title: DescribeImage3Request + title: FnOutputClassNestedRequest type: object properties: - classWithImage: - $ref: '#/components/schemas/ClassWithImage' - img2: - $ref: '#/components/schemas/BamlImage' + input: + type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - classWithImage - - img2 + - input additionalProperties: false - DescribeImage4: + FnOutputClassWithEnum: required: true content: application/json: schema: - title: DescribeImage4Request + title: FnOutputClassWithEnumRequest type: object properties: - classWithImage: - $ref: '#/components/schemas/ClassWithImage' - img2: - $ref: '#/components/schemas/BamlImage' + input: + type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - classWithImage - - img2 + - input additionalProperties: false - DifferentiateUnions: + FnOutputInt: required: true content: application/json: schema: - title: DifferentiateUnionsRequest + title: FnOutputIntRequest type: object properties: + input: + type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' - required: [] + required: + - input additionalProperties: false - DummyOutputFunction: + FnOutputLiteralBool: required: true content: application/json: schema: - title: DummyOutputFunctionRequest + title: FnOutputLiteralBoolRequest type: object properties: input: @@ -1611,107 +2885,108 @@ components: required: - input additionalProperties: false - DynamicFunc: + FnOutputLiteralInt: required: true content: application/json: schema: - title: DynamicFuncRequest + title: FnOutputLiteralIntRequest type: object properties: input: - $ref: '#/components/schemas/DynamicClassOne' + type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - input additionalProperties: false - DynamicInputOutput: + FnOutputLiteralString: required: true content: application/json: schema: - title: DynamicInputOutputRequest + title: FnOutputLiteralStringRequest type: object properties: input: - $ref: '#/components/schemas/DynInputOutput' + type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - input additionalProperties: false - DynamicListInputOutput: + FnOutputStringList: required: true content: application/json: schema: - title: DynamicListInputOutputRequest + title: FnOutputStringListRequest type: object properties: input: - type: array - items: - $ref: '#/components/schemas/DynInputOutput' + type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - input additionalProperties: false - ExpectFailure: + FnTestAliasedEnumOutput: required: true content: application/json: schema: - title: ExpectFailureRequest + title: FnTestAliasedEnumOutputRequest type: object properties: + input: + type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' - required: [] + required: + - input additionalProperties: false - ExtractContactInfo: + FnTestClassAlias: required: true content: application/json: schema: - title: ExtractContactInfoRequest + title: FnTestClassAliasRequest type: object properties: - document: + input: type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - document + - input additionalProperties: false - ExtractNames: + FnTestNamedArgsSingleEnum: required: true content: application/json: schema: - title: ExtractNamesRequest + title: FnTestNamedArgsSingleEnumRequest type: object properties: - input: - type: string + myArg: + $ref: '#/components/schemas/NamedArgsSingleEnum' __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - input + - myArg additionalProperties: false - ExtractPeople: + GetDataType: required: true content: application/json: schema: - title: ExtractPeopleRequest + title: GetDataTypeRequest type: object properties: text: @@ -1722,115 +2997,124 @@ components: required: - text additionalProperties: false - ExtractReceiptInfo: + GetOrderInfo: required: true content: application/json: schema: - title: ExtractReceiptInfoRequest + title: GetOrderInfoRequest type: object properties: email: - type: string - reason: - oneOf: - - type: string - - type: string + $ref: '#/components/schemas/Email' __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - email - - reason additionalProperties: false - ExtractResume: + GetQuery: required: true content: application/json: schema: - title: ExtractResumeRequest + title: GetQueryRequest type: object properties: - resume: + query: type: string - img: - $ref: '#/components/schemas/BamlImage' __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - resume + - query additionalProperties: false - ExtractResume2: + InOutEnumMapKey: required: true content: application/json: schema: - title: ExtractResume2Request + title: InOutEnumMapKeyRequest type: object properties: - resume: - type: string + i1: + type: object + additionalProperties: + type: string + i2: + type: object + additionalProperties: + type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - resume + - i1 + - i2 additionalProperties: false - FnClassOptionalOutput: + InOutLiteralStringUnionMapKey: required: true content: application/json: schema: - title: FnClassOptionalOutputRequest + title: InOutLiteralStringUnionMapKeyRequest type: object properties: - input: - type: string + i1: + type: object + additionalProperties: + type: string + i2: + type: object + additionalProperties: + type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - input + - i1 + - i2 additionalProperties: false - FnClassOptionalOutput2: + InOutSingleLiteralStringMapKey: required: true content: application/json: schema: - title: FnClassOptionalOutput2Request + title: InOutSingleLiteralStringMapKeyRequest type: object properties: - input: - type: string + m: + type: object + additionalProperties: + type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - input + - m additionalProperties: false - FnEnumListOutput: + JsonTypeAliasCycle: required: true content: application/json: schema: - title: FnEnumListOutputRequest + title: JsonTypeAliasCycleRequest type: object properties: input: - type: string + anyOf: [] __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - input additionalProperties: false - FnEnumOutput: + LiteralUnionsTest: required: true content: application/json: schema: - title: FnEnumOutputRequest + title: LiteralUnionsTestRequest type: object properties: input: @@ -1841,91 +3125,87 @@ components: required: - input additionalProperties: false - FnNamedArgsSingleStringOptional: + MakeBlockConstraint: required: true content: application/json: schema: - title: FnNamedArgsSingleStringOptionalRequest + title: MakeBlockConstraintRequest type: object properties: - myString: - type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: [] additionalProperties: false - FnOutputBool: + MakeNestedBlockConstraint: required: true content: application/json: schema: - title: FnOutputBoolRequest + title: MakeNestedBlockConstraintRequest type: object properties: - input: - type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' - required: - - input + required: [] additionalProperties: false - FnOutputClass: + MakeSemanticContainer: required: true content: application/json: schema: - title: FnOutputClassRequest + title: MakeSemanticContainerRequest type: object properties: - input: - type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' - required: - - input + required: [] additionalProperties: false - FnOutputClassList: + MapAlias: required: true content: application/json: schema: - title: FnOutputClassListRequest + title: MapAliasRequest type: object properties: - input: - type: string + m: + type: object + additionalProperties: + type: array + items: + type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - input + - m additionalProperties: false - FnOutputClassNested: + MergeAliasAttributes: required: true content: application/json: schema: - title: FnOutputClassNestedRequest + title: MergeAliasAttributesRequest type: object properties: - input: - type: string + money: + type: integer __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - input + - money additionalProperties: false - FnOutputClassWithEnum: + MyFunc: required: true content: application/json: schema: - title: FnOutputClassWithEnumRequest + title: MyFuncRequest type: object properties: input: @@ -1936,44 +3216,57 @@ components: required: - input additionalProperties: false - FnOutputStringList: + NestedAlias: required: true content: application/json: schema: - title: FnOutputStringListRequest + title: NestedAliasRequest type: object properties: - input: - type: string + c: + oneOf: + - oneOf: + - type: integer + - type: string + - type: boolean + - type: number + - type: array + items: + type: string + - type: object + additionalProperties: + type: array + items: + type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - input + - c additionalProperties: false - FnTestAliasedEnumOutput: + NullLiteralClassHello: required: true content: application/json: schema: - title: FnTestAliasedEnumOutputRequest + title: NullLiteralClassHelloRequest type: object properties: - input: + s: type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - input + - s additionalProperties: false - FnTestClassAlias: + OptionalTest_Function: required: true content: application/json: schema: - title: FnTestClassAliasRequest + title: OptionalTest_FunctionRequest type: object properties: input: @@ -1984,76 +3277,80 @@ components: required: - input additionalProperties: false - FnTestNamedArgsSingleEnum: + PredictAge: required: true content: application/json: schema: - title: FnTestNamedArgsSingleEnumRequest + title: PredictAgeRequest type: object properties: - myArg: - $ref: '#/components/schemas/NamedArgsSingleEnum' + name: + type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - myArg + - name additionalProperties: false - GetDataType: + PredictAgeBare: required: true content: application/json: schema: - title: GetDataTypeRequest + title: PredictAgeBareRequest type: object properties: - text: + inp: type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - text + - inp additionalProperties: false - GetOrderInfo: + PrimitiveAlias: required: true content: application/json: schema: - title: GetOrderInfoRequest + title: PrimitiveAliasRequest type: object properties: - email: - $ref: '#/components/schemas/Email' + p: + oneOf: + - type: integer + - type: string + - type: boolean + - type: number __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - email + - p additionalProperties: false - GetQuery: + PromptTestClaude: required: true content: application/json: schema: - title: GetQueryRequest + title: PromptTestClaudeRequest type: object properties: - query: + input: type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - query + - input additionalProperties: false - MyFunc: + PromptTestClaudeChat: required: true content: application/json: schema: - title: MyFuncRequest + title: PromptTestClaudeChatRequest type: object properties: input: @@ -2064,12 +3361,12 @@ components: required: - input additionalProperties: false - OptionalTest_Function: + PromptTestClaudeChatNoSystem: required: true content: application/json: schema: - title: OptionalTest_FunctionRequest + title: PromptTestClaudeChatNoSystemRequest type: object properties: input: @@ -2080,44 +3377,44 @@ components: required: - input additionalProperties: false - PredictAge: + PromptTestOpenAI: required: true content: application/json: schema: - title: PredictAgeRequest + title: PromptTestOpenAIRequest type: object properties: - name: + input: type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - name + - input additionalProperties: false - PredictAgeBare: + PromptTestOpenAIChat: required: true content: application/json: schema: - title: PredictAgeBareRequest + title: PromptTestOpenAIChatRequest type: object properties: - inp: + input: type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - inp + - input additionalProperties: false - PromptTestClaude: + PromptTestOpenAIChatNoSystem: required: true content: application/json: schema: - title: PromptTestClaudeRequest + title: PromptTestOpenAIChatNoSystemRequest type: object properties: input: @@ -2128,12 +3425,12 @@ components: required: - input additionalProperties: false - PromptTestClaudeChat: + PromptTestStreaming: required: true content: application/json: schema: - title: PromptTestClaudeChatRequest + title: PromptTestStreamingRequest type: object properties: input: @@ -2144,128 +3441,143 @@ components: required: - input additionalProperties: false - PromptTestClaudeChatNoSystem: + RecursiveAliasCycle: required: true content: application/json: schema: - title: PromptTestClaudeChatNoSystemRequest + title: RecursiveAliasCycleRequest type: object properties: input: - type: string + anyOf: [] __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - input additionalProperties: false - PromptTestOpenAI: + RecursiveClassWithAliasIndirection: required: true content: application/json: schema: - title: PromptTestOpenAIRequest + title: RecursiveClassWithAliasIndirectionRequest type: object properties: - input: - type: string + cls: + $ref: '#/components/schemas/NodeWithAliasIndirection' __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - input + - cls additionalProperties: false - PromptTestOpenAIChat: + ReturnAliasWithMergedAttributes: required: true content: application/json: schema: - title: PromptTestOpenAIChatRequest + title: ReturnAliasWithMergedAttributesRequest type: object properties: - input: - type: string + money: + type: object + properties: + value: + type: integer + checks: + type: object + properties: + gt_ten: + $ref: '#components/schemas/Check' + required: + - gt_ten + additionalProperties: false + required: + - value + - checks + additionalProperties: false __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - input + - money additionalProperties: false - PromptTestOpenAIChatNoSystem: + ReturnFailingAssert: required: true content: application/json: schema: - title: PromptTestOpenAIChatNoSystemRequest + title: ReturnFailingAssertRequest type: object properties: - input: - type: string + inp: + type: integer __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - input + - inp additionalProperties: false - PromptTestStreaming: + ReturnMalformedConstraints: required: true content: application/json: schema: - title: PromptTestStreamingRequest + title: ReturnMalformedConstraintsRequest type: object properties: - input: - type: string + a: + type: integer __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - input + - a additionalProperties: false - ReturnFailingAssert: + SchemaDescriptions: required: true content: application/json: schema: - title: ReturnFailingAssertRequest + title: SchemaDescriptionsRequest type: object properties: - inp: - type: integer + input: + type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - inp + - input additionalProperties: false - ReturnMalformedConstraints: + SimpleRecursiveListAlias: required: true content: application/json: schema: - title: ReturnMalformedConstraintsRequest + title: SimpleRecursiveListAliasRequest type: object properties: - a: - type: integer + input: + anyOf: [] __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - a + - input additionalProperties: false - SchemaDescriptions: + SimpleRecursiveMapAlias: required: true content: application/json: schema: - title: SchemaDescriptionsRequest + title: SimpleRecursiveMapAliasRequest type: object properties: input: - type: string + anyOf: [] __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' @@ -2406,6 +3718,70 @@ components: required: - input additionalProperties: false + TestAwsInvalidAccessKey: + required: true + content: + application/json: + schema: + title: TestAwsInvalidAccessKeyRequest + type: object + properties: + input: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + TestAwsInvalidProfile: + required: true + content: + application/json: + schema: + title: TestAwsInvalidProfileRequest + type: object + properties: + input: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + TestAwsInvalidRegion: + required: true + content: + application/json: + schema: + title: TestAwsInvalidRegionRequest + type: object + properties: + input: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + TestAwsInvalidSessionToken: + required: true + content: + application/json: + schema: + title: TestAwsInvalidSessionTokenRequest + type: object + properties: + input: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false TestAzure: required: true content: @@ -2422,6 +3798,22 @@ components: required: - input additionalProperties: false + TestAzureFailure: + required: true + content: + application/json: + schema: + title: TestAzureFailureRequest + type: object + properties: + input: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false TestCaching: required: true content: @@ -2676,6 +4068,51 @@ components: required: - input additionalProperties: false + TestGeminiOpenAiGeneric: + required: true + content: + application/json: + schema: + title: TestGeminiOpenAiGenericRequest + type: object + properties: + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: [] + additionalProperties: false + TestGeminiSystem: + required: true + content: + application/json: + schema: + title: TestGeminiSystemRequest + type: object + properties: + input: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + TestGeminiSystemAsChat: + required: true + content: + application/json: + schema: + title: TestGeminiSystemAsChatRequest + type: object + properties: + input: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false TestImageInput: required: true content: @@ -2726,6 +4163,22 @@ components: required: - imgs additionalProperties: false + TestMemory: + required: true + content: + application/json: + schema: + title: TestMemoryRequest + type: object + properties: + input: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false TestMulticlassNamedArgs: required: true content: @@ -2745,6 +4198,54 @@ components: - myArg - myArg2 additionalProperties: false + TestNamedArgsLiteralBool: + required: true + content: + application/json: + schema: + title: TestNamedArgsLiteralBoolRequest + type: object + properties: + myBool: + type: boolean + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - myBool + additionalProperties: false + TestNamedArgsLiteralInt: + required: true + content: + application/json: + schema: + title: TestNamedArgsLiteralIntRequest + type: object + properties: + myInt: + type: integer + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - myInt + additionalProperties: false + TestNamedArgsLiteralString: + required: true + content: + application/json: + schema: + title: TestNamedArgsLiteralStringRequest + type: object + properties: + myString: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - myString + additionalProperties: false TestOllama: required: true content: @@ -2832,6 +4333,22 @@ components: $ref: '#/components/schemas/BamlOptions' required: [] additionalProperties: false + TestUniverseQuestion: + required: true + content: + application/json: + schema: + title: TestUniverseQuestionRequest + type: object + properties: + question: + $ref: '#/components/schemas/UniverseQuestionInput' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - question + additionalProperties: false TestVertex: required: true content: @@ -2848,6 +4365,19 @@ components: required: - input additionalProperties: false + TestVertexWithSystemInstructions: + required: true + content: + application/json: + schema: + title: TestVertexWithSystemInstructionsRequest + type: object + properties: + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: [] + additionalProperties: false UnionTest_Function: required: true content: @@ -2866,6 +4396,22 @@ components: required: - input additionalProperties: false + UseBlockConstraint: + required: true + content: + application/json: + schema: + title: UseBlockConstraintRequest + type: object + properties: + inp: + $ref: '#/components/schemas/BlockConstraintForParam' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - inp + additionalProperties: false UseMalformedConstraints: required: true content: @@ -2882,6 +4428,22 @@ components: required: - a additionalProperties: false + UseNestedBlockConstraint: + required: true + content: + application/json: + schema: + title: UseNestedBlockConstraintRequest + type: object + properties: + inp: + $ref: '#/components/schemas/NestedBlockConstraintForParam' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - inp + additionalProperties: false schemas: BamlImage: oneOf: @@ -3032,6 +4594,12 @@ components: - MUSIC - READING type: string + MapKey: + enum: + - A + - B + - C + type: string NamedArgsSingleEnum: enum: - ONE @@ -3071,6 +4639,20 @@ components: - F - G type: string + AnotherObject: + type: object + properties: + id: + type: string + thingy2: + type: string + thingy3: + type: string + required: + - id + - thingy2 + - thingy3 + additionalProperties: false BigNumbers: type: object properties: @@ -3082,12 +4664,46 @@ components: - a - b additionalProperties: false - Blah: + BinaryNode: + type: object + properties: + data: + type: integer + left: + $ref: '#/components/schemas/BinaryNode' + right: + $ref: '#/components/schemas/BinaryNode' + required: + - data + additionalProperties: false + Blah: + type: object + properties: + prop4: + type: string + required: [] + additionalProperties: false + BlockConstraint: + type: object + properties: + foo: + type: integer + bar: + type: string + required: + - foo + - bar + additionalProperties: false + BlockConstraintForParam: type: object properties: - prop4: + bcfp: + type: integer + bcfp2: type: string - required: [] + required: + - bcfp + - bcfp2 additionalProperties: false BookOrder: type: object @@ -3106,6 +4722,14 @@ components: - quantity - price additionalProperties: false + ClassForNullLiteral: + type: object + properties: + a: + type: string + required: + - a + additionalProperties: false ClassOptionalOutput: type: object properties: @@ -3128,6 +4752,25 @@ components: $ref: '#/components/schemas/Blah' required: [] additionalProperties: false + ClassToRecAlias: + type: object + properties: + list: + $ref: '#/components/schemas/LinkedListAliasNode' + required: + - list + additionalProperties: false + ClassWithBlockDone: + type: object + properties: + i_16_digits: + type: integer + s_20_words: + type: string + required: + - i_16_digits + - s_20_words + additionalProperties: false ClassWithImage: type: object properties: @@ -3142,6 +4785,39 @@ components: - param2 - fake_image additionalProperties: false + ClassWithoutDone: + type: object + properties: + i_16_digits: + type: integer + s_20_words: + type: string + required: + - i_16_digits + - s_20_words + additionalProperties: false + ComplexMemoryObject: + type: object + properties: + id: + type: string + name: + type: string + description: + type: string + metadata: + type: array + items: + oneOf: + - type: string + - type: integer + - type: number + required: + - id + - name + - description + - metadata + additionalProperties: false CompoundBigNumbers: type: object properties: @@ -3294,22 +4970,7 @@ components: type: object properties: value: - type: object - properties: - value: - type: string - checks: - type: object - properties: - valid_email: - $ref: '#components/schemas/Check' - required: - - valid_email - additionalProperties: false - required: - - value - - checks - additionalProperties: false + type: string required: - value additionalProperties: false @@ -3390,16 +5051,16 @@ components: checks: type: object properties: + regex_good: + $ref: '#components/schemas/Check' regex_bad: $ref: '#components/schemas/Check' trivial: $ref: '#components/schemas/Check' - regex_good: - $ref: '#components/schemas/Check' required: + - regex_good - regex_bad - trivial - - regex_good additionalProperties: false required: - value @@ -3410,6 +5071,60 @@ components: - certainty - species additionalProperties: false + Forest: + type: object + properties: + trees: + type: array + items: + $ref: '#/components/schemas/Tree' + required: + - trees + additionalProperties: false + FormatterTest0: + type: object + properties: + lorem: + type: string + ipsum: + type: string + required: + - lorem + - ipsum + additionalProperties: false + FormatterTest1: + type: object + properties: + lorem: + type: string + ipsum: + type: string + required: + - lorem + - ipsum + additionalProperties: false + FormatterTest2: + type: object + properties: + lorem: + type: string + ipsum: + type: string + required: + - lorem + - ipsum + additionalProperties: false + FormatterTest3: + type: object + properties: + lorem: + type: string + ipsum: + type: string + required: + - lorem + - ipsum + additionalProperties: false GroceryReceipt: type: object properties: @@ -3479,6 +5194,50 @@ components: - key - nested additionalProperties: false + LinkedList: + type: object + properties: + head: + $ref: '#/components/schemas/Node' + len: + type: integer + required: + - len + additionalProperties: false + LinkedListAliasNode: + type: object + properties: + value: + type: integer + next: + $ref: '#/components/schemas/LinkedListAliasNode' + required: + - value + additionalProperties: false + LiteralClassHello: + type: object + properties: + prop: + type: string + required: + - prop + additionalProperties: false + LiteralClassOne: + type: object + properties: + prop: + type: string + required: + - prop + additionalProperties: false + LiteralClassTwo: + type: object + properties: + prop: + type: string + required: + - prop + additionalProperties: false MalformedConstraints: type: object properties: @@ -3533,6 +5292,43 @@ components: required: - age additionalProperties: false + MemoryObject: + type: object + properties: + id: + type: string + name: + type: string + description: + type: string + required: + - id + - name + - description + additionalProperties: false + MergeAttrs: + type: object + properties: + amount: + type: object + properties: + value: + type: integer + checks: + type: object + properties: + gt_ten: + $ref: '#components/schemas/Check' + required: + - gt_ten + additionalProperties: false + required: + - value + - checks + additionalProperties: false + required: + - amount + additionalProperties: false NamedArgsSingleClass: type: object properties: @@ -3572,6 +5368,70 @@ components: - type: string required: [] additionalProperties: false + NestedBlockConstraint: + type: object + properties: + nbc: + type: object + properties: + value: + $ref: '#/components/schemas/BlockConstraint' + checks: + type: object + properties: + cross_field: + $ref: '#components/schemas/Check' + required: + - cross_field + additionalProperties: false + required: + - value + - checks + additionalProperties: false + required: + - nbc + additionalProperties: false + NestedBlockConstraintForParam: + type: object + properties: + nbcfp: + $ref: '#/components/schemas/BlockConstraintForParam' + required: + - nbcfp + additionalProperties: false + Node: + type: object + properties: + data: + type: integer + next: + $ref: '#/components/schemas/Node' + required: + - data + additionalProperties: false + NodeWithAliasIndirection: + type: object + properties: + value: + type: integer + next: + $ref: '#/components/schemas/NodeWithAliasIndirection' + required: + - value + additionalProperties: false + OptionalListAndMap: + type: object + properties: + p: + type: array + items: + type: string + q: + type: object + additionalProperties: + type: string + required: [] + additionalProperties: false OptionalTest_Prop1: type: object properties: @@ -3638,22 +5498,7 @@ components: type: object properties: value: - type: object - properties: - value: - type: string - checks: - type: object - properties: - valid_phone_number: - $ref: '#components/schemas/Check' - required: - - valid_phone_number - additionalProperties: false - required: - - value - - checks - additionalProperties: false + type: string required: - value additionalProperties: false @@ -3830,6 +5675,48 @@ components: - description - tags additionalProperties: false + SemanticContainer: + type: object + properties: + sixteen_digit_number: + type: integer + string_with_twenty_words: + type: string + class_1: + $ref: '#/components/schemas/ClassWithoutDone' + class_2: + $ref: '#/components/schemas/ClassWithBlockDone' + class_done_needed: + $ref: '#/components/schemas/ClassWithBlockDone' + class_needed: + $ref: '#/components/schemas/ClassWithoutDone' + three_small_things: + type: array + items: + $ref: '#/components/schemas/SmallThing' + final_string: + type: string + required: + - sixteen_digit_number + - string_with_twenty_words + - class_1 + - class_2 + - class_done_needed + - class_needed + - three_small_things + - final_string + additionalProperties: false + SmallThing: + type: object + properties: + i_16_digits: + type: integer + i_8_digits: + type: integer + required: + - i_16_digits + - i_8_digits + additionalProperties: false SomeClassNestedDynamic: type: object properties: @@ -3888,6 +5775,27 @@ components: - prop1 - prop2 additionalProperties: false + TestMemoryOutput: + type: object + properties: + items: + type: array + items: + oneOf: + - $ref: '#/components/schemas/MemoryObject' + - $ref: '#/components/schemas/ComplexMemoryObject' + - $ref: '#/components/schemas/AnotherObject' + more_items: + type: array + items: + oneOf: + - $ref: '#/components/schemas/MemoryObject' + - $ref: '#/components/schemas/ComplexMemoryObject' + - $ref: '#/components/schemas/AnotherObject' + required: + - items + - more_items + additionalProperties: false TestOutputClass: type: object properties: @@ -3899,6 +5807,17 @@ components: - prop1 - prop2 additionalProperties: false + Tree: + type: object + properties: + data: + type: integer + children: + $ref: '#/components/schemas/Forest' + required: + - data + - children + additionalProperties: false TwoStoriesOneTitle: type: object properties: @@ -3939,6 +5858,25 @@ components: - prop2 - prop3 additionalProperties: false + UniverseQuestion: + type: object + properties: + question: + type: string + answer: + type: string + required: + - question + - answer + additionalProperties: false + UniverseQuestionInput: + type: object + properties: + question: + type: string + required: + - question + additionalProperties: false WithReasoning: type: object properties: diff --git a/integ-tests/python/baml_client/async_client.py b/integ-tests/python/baml_client/async_client.py index 830a4cec9..88b4c668c 100644 --- a/integ-tests/python/baml_client/async_client.py +++ b/integ-tests/python/baml_client/async_client.py @@ -3224,6 +3224,29 @@ async def TestSingleFallbackClient( ) return cast(str, raw.cast_to(types, types, partial_types, False)) + async def TestUniverseQuestion( + self, + question: types.UniverseQuestionInput, + baml_options: BamlCallOptions = {}, + ) -> types.UniverseQuestion: + __tb__ = baml_options.get("tb", None) + if __tb__ is not None: + tb = __tb__._tb # type: ignore (we know how to use this private attribute) + else: + tb = None + __cr__ = baml_options.get("client_registry", None) + + raw = await self.__runtime.call_function( + "TestUniverseQuestion", + { + "question": question, + }, + self.__ctx_manager.get(), + tb, + __cr__, + ) + return cast(types.UniverseQuestion, raw.cast_to(types, types, partial_types, False)) + async def TestVertex( self, input: str, @@ -7516,6 +7539,36 @@ def TestSingleFallbackClient( self.__ctx_manager.get(), ) + def TestUniverseQuestion( + self, + question: types.UniverseQuestionInput, + baml_options: BamlCallOptions = {}, + ) -> baml_py.BamlStream[partial_types.UniverseQuestion, types.UniverseQuestion]: + __tb__ = baml_options.get("tb", None) + if __tb__ is not None: + tb = __tb__._tb # type: ignore (we know how to use this private attribute) + else: + tb = None + __cr__ = baml_options.get("client_registry", None) + + raw = self.__runtime.stream_function( + "TestUniverseQuestion", + { + "question": question, + }, + None, + self.__ctx_manager.get(), + tb, + __cr__, + ) + + return baml_py.BamlStream[partial_types.UniverseQuestion, types.UniverseQuestion]( + raw, + lambda x: cast(partial_types.UniverseQuestion, x.cast_to(types, types, partial_types, True)), + lambda x: cast(types.UniverseQuestion, x.cast_to(types, types, partial_types, False)), + self.__ctx_manager.get(), + ) + def TestVertex( self, input: str, diff --git a/integ-tests/python/baml_client/inlinedbaml.py b/integ-tests/python/baml_client/inlinedbaml.py index 876b9e44f..1073051a2 100644 --- a/integ-tests/python/baml_client/inlinedbaml.py +++ b/integ-tests/python/baml_client/inlinedbaml.py @@ -26,7 +26,7 @@ "fiddle-examples/images/image.baml": "function DescribeImage(img: image) -> string {\n client GPT4o\n prompt #\"\n {{ _.role(\"user\") }}\n\n\n Describe the image below in 20 words:\n {{ img }}\n \"#\n\n}\n\nclass FakeImage {\n url string\n}\n\nclass ClassWithImage {\n myImage image\n param2 string\n fake_image FakeImage\n}\n\n// chat role user present\nfunction DescribeImage2(classWithImage: ClassWithImage, img2: image) -> string { \n client GPT4Turbo\n prompt #\"\n {{ _.role(\"user\") }}\n You should return 2 answers that answer the following commands.\n\n 1. Describe this in 5 words:\n {{ classWithImage.myImage }}\n\n 2. Also tell me what's happening here in one sentence:\n {{ img2 }}\n \"#\n}\n\n// no chat role\nfunction DescribeImage3(classWithImage: ClassWithImage, img2: image) -> string {\n client GPT4Turbo\n prompt #\"\n Describe this in 5 words:\n {{ classWithImage.myImage }}\n\n Tell me also what's happening here in one sentence and relate it to the word {{ classWithImage.param2 }}:\n {{ img2 }}\n \"#\n}\n\n\n// system prompt and chat prompt\nfunction DescribeImage4(classWithImage: ClassWithImage, img2: image) -> string {\n client GPT4Turbo\n prompt #\"\n {{ _.role(\"system\")}}\n\n Describe this in 5 words:\n {{ classWithImage.myImage }}\n\n Tell me also what's happening here in one sentence and relate it to the word {{ classWithImage.param2 }}:\n {{ img2 }}\n \"#\n}\n\ntest TestName {\n functions [DescribeImage]\n args {\n img { url \"https://imgs.xkcd.com/comics/standards.png\"}\n }\n}\n", "fiddle-examples/symbol-tuning.baml": "enum Category3 {\n Refund @alias(\"k1\")\n @description(\"Customer wants to refund a product\")\n\n CancelOrder @alias(\"k2\")\n @description(\"Customer wants to cancel an order\")\n\n TechnicalSupport @alias(\"k3\")\n @description(\"Customer needs help with a technical issue unrelated to account creation or login\")\n\n AccountIssue @alias(\"k4\")\n @description(\"Specifically relates to account-login or account-creation\")\n\n Question @alias(\"k5\")\n @description(\"Customer has a question\")\n}\n\nfunction ClassifyMessage3(input: string) -> Category {\n client GPT4\n\n prompt #\"\n Classify the following INPUT into ONE\n of the following categories:\n\n INPUT: {{ input }}\n\n {{ ctx.output_format }}\n\n Response:\n \"#\n}", "formatter/test-comments.baml": "class FormatterTest0 {\n lorem string // trailing comments should be preserved\n ipsum string\n}\n\nclass FormatterTest1 {\n lorem string\n ipsum string\n // dolor string\n}\n\nclass FormatterTest2 {\n // \"lorem\" is a latin word\n lorem string\n // \"ipsum\" is a latin word\n ipsum string\n}\n\nclass FormatterTest3 {\n lorem string\n ipsum string\n // Lorem ipsum dolor sit amet\n // Consectetur adipiscing elit\n // Sed do eiusmod tempor incididunt\n // Ut labore et dolore magna aliqua\n // Ut enim ad minim veniam\n}", - "generators.baml": "generator lang_python {\n output_type python/pydantic\n output_dir \"../python\"\n version \"0.74.0\"\n}\n\ngenerator lang_typescript {\n output_type typescript\n output_dir \"../typescript\"\n version \"0.74.0\"\n}\n\ngenerator lang_ruby {\n output_type ruby/sorbet\n output_dir \"../ruby\"\n version \"0.74.0\"\n}\n\n// generator openapi {\n// output_type rest/openapi\n// output_dir \"../openapi\"\n// version \"0.74.0\"\n// on_generate \"rm .gitignore\"\n// }\n", + "generators.baml": "generator lang_python {\n output_type python/pydantic\n output_dir \"../python\"\n version \"0.74.0\"\n}\n\ngenerator lang_typescript {\n output_type typescript\n output_dir \"../typescript\"\n version \"0.74.0\"\n}\n\ngenerator lang_typescript_react {\n output_type typescript/react\n output_dir \"../react\"\n version \"0.74.0\"\n}\n\ngenerator lang_ruby {\n output_type ruby/sorbet\n output_dir \"../ruby\"\n version \"0.74.0\"\n}\n\ngenerator openapi {\n output_type rest/openapi\n output_dir \"../openapi\"\n version \"0.74.0\"\n on_generate \"rm .gitignore\"\n}", "test-files/aliases/aliased-inputs.baml": "\nclass InputClass {\n key string @alias(\"color\")\n key2 string\n}\n\n\nclass InputClassNested {\n key string\n nested InputClass @alias(\"interesting-key\")\n}\n \n\nfunction AliasedInputClass(input: InputClass) -> string {\n client GPT35\n prompt #\"\n\n {{input}}\n\n This is a test. What's the name of the first json key above? Remember, tell me the key, not value.\n \"#\n}\n \nfunction AliasedInputClass2(input: InputClass) -> string {\n client GPT35\n prompt #\"\n\n {# making sure we can still access the original key #}\n {%if input.key == \"tiger\"%}\n Repeat this value back to me, and nothing else: {{input.key}}\n {%endif%}\n \"#\n}\n \n function AliasedInputClassNested(input: InputClassNested) -> string {\n client GPT35\n prompt #\"\n {{ _.role(\"user\")}}\n\n {{input}}\n\n This is a test. What's the name of the second json key above? Remember, tell me the key, not value.\n \"#\n }\n\n\nenum AliasedEnum {\n KEY_ONE @alias(\"tiger\")\n KEY_TWO\n}\n\nfunction AliasedInputEnum(input: AliasedEnum) -> string {\n client GPT4o\n prompt #\"\n {{ _.role(\"user\")}}\n\n\n Write out this word only in your response, in lowercase:\n ---\n {{input}}\n ---\n Answer:\n \"#\n}\n\n\nfunction AliasedInputList(input: AliasedEnum[]) -> string {\n client GPT35\n prompt #\"\n {{ _.role(\"user\")}}\n Given this array:\n ---\n {{input}}\n ---\n\n Return the first element in the array:\n \"#\n}\n\n", "test-files/aliases/classes.baml": "class TestClassAlias {\n key string @alias(\"key-dash\") @description(#\"\n This is a description for key\n af asdf\n \"#)\n key2 string @alias(\"key21\")\n key3 string @alias(\"key with space\")\n key4 string //unaliased\n key5 string @alias(\"key.with.punctuation/123\")\n}\n\nfunction FnTestClassAlias(input: string) -> TestClassAlias {\n client GPT35\n prompt #\"\n {{ctx.output_format}}\n \"#\n}\n\ntest FnTestClassAlias {\n functions [FnTestClassAlias]\n args {\n input \"example input\"\n }\n}\n", "test-files/aliases/enums.baml": "enum TestEnum {\n A @alias(\"k1\") @description(#\"\n User is angry\n \"#)\n B @alias(\"k22\") @description(#\"\n User is happy\n \"#)\n // tests whether k1 doesnt incorrectly get matched with k11\n C @alias(\"k11\") @description(#\"\n User is sad\n \"#)\n D @alias(\"k44\") @description(\n User is confused\n )\n E @description(\n User is excited\n )\n F @alias(\"k5\") // only alias\n \n G @alias(\"k6\") @description(#\"\n User is bored\n With a long description\n \"#)\n \n @@alias(\"Category\")\n}\n\nfunction FnTestAliasedEnumOutput(input: string) -> TestEnum {\n client GPT35\n prompt #\"\n Classify the user input into the following category\n \n {{ ctx.output_format }}\n\n {{ _.role('user') }}\n {{input}}\n\n {{ _.role('assistant') }}\n Category ID:\n \"#\n}\n\ntest FnTestAliasedEnumOutput {\n functions [FnTestAliasedEnumOutput]\n args {\n input \"mehhhhh\"\n }\n}", @@ -93,7 +93,7 @@ "test-files/functions/v2/basic.baml": "\n\nfunction ExtractResume2(resume: string) -> Resume {\n client GPT4\n prompt #\"\n {{ _.role('system') }}\n\n Extract the following information from the resume:\n\n Resume:\n <<<<\n {{ resume }}\n <<<<\n\n Output JSON schema:\n {{ ctx.output_format }}\n\n JSON:\n \"#\n}\n\n\nclass WithReasoning {\n value string\n reasoning string @description(#\"\n Why the value is a good fit.\n \"#)\n}\n\n\nclass SearchParams {\n dateRange int? @description(#\"\n In ISO duration format, e.g. P1Y2M10D.\n \"#)\n location string[]\n jobTitle WithReasoning? @description(#\"\n An exact job title, not a general category.\n \"#)\n company WithReasoning? @description(#\"\n The exact name of the company, not a product or service.\n \"#)\n description WithReasoning[] @description(#\"\n Any specific projects or features the user is looking for.\n \"#)\n tags (Tag | string)[]\n}\n\nenum Tag {\n Security\n AI\n Blockchain\n}\n\nfunction GetQuery(query: string) -> SearchParams {\n client GPT4\n prompt #\"\n Extract the following information from the query:\n\n Query:\n <<<<\n {{ query }}\n <<<<\n\n OUTPUT_JSON_SCHEMA:\n {{ ctx.output_format }}\n\n Before OUTPUT_JSON_SCHEMA, list 5 intentions the user may have.\n --- EXAMPLES ---\n 1. \n 2. \n 3. \n 4. \n 5. \n\n {\n ... // OUTPUT_JSON_SCHEMA\n }\n \"#\n}\n\nclass RaysData {\n dataType DataType\n value Resume | Event\n}\n\nenum DataType {\n Resume\n Event\n}\n\nclass Event {\n title string\n date string\n location string\n description string\n}\n\nfunction GetDataType(text: string) -> RaysData {\n client GPT4\n prompt #\"\n Extract the relevant info.\n\n Text:\n <<<<\n {{ text }}\n <<<<\n\n Output JSON schema:\n {{ ctx.output_format }}\n\n JSON:\n \"#\n}", "test-files/load-test/memory.baml": "\n\nclass MemoryObject {\n id string\n name string\n description string\n}\n\nclass ComplexMemoryObject {\n id string\n name string\n description string\n metadata (string | int | float)[] @description(#\"\n Additional metadata about the memory object, which can be a mix of types.\n \"#)\n}\n\nclass AnotherObject {\n id string\n thingy2 string\n thingy3 string\n}\n\nclass TestMemoryOutput {\n items (MemoryObject | ComplexMemoryObject | AnotherObject)[] @description(#\"\n Add 10 items, which can be either simple MemoryObjects or more complex MemoryObjects with metadata.\n \"#)\n more_items (MemoryObject | ComplexMemoryObject | AnotherObject)[] @description(#\"\n Add 3 more items, which can be either simple MemoryObjects or more complex MemoryObjects with metadata.\n \"#)\n}\n\n\nfunction TestMemory(input: string) -> TestMemoryOutput {\n client GPT35\n prompt #\"\n Return a json blob that matches the schema:\n {{ ctx.output_format }}\n \"#\n}\n\ntest TestName {\n functions [TestMemory]\n args {\n input #\"\n hello world\n \"#\n }\n}\n", "test-files/providers/anthropic.baml": "function TestAnthropic(input: string) -> string {\n client Claude\n prompt #\"\n Write a nice haiku about {{ input }}\n \"#\n}\n\nfunction TestAnthropicShorthand(input: string) -> string {\n client \"anthropic/claude-3-haiku-20240307\"\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}\n\nfunction TestCaching(input: string, not_cached: string) -> string {\n client ClaudeWithCaching\n prompt #\"\n {{ _.role('system', cache_control={\"type\": \"ephemeral\"}) }}\n Generate the following story\n {{ input }}\n\n {# Haiku require 2048 tokens to cache -#}\n {{ input }}\n\n {{ _.role('user') }}\n {{ not_cached }}\n \"#\n}", - "test-files/providers/aws.baml": "function TestAws(input: string) -> string {\n client AwsBedrock\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}\n\nfunction TestAwsInvalidRegion(input: string) -> string {\n client AwsBedrockInvalidRegion\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}\n\nfunction TestAwsInvalidAccessKey(input: string) -> string {\n client AwsBedrockInvalidAccessKey\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}\n\nfunction TestAwsInvalidProfile(input: string) -> string {\n client AwsBedrockInvalidProfile\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}\n\nfunction TestAwsInvalidSessionToken(input: string) -> string {\n client AwsBedrockInvalidSessionToken\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}", + "test-files/providers/aws.baml": "function TestAws(input: string) -> string {\n client AwsBedrock\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}\n\nclass UniverseQuestion {\n question string\n answer string\n}\n\nclass UniverseQuestionInput {\n question string\n}\n\nfunction TestUniverseQuestion(question: UniverseQuestionInput) -> UniverseQuestion {\n client AwsBedrock\n prompt #\"\n You are a helpful assistant that answers questions about the universe.\n\n {{ ctx.output_format }}\n\n {{ _.role(\"user\")}}\n\n Question: {{ question }}\n\n Answer:\n \"#\n}\n\n\nfunction TestAwsInvalidRegion(input: string) -> string {\n client AwsBedrockInvalidRegion\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}\n\nfunction TestAwsInvalidAccessKey(input: string) -> string {\n client AwsBedrockInvalidAccessKey\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}\n\nfunction TestAwsInvalidProfile(input: string) -> string {\n client AwsBedrockInvalidProfile\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}\n\nfunction TestAwsInvalidSessionToken(input: string) -> string {\n client AwsBedrockInvalidSessionToken\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}", "test-files/providers/azure.baml": "function TestAzure(input: string) -> string {\n client GPT35Azure\n prompt #\"\n Write a nice haiku about {{ input }}\n \"#\n}\n\nclient GPT35AzureFailed {\n provider azure-openai\n options {\n resource_name \"west-us-azure-baml-incorrect-suffix\"\n deployment_id \"gpt-35-turbo-default\"\n api_key env.AZURE_OPENAI_API_KEY\n }\n}\n\nfunction TestAzureFailure(input: string) -> string {\n client GPT35AzureFailed\n prompt #\"\n Write a nice haiku about {{ input }}\n \"#\n}", "test-files/providers/gemini.baml": "function TestGemini(input: string) -> string {\n client Gemini\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}\n\nfunction TestGeminiSystem(input: string) -> string {\n client Gemini\n prompt #\"\n {{ _.role('system') }}\n\n Write a nice short story about {{ input }}\n \"#\n}\n\nfunction TestGeminiSystemAsChat(input: string) -> string {\n client Gemini\n prompt #\"\n {{ _.role('system') }} You are a helpful assistant\n\n {{_.role(\"user\")}} Write a nice short story about {{ input }}\n \"#\n}\n\nfunction TestGeminiOpenAiGeneric() -> string {\n client GeminiOpenAiGeneric\n prompt #\"{{_.role(\"system\")}} You are a helpful assistant\n {{_.role(\"user\")}} Write a poem about llamas\n \"#\n}\n\ntest TestName {\n functions [TestGeminiSystem]\n args {\n input #\"\n hello world\n \"#\n }\n}\n", "test-files/providers/ollama.baml": "function TestOllama(input: string) -> string {\n client Ollama\n prompt #\"\n Write a nice haiku about {{ input }}\n \"#\n}", diff --git a/integ-tests/python/baml_client/partial_types.py b/integ-tests/python/baml_client/partial_types.py index a7b477ade..ddd8235ff 100644 --- a/integ-tests/python/baml_client/partial_types.py +++ b/integ-tests/python/baml_client/partial_types.py @@ -420,6 +420,13 @@ class UnionTest_ReturnType(BaseModel): prop2: List[Optional[Union[Optional[float], Optional[bool]]]] prop3: Optional[Union[List[Optional[bool]], List[Optional[int]]]] = None +class UniverseQuestion(BaseModel): + question: Optional[str] = None + answer: Optional[str] = None + +class UniverseQuestionInput(BaseModel): + question: Optional[str] = None + class WithReasoning(BaseModel): value: Optional[str] = None reasoning: Optional[str] = None diff --git a/integ-tests/python/baml_client/sync_client.py b/integ-tests/python/baml_client/sync_client.py index 96387aa78..3639a662f 100644 --- a/integ-tests/python/baml_client/sync_client.py +++ b/integ-tests/python/baml_client/sync_client.py @@ -3221,6 +3221,29 @@ def TestSingleFallbackClient( ) return cast(str, raw.cast_to(types, types, partial_types, False)) + def TestUniverseQuestion( + self, + question: types.UniverseQuestionInput, + baml_options: BamlCallOptions = {}, + ) -> types.UniverseQuestion: + __tb__ = baml_options.get("tb", None) + if __tb__ is not None: + tb = __tb__._tb # type: ignore (we know how to use this private attribute) + else: + tb = None + __cr__ = baml_options.get("client_registry", None) + + raw = self.__runtime.call_function_sync( + "TestUniverseQuestion", + { + "question": question, + }, + self.__ctx_manager.get(), + tb, + __cr__, + ) + return cast(types.UniverseQuestion, raw.cast_to(types, types, partial_types, False)) + def TestVertex( self, input: str, @@ -7514,6 +7537,36 @@ def TestSingleFallbackClient( self.__ctx_manager.get(), ) + def TestUniverseQuestion( + self, + question: types.UniverseQuestionInput, + baml_options: BamlCallOptions = {}, + ) -> baml_py.BamlSyncStream[partial_types.UniverseQuestion, types.UniverseQuestion]: + __tb__ = baml_options.get("tb", None) + if __tb__ is not None: + tb = __tb__._tb # type: ignore (we know how to use this private attribute) + else: + tb = None + __cr__ = baml_options.get("client_registry", None) + + raw = self.__runtime.stream_function_sync( + "TestUniverseQuestion", + { + "question": question, + }, + None, + self.__ctx_manager.get(), + tb, + __cr__, + ) + + return baml_py.BamlSyncStream[partial_types.UniverseQuestion, types.UniverseQuestion]( + raw, + lambda x: cast(partial_types.UniverseQuestion, x.cast_to(types, types, partial_types, True)), + lambda x: cast(types.UniverseQuestion, x.cast_to(types, types, partial_types, False)), + self.__ctx_manager.get(), + ) + def TestVertex( self, input: str, diff --git a/integ-tests/python/baml_client/types.py b/integ-tests/python/baml_client/types.py index 9d54fd56c..7d2b50c6d 100644 --- a/integ-tests/python/baml_client/types.py +++ b/integ-tests/python/baml_client/types.py @@ -540,6 +540,13 @@ class UnionTest_ReturnType(BaseModel): prop2: List[Union[float, bool]] prop3: Union[List[bool], List[int]] +class UniverseQuestion(BaseModel): + question: str + answer: str + +class UniverseQuestionInput(BaseModel): + question: str + class WithReasoning(BaseModel): value: str reasoning: str diff --git a/integ-tests/react/.gitignore b/integ-tests/react/.gitignore new file mode 100644 index 000000000..5ef6a5207 --- /dev/null +++ b/integ-tests/react/.gitignore @@ -0,0 +1,41 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/versions + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# env files (can opt-in for committing if needed) +.env* + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/integ-tests/react/README.md b/integ-tests/react/README.md new file mode 100644 index 000000000..e215bc4cc --- /dev/null +++ b/integ-tests/react/README.md @@ -0,0 +1,36 @@ +This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app). + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +# or +pnpm dev +# or +bun dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. + +This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel. + +## Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome! + +## Deploy on Vercel + +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details. diff --git a/integ-tests/react/baml_client/async_client.ts b/integ-tests/react/baml_client/async_client.ts new file mode 100644 index 000000000..440f8f1f0 --- /dev/null +++ b/integ-tests/react/baml_client/async_client.ts @@ -0,0 +1,8468 @@ +/************************************************************************************************* + +Welcome to Baml! To use this generated code, please run one of the following: + +$ npm install @boundaryml/baml +$ yarn add @boundaryml/baml +$ pnpm add @boundaryml/baml + +*************************************************************************************************/ + +// This file was generated by BAML: do not edit it. Instead, edit the BAML +// files and re-generate this code. +// +/* eslint-disable */ +// tslint:disable +// @ts-nocheck +// biome-ignore format: autogenerated code +import { BamlRuntime, FunctionResult, BamlCtxManager, BamlStream, Image, ClientRegistry, BamlValidationError, createBamlValidationError } from "@boundaryml/baml" +import { Checked, Check } from "./types" +import "./partial_types" +import {AnotherObject, BigNumbers, BinaryNode, Blah, BlockConstraint, BlockConstraintForParam, BookOrder, ClassForNullLiteral, ClassOptionalOutput, ClassOptionalOutput2, ClassToRecAlias, ClassWithBlockDone, ClassWithImage, ClassWithoutDone, ComplexMemoryObject, CompoundBigNumbers, ContactInfo, CustomTaskResult, DummyOutput, DynInputOutput, DynamicClassOne, DynamicClassTwo, DynamicOutput, Earthling, Education, Email, EmailAddress, Event, FakeImage, FlightConfirmation, FooAny, Forest, FormatterTest0, FormatterTest1, FormatterTest2, FormatterTest3, GroceryReceipt, InnerClass, InnerClass2, InputClass, InputClassNested, LinkedList, LinkedListAliasNode, LiteralClassHello, LiteralClassOne, LiteralClassTwo, MalformedConstraints, MalformedConstraints2, Martian, MemoryObject, MergeAttrs, NamedArgsSingleClass, Nested, Nested2, NestedBlockConstraint, NestedBlockConstraintForParam, Node, NodeWithAliasIndirection, OptionalListAndMap, OptionalTest_Prop1, OptionalTest_ReturnType, OrderInfo, OriginalA, OriginalB, Person, PhoneNumber, Quantity, RaysData, ReceiptInfo, ReceiptItem, Recipe, Resume, Schema, SearchParams, SemanticContainer, SmallThing, SomeClassNestedDynamic, StringToClassEntry, TestClassAlias, TestClassNested, TestClassWithEnum, TestMemoryOutput, TestOutputClass, Tree, TwoStoriesOneTitle, UnionTest_ReturnType, UniverseQuestion, UniverseQuestionInput, WithReasoning, AliasedEnum, Category, Category2, Category3, Color, DataType, DynEnumOne, DynEnumTwo, EnumInClass, EnumOutput, Hobby, MapKey, NamedArgsSingleEnum, NamedArgsSingleEnumList, OptionalTest_CategoryType, OrderStatus, Tag, TestEnum} from "./types" +import TypeBuilder from "./type_builder" +import { DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX, DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_RUNTIME } from "./globals" + +/** + * @deprecated Use RecursivePartialNull from 'baml_client/types' instead. + */ +export type RecursivePartialNull = T extends object + ? { + [P in keyof T]?: RecursivePartialNull; + } + : T | null; + +export class BamlAsyncClient { + private runtime: BamlRuntime + private ctx_manager: BamlCtxManager + private stream_client: BamlStreamClient + + constructor(runtime: BamlRuntime, ctx_manager: BamlCtxManager) { + this.runtime = runtime + this.ctx_manager = ctx_manager + this.stream_client = new BamlStreamClient(runtime, ctx_manager) + } + + get stream() { + return this.stream_client + } + + + async AaaSamOutputFormat( + recipe: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "AaaSamOutputFormat", + { + "recipe": recipe + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Recipe + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async AliasThatPointsToRecursiveType( + list: LinkedListAliasNode, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "AliasThatPointsToRecursiveType", + { + "list": list + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as LinkedListAliasNode + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async AliasWithMultipleAttrs( + money: Checked, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise> { + try { + const raw = await this.runtime.callFunction( + "AliasWithMultipleAttrs", + { + "money": money + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Checked + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async AliasedInputClass( + input: InputClass, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "AliasedInputClass", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async AliasedInputClass2( + input: InputClass, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "AliasedInputClass2", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async AliasedInputClassNested( + input: InputClassNested, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "AliasedInputClassNested", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async AliasedInputEnum( + input: AliasedEnum, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "AliasedInputEnum", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async AliasedInputList( + input: AliasedEnum[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "AliasedInputList", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async AllowedOptionals( + optionals: OptionalListAndMap, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "AllowedOptionals", + { + "optionals": optionals + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as OptionalListAndMap + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async AssertFn( + a: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "AssertFn", + { + "a": a + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as number + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async AudioInput( + aud: Audio, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "AudioInput", + { + "aud": aud + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async BuildLinkedList( + input: number[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "BuildLinkedList", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as LinkedList + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async BuildTree( + input: BinaryNode, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "BuildTree", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Tree + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async ClassThatPointsToRecursiveClassThroughAlias( + cls: ClassToRecAlias, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "ClassThatPointsToRecursiveClassThroughAlias", + { + "cls": cls + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as ClassToRecAlias + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async ClassifyDynEnumTwo( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise<(string | DynEnumTwo)> { + try { + const raw = await this.runtime.callFunction( + "ClassifyDynEnumTwo", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as (string | DynEnumTwo) + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async ClassifyMessage( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "ClassifyMessage", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Category + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async ClassifyMessage2( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "ClassifyMessage2", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Category + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async ClassifyMessage3( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "ClassifyMessage3", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Category + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async Completion( + prefix: string,suffix: string,language: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "Completion", + { + "prefix": prefix,"suffix": suffix,"language": language + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async CustomTask( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "CustomTask", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as BookOrder | FlightConfirmation | GroceryReceipt + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async DescribeImage( + img: Image, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "DescribeImage", + { + "img": img + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async DescribeImage2( + classWithImage: ClassWithImage,img2: Image, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "DescribeImage2", + { + "classWithImage": classWithImage,"img2": img2 + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async DescribeImage3( + classWithImage: ClassWithImage,img2: Image, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "DescribeImage3", + { + "classWithImage": classWithImage,"img2": img2 + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async DescribeImage4( + classWithImage: ClassWithImage,img2: Image, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "DescribeImage4", + { + "classWithImage": classWithImage,"img2": img2 + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async DifferentiateUnions( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "DifferentiateUnions", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as OriginalA | OriginalB + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async DummyOutputFunction( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "DummyOutputFunction", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as DummyOutput + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async DynamicFunc( + input: DynamicClassOne, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "DynamicFunc", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as DynamicClassTwo + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async DynamicInputOutput( + input: DynInputOutput, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "DynamicInputOutput", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as DynInputOutput + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async DynamicListInputOutput( + input: DynInputOutput[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "DynamicListInputOutput", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as DynInputOutput[] + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async ExpectFailure( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "ExpectFailure", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async ExtractContactInfo( + document: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "ExtractContactInfo", + { + "document": document + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as ContactInfo + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async ExtractHobby( + text: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise<(string | Hobby)[]> { + try { + const raw = await this.runtime.callFunction( + "ExtractHobby", + { + "text": text + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as (string | Hobby)[] + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async ExtractNames( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "ExtractNames", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string[] + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async ExtractPeople( + text: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "ExtractPeople", + { + "text": text + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Person[] + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async ExtractReceiptInfo( + email: string,reason: "curiosity" | "personal_finance", + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "ExtractReceiptInfo", + { + "email": email,"reason": reason + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as ReceiptInfo + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async ExtractResume( + resume: string,img?: Image | null, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "ExtractResume", + { + "resume": resume,"img": img?? null + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Resume + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async ExtractResume2( + resume: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "ExtractResume2", + { + "resume": resume + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Resume + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async FnClassOptionalOutput( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "FnClassOptionalOutput", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as ClassOptionalOutput | null + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async FnClassOptionalOutput2( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "FnClassOptionalOutput2", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as ClassOptionalOutput2 | null + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async FnEnumListOutput( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "FnEnumListOutput", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as EnumOutput[] + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async FnEnumOutput( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "FnEnumOutput", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as EnumOutput + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async FnLiteralClassInputOutput( + input: LiteralClassHello, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "FnLiteralClassInputOutput", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as LiteralClassHello + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async FnLiteralUnionClassInputOutput( + input: LiteralClassOne | LiteralClassTwo, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "FnLiteralUnionClassInputOutput", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as LiteralClassOne | LiteralClassTwo + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async FnNamedArgsSingleStringOptional( + myString?: string | null, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "FnNamedArgsSingleStringOptional", + { + "myString": myString?? null + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async FnOutputBool( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "FnOutputBool", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as boolean + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async FnOutputClass( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "FnOutputClass", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as TestOutputClass + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async FnOutputClassList( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "FnOutputClassList", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as TestOutputClass[] + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async FnOutputClassNested( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "FnOutputClassNested", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as TestClassNested + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async FnOutputClassWithEnum( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "FnOutputClassWithEnum", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as TestClassWithEnum + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async FnOutputInt( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "FnOutputInt", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as number + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async FnOutputLiteralBool( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "FnOutputLiteralBool", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as false + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async FnOutputLiteralInt( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise<5> { + try { + const raw = await this.runtime.callFunction( + "FnOutputLiteralInt", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as 5 + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async FnOutputLiteralString( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise<"example output"> { + try { + const raw = await this.runtime.callFunction( + "FnOutputLiteralString", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as "example output" + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async FnOutputStringList( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "FnOutputStringList", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string[] + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async FnTestAliasedEnumOutput( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "FnTestAliasedEnumOutput", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as TestEnum + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async FnTestClassAlias( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "FnTestClassAlias", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as TestClassAlias + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async FnTestNamedArgsSingleEnum( + myArg: NamedArgsSingleEnum, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "FnTestNamedArgsSingleEnum", + { + "myArg": myArg + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async GetDataType( + text: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "GetDataType", + { + "text": text + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as RaysData + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async GetOrderInfo( + email: Email, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "GetOrderInfo", + { + "email": email + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as OrderInfo + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async GetQuery( + query: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "GetQuery", + { + "query": query + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as SearchParams + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async InOutEnumMapKey( + i1: Partial>,i2: Partial>, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise>> { + try { + const raw = await this.runtime.callFunction( + "InOutEnumMapKey", + { + "i1": i1,"i2": i2 + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Partial> + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async InOutLiteralStringUnionMapKey( + i1: Partial>,i2: Partial>, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise>> { + try { + const raw = await this.runtime.callFunction( + "InOutLiteralStringUnionMapKey", + { + "i1": i1,"i2": i2 + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Partial> + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async InOutSingleLiteralStringMapKey( + m: Partial>, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise>> { + try { + const raw = await this.runtime.callFunction( + "InOutSingleLiteralStringMapKey", + { + "m": m + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Partial> + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async JsonTypeAliasCycle( + input: JsonValue, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "JsonTypeAliasCycle", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as JsonValue + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async LiteralUnionsTest( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise<1 | true | "string output"> { + try { + const raw = await this.runtime.callFunction( + "LiteralUnionsTest", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as 1 | true | "string output" + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async MakeBlockConstraint( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise> { + try { + const raw = await this.runtime.callFunction( + "MakeBlockConstraint", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Checked + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async MakeNestedBlockConstraint( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "MakeNestedBlockConstraint", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as NestedBlockConstraint + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async MakeSemanticContainer( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "MakeSemanticContainer", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as SemanticContainer + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async MapAlias( + m: Record, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise> { + try { + const raw = await this.runtime.callFunction( + "MapAlias", + { + "m": m + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Record + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async MergeAliasAttributes( + money: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "MergeAliasAttributes", + { + "money": money + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as MergeAttrs + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async MyFunc( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "MyFunc", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as DynamicOutput + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async NestedAlias( + c: number | string | boolean | number | string[] | Record, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise> { + try { + const raw = await this.runtime.callFunction( + "NestedAlias", + { + "c": c + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as number | string | boolean | number | string[] | Record + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async NullLiteralClassHello( + s: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "NullLiteralClassHello", + { + "s": s + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as ClassForNullLiteral + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async OptionalTest_Function( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise<(OptionalTest_ReturnType | null)[]> { + try { + const raw = await this.runtime.callFunction( + "OptionalTest_Function", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as (OptionalTest_ReturnType | null)[] + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async PredictAge( + name: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "PredictAge", + { + "name": name + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as FooAny + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async PredictAgeBare( + inp: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise> { + try { + const raw = await this.runtime.callFunction( + "PredictAgeBare", + { + "inp": inp + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Checked + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async PrimitiveAlias( + p: number | string | boolean | number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "PrimitiveAlias", + { + "p": p + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as number | string | boolean | number + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async PromptTestClaude( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "PromptTestClaude", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async PromptTestClaudeChat( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "PromptTestClaudeChat", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async PromptTestClaudeChatNoSystem( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "PromptTestClaudeChatNoSystem", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async PromptTestOpenAI( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "PromptTestOpenAI", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async PromptTestOpenAIChat( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "PromptTestOpenAIChat", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async PromptTestOpenAIChatNoSystem( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "PromptTestOpenAIChatNoSystem", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async PromptTestStreaming( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "PromptTestStreaming", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async RecursiveAliasCycle( + input: RecAliasOne, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "RecursiveAliasCycle", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as RecAliasOne + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async RecursiveClassWithAliasIndirection( + cls: NodeWithAliasIndirection, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "RecursiveClassWithAliasIndirection", + { + "cls": cls + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as NodeWithAliasIndirection + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async ReturnAliasWithMergedAttributes( + money: Checked, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise> { + try { + const raw = await this.runtime.callFunction( + "ReturnAliasWithMergedAttributes", + { + "money": money + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Checked + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async ReturnFailingAssert( + inp: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "ReturnFailingAssert", + { + "inp": inp + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as number + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async ReturnMalformedConstraints( + a: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "ReturnMalformedConstraints", + { + "a": a + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as MalformedConstraints + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async SchemaDescriptions( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "SchemaDescriptions", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Schema + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async SimpleRecursiveListAlias( + input: RecursiveListAlias, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "SimpleRecursiveListAlias", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as RecursiveListAlias + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async SimpleRecursiveMapAlias( + input: RecursiveMapAlias, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "SimpleRecursiveMapAlias", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as RecursiveMapAlias + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async StreamBigNumbers( + digits: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "StreamBigNumbers", + { + "digits": digits + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as BigNumbers + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async StreamFailingAssertion( + theme: string,length: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "StreamFailingAssertion", + { + "theme": theme,"length": length + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as TwoStoriesOneTitle + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async StreamOneBigNumber( + digits: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "StreamOneBigNumber", + { + "digits": digits + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as number + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async StreamUnionIntegers( + digits: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise<(number | string)[]> { + try { + const raw = await this.runtime.callFunction( + "StreamUnionIntegers", + { + "digits": digits + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as (number | string)[] + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async StreamingCompoundNumbers( + digits: number,yapping: boolean, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "StreamingCompoundNumbers", + { + "digits": digits,"yapping": yapping + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as CompoundBigNumbers + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestAnthropic( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestAnthropic", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestAnthropicShorthand( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestAnthropicShorthand", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestAws( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestAws", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestAwsInvalidAccessKey( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestAwsInvalidAccessKey", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestAwsInvalidProfile( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestAwsInvalidProfile", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestAwsInvalidRegion( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestAwsInvalidRegion", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestAwsInvalidSessionToken( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestAwsInvalidSessionToken", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestAzure( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestAzure", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestAzureFailure( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestAzureFailure", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestCaching( + input: string,not_cached: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestCaching", + { + "input": input,"not_cached": not_cached + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestFallbackClient( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestFallbackClient", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestFallbackToShorthand( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestFallbackToShorthand", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestFnNamedArgsSingleBool( + myBool: boolean, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestFnNamedArgsSingleBool", + { + "myBool": myBool + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestFnNamedArgsSingleClass( + myArg: NamedArgsSingleClass, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestFnNamedArgsSingleClass", + { + "myArg": myArg + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestFnNamedArgsSingleEnumList( + myArg: NamedArgsSingleEnumList[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestFnNamedArgsSingleEnumList", + { + "myArg": myArg + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestFnNamedArgsSingleFloat( + myFloat: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestFnNamedArgsSingleFloat", + { + "myFloat": myFloat + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestFnNamedArgsSingleInt( + myInt: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestFnNamedArgsSingleInt", + { + "myInt": myInt + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestFnNamedArgsSingleMapStringToClass( + myMap: Record, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise> { + try { + const raw = await this.runtime.callFunction( + "TestFnNamedArgsSingleMapStringToClass", + { + "myMap": myMap + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Record + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestFnNamedArgsSingleMapStringToMap( + myMap: Record>, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise>> { + try { + const raw = await this.runtime.callFunction( + "TestFnNamedArgsSingleMapStringToMap", + { + "myMap": myMap + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Record> + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestFnNamedArgsSingleMapStringToString( + myMap: Record, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise> { + try { + const raw = await this.runtime.callFunction( + "TestFnNamedArgsSingleMapStringToString", + { + "myMap": myMap + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Record + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestFnNamedArgsSingleString( + myString: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestFnNamedArgsSingleString", + { + "myString": myString + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestFnNamedArgsSingleStringArray( + myStringArray: string[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestFnNamedArgsSingleStringArray", + { + "myStringArray": myStringArray + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestFnNamedArgsSingleStringList( + myArg: string[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestFnNamedArgsSingleStringList", + { + "myArg": myArg + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestGemini( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestGemini", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestGeminiOpenAiGeneric( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestGeminiOpenAiGeneric", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestGeminiSystem( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestGeminiSystem", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestGeminiSystemAsChat( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestGeminiSystemAsChat", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestImageInput( + img: Image, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestImageInput", + { + "img": img + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestImageInputAnthropic( + img: Image, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestImageInputAnthropic", + { + "img": img + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestImageListInput( + imgs: Image[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestImageListInput", + { + "imgs": imgs + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestMemory( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestMemory", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as TestMemoryOutput + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestMulticlassNamedArgs( + myArg: NamedArgsSingleClass,myArg2: NamedArgsSingleClass, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestMulticlassNamedArgs", + { + "myArg": myArg,"myArg2": myArg2 + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestNamedArgsLiteralBool( + myBool: true, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestNamedArgsLiteralBool", + { + "myBool": myBool + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestNamedArgsLiteralInt( + myInt: 1, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestNamedArgsLiteralInt", + { + "myInt": myInt + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestNamedArgsLiteralString( + myString: "My String", + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestNamedArgsLiteralString", + { + "myString": myString + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestOllama( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestOllama", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestOpenAILegacyProvider( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestOpenAILegacyProvider", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestOpenAIShorthand( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestOpenAIShorthand", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestRetryConstant( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestRetryConstant", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestRetryExponential( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestRetryExponential", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestSingleFallbackClient( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestSingleFallbackClient", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestUniverseQuestion( + question: UniverseQuestionInput, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestUniverseQuestion", + { + "question": question + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as UniverseQuestion + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestVertex( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestVertex", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async TestVertexWithSystemInstructions( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestVertexWithSystemInstructions", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async UnionTest_Function( + input: string | boolean, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "UnionTest_Function", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as UnionTest_ReturnType + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async UseBlockConstraint( + inp: BlockConstraintForParam, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "UseBlockConstraint", + { + "inp": inp + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as number + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async UseMalformedConstraints( + a: MalformedConstraints2, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "UseMalformedConstraints", + { + "a": a + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as number + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + async UseNestedBlockConstraint( + inp: NestedBlockConstraintForParam, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "UseNestedBlockConstraint", + { + "inp": inp + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as number + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + +} + +class BamlStreamClient { + constructor(private runtime: BamlRuntime, private ctx_manager: BamlCtxManager) {} + + + AaaSamOutputFormat( + recipe: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "AaaSamOutputFormat", + { + "recipe": recipe + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.Recipe => a, + (a): a is Recipe => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + AliasThatPointsToRecursiveType( + list: LinkedListAliasNode, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "AliasThatPointsToRecursiveType", + { + "list": list + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.LinkedListAliasNode => a, + (a): a is LinkedListAliasNode => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + AliasWithMultipleAttrs( + money: Checked, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream, Checked> { + try { + const raw = this.runtime.streamFunction( + "AliasWithMultipleAttrs", + { + "money": money + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream, Checked>( + raw, + (a): a is Checked => a, + (a): a is Checked => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + AliasedInputClass( + input: InputClass, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "AliasedInputClass", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + AliasedInputClass2( + input: InputClass, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "AliasedInputClass2", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + AliasedInputClassNested( + input: InputClassNested, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "AliasedInputClassNested", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + AliasedInputEnum( + input: AliasedEnum, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "AliasedInputEnum", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + AliasedInputList( + input: AliasedEnum[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "AliasedInputList", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + AllowedOptionals( + optionals: OptionalListAndMap, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "AllowedOptionals", + { + "optionals": optionals + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.OptionalListAndMap => a, + (a): a is OptionalListAndMap => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + AssertFn( + a: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "AssertFn", + { + "a": a + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is number => a, + (a): a is number => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + AudioInput( + aud: Audio, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "AudioInput", + { + "aud": aud + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + BuildLinkedList( + input: number[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "BuildLinkedList", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.LinkedList => a, + (a): a is LinkedList => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + BuildTree( + input: BinaryNode, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "BuildTree", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.Tree => a, + (a): a is Tree => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + ClassThatPointsToRecursiveClassThroughAlias( + cls: ClassToRecAlias, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "ClassThatPointsToRecursiveClassThroughAlias", + { + "cls": cls + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.ClassToRecAlias => a, + (a): a is ClassToRecAlias => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + ClassifyDynEnumTwo( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<(string | DynEnumTwo), (string | DynEnumTwo)> { + try { + const raw = this.runtime.streamFunction( + "ClassifyDynEnumTwo", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<(string | DynEnumTwo), (string | DynEnumTwo)>( + raw, + (a): a is (string | DynEnumTwo) => a, + (a): a is (string | DynEnumTwo) => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + ClassifyMessage( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "ClassifyMessage", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is types.Category => a, + (a): a is Category => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + ClassifyMessage2( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "ClassifyMessage2", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is types.Category => a, + (a): a is Category => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + ClassifyMessage3( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "ClassifyMessage3", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is types.Category => a, + (a): a is Category => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + Completion( + prefix: string,suffix: string,language: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "Completion", + { + "prefix": prefix,"suffix": suffix,"language": language + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + CustomTask( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<(partial_types.BookOrder | null | partial_types.FlightConfirmation | null | partial_types.GroceryReceipt | null), BookOrder | FlightConfirmation | GroceryReceipt> { + try { + const raw = this.runtime.streamFunction( + "CustomTask", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<(partial_types.BookOrder | null | partial_types.FlightConfirmation | null | partial_types.GroceryReceipt | null), BookOrder | FlightConfirmation | GroceryReceipt>( + raw, + (a): a is (partial_types.BookOrder | null | partial_types.FlightConfirmation | null | partial_types.GroceryReceipt | null) => a, + (a): a is BookOrder | FlightConfirmation | GroceryReceipt => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + DescribeImage( + img: Image, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "DescribeImage", + { + "img": img + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + DescribeImage2( + classWithImage: ClassWithImage,img2: Image, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "DescribeImage2", + { + "classWithImage": classWithImage,"img2": img2 + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + DescribeImage3( + classWithImage: ClassWithImage,img2: Image, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "DescribeImage3", + { + "classWithImage": classWithImage,"img2": img2 + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + DescribeImage4( + classWithImage: ClassWithImage,img2: Image, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "DescribeImage4", + { + "classWithImage": classWithImage,"img2": img2 + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + DifferentiateUnions( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<(partial_types.OriginalA | null | partial_types.OriginalB | null), OriginalA | OriginalB> { + try { + const raw = this.runtime.streamFunction( + "DifferentiateUnions", + { + + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<(partial_types.OriginalA | null | partial_types.OriginalB | null), OriginalA | OriginalB>( + raw, + (a): a is (partial_types.OriginalA | null | partial_types.OriginalB | null) => a, + (a): a is OriginalA | OriginalB => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + DummyOutputFunction( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "DummyOutputFunction", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.DummyOutput => a, + (a): a is DummyOutput => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + DynamicFunc( + input: DynamicClassOne, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "DynamicFunc", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.DynamicClassTwo => a, + (a): a is DynamicClassTwo => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + DynamicInputOutput( + input: DynInputOutput, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "DynamicInputOutput", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.DynInputOutput => a, + (a): a is DynInputOutput => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + DynamicListInputOutput( + input: DynInputOutput[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "DynamicListInputOutput", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.DynInputOutput | null[] => a, + (a): a is DynInputOutput[] => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + ExpectFailure( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "ExpectFailure", + { + + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + ExtractContactInfo( + document: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "ExtractContactInfo", + { + "document": document + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.ContactInfo => a, + (a): a is ContactInfo => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + ExtractHobby( + text: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<(string | Hobby | null)[], (string | Hobby)[]> { + try { + const raw = this.runtime.streamFunction( + "ExtractHobby", + { + "text": text + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<(string | Hobby | null)[], (string | Hobby)[]>( + raw, + (a): a is (string | Hobby | null)[] => a, + (a): a is (string | Hobby)[] => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + ExtractNames( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<(string | null)[], string[]> { + try { + const raw = this.runtime.streamFunction( + "ExtractNames", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<(string | null)[], string[]>( + raw, + (a): a is (string | null)[] => a, + (a): a is string[] => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + ExtractPeople( + text: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "ExtractPeople", + { + "text": text + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.Person | null[] => a, + (a): a is Person[] => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + ExtractReceiptInfo( + email: string,reason: "curiosity" | "personal_finance", + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "ExtractReceiptInfo", + { + "email": email,"reason": reason + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.ReceiptInfo => a, + (a): a is ReceiptInfo => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + ExtractResume( + resume: string,img?: Image | null, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "ExtractResume", + { + "resume": resume,"img": img ?? null + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.Resume => a, + (a): a is Resume => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + ExtractResume2( + resume: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "ExtractResume2", + { + "resume": resume + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.Resume => a, + (a): a is Resume => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + FnClassOptionalOutput( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<(partial_types.ClassOptionalOutput | null | null), ClassOptionalOutput | null> { + try { + const raw = this.runtime.streamFunction( + "FnClassOptionalOutput", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<(partial_types.ClassOptionalOutput | null | null), ClassOptionalOutput | null>( + raw, + (a): a is (partial_types.ClassOptionalOutput | null | null) => a, + (a): a is ClassOptionalOutput | null => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + FnClassOptionalOutput2( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<(partial_types.ClassOptionalOutput2 | null | null), ClassOptionalOutput2 | null> { + try { + const raw = this.runtime.streamFunction( + "FnClassOptionalOutput2", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<(partial_types.ClassOptionalOutput2 | null | null), ClassOptionalOutput2 | null>( + raw, + (a): a is (partial_types.ClassOptionalOutput2 | null | null) => a, + (a): a is ClassOptionalOutput2 | null => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + FnEnumListOutput( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<(EnumOutput | null)[], EnumOutput[]> { + try { + const raw = this.runtime.streamFunction( + "FnEnumListOutput", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<(EnumOutput | null)[], EnumOutput[]>( + raw, + (a): a is (EnumOutput | null)[] => a, + (a): a is EnumOutput[] => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + FnEnumOutput( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "FnEnumOutput", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is types.EnumOutput => a, + (a): a is EnumOutput => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + FnLiteralClassInputOutput( + input: LiteralClassHello, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "FnLiteralClassInputOutput", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.LiteralClassHello => a, + (a): a is LiteralClassHello => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + FnLiteralUnionClassInputOutput( + input: LiteralClassOne | LiteralClassTwo, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<(partial_types.LiteralClassOne | null | partial_types.LiteralClassTwo | null), LiteralClassOne | LiteralClassTwo> { + try { + const raw = this.runtime.streamFunction( + "FnLiteralUnionClassInputOutput", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<(partial_types.LiteralClassOne | null | partial_types.LiteralClassTwo | null), LiteralClassOne | LiteralClassTwo>( + raw, + (a): a is (partial_types.LiteralClassOne | null | partial_types.LiteralClassTwo | null) => a, + (a): a is LiteralClassOne | LiteralClassTwo => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + FnNamedArgsSingleStringOptional( + myString?: string | null, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "FnNamedArgsSingleStringOptional", + { + "myString": myString ?? null + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + FnOutputBool( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "FnOutputBool", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is boolean => a, + (a): a is boolean => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + FnOutputClass( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "FnOutputClass", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.TestOutputClass => a, + (a): a is TestOutputClass => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + FnOutputClassList( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "FnOutputClassList", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.TestOutputClass | null[] => a, + (a): a is TestOutputClass[] => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + FnOutputClassNested( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "FnOutputClassNested", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.TestClassNested => a, + (a): a is TestClassNested => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + FnOutputClassWithEnum( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "FnOutputClassWithEnum", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.TestClassWithEnum => a, + (a): a is TestClassWithEnum => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + FnOutputInt( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "FnOutputInt", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is number => a, + (a): a is number => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + FnOutputLiteralBool( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "FnOutputLiteralBool", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is false => a, + (a): a is false => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + FnOutputLiteralInt( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<5, 5> { + try { + const raw = this.runtime.streamFunction( + "FnOutputLiteralInt", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<5, 5>( + raw, + (a): a is 5 => a, + (a): a is 5 => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + FnOutputLiteralString( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<"example output", "example output"> { + try { + const raw = this.runtime.streamFunction( + "FnOutputLiteralString", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<"example output", "example output">( + raw, + (a): a is "example output" => a, + (a): a is "example output" => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + FnOutputStringList( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<(string | null)[], string[]> { + try { + const raw = this.runtime.streamFunction( + "FnOutputStringList", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<(string | null)[], string[]>( + raw, + (a): a is (string | null)[] => a, + (a): a is string[] => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + FnTestAliasedEnumOutput( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "FnTestAliasedEnumOutput", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is types.TestEnum => a, + (a): a is TestEnum => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + FnTestClassAlias( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "FnTestClassAlias", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.TestClassAlias => a, + (a): a is TestClassAlias => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + FnTestNamedArgsSingleEnum( + myArg: NamedArgsSingleEnum, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "FnTestNamedArgsSingleEnum", + { + "myArg": myArg + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + GetDataType( + text: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "GetDataType", + { + "text": text + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.RaysData => a, + (a): a is RaysData => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + GetOrderInfo( + email: Email, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "GetOrderInfo", + { + "email": email + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.OrderInfo => a, + (a): a is OrderInfo => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + GetQuery( + query: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "GetQuery", + { + "query": query + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.SearchParams => a, + (a): a is SearchParams => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + InOutEnumMapKey( + i1: Partial>,i2: Partial>, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<(Record ), Partial>> { + try { + const raw = this.runtime.streamFunction( + "InOutEnumMapKey", + { + "i1": i1,"i2": i2 + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<(Record ), Partial>>( + raw, + (a): a is (Record ) => a, + (a): a is Partial> => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + InOutLiteralStringUnionMapKey( + i1: Partial>,i2: Partial>, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<(Record<"one" | "two" | "three" | "four", (string | null)> ), Partial>> { + try { + const raw = this.runtime.streamFunction( + "InOutLiteralStringUnionMapKey", + { + "i1": i1,"i2": i2 + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<(Record<"one" | "two" | "three" | "four", (string | null)> ), Partial>>( + raw, + (a): a is (Record<"one" | "two" | "three" | "four", (string | null)> ) => a, + (a): a is Partial> => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + InOutSingleLiteralStringMapKey( + m: Partial>, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<(Record<"key", (string | null)> ), Partial>> { + try { + const raw = this.runtime.streamFunction( + "InOutSingleLiteralStringMapKey", + { + "m": m + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<(Record<"key", (string | null)> ), Partial>>( + raw, + (a): a is (Record<"key", (string | null)> ) => a, + (a): a is Partial> => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + JsonTypeAliasCycle( + input: JsonValue, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "JsonTypeAliasCycle", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is JsonValue => a, + (a): a is JsonValue => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + LiteralUnionsTest( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<(1 | true | "string output"), 1 | true | "string output"> { + try { + const raw = this.runtime.streamFunction( + "LiteralUnionsTest", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<(1 | true | "string output"), 1 | true | "string output">( + raw, + (a): a is (1 | true | "string output") => a, + (a): a is 1 | true | "string output" => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + MakeBlockConstraint( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream, Checked> { + try { + const raw = this.runtime.streamFunction( + "MakeBlockConstraint", + { + + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream, Checked>( + raw, + (a): a is Checked => a, + (a): a is Checked => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + MakeNestedBlockConstraint( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "MakeNestedBlockConstraint", + { + + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.NestedBlockConstraint => a, + (a): a is NestedBlockConstraint => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + MakeSemanticContainer( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "MakeSemanticContainer", + { + + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.SemanticContainer => a, + (a): a is SemanticContainer => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + MapAlias( + m: Record, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<(Record ), Record> { + try { + const raw = this.runtime.streamFunction( + "MapAlias", + { + "m": m + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<(Record ), Record>( + raw, + (a): a is (Record ) => a, + (a): a is Record => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + MergeAliasAttributes( + money: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "MergeAliasAttributes", + { + "money": money + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.MergeAttrs => a, + (a): a is MergeAttrs => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + MyFunc( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "MyFunc", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.DynamicOutput => a, + (a): a is DynamicOutput => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + NestedAlias( + c: number | string | boolean | number | string[] | Record, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<(((number | null) | (string | null) | (boolean | null) | (number | null) | null) | (string | null)[] | (Record | null)), number | string | boolean | number | string[] | Record> { + try { + const raw = this.runtime.streamFunction( + "NestedAlias", + { + "c": c + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<(((number | null) | (string | null) | (boolean | null) | (number | null) | null) | (string | null)[] | (Record | null)), number | string | boolean | number | string[] | Record>( + raw, + (a): a is (((number | null) | (string | null) | (boolean | null) | (number | null) | null) | (string | null)[] | (Record | null)) => a, + (a): a is number | string | boolean | number | string[] | Record => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + NullLiteralClassHello( + s: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "NullLiteralClassHello", + { + "s": s + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.ClassForNullLiteral => a, + (a): a is ClassForNullLiteral => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + OptionalTest_Function( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<(partial_types.OptionalTest_ReturnType | null | null)[], (OptionalTest_ReturnType | null)[]> { + try { + const raw = this.runtime.streamFunction( + "OptionalTest_Function", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<(partial_types.OptionalTest_ReturnType | null | null)[], (OptionalTest_ReturnType | null)[]>( + raw, + (a): a is (partial_types.OptionalTest_ReturnType | null | null)[] => a, + (a): a is (OptionalTest_ReturnType | null)[] => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + PredictAge( + name: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "PredictAge", + { + "name": name + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.FooAny => a, + (a): a is FooAny => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + PredictAgeBare( + inp: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream, Checked> { + try { + const raw = this.runtime.streamFunction( + "PredictAgeBare", + { + "inp": inp + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream, Checked>( + raw, + (a): a is Checked => a, + (a): a is Checked => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + PrimitiveAlias( + p: number | string | boolean | number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<((number | null) | (string | null) | (boolean | null) | (number | null)), number | string | boolean | number> { + try { + const raw = this.runtime.streamFunction( + "PrimitiveAlias", + { + "p": p + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<((number | null) | (string | null) | (boolean | null) | (number | null)), number | string | boolean | number>( + raw, + (a): a is ((number | null) | (string | null) | (boolean | null) | (number | null)) => a, + (a): a is number | string | boolean | number => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + PromptTestClaude( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "PromptTestClaude", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + PromptTestClaudeChat( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "PromptTestClaudeChat", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + PromptTestClaudeChatNoSystem( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "PromptTestClaudeChatNoSystem", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + PromptTestOpenAI( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "PromptTestOpenAI", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + PromptTestOpenAIChat( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "PromptTestOpenAIChat", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + PromptTestOpenAIChatNoSystem( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "PromptTestOpenAIChatNoSystem", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + PromptTestStreaming( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "PromptTestStreaming", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + RecursiveAliasCycle( + input: RecAliasOne, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "RecursiveAliasCycle", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is RecAliasOne => a, + (a): a is RecAliasOne => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + RecursiveClassWithAliasIndirection( + cls: NodeWithAliasIndirection, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "RecursiveClassWithAliasIndirection", + { + "cls": cls + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.NodeWithAliasIndirection => a, + (a): a is NodeWithAliasIndirection => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + ReturnAliasWithMergedAttributes( + money: Checked, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream, Checked> { + try { + const raw = this.runtime.streamFunction( + "ReturnAliasWithMergedAttributes", + { + "money": money + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream, Checked>( + raw, + (a): a is Checked => a, + (a): a is Checked => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + ReturnFailingAssert( + inp: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "ReturnFailingAssert", + { + "inp": inp + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is number => a, + (a): a is number => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + ReturnMalformedConstraints( + a: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "ReturnMalformedConstraints", + { + "a": a + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.MalformedConstraints => a, + (a): a is MalformedConstraints => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + SchemaDescriptions( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "SchemaDescriptions", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.Schema => a, + (a): a is Schema => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + SimpleRecursiveListAlias( + input: RecursiveListAlias, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "SimpleRecursiveListAlias", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is RecursiveListAlias => a, + (a): a is RecursiveListAlias => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + SimpleRecursiveMapAlias( + input: RecursiveMapAlias, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "SimpleRecursiveMapAlias", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is RecursiveMapAlias => a, + (a): a is RecursiveMapAlias => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + StreamBigNumbers( + digits: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "StreamBigNumbers", + { + "digits": digits + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.BigNumbers => a, + (a): a is BigNumbers => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + StreamFailingAssertion( + theme: string,length: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "StreamFailingAssertion", + { + "theme": theme,"length": length + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.TwoStoriesOneTitle => a, + (a): a is TwoStoriesOneTitle => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + StreamOneBigNumber( + digits: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "StreamOneBigNumber", + { + "digits": digits + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is number => a, + (a): a is number => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + StreamUnionIntegers( + digits: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<((number | null) | (string | null) | null)[], (number | string)[]> { + try { + const raw = this.runtime.streamFunction( + "StreamUnionIntegers", + { + "digits": digits + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<((number | null) | (string | null) | null)[], (number | string)[]>( + raw, + (a): a is ((number | null) | (string | null) | null)[] => a, + (a): a is (number | string)[] => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + StreamingCompoundNumbers( + digits: number,yapping: boolean, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "StreamingCompoundNumbers", + { + "digits": digits,"yapping": yapping + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.CompoundBigNumbers => a, + (a): a is CompoundBigNumbers => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestAnthropic( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestAnthropic", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestAnthropicShorthand( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestAnthropicShorthand", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestAws( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestAws", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestAwsInvalidAccessKey( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestAwsInvalidAccessKey", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestAwsInvalidProfile( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestAwsInvalidProfile", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestAwsInvalidRegion( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestAwsInvalidRegion", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestAwsInvalidSessionToken( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestAwsInvalidSessionToken", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestAzure( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestAzure", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestAzureFailure( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestAzureFailure", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestCaching( + input: string,not_cached: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestCaching", + { + "input": input,"not_cached": not_cached + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestFallbackClient( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestFallbackClient", + { + + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestFallbackToShorthand( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestFallbackToShorthand", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestFnNamedArgsSingleBool( + myBool: boolean, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestFnNamedArgsSingleBool", + { + "myBool": myBool + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestFnNamedArgsSingleClass( + myArg: NamedArgsSingleClass, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestFnNamedArgsSingleClass", + { + "myArg": myArg + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestFnNamedArgsSingleEnumList( + myArg: NamedArgsSingleEnumList[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestFnNamedArgsSingleEnumList", + { + "myArg": myArg + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestFnNamedArgsSingleFloat( + myFloat: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestFnNamedArgsSingleFloat", + { + "myFloat": myFloat + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestFnNamedArgsSingleInt( + myInt: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestFnNamedArgsSingleInt", + { + "myInt": myInt + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestFnNamedArgsSingleMapStringToClass( + myMap: Record, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<(Record ), Record> { + try { + const raw = this.runtime.streamFunction( + "TestFnNamedArgsSingleMapStringToClass", + { + "myMap": myMap + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<(Record ), Record>( + raw, + (a): a is (Record ) => a, + (a): a is Record => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestFnNamedArgsSingleMapStringToMap( + myMap: Record>, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<(Record | null)> ), Record>> { + try { + const raw = this.runtime.streamFunction( + "TestFnNamedArgsSingleMapStringToMap", + { + "myMap": myMap + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<(Record | null)> ), Record>>( + raw, + (a): a is (Record | null)> ) => a, + (a): a is Record> => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestFnNamedArgsSingleMapStringToString( + myMap: Record, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<(Record ), Record> { + try { + const raw = this.runtime.streamFunction( + "TestFnNamedArgsSingleMapStringToString", + { + "myMap": myMap + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<(Record ), Record>( + raw, + (a): a is (Record ) => a, + (a): a is Record => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestFnNamedArgsSingleString( + myString: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestFnNamedArgsSingleString", + { + "myString": myString + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestFnNamedArgsSingleStringArray( + myStringArray: string[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestFnNamedArgsSingleStringArray", + { + "myStringArray": myStringArray + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestFnNamedArgsSingleStringList( + myArg: string[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestFnNamedArgsSingleStringList", + { + "myArg": myArg + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestGemini( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestGemini", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestGeminiOpenAiGeneric( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestGeminiOpenAiGeneric", + { + + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestGeminiSystem( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestGeminiSystem", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestGeminiSystemAsChat( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestGeminiSystemAsChat", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestImageInput( + img: Image, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestImageInput", + { + "img": img + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestImageInputAnthropic( + img: Image, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestImageInputAnthropic", + { + "img": img + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestImageListInput( + imgs: Image[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestImageListInput", + { + "imgs": imgs + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestMemory( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestMemory", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.TestMemoryOutput => a, + (a): a is TestMemoryOutput => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestMulticlassNamedArgs( + myArg: NamedArgsSingleClass,myArg2: NamedArgsSingleClass, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestMulticlassNamedArgs", + { + "myArg": myArg,"myArg2": myArg2 + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestNamedArgsLiteralBool( + myBool: true, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestNamedArgsLiteralBool", + { + "myBool": myBool + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestNamedArgsLiteralInt( + myInt: 1, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestNamedArgsLiteralInt", + { + "myInt": myInt + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestNamedArgsLiteralString( + myString: "My String", + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestNamedArgsLiteralString", + { + "myString": myString + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestOllama( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestOllama", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestOpenAILegacyProvider( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestOpenAILegacyProvider", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestOpenAIShorthand( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestOpenAIShorthand", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestRetryConstant( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestRetryConstant", + { + + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestRetryExponential( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestRetryExponential", + { + + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestSingleFallbackClient( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestSingleFallbackClient", + { + + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestUniverseQuestion( + question: UniverseQuestionInput, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestUniverseQuestion", + { + "question": question + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.UniverseQuestion => a, + (a): a is UniverseQuestion => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestVertex( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestVertex", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + TestVertexWithSystemInstructions( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestVertexWithSystemInstructions", + { + + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is string => a, + (a): a is string => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + UnionTest_Function( + input: string | boolean, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "UnionTest_Function", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is partial_types.UnionTest_ReturnType => a, + (a): a is UnionTest_ReturnType => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + UseBlockConstraint( + inp: BlockConstraintForParam, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "UseBlockConstraint", + { + "inp": inp + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is number => a, + (a): a is number => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + UseMalformedConstraints( + a: MalformedConstraints2, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "UseMalformedConstraints", + { + "a": a + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is number => a, + (a): a is number => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + + UseNestedBlockConstraint( + inp: NestedBlockConstraintForParam, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "UseNestedBlockConstraint", + { + "inp": inp + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): a is number => a, + (a): a is number => a, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + ) + } catch (error) { + if (error instanceof Error) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } + } + throw error; + } + } + +} + +export const b = new BamlAsyncClient(DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_RUNTIME, DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX) \ No newline at end of file diff --git a/integ-tests/react/baml_client/globals.ts b/integ-tests/react/baml_client/globals.ts new file mode 100644 index 000000000..00b093019 --- /dev/null +++ b/integ-tests/react/baml_client/globals.ts @@ -0,0 +1,37 @@ +/************************************************************************************************* + +Welcome to Baml! To use this generated code, please run one of the following: + +$ npm install @boundaryml/baml +$ yarn add @boundaryml/baml +$ pnpm add @boundaryml/baml + +*************************************************************************************************/ + +// This file was generated by BAML: do not edit it. Instead, edit the BAML +// files and re-generate this code. +// +/* eslint-disable */ +// tslint:disable +// @ts-nocheck +// biome-ignore format: autogenerated code +import { BamlCtxManager, BamlRuntime } from '@boundaryml/baml' +import { getBamlFiles } from './inlinedbaml' + + +export const DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_RUNTIME = BamlRuntime.fromFiles( + 'baml_src', + getBamlFiles(), + process.env +) +export const DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX = new BamlCtxManager(DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_RUNTIME) + + +export function resetBamlEnvVars(envVars: Record) { + if (DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX.allowResets()) { + DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_RUNTIME.reset('baml_src', getBamlFiles(), envVars) + DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX.reset() + } else { + throw new Error('BamlError: Cannot reset BAML environment variables while there are active BAML contexts.') + } +} \ No newline at end of file diff --git a/integ-tests/react/baml_client/index.ts b/integ-tests/react/baml_client/index.ts new file mode 100644 index 000000000..6fc0cb7ab --- /dev/null +++ b/integ-tests/react/baml_client/index.ts @@ -0,0 +1,24 @@ +/************************************************************************************************* + +Welcome to Baml! To use this generated code, please run one of the following: + +$ npm install @boundaryml/baml +$ yarn add @boundaryml/baml +$ pnpm add @boundaryml/baml + +*************************************************************************************************/ + +// This file was generated by BAML: do not edit it. Instead, edit the BAML +// files and re-generate this code. +// +/* eslint-disable */ +// tslint:disable +// @ts-nocheck +// biome-ignore format: autogenerated code + +export { b } from "./async_client" + +export * from "./types" +export * from "./tracing" +export { resetBamlEnvVars } from "./globals" +export { BamlValidationError } from "@boundaryml/baml" \ No newline at end of file diff --git a/integ-tests/react/baml_client/inlinedbaml.ts b/integ-tests/react/baml_client/inlinedbaml.ts new file mode 100644 index 000000000..0cdddaf8b --- /dev/null +++ b/integ-tests/react/baml_client/inlinedbaml.ts @@ -0,0 +1,116 @@ +/************************************************************************************************* + +Welcome to Baml! To use this generated code, please run one of the following: + +$ npm install @boundaryml/baml +$ yarn add @boundaryml/baml +$ pnpm add @boundaryml/baml + +*************************************************************************************************/ + +// This file was generated by BAML: do not edit it. Instead, edit the BAML +// files and re-generate this code. +// +/* eslint-disable */ +// tslint:disable +// @ts-nocheck +// biome-ignore format: autogenerated code +const fileMap = { + + "clients.baml": "retry_policy Bar {\n max_retries 3\n strategy {\n type exponential_backoff\n }\n}\n\nretry_policy Foo {\n max_retries 3\n strategy {\n type constant_delay\n delay_ms 100\n }\n}\n\nclient GPT4 {\n provider openai\n options {\n model gpt-4o\n api_key env.OPENAI_API_KEY\n }\n}\n\n\nclient GPT4o {\n provider openai\n options {\n model gpt-4o\n api_key env.OPENAI_API_KEY\n }\n}\n\n\nclient GPT4Turbo {\n retry_policy Bar\n provider openai\n options {\n model gpt-4-turbo\n api_key env.OPENAI_API_KEY\n }\n}\n\nretry_policy GPT4oRetry {\n max_retries 2\n strategy {\n type exponential_backoff\n }\n}\n\nclient GPT35 {\n provider openai\n retry_policy GPT4oRetry\n options {\n model \"gpt-4o-mini\"\n api_key env.OPENAI_API_KEY\n }\n}\n\nclient GPT35LegacyProvider {\n provider openai\n options {\n model \"gpt-3.5-turbo\"\n api_key env.OPENAI_API_KEY\n }\n}\n\n\nclient Ollama {\n provider ollama\n options {\n model llama2\n }\n}\n\nclient GPT35Azure {\n provider azure-openai\n options {\n resource_name \"west-us-azure-baml\"\n deployment_id \"gpt-35-turbo-default\"\n // base_url \"https://west-us-azure-baml.openai.azure.com/openai/deployments/gpt-35-turbo-default\"\n api_version \"2024-02-01\"\n api_key env.AZURE_OPENAI_API_KEY\n }\n}\n\nclient Gemini {\n provider google-ai\n options {\n model gemini-1.5-pro-001\n api_key env.GOOGLE_API_KEY\n safetySettings {\n category HARM_CATEGORY_HATE_SPEECH\n threshold BLOCK_LOW_AND_ABOVE\n }\n }\n}\n\nclient GeminiOpenAiGeneric {\n provider \"openai-generic\"\n options {\n base_url \"https://generativelanguage.googleapis.com/v1beta/\"\n model \"gemini-1.5-flash\"\n api_key env.GOOGLE_API_KEY\n }\n}\n\nclient Vertex {\n provider vertex-ai\n options {\n model gemini-1.5-pro\n location us-central1\n credentials env.INTEG_TESTS_GOOGLE_APPLICATION_CREDENTIALS_CONTENT\n }\n}\n\n\nclient AwsBedrock {\n provider aws-bedrock\n options {\n inference_configuration {\n max_tokens 100\n }\n // model \"anthropic.claude-3-5-sonnet-20240620-v1:0\"\n // model_id \"anthropic.claude-3-haiku-20240307-v1:0\"\n model \"meta.llama3-8b-instruct-v1:0\"\n // region \"us-east-1\"\n // access_key_id env.AWS_ACCESS_KEY_ID\n // secret_access_key env.AWS_SECRET_ACCESS_KEY\n // session_token env.AWS_SESSION_TOKEN\n // session_token null\n // model_id \"mistral.mistral-7b-instruct-v0:2\"\n }\n}\n\nclient AwsBedrockInvalidRegion {\n provider aws-bedrock\n options {\n region \"us-invalid-7\"\n inference_configuration {\n max_tokens 100\n }\n // model \"anthropic.claude-3-5-sonnet-20240620-v1:0\"\n // model_id \"anthropic.claude-3-haiku-20240307-v1:0\"\n model_id \"meta.llama3-8b-instruct-v1:0\"\n // model_id \"mistral.mistral-7b-instruct-v0:2\"\n }\n}\n\nclient AwsBedrockInvalidAccessKey {\n provider aws-bedrock\n options {\n model_id \"meta.llama3-8b-instruct-v1:0\"\n access_key_id \"AKIAINVALID12345678\"\n secret_access_key \"abcdef1234567890abcdef1234567890abcdef12\"\n inference_configuration {\n max_tokens 100\n }\n }\n}\n\nclient AwsBedrockInvalidProfile {\n provider aws-bedrock\n options {\n model_id \"meta.llama3-8b-instruct-v1:0\"\n profile \"invalid-profile\"\n inference_configuration {\n max_tokens 100\n }\n }\n}\n\nclient AwsBedrockInvalidSessionToken {\n provider aws-bedrock\n options {\n model_id \"meta.llama3-8b-instruct-v1:0\"\n region \"us-east-1\"\n access_key_id \"AKIAINVALID12345678\"\n secret_access_key \"abcdef1234567890abcdef1234567890abcdef12\"\n session_token \"invalid-session-token\"\n inference_configuration {\n max_tokens 100\n }\n }\n}\n\n\nclient Invalid{\n provider aws-bedrock\n options {\n model_id \"meta.llama3-8b-instruct-v1:0\"\n region \"us-east-1\"\n access_key_id \"AKIAINVALID12345678\"\n secret_access_key \"abcdef1234567890abcdef1234567890abcdef12\"\n session_token \"invalid-session-token\"\n inference_configuration {\n max_tokens 100\n }\n }\n}\n\nclient Sonnet {\n provider anthropic\n options {\n model claude-3-5-sonnet-20241022\n api_key env.ANTHROPIC_API_KEY\n }\n}\n\nclient Claude {\n provider anthropic\n options {\n model claude-3-haiku-20240307\n api_key env.ANTHROPIC_API_KEY\n max_tokens 1000\n }\n}\n\nclient ClaudeWithCaching {\n provider anthropic\n options {\n model claude-3-haiku-20240307\n api_key env.ANTHROPIC_API_KEY\n max_tokens 500\n allowed_role_metadata [\"cache_control\"]\n headers {\n \"anthropic-beta\" \"prompt-caching-2024-07-31\"\n }\n }\n}\n\nclient Resilient_SimpleSyntax {\n retry_policy Foo\n provider baml-fallback\n options {\n strategy [\n GPT4Turbo\n GPT35\n Lottery_SimpleSyntax\n ]\n }\n}\n\nclient Lottery_SimpleSyntax {\n provider baml-round-robin\n options {\n start 0\n strategy [\n GPT35\n Claude\n ]\n }\n}\n\nclient TogetherAi {\n provider \"openai-generic\"\n options {\n base_url \"https://api.together.ai/v1\"\n api_key env.TOGETHER_API_KEY\n model \"meta-llama/Llama-3-70b-chat-hf\"\n }\n}\n", + "custom-task.baml": "class BookOrder {\n orderId string @description(#\"\n The ID of the book order\n \"#)\n title string @description(#\"\n The title of the ordered book\n \"#)\n quantity int @description(#\"\n The quantity of books ordered\n \"#)\n price float @description(#\"\n The price of the book\n \"#)\n}\n\nclass FlightConfirmation {\n confirmationNumber string @description(#\"\n The flight confirmation number\n \"#)\n flightNumber string @description(#\"\n The flight number\n \"#)\n departureTime string @description(#\"\n The scheduled departure time of the flight\n \"#)\n arrivalTime string @description(#\"\n The scheduled arrival time of the flight\n \"#)\n seatNumber string @description(#\"\n The seat number assigned on the flight\n \"#)\n}\n\nclass GroceryReceipt {\n receiptId string @description(#\"\n The ID of the grocery receipt\n \"#)\n storeName string @description(#\"\n The name of the grocery store\n \"#)\n items (string | int | float)[] @description(#\"\n A list of items purchased. Each item consists of a name, quantity, and price.\n \"#)\n totalAmount float @description(#\"\n The total amount spent on groceries\n \"#)\n}\n\nclass CustomTaskResult {\n bookOrder BookOrder | null\n flightConfirmation FlightConfirmation | null\n groceryReceipt GroceryReceipt | null\n}\n\nfunction CustomTask(input: string) -> BookOrder | FlightConfirmation | GroceryReceipt {\n client \"openai/gpt-4o-mini\"\n prompt #\"\n Given the input string, extract either an order for a book, a flight confirmation, or a grocery receipt.\n\n {{ ctx.output_format }}\n\n Input:\n \n {{ input}}\n \"#\n}\n\ntest CustomTask {\n functions [CustomTask]\n args {\n input #\"\nDear [Your Name],\n\nThank you for booking with [Airline Name]! We are pleased to confirm your upcoming flight.\n\nFlight Confirmation Details:\n\nBooking Reference: ABC123\nPassenger Name: [Your Name]\nFlight Number: XY789\nDeparture Date: September 15, 2024\nDeparture Time: 10:30 AM\nArrival Time: 1:45 PM\nDeparture Airport: John F. Kennedy International Airport (JFK), New York, NY\nArrival Airport: Los Angeles International Airport (LAX), Los Angeles, CA\nSeat Number: 12A\nClass: Economy\nBaggage Allowance:\n\nChecked Baggage: 1 piece, up to 23 kg\nCarry-On Baggage: 1 piece, up to 7 kg\nImportant Information:\n\nPlease arrive at the airport at least 2 hours before your scheduled departure.\nCheck-in online via our website or mobile app to save time at the airport.\nEnsure that your identification documents are up to date and match the name on your booking.\nContact Us:\n\nIf you have any questions or need to make changes to your booking, please contact our customer service team at 1-800-123-4567 or email us at support@[airline].com.\n\nWe wish you a pleasant journey and thank you for choosing [Airline Name].\n\nBest regards,\n\n[Airline Name] Customer Service\n \"#\n }\n}", + "fiddle-examples/chain-of-thought.baml": "class Email {\n subject string\n body string\n from_address string\n}\n\nenum OrderStatus {\n ORDERED\n SHIPPED\n DELIVERED\n CANCELLED\n}\n\nclass OrderInfo {\n order_status OrderStatus\n tracking_number string?\n estimated_arrival_date string?\n}\n\nfunction GetOrderInfo(email: Email) -> OrderInfo {\n client GPT4\n prompt #\"\n Given the email below:\n\n ```\n from: {{email.from_address}}\n Email Subject: {{email.subject}}\n Email Body: {{email.body}}\n ```\n\n Extract this info from the email in JSON format:\n {{ ctx.output_format }}\n\n Before you output the JSON, please explain your\n reasoning step-by-step. Here is an example on how to do this:\n 'If we think step by step we can see that ...\n therefore the output JSON is:\n {\n ... the json schema ...\n }'\n \"#\n}", + "fiddle-examples/chat-roles.baml": "// This will be available as an enum in your Python and Typescript code.\nenum Category2 {\n Refund\n CancelOrder\n TechnicalSupport\n AccountIssue\n Question\n}\n\nfunction ClassifyMessage2(input: string) -> Category {\n client GPT4\n\n prompt #\"\n {{ _.role(\"system\") }}\n // You can use _.role(\"system\") to indicate that this text should be a system message\n\n Classify the following INPUT into ONE\n of the following categories:\n\n {{ ctx.output_format }}\n\n {{ _.role(\"user\") }}\n // And _.role(\"user\") to indicate that this text should be a user message\n\n INPUT: {{ input }}\n\n Response:\n \"#\n}", + "fiddle-examples/classify-message.baml": "// This will be available as an enum in your Python and Typescript code.\nenum Category {\n Refund\n CancelOrder\n TechnicalSupport\n AccountIssue\n Question\n}\n\nfunction ClassifyMessage(input: string) -> Category {\n client GPT4\n\n prompt #\"\n Classify the following INPUT into ONE\n of the following categories:\n\n INPUT: {{ input }}\n\n {{ ctx.output_format }}\n\n Response:\n \"#\n}", + "fiddle-examples/extract-names.baml": "function ExtractNames(input: string) -> string[] {\n client GPT4\n prompt #\"\n Extract the names from this INPUT:\n \n INPUT:\n ---\n {{ input }}\n ---\n\n {{ ctx.output_format }}\n\n Response:\n \"#\n}\n", + "fiddle-examples/extract-receipt-info.baml": "class ReceiptItem {\n name string\n description string?\n quantity int\n price float\n}\n\nclass ReceiptInfo {\n items ReceiptItem[]\n total_cost float?\n venue \"barisa\" | \"ox_burger\"\n}\n\nfunction ExtractReceiptInfo(email: string, reason: \"curiosity\" | \"personal_finance\") -> ReceiptInfo {\n client GPT4o\n prompt #\"\n Given the receipt below:\n\n ```\n {{email}}\n ```\n\n {{ ctx.output_format }}\n \"#\n}\n\n", + "fiddle-examples/images/image.baml": "function DescribeImage(img: image) -> string {\n client GPT4o\n prompt #\"\n {{ _.role(\"user\") }}\n\n\n Describe the image below in 20 words:\n {{ img }}\n \"#\n\n}\n\nclass FakeImage {\n url string\n}\n\nclass ClassWithImage {\n myImage image\n param2 string\n fake_image FakeImage\n}\n\n// chat role user present\nfunction DescribeImage2(classWithImage: ClassWithImage, img2: image) -> string { \n client GPT4Turbo\n prompt #\"\n {{ _.role(\"user\") }}\n You should return 2 answers that answer the following commands.\n\n 1. Describe this in 5 words:\n {{ classWithImage.myImage }}\n\n 2. Also tell me what's happening here in one sentence:\n {{ img2 }}\n \"#\n}\n\n// no chat role\nfunction DescribeImage3(classWithImage: ClassWithImage, img2: image) -> string {\n client GPT4Turbo\n prompt #\"\n Describe this in 5 words:\n {{ classWithImage.myImage }}\n\n Tell me also what's happening here in one sentence and relate it to the word {{ classWithImage.param2 }}:\n {{ img2 }}\n \"#\n}\n\n\n// system prompt and chat prompt\nfunction DescribeImage4(classWithImage: ClassWithImage, img2: image) -> string {\n client GPT4Turbo\n prompt #\"\n {{ _.role(\"system\")}}\n\n Describe this in 5 words:\n {{ classWithImage.myImage }}\n\n Tell me also what's happening here in one sentence and relate it to the word {{ classWithImage.param2 }}:\n {{ img2 }}\n \"#\n}\n\ntest TestName {\n functions [DescribeImage]\n args {\n img { url \"https://imgs.xkcd.com/comics/standards.png\"}\n }\n}\n", + "fiddle-examples/symbol-tuning.baml": "enum Category3 {\n Refund @alias(\"k1\")\n @description(\"Customer wants to refund a product\")\n\n CancelOrder @alias(\"k2\")\n @description(\"Customer wants to cancel an order\")\n\n TechnicalSupport @alias(\"k3\")\n @description(\"Customer needs help with a technical issue unrelated to account creation or login\")\n\n AccountIssue @alias(\"k4\")\n @description(\"Specifically relates to account-login or account-creation\")\n\n Question @alias(\"k5\")\n @description(\"Customer has a question\")\n}\n\nfunction ClassifyMessage3(input: string) -> Category {\n client GPT4\n\n prompt #\"\n Classify the following INPUT into ONE\n of the following categories:\n\n INPUT: {{ input }}\n\n {{ ctx.output_format }}\n\n Response:\n \"#\n}", + "formatter/test-comments.baml": "class FormatterTest0 {\n lorem string // trailing comments should be preserved\n ipsum string\n}\n\nclass FormatterTest1 {\n lorem string\n ipsum string\n // dolor string\n}\n\nclass FormatterTest2 {\n // \"lorem\" is a latin word\n lorem string\n // \"ipsum\" is a latin word\n ipsum string\n}\n\nclass FormatterTest3 {\n lorem string\n ipsum string\n // Lorem ipsum dolor sit amet\n // Consectetur adipiscing elit\n // Sed do eiusmod tempor incididunt\n // Ut labore et dolore magna aliqua\n // Ut enim ad minim veniam\n}", + "generators.baml": "generator lang_python {\n output_type python/pydantic\n output_dir \"../python\"\n version \"0.74.0\"\n}\n\ngenerator lang_typescript {\n output_type typescript\n output_dir \"../typescript\"\n version \"0.74.0\"\n}\n\ngenerator lang_typescript_react {\n output_type typescript/react\n output_dir \"../react\"\n version \"0.74.0\"\n}\n\ngenerator lang_ruby {\n output_type ruby/sorbet\n output_dir \"../ruby\"\n version \"0.74.0\"\n}\n\ngenerator openapi {\n output_type rest/openapi\n output_dir \"../openapi\"\n version \"0.74.0\"\n on_generate \"rm .gitignore\"\n}", + "test-files/aliases/aliased-inputs.baml": "\nclass InputClass {\n key string @alias(\"color\")\n key2 string\n}\n\n\nclass InputClassNested {\n key string\n nested InputClass @alias(\"interesting-key\")\n}\n \n\nfunction AliasedInputClass(input: InputClass) -> string {\n client GPT35\n prompt #\"\n\n {{input}}\n\n This is a test. What's the name of the first json key above? Remember, tell me the key, not value.\n \"#\n}\n \nfunction AliasedInputClass2(input: InputClass) -> string {\n client GPT35\n prompt #\"\n\n {# making sure we can still access the original key #}\n {%if input.key == \"tiger\"%}\n Repeat this value back to me, and nothing else: {{input.key}}\n {%endif%}\n \"#\n}\n \n function AliasedInputClassNested(input: InputClassNested) -> string {\n client GPT35\n prompt #\"\n {{ _.role(\"user\")}}\n\n {{input}}\n\n This is a test. What's the name of the second json key above? Remember, tell me the key, not value.\n \"#\n }\n\n\nenum AliasedEnum {\n KEY_ONE @alias(\"tiger\")\n KEY_TWO\n}\n\nfunction AliasedInputEnum(input: AliasedEnum) -> string {\n client GPT4o\n prompt #\"\n {{ _.role(\"user\")}}\n\n\n Write out this word only in your response, in lowercase:\n ---\n {{input}}\n ---\n Answer:\n \"#\n}\n\n\nfunction AliasedInputList(input: AliasedEnum[]) -> string {\n client GPT35\n prompt #\"\n {{ _.role(\"user\")}}\n Given this array:\n ---\n {{input}}\n ---\n\n Return the first element in the array:\n \"#\n}\n\n", + "test-files/aliases/classes.baml": "class TestClassAlias {\n key string @alias(\"key-dash\") @description(#\"\n This is a description for key\n af asdf\n \"#)\n key2 string @alias(\"key21\")\n key3 string @alias(\"key with space\")\n key4 string //unaliased\n key5 string @alias(\"key.with.punctuation/123\")\n}\n\nfunction FnTestClassAlias(input: string) -> TestClassAlias {\n client GPT35\n prompt #\"\n {{ctx.output_format}}\n \"#\n}\n\ntest FnTestClassAlias {\n functions [FnTestClassAlias]\n args {\n input \"example input\"\n }\n}\n", + "test-files/aliases/enums.baml": "enum TestEnum {\n A @alias(\"k1\") @description(#\"\n User is angry\n \"#)\n B @alias(\"k22\") @description(#\"\n User is happy\n \"#)\n // tests whether k1 doesnt incorrectly get matched with k11\n C @alias(\"k11\") @description(#\"\n User is sad\n \"#)\n D @alias(\"k44\") @description(\n User is confused\n )\n E @description(\n User is excited\n )\n F @alias(\"k5\") // only alias\n \n G @alias(\"k6\") @description(#\"\n User is bored\n With a long description\n \"#)\n \n @@alias(\"Category\")\n}\n\nfunction FnTestAliasedEnumOutput(input: string) -> TestEnum {\n client GPT35\n prompt #\"\n Classify the user input into the following category\n \n {{ ctx.output_format }}\n\n {{ _.role('user') }}\n {{input}}\n\n {{ _.role('assistant') }}\n Category ID:\n \"#\n}\n\ntest FnTestAliasedEnumOutput {\n functions [FnTestAliasedEnumOutput]\n args {\n input \"mehhhhh\"\n }\n}", + "test-files/comments/comments.baml": "// add some functions, classes, enums etc with comments all over.", + "test-files/constraints/constraints.baml": "// These classes and functions test several properties of\n// constrains:\n//\n// - The ability for constrains on fields to pass or fail.\n// - The ability for constraints on bare args and return types to pass or fail.\n// - The ability of constraints to influence which variant of a union is chosen\n// by the parser, when the structure is not sufficient to decide.\n\n/// A Martian organism with an age.\n/// Such a nice type.\nclass Martian {\n /// The age of the Martian in Mars years.\n /// So many Mars years.\n age int @check(young_enough, {{ this < 30 }})\n}\n\nclass Earthling {\n age int @check(earth_aged, {{this < 200 and this > 0}}) @check(no_infants, {{this >1}})\n}\n\n\nclass FooAny {\n planetary_age Martian | Earthling\n certainty int @check(unreasonably_certain, {{this == 102931}})\n species string @check(trivial, {{this == \"Homo sapiens\"}}) @check(regex_good, {{this|regex_match(\"Homo\")}}) @check(regex_bad, {{this|regex_match(\"neanderthalensis\")}})\n}\n\n\nfunction PredictAge(name: string) -> FooAny {\n client GPT35\n prompt #\"\n Using your understanding of the historical popularity\n of names, predict the age of a person with the name\n {{ name }} in years. Also predict their genus and\n species. It's Homo sapiens (with exactly that spelling\n and capitalization). I'll give you a hint: If the name\n is \"Greg\", his age is 41.\n\n {{ctx.output_format}}\n \"#\n}\n\n\nfunction PredictAgeBare(inp: string @assert(big_enough, {{this|length > 1}})) -> int @check(too_big, {{this == 10102}}) {\n client GPT35\n prompt #\"\n Using your understanding of the historical popularity\n of names, predict the age of a person with the name\n {{ inp.name }} in years. Also predict their genus and\n species. It's Homo sapiens (with exactly that spelling).\n\n {{ctx.output_format}}\n \"#\n}\n\nfunction ReturnFailingAssert(inp: int @assert(small_int, {{this < 10}})) -> int @assert(big_int, {{this > 100}}) {\n client GPT35\n prompt #\"\n Return the next integer after {{ inp }}.\n\n {{ctx.output_format}}\n \"#\n}\n\nclass TwoStoriesOneTitle {\n title string\n story_a string @assert(too_long_story, {{this|length > 1000000}} )\n story_b string @assert(too_long_story, {{this|length > 1000000}} )\n}\n\nfunction StreamFailingAssertion(theme: string, length: int) -> TwoStoriesOneTitle {\n client GPT35\n prompt #\"\n Tell me two different stories along the theme of {{ theme }} with the same title.\n Please make each about {{ length }} words long.\n {{ctx.output_format}}\n \"#\n}\n\nclass BlockConstraint {\n foo int\n bar string\n @@check(cross_field, {{ this.bar|length > this.foo }})\n}\n\nfunction MakeBlockConstraint() -> BlockConstraint {\n client GPT35\n prompt #\"\n Generate an output in the following schema with a short string and a large int.\n\n {{ ctx.output_format }}\n \"#\n}\n\nclass NestedBlockConstraint {\n nbc BlockConstraint\n}\n\nclass BlockConstraintForParam {\n bcfp int\n bcfp2 string\n @@assert(hi, {{ this.bcfp2|length < this.bcfp }})\n}\n\nclass NestedBlockConstraintForParam {\n nbcfp BlockConstraintForParam\n}\n\nfunction MakeNestedBlockConstraint() -> NestedBlockConstraint {\n client GPT35\n prompt #\"Generate an output where the inner foo is 1 and the inner bar is \"hello\".\n {{ ctx.output_format }}\n \"#\n}\n\nfunction UseBlockConstraint(inp: BlockConstraintForParam) -> int {\n client GPT35\n prompt #\"\n Generate 3\n {{ ctx.output_format }}\n \"#\n}\n\nfunction UseNestedBlockConstraint(inp: NestedBlockConstraintForParam) -> int {\n client GPT35\n prompt #\"\n Generate 3\n {{ ctx.output_format }}\n \"#\n}\n", + "test-files/constraints/contact-info.baml": "class PhoneNumber {\n value string @assert(valid_phone_number, {{this|regex_match(\"\\(?\\d{3}\\)?[-.\\s]?\\d{3}[-.\\s]?\\d{4}\")}})\n}\n\nclass EmailAddress {\n value string @assert(valid_email, {{this|regex_match(\"^[_]*([a-z0-9]+(\\.|_*)?)+@([a-z][a-z0-9-]+(\\.|-*\\.))+[a-z]{2,6}$\")}})\n}\n\nclass ContactInfo {\n primary PhoneNumber | EmailAddress\n secondary (PhoneNumber | EmailAddress)?\n}\n\nfunction ExtractContactInfo(document: string) -> ContactInfo {\n client GPT35\n prompt #\"\n Extract a primary contact info, and if possible a secondary contact\n info, from this document:\n\n {{ document }}\n\n {{ ctx.output_format }}\n \"#\n}\n", + "test-files/constraints/malformed-constraints.baml": "class MalformedConstraints {\n foo int @check(foo_check, {{ this.length() > 0 }})\n}\n\nclass MalformedConstraints2 {\n foo int @assert(foo_check, {{ this.length() > 0 }})\n}\n\nfunction ReturnMalformedConstraints(a: int) -> MalformedConstraints {\n client GPT35\n prompt #\"\n Return the integer after {{ a }}\n\n {{ ctx.output_format }}\n \"#\n}\n\nfunction UseMalformedConstraints(a: MalformedConstraints2) -> int {\n client GPT35\n prompt #\"\n Return the integer after {{ a.foo }}\n\n {{ ctx.output_format }}\n \"#\n}\n", + "test-files/descriptions/descriptions.baml": "\nclass Nested {\n prop3 string | null @description(#\"\n write \"three\"\n \"#)\n prop4 string | null @description(#\"\n write \"four\"\n \"#) @alias(\"blah\")\n prop20 Nested2\n}\n\nclass Nested2 {\n prop11 string | null @description(#\"\n write \"three\"\n \"#)\n prop12 string | null @description(#\"\n write \"four\"\n \"#) @alias(\"blah\")\n}\n\nclass Schema {\n prop1 string | null @description(#\"\n write \"one\"\n \"#)\n prop2 Nested | string @description(#\"\n write \"two\"\n \"#)\n prop5 (string | null)[] @description(#\"\n write \"hi\"\n \"#)\n prop6 string | Nested[] @alias(\"blah\") @description(#\"\n write the string \"blah\" regardless of the other types here\n \"#)\n nested_attrs (string | null | Nested)[] @description(#\"\n write the string \"nested\" regardless of other types\n \"#)\n parens (string | null) @description(#\"\n write \"parens1\"\n \"#)\n other_group (string | (int | string)) @description(#\"\n write \"other\"\n \"#) @alias(other)\n}\n\n\nfunction SchemaDescriptions(input: string) -> Schema {\n client GPT4o\n prompt #\"\n Return a schema with this format:\n\n {{ctx.output_format}}\n \"#\n}", + "test-files/dynamic/client-registry.baml": "// Intentionally use a bad key\nclient BadClient {\n provider openai\n options {\n model \"gpt-3.5-turbo\"\n api_key \"sk-invalid\"\n }\n}\n\nfunction ExpectFailure() -> string {\n client BadClient\n\n prompt #\"\n What is the capital of England?\n \"#\n}\n", + "test-files/dynamic/differentiate_unions.baml": "class OriginalA {\n value int\n}\n\nclass OriginalB {\n value int\n @@dynamic\n}\n\nfunction DifferentiateUnions() -> OriginalA | OriginalB {\n client \"openai/gpt-4o-mini\"\n prompt #\"\n Create a data model that represents the latter of the two classes.\n\n {{ ctx.output_format }}\n \"#\n}", + "test-files/dynamic/dynamic.baml": "class DynamicClassOne {\n @@dynamic\n}\n\nenum DynEnumOne {\n @@dynamic\n}\n\nenum DynEnumTwo {\n @@dynamic\n}\n\nclass SomeClassNestedDynamic {\n hi string\n @@dynamic\n\n}\n\nclass DynamicClassTwo {\n hi string\n some_class SomeClassNestedDynamic\n status DynEnumOne\n @@dynamic\n}\n\nfunction DynamicFunc(input: DynamicClassOne) -> DynamicClassTwo {\n client GPT35\n prompt #\"\n Please extract the schema from \n {{ input }}\n\n {{ ctx.output_format }}\n \"#\n}\n\nclass DynInputOutput {\n testKey string\n @@dynamic\n}\n\nfunction DynamicInputOutput(input: DynInputOutput) -> DynInputOutput {\n client GPT35\n prompt #\"\n Here is some input data:\n ----\n {{ input }}\n ----\n\n Extract the information.\n {{ ctx.output_format }}\n \"#\n}\n\nfunction DynamicListInputOutput(input: DynInputOutput[]) -> DynInputOutput[] {\n client GPT35\n prompt #\"\n Here is some input data:\n ----\n {{ input }}\n ----\n\n Extract the information.\n {{ ctx.output_format }}\n \"#\n}\n\n\n\nclass DynamicOutput {\n @@dynamic\n}\n \nfunction MyFunc(input: string) -> DynamicOutput {\n client GPT35\n prompt #\"\n Given a string, extract info using the schema:\n\n {{ input}}\n\n {{ ctx.output_format }}\n \"#\n}\n\nfunction ClassifyDynEnumTwo(input: string) -> DynEnumTwo {\n client GPT35\n prompt #\"\n Given a string, extract info using the schema:\n\n {{ input}}\n\n {{ ctx.output_format }}\n \"#\n}", + "test-files/functions/input/named-args/single/named-audio.baml": "function AudioInput(aud: audio) -> string{\n client Gemini\n prompt #\"\n {{ _.role(\"user\") }}\n\n Does this sound like a roar? Yes or no? One word no other characters.\n \n {{ aud }}\n \"#\n}\n\n\ntest TestURLAudioInput{\n functions [AudioInput]\n args {\n aud{ \n url https://actions.google.com/sounds/v1/emergency/beeper_emergency_call.ogg\n }\n } \n}\n\n\n", + "test-files/functions/input/named-args/single/named-boolean.baml": "\n\nfunction TestFnNamedArgsSingleBool(myBool: bool) -> string{\n client GPT35\n prompt #\"\n Return this value back to me: {{myBool}}\n \"#\n}\n\ntest TestFnNamedArgsSingleBool {\n functions [TestFnNamedArgsSingleBool]\n args {\n myBool true\n }\n}", + "test-files/functions/input/named-args/single/named-class-list.baml": "\n\n\nfunction TestFnNamedArgsSingleStringList(myArg: string[]) -> string{\n client GPT35\n prompt #\"\n Return this value back to me: {{myArg}}\n \"#\n}\n\ntest TestFnNamedArgsSingleStringList {\n functions [TestFnNamedArgsSingleStringList]\n args {\n myArg [\"hello\", \"world\"]\n }\n}", + "test-files/functions/input/named-args/single/named-class-literal-prop.baml": "class LiteralClassHello {\n prop \"hello\"\n}\n\nfunction FnLiteralClassInputOutput(input: LiteralClassHello) -> LiteralClassHello {\n client GPT4\n prompt #\"\n Return the same object you were given.\n {{ ctx.output_format }}\n \"#\n}", + "test-files/functions/input/named-args/single/named-class-literal-union-prop.baml": "class LiteralClassOne {\n prop \"one\"\n}\n\nclass LiteralClassTwo {\n prop \"two\"\n}\n\nfunction FnLiteralUnionClassInputOutput(input: LiteralClassOne | LiteralClassTwo) -> LiteralClassOne | LiteralClassTwo {\n client GPT4\n prompt #\"\n Return the same object you were given.\n {{ ctx.output_format }}\n\n {{ _.role('user') }}\n {{ input }}\n \"#\n}\n", + "test-files/functions/input/named-args/single/named-class.baml": "class NamedArgsSingleClass {\n key string\n key_two bool\n key_three int\n // TODO: doesn't work with keys with numbers\n // key2 bool\n // key3 int\n}\n\nfunction TestFnNamedArgsSingleClass(myArg: NamedArgsSingleClass) -> string {\n client GPT35\n prompt #\"\n Print these values back to me:\n {{myArg.key}}\n {{myArg.key_two}}\n {{myArg.key_three}}\n \"#\n}\n\ntest TestFnNamedArgsSingleClass {\n functions [TestFnNamedArgsSingleClass]\n args {\n myArg {\n key \"example\",\n key_two true,\n key_three 42\n }\n }\n}\n\nfunction TestMulticlassNamedArgs(myArg: NamedArgsSingleClass, myArg2: NamedArgsSingleClass) -> string {\n client GPT35\n prompt #\"\n Print these values back to me:\n {{myArg.key}}\n {{myArg.key_two}}\n {{myArg.key_three}}\n {{myArg2.key}}\n {{myArg2.key_two}}\n {{myArg2.key_three}}\n \"#\n}", + "test-files/functions/input/named-args/single/named-enum-list.baml": "enum NamedArgsSingleEnumList {\n ONE\n TWO\n}\n\nfunction TestFnNamedArgsSingleEnumList(myArg: NamedArgsSingleEnumList[]) -> string {\n client GPT35\n prompt #\"\n Print these values back to me:\n {{myArg}}\n \"#\n}\n\ntest TestFnNamedArgsSingleEnumList {\n functions [TestFnNamedArgsSingleEnumList]\n args {\n myArg [ONE, TWO]\n }\n}", + "test-files/functions/input/named-args/single/named-enum.baml": "enum NamedArgsSingleEnum {\n ONE\n TWO\n}\n\nfunction FnTestNamedArgsSingleEnum(myArg: NamedArgsSingleEnum) -> string {\n client GPT35\n prompt #\"\n Print these values back to me:\n {{myArg}}\n \"#\n}\n\ntest FnTestNamedArgsSingleEnum {\n functions [FnTestNamedArgsSingleEnum]\n args {\n myArg ONE\n }\n}", + "test-files/functions/input/named-args/single/named-float.baml": "function TestFnNamedArgsSingleFloat(myFloat: float) -> string {\n client GPT35\n prompt #\"\n Return this value back to me: {{myFloat}}\n \"#\n}\n\ntest TestFnNamedArgsSingleFloat {\n functions [TestFnNamedArgsSingleFloat]\n args {\n myFloat 3.14\n }\n}\n", + "test-files/functions/input/named-args/single/named-image-list.baml": "function TestImageListInput(imgs: image[]) -> string{\n client GPT4o\n prompt #\"\n {{ _.role(\"user\") }}\n\n What colors do these have in common? {{imgs}}\n \"#\n}\n\ntest TestImageListInput {\n functions [TestImageListInput]\n args {\n imgs [\n {\n media_type \"image/png\"\n url \"https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_92x30dp.png\"\n },\n {\n url \"https://upload.wikimedia.org/wikipedia/en/4/4d/Shrek_%28character%29.png\"\n }\n ]\n }\n}\n", + "test-files/functions/input/named-args/single/named-image.baml": "function TestImageInput(img: image) -> string{\n client GPT4o\n prompt #\"\n {{ _.role(\"user\") }}\n\n Describe this in 4 words. One word must be the color {{img}}\n \"#\n}\n\n\nfunction TestImageInputAnthropic(img: image) -> string{\n client Claude\n prompt #\"\n {{ _.role(\"user\") }}\n\n Describe this in 4 words {{img}}\n \"#\n}\n\ntest image_url_with_media_type {\n functions [TestImageInput, TestImageInputAnthropic]\n args {\n img {\n media_type \"image/jpeg\"\n // url gs://cloud-samples-data/vertex-ai/llm/prompts/landmark1.png\n\n url \"https://www.pbs.org/wnet/nature/files/2023/11/Odontodactylus_scyllarus_Re%CC%81union-e1699977649790.jpg\"\n }\n }\n}\n\ntest image_url_without_media_type {\n functions [TestImageInput, TestImageInputAnthropic]\n args {\n img {\n url \"https://upload.wikimedia.org/wikipedia/en/4/4d/Shrek_%28character%29.png\"\n }\n }\n}\ntest image_file {\n functions [TestImageInput, TestImageInputAnthropic]\n args {\n img {\n file \"/Users/sam/mantis-shrimp.jpg\"\n // file \"Łukasiewicz.jpg\"\n }\n }\n}\n\ntest image_file_abspath {\n functions [TestImageInput, TestImageInputAnthropic]\n args {\n img {\n // curl -L -o ~/mantis-shrimp.jpg \"https://www.pbs.org/wnet/nature/files/2023/11/Odontodactylus_scyllarus_Re%CC%81union-e1699977649790.jpg\"\n file \"/Users/sam/mantis-shrimp.jpg\"\n }\n }\n}\n\ntest image_file_nonexistent {\n functions [TestImageInput, TestImageInputAnthropic]\n args {\n img {\n file \"does-not-exist.png\"\n }\n }\n}\n\ntest image_file_explicit_media_type {\n functions [TestImageInput, TestImageInputAnthropic]\n args {\n img {\n file \"Łukasiewicz.jpg\"\n media_type \"image/jpeg\"\n }\n }\n}\n\ntest image_base64 {\n functions [TestImageInput, TestImageInputAnthropic]\n args {\n img {\n base64 iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAApgAAAKYB3X3/OAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANCSURBVEiJtZZPbBtFFMZ/M7ubXdtdb1xSFyeilBapySVU8h8OoFaooFSqiihIVIpQBKci6KEg9Q6H9kovIHoCIVQJJCKE1ENFjnAgcaSGC6rEnxBwA04Tx43t2FnvDAfjkNibxgHxnWb2e/u992bee7tCa00YFsffekFY+nUzFtjW0LrvjRXrCDIAaPLlW0nHL0SsZtVoaF98mLrx3pdhOqLtYPHChahZcYYO7KvPFxvRl5XPp1sN3adWiD1ZAqD6XYK1b/dvE5IWryTt2udLFedwc1+9kLp+vbbpoDh+6TklxBeAi9TL0taeWpdmZzQDry0AcO+jQ12RyohqqoYoo8RDwJrU+qXkjWtfi8Xxt58BdQuwQs9qC/afLwCw8tnQbqYAPsgxE1S6F3EAIXux2oQFKm0ihMsOF71dHYx+f3NND68ghCu1YIoePPQN1pGRABkJ6Bus96CutRZMydTl+TvuiRW1m3n0eDl0vRPcEysqdXn+jsQPsrHMquGeXEaY4Yk4wxWcY5V/9scqOMOVUFthatyTy8QyqwZ+kDURKoMWxNKr2EeqVKcTNOajqKoBgOE28U4tdQl5p5bwCw7BWquaZSzAPlwjlithJtp3pTImSqQRrb2Z8PHGigD4RZuNX6JYj6wj7O4TFLbCO/Mn/m8R+h6rYSUb3ekokRY6f/YukArN979jcW+V/S8g0eT/N3VN3kTqWbQ428m9/8k0P/1aIhF36PccEl6EhOcAUCrXKZXXWS3XKd2vc/TRBG9O5ELC17MmWubD2nKhUKZa26Ba2+D3P+4/MNCFwg59oWVeYhkzgN/JDR8deKBoD7Y+ljEjGZ0sosXVTvbc6RHirr2reNy1OXd6pJsQ+gqjk8VWFYmHrwBzW/n+uMPFiRwHB2I7ih8ciHFxIkd/3Omk5tCDV1t+2nNu5sxxpDFNx+huNhVT3/zMDz8usXC3ddaHBj1GHj/As08fwTS7Kt1HBTmyN29vdwAw+/wbwLVOJ3uAD1wi/dUH7Qei66PfyuRj4Ik9is+hglfbkbfR3cnZm7chlUWLdwmprtCohX4HUtlOcQjLYCu+fzGJH2QRKvP3UNz8bWk1qMxjGTOMThZ3kvgLI5AzFfo379UAAAAASUVORK5CYII=\n media_type \"image/png\"\n }\n }\n}\n\ntest image_base64_no_media_type {\n functions [TestImageInput, TestImageInputAnthropic]\n args {\n img {\n base64 iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAApgAAAKYB3X3/OAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANCSURBVEiJtZZPbBtFFMZ/M7ubXdtdb1xSFyeilBapySVU8h8OoFaooFSqiihIVIpQBKci6KEg9Q6H9kovIHoCIVQJJCKE1ENFjnAgcaSGC6rEnxBwA04Tx43t2FnvDAfjkNibxgHxnWb2e/u992bee7tCa00YFsffekFY+nUzFtjW0LrvjRXrCDIAaPLlW0nHL0SsZtVoaF98mLrx3pdhOqLtYPHChahZcYYO7KvPFxvRl5XPp1sN3adWiD1ZAqD6XYK1b/dvE5IWryTt2udLFedwc1+9kLp+vbbpoDh+6TklxBeAi9TL0taeWpdmZzQDry0AcO+jQ12RyohqqoYoo8RDwJrU+qXkjWtfi8Xxt58BdQuwQs9qC/afLwCw8tnQbqYAPsgxE1S6F3EAIXux2oQFKm0ihMsOF71dHYx+f3NND68ghCu1YIoePPQN1pGRABkJ6Bus96CutRZMydTl+TvuiRW1m3n0eDl0vRPcEysqdXn+jsQPsrHMquGeXEaY4Yk4wxWcY5V/9scqOMOVUFthatyTy8QyqwZ+kDURKoMWxNKr2EeqVKcTNOajqKoBgOE28U4tdQl5p5bwCw7BWquaZSzAPlwjlithJtp3pTImSqQRrb2Z8PHGigD4RZuNX6JYj6wj7O4TFLbCO/Mn/m8R+h6rYSUb3ekokRY6f/YukArN979jcW+V/S8g0eT/N3VN3kTqWbQ428m9/8k0P/1aIhF36PccEl6EhOcAUCrXKZXXWS3XKd2vc/TRBG9O5ELC17MmWubD2nKhUKZa26Ba2+D3P+4/MNCFwg59oWVeYhkzgN/JDR8deKBoD7Y+ljEjGZ0sosXVTvbc6RHirr2reNy1OXd6pJsQ+gqjk8VWFYmHrwBzW/n+uMPFiRwHB2I7ih8ciHFxIkd/3Omk5tCDV1t+2nNu5sxxpDFNx+huNhVT3/zMDz8usXC3ddaHBj1GHj/As08fwTS7Kt1HBTmyN29vdwAw+/wbwLVOJ3uAD1wi/dUH7Qei66PfyuRj4Ik9is+hglfbkbfR3cnZm7chlUWLdwmprtCohX4HUtlOcQjLYCu+fzGJH2QRKvP3UNz8bWk1qMxjGTOMThZ3kvgLI5AzFfo379UAAAAASUVORK5CYII=\n }\n }\n}\n\ntest image_base64_data_url {\n functions [TestImageInput, TestImageInputAnthropic]\n args {\n img {\n base64 \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAApgAAAKYB3X3/OAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANCSURBVEiJtZZPbBtFFMZ/M7ubXdtdb1xSFyeilBapySVU8h8OoFaooFSqiihIVIpQBKci6KEg9Q6H9kovIHoCIVQJJCKE1ENFjnAgcaSGC6rEnxBwA04Tx43t2FnvDAfjkNibxgHxnWb2e/u992bee7tCa00YFsffekFY+nUzFtjW0LrvjRXrCDIAaPLlW0nHL0SsZtVoaF98mLrx3pdhOqLtYPHChahZcYYO7KvPFxvRl5XPp1sN3adWiD1ZAqD6XYK1b/dvE5IWryTt2udLFedwc1+9kLp+vbbpoDh+6TklxBeAi9TL0taeWpdmZzQDry0AcO+jQ12RyohqqoYoo8RDwJrU+qXkjWtfi8Xxt58BdQuwQs9qC/afLwCw8tnQbqYAPsgxE1S6F3EAIXux2oQFKm0ihMsOF71dHYx+f3NND68ghCu1YIoePPQN1pGRABkJ6Bus96CutRZMydTl+TvuiRW1m3n0eDl0vRPcEysqdXn+jsQPsrHMquGeXEaY4Yk4wxWcY5V/9scqOMOVUFthatyTy8QyqwZ+kDURKoMWxNKr2EeqVKcTNOajqKoBgOE28U4tdQl5p5bwCw7BWquaZSzAPlwjlithJtp3pTImSqQRrb2Z8PHGigD4RZuNX6JYj6wj7O4TFLbCO/Mn/m8R+h6rYSUb3ekokRY6f/YukArN979jcW+V/S8g0eT/N3VN3kTqWbQ428m9/8k0P/1aIhF36PccEl6EhOcAUCrXKZXXWS3XKd2vc/TRBG9O5ELC17MmWubD2nKhUKZa26Ba2+D3P+4/MNCFwg59oWVeYhkzgN/JDR8deKBoD7Y+ljEjGZ0sosXVTvbc6RHirr2reNy1OXd6pJsQ+gqjk8VWFYmHrwBzW/n+uMPFiRwHB2I7ih8ciHFxIkd/3Omk5tCDV1t+2nNu5sxxpDFNx+huNhVT3/zMDz8usXC3ddaHBj1GHj/As08fwTS7Kt1HBTmyN29vdwAw+/wbwLVOJ3uAD1wi/dUH7Qei66PfyuRj4Ik9is+hglfbkbfR3cnZm7chlUWLdwmprtCohX4HUtlOcQjLYCu+fzGJH2QRKvP3UNz8bWk1qMxjGTOMThZ3kvgLI5AzFfo379UAAAAASUVORK5CYII=\"\n }\n }\n}", + "test-files/functions/input/named-args/single/named-int.baml": "// test for int\nfunction TestFnNamedArgsSingleInt(myInt: int) -> string {\n client GPT35\n prompt #\"\n Return this value back to me: {{myInt}}\n \"#\n}\n\ntest TestFnNamedArgsSingleInt {\n functions [TestFnNamedArgsSingleInt]\n args {\n myInt 42\n }\n}\n", + "test-files/functions/input/named-args/single/named-literal-bool.baml": "function TestNamedArgsLiteralBool(myBool: true) -> string {\n client GPT35\n prompt #\"\n Return this value back to me: {{myBool}}\n \"#\n}\n\ntest TestFnNamedArgsLiteralBool {\n functions [TestNamedArgsLiteralBool]\n args {\n myBool true\n }\n}", + "test-files/functions/input/named-args/single/named-literal-int.baml": "function TestNamedArgsLiteralInt(myInt: 1) -> string {\n client GPT35\n prompt #\"\n Return this value back to me: {{myInt}}\n \"#\n}\n\ntest TestFnNamedArgsLiteralInt {\n functions [TestNamedArgsLiteralInt]\n args {\n myInt 1\n }\n}", + "test-files/functions/input/named-args/single/named-literal-string.baml": "function TestNamedArgsLiteralString(myString: \"My String\") -> string {\n client GPT35\n prompt #\"\n Return this value back to me: {{myString}}\n \"#\n}\n\ntest TestFnNamedArgsLiteralString {\n functions [TestNamedArgsLiteralString]\n args {\n myString \"My String\"\n }\n}", + "test-files/functions/input/named-args/single/named-map-string-to-class.baml": "class StringToClassEntry {\n word string\n}\n// test string\nfunction TestFnNamedArgsSingleMapStringToClass(myMap: map) -> map {\n client GPT35\n prompt #\"\n Return this value back to me: {{myMap}}\n \"#\n}\n\ntest TestFnNamedArgsSingleMapStringToClass {\n functions [TestFnNamedArgsSingleMapStringToClass]\n args {\n myMap {\n \"key\" {\n word \"lorem ipsum\"\n }\n }\n }\n}\n", + "test-files/functions/input/named-args/single/named-map-string-to-map.baml": "// test string\nfunction TestFnNamedArgsSingleMapStringToMap(myMap: map>) -> map> {\n client GPT35\n prompt #\"\n Return this value back to me: {{myMap}}\n \"#\n}\n\ntest TestFnNamedArgsSingleMapStringToMap {\n functions [TestFnNamedArgsSingleMapStringToMap]\n args {\n myMap {\n \"outer-key\" {\n \"key\" \"example string\"\n }\n }\n }\n}", + "test-files/functions/input/named-args/single/named-map-string-to-string.baml": "// test string\nfunction TestFnNamedArgsSingleMapStringToString(myMap: map) -> map {\n client GPT35\n prompt #\"\n Return this value back to me: {{myMap}}\n \"#\n}\n\ntest TestFnNamedArgsSingleMapStringToString {\n functions [TestFnNamedArgsSingleMapStringToString]\n args {\n myMap {\n \"key\" \"example string\"\n }\n }\n}\n", + "test-files/functions/input/named-args/single/named-string-list.baml": "// string[]\nfunction TestFnNamedArgsSingleStringArray(myStringArray: string[]) -> string {\n client GPT35\n prompt #\"\n Return this value back to me: {{myStringArray}}\n \"#\n}\n\ntest TestFnNamedArgsSingleStringArray {\n functions [TestFnNamedArgsSingleStringArray]\n args {\n myStringArray [\"example1\", \"example2\", \"example3\"]\n }\n}\n", + "test-files/functions/input/named-args/single/named-string-optional.baml": "\n\n // string[]\nfunction FnNamedArgsSingleStringOptional(myString: string?) -> string {\n client GPT35\n prompt #\"\n Return this value back to me: {{myString}}\n \"#\n}\n\ntest FnNamedArgsSingleStringOptional {\n functions [FnNamedArgsSingleStringOptional]\n args {\n myString \"example string\"\n }\n}\n\ntest FnNamedArgsSingleStringOptional2 {\n functions [FnNamedArgsSingleStringOptional]\n args {\n \n }\n}\n", + "test-files/functions/input/named-args/single/named-string.baml": "// test string\nfunction TestFnNamedArgsSingleString(myString: string) -> string {\n client GPT35\n prompt #\"\n Return this value back to me: {{myString}}\n \"#\n}\n\ntest TestFnNamedArgsSingleString {\n functions [TestFnNamedArgsSingleString]\n args {\n myString \"example string\"\n }\n}\n", + "test-files/functions/input/named-args/single/testcase_audio.baml": "test TestAudioInput {\n functions [AudioInput]\n args {\n aud {\n media_type \"audio/mp3\"\n base64 #\"\n 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\n\n\n\n \"#\n \n }\n }\n}\n \n \n ", + "test-files/functions/input/named-args/single/testcase_image.baml": "test TestImageInputBase64 {\n functions [TestImageInput]\n args {\n img {\n media_type \"image/png\"\n\n base64 iVBORw0KGgoAAAANSUhEUgAACgAAAAOxCAYAAAA5Wv7bAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAACAAElEQVR42uzdebzcVX0//veZe7OzyQ4ugIobikKCQEDFDRIWW1vB9tfqt60KtUoEBLKBjrKEPZCACtrN1rZCba24L4XKDmEXXHABgRBQkD3LvfM5vz/CkpC7zMydufczd57PxwNNZs45n8/nfM585jMzr5wTAQAAAAAAAIxItXrHRL0AAACMtoouAAAAAAAAgJHZ5LHHNtILAADAaBMABAAAAAAAgBFaM3GiACAAADDqBAABAAAAAABghHor/QKAAADAqBMABAAAAAAAgBHK0buxXgAAAEabACAAAAAAAACMUJEKMwACAACjTgAQAAAAAAAARqhSSwKAAADA6H8W0QUAAAAAAAAwUtkSwAAAwKgTAAQAAAAAAIARKlLFDIAAAMCoEwAEAAAAAACAEUqpEAAEAABGnQAgAAAAAAAAjFDKaQe9AAAAjDYBQAAAAAAAABiplHfWCQAAwGgTAAQAAAAAAIARyjntnCMnPQEAAIwmAUAAAAAAAAAYue3OOP6qjXQDAAAwmgQAAQAAAAAAYASq1csmR8SUnglTN9cbAADAaBIABAAAAAAAgBHYpG/SFpEiUq0mAAgAAIwqAUAAAAAAAAAYgVqetEVERBGxhd4AAABGkwAgAAAAAAAAjEAReW3wL2czAAIAAKNKABAAAAAAAABGIq8NABapIgAIAACMKgFAAAAAAAAAGImctoyISDm21BkAAMBoEgAEAAAAAACAEUip2CEiInryS/UGAAAwmgQAAQAAAAAAYARypB0jIlLOO+gNAABgNAkAAgAAAAAAwAiknHeMiMiRBAABAIBRJQAIAAAAAAAAI5HWzgAYETvkyEmHAAAAo0UAEAAAAAAAAJp0ztFXT4mIbZ7565RF82/eUq8AAACjRQAQAAAAAAAAmtQ3YdKOEfHcrH89lT7LAAMAAKNGABAAAAAAAACalHuLHdf9e6pVBAABAIBRIwAIAAAAAAAAzcppx3X/mlISAAQAAEaNACAAAAAAAAA0KaW8XuCviEIAEAAAGDUCgAAAAAAAANCkFPGavN7f06v0CgAAMFoEAAEAAAAAAKBJOceuL3jo9XoFAAAYLQKAAAAAAAAA0ITTj79y44jY8QUPv+Sc6tWb6x0AAGA0CAACAAAAAABAEyo9E14fEemFj69ZOfF1egcAABiVzyW6AAAAAAAAABpXi8pzy//mdR5PyTLAAADA6BAABAAAAAAAgCZUIt4w0OMpZQFAAABgtD6XAAAAAAAAAI3KaeAAYIQZAAEAgNEhAAgAAAAAAADNyIMG/d6gcwAAgNEgAAgAAAAAAAANOnvh9S+NiM3XfSw//8fNFy9Ytp1eAgAA2k0AEAAAAAAAABpUK3reOOTzkd+klwAAgHYTAAQAAAAAAICG1fYZ6tkip730EQAA0G4CgAAAAAAAANCgnNK+w5SYqZcAAIB2EwAEAAAAAACABiw58q5JkWPGQM/l5/+458WHXtyjtwAAgHYSAAQAAAAAAIAGrNro0RkRMXmYYhvfs/MrdtFbAABAOwkAAgAAAAAAQANyHm7537WKwjLAAABAewkAAgAAAAAAQANS5H3qLLe33gIAANpJABAAAAAAAADqlCOnnGLm0GWelQQAAQCAthIABAAAAAAAgDqdPf/m10bEFnUVTnnnUxZcu41eAwAA2kUAEAAAAAAAAOpU5LxvI+Un1nr20msAAEC7CAACAAAAAABAnYpKnhWR6i6fK/FuvQYAALSLACAAAAAAAADU4cLDl01IOd7RYLUD9RwAANAuAoAAAAAAAABQh0e3rLw1Ijatp2x+/o87LZp34yv1HgAA0A4CgAAAAAAAAFCPopjdTLVKFLN0HgAA0A4CgAAAAAAAAFCPyrrL+aa6q6WUD9B5AABAOyRdAAAAAAAAAEM7be6yl6VK3LP+o3nIOuv8EPfU5Cc322LO0p1X60kAAKCVzAAIAAAAAAAAw0gpDs4N1lmn/LSVG/9hX70IAAC0mgAgAAAAAAAADKNIMXsk9StFsgwwAADQcgKAAAAAAAAAMIRzjr56Sop4x4bPpLrbyCMMEAIAAAxEABAAAAAAAACGsHrSxIMjYuoIm3n96cff+Fq9CQAAtJIAIAAAAAAAAAwhVeLPn/1zbrDuuuVTT+1QvQkAALSSACAAAAAAAAAMolq9dpPIMas1rSUBQAAAoKUEAAEAAAAAAGAQk9ZM+JOImDJ4idRIc68/a/61r9OrAABAqwgAAgAAAAAAwCBSzn/eyvZqqecwvQoAALSKACAAAAAAAAAM4NT5N20VEe944eO5wXbWLZ9yvF/PAgAArSIACAAAAAAAAAOopHxYRPS2uNnXnLnghtfrXQAAoCWfW3QBAAAAAAAAbKj+5X9TQ+0WkS0DDAAAtIQAIAAAAAAAALzAonk375gjZral8ZzenyMnvQwAAIyUACAAAAAAAAC8UKX4cDQ6td8Q8jp/ThGvOnP+TfvqZAAAYMQfXXQBAAAAAAAAPK9avaw35fzXQ5XJI9xGiuIjehoAABgpAUAAAAAAAABYx6RVG783IrZv5zZyxPsWzbvtRXobAAAYCQFAAAAAAAAAWEdK+YgmajVaYUpPZc1f6m0AAGAkBAABAAAAAADgGWecsOwVEekd7Wh7g2WDc7YMMAAAMCICgAAAAAAAAPCM3B8fjTqn88sj39wbzpy/bE+9DgAANEsAEAAAAAAAACJiyZF3TcopPjia2ywKswACAADNEwAEAAAAAACAiHh640ffHxFbNd9CarxGJf5sSfXaTfQ+AADQDAFAAAAAAAAAiIhcpI+2fRsbPjRt5aqeD+p9AACgGUkXAAAAAAAA0O1Om7ts31yJKyIa/wFt/fK5wfIRUcRvnp7y5Kuq1bf3OxMAAEAjzAAIAAAAAAAAlfjkmG07xU5TV210qJMAAAA0/lEGAAAAAAAAutgZJ9y8c454T2taS01VSZHm5shW7wIAABoiAAgAAAAAAEBXqxW1Y2IUfzfLAz6W33jmvBvf7WwAAACNEAAEAAAAAACga506/7otIscH1n0sN9hGbtneFHOdEQAAoBECgAAAAAAAAHStlCpHRsS0kuzNO04//sa9nBUAAKBeAoAAAAAAAAB0pWr1ssmRe/629S2npqtUUvFJZwYAAKiXACAAAAAAAABdadKqTT4YkbcZi20PtmxwTvHeM467dmdnBwAAqIcAIAAAAAAAAF3nwsOXTYgUcwd7PjfYXm7drvWknp4TnSEAAKAeAoAAAAAAAAB0nUc2T38dES8v477liL84c8GNuzpLAADAcAQAAQAAAAAA6CoXHr5sQkp53vOPpDZsZURtVnJRfMqZAgAAhv3woAsAAAAAAADoJo9sHh/JkXYq3Y6tnxn8k9OPv+HNzhYAADAUAUAAAAAAAAC6RrV62eRIMb8dbefWlk9RiaozBgAADEUAEAAAAAAAgK4xec3GR0Skl9RTNo/xvqaI2WfMv/5tzhoAADAYAUAAAAAAAAC6QrV62eSc03EDP5vasMWRt5lyOtmZAwAABiMACAAAAAAAQFeYsGbjj0XEi0u9ky/IDOaIfU8//oZ3O3sAAMBABAABAAAAAAAY96rVmzdLOc1t93ZyO8pX4vSLD724x1kEAAA2/LgAAAAAAAAA49ykVfmEiNiqLQG9NksRu939ip0+5CwCAAADfF4AAAAAAACA8eukE5a9oqeW7oiISRHD/UC2YeSv0R/UUh1tDll+4OK/mzC591VHV3d71BkFAACeZQZAAAAAAAAAxrVKEWfHM+G/jjBw4nCrvlX9n3I2AQCA4T8+AAAAAAAAwDhwyoJlb085/e+6j7V7BsAN6+QGyw9apT9VYrfjTt3jJ84sAAAQYQZAAAAAAAAAxqmLD724J+V07gsfzw22k8tzSL25iMXOLAAA8CwBQAAAAAAAAMalX77yFR+OiF0bq1X6BbTedcb8Gw92dgEAgI74BAMAAAAAAACNOv34Kzeu9Uz5RURsO9Dz7V4GONXR5rDt50EL/2ryk5vtMmfpzqudaQAA6G5mAAQAAAAAAGDcKSpTTopBwn+joa3LDOd4xaqpjx3nLAMAAGYABAAAAAAAYFxZNO/mPXIqromInqHKDf5DWW6wfD3t5wbLD1tldSXVdj920V53OuMAANC9zAAIAAAAAADAuFGtXtabe4oLY5jw39A6Yg6NSTlXvlStZr/3AQBAF/OBAAAAAAAAgHFj4uqNj40cu5Vvz1IbqqS9p6684QhnHQAAupclgAEAAAAAABgXFs27ecdcKX4SEdMiYthVd4f+oSw3WL6e9lu+DHCkyI9XeuL1nzzlzfcaAQAA0H3MAAgAAAAAAMC4kCv5ong2/NeO9ttcvkmbFLX8BWcfAAC6kwAgAAAAAAAAHe/U+cv+X4787kbqDB3Q66SFtNKBZ8y7/v1GAQAAdB9LAAMAAAAAANDRTp1/01Y55TsjYsv1fvyqYwq+si0DnOrbjReUzxERD/Wl/LoFi/Z82IgAAIDuYQZAAAAAAAAAOluKCyJiywEe7zgjWGZ46wk5fdFgAACA7iIACAAAAAAAQMc6df7NH8kRh47W9nKby4/Qe8+cf92HjAoAAOgelgAGAAAAAACgI510wrJXVIp0c0TaeO0ja+N2rVsGODdYvp72c+P7k4crv16Bp4oiTZ97xh4/N0IAAGD8MwMgAAAAAAAAHadavay3UlT+9fnwXzukcrSZGiowrVKJr1Srd0w0SgAAYPwTAAQAAAAAAKDj9PZt+umI2GvYgh24HtbIlxnO06eufvLTRgkAAIx/lgAGAAAAAACgo5y88OaZKecfR0TP+s8MsATw8w8PaugfzDpyGeCIiKKoFO+ae+pelxkxAAAwfgkAAgAAAAAA0DGq1Ts2mrBm9U0RsfPAJQYIAdYxpd7gP5p1bAAwIuK+ntX9bzxm8cxHjBwAABifLAEMAAAAAABAx5i4evVFMWj4rx1SOdpsbjdeUpvU+6Uc2aQgAAAwTgkAAgAAAAAA0BFOWXDzJ3KKP2+4YhfE3/LgB/neM+feMNfoAQCA8cm/9gEAAAAAAKD0Tp1/0945xeURMXHokgMsAfz8w4NKdbRZf/l6tjFqywBHRBQ54qDjT3vzd40kAAAYXwQAAQAAAAAAKLVTFty+TUTfjRHx4vpqDBACHD5vN8QPZ7nB8vW0P6oBwIgUj0RPnnHcyXv+xogCAIDxwxLAAAAAAAAAlFa1ellvEX1fzXWH/9ohdUibQ8ixefSl/zrn6KunGFUAADB+CAACAAAAAABQWhPWbHZGinjbiBsaD+tiDXMMebgCKd5Um9RzoVEFAADjhyWAAQAAAAAAKKWTF9743sjpa/HMb1r1/7A1wBLAzz88qFRHm/WXr2cbo7wM8HNl0hHHnrbHRUYYAAB0PgFAAAAAAAAASueUBTfumiNdFREbPftYYz9sDRACHD4bN8Q2coPl62l/bAKAEbE6p/TO4xftcZWRBgAAnc0SwAAAAAAAAJTKKQuWbVdEujTWCf9FRH3RtrZJHdJmXSalnP/n7PnXvcpoAwCAziYACAAAAAAAQGlUq8um5qh8PUW8rOWNj4e1sYY5hlz/QW5Ry+k7Zx571dZGHQAAdC4BQAAAAAAAAErh4kMv7uldU/m3iHjzeD3G3ObyjUgRL08TJlxarS6bavQBAEBnEgAEAAAAAACgFO7a+ZWLI+KPxnIfyhTQG5XjzfHmjVblf6pWs98NAQCgA7mRBwAAAAAAYMydtODGo3PEkcOVqz9wlxosX3+bUfo2G5UP3Wj1DacYhQAA0HmSLgAAAAAAAGAsnbLg5oNy5P+JiJ56ytf/A1ceuHweSft5BPszWPnc+P4Mewy5mX362LGnvflzRiQAAHQOAUAAAAAAAADGzMkLb9k3cv5eRJ5ab51ODwBuWCc3fsztCQD255zed9zpe/yPkQkAAJ3BEsAAAAAAAACMiVMW3PymnPM3ImJqmeatyG0uX2K9KeWLz5p7w2yjEwAAOoMAIAAAAAAAAKPulAW3vr6I+GFEvKjRuvUH7lKD5etvM0rfZtMmppT/85z517/NKAUAgPITAAQAAAAAAGBUVefd+Moiiu9HxBYRYzCDXhoHnTjMMeQGDzKv/+epRY5vnDXv+j2MVgAAKDcBQAAAAAAAAEZN9fhbX9JbqfwgIrbr5n7ogGWGN4kc3z973g27GbUAAFBeAoAAAAAAAACMimr11q0rvfkHOWLHsu9rBwT02i/FZkXk7y0+/prXGr0AAFBOAoAAAAAAAAC0XbW6bMueNcWPUuTXDF6q/mVr6w/cpQbL199mN0gRW9UqPd8784TrdjKKAQCgfAQAAQAAAAAAaKtTFty+Tc+anh9FxOsHK5O7vpdSG6o01uYQ5+ClqT9ddc7c63cxmgEAoFwEAAEAAAAAAGib6txlLyui/4qI2LVUO9aBk/iN8bLE2xUp/vfsude90agGAIDyEAAEAAAAAACgLU464dadent6LouInbvheMc4oDcats6pctnZx1+7l9ENAADlIAAIAAAAAABAy510wo2vjaK4Mke8vLGa7Ziab22brQ3opS49s/lFuZJ+cOa8695hlAMAwNgTAAQAAAAAAKClqgtu3T0XlR/niO0bqdcFM+gNI7WhSmpDn6aNKhGXnjX3ugOMdgAAGFsCgAAAAAAAALTMyQtv2bcSxf9GxJal39kOnMSvLCHJHDE1UnzjrPnX/4lRDwAAY0cAEAAAAAAAgJb4zMJb3lvk/L2I2LRb+6DLZjGcGDl/9ax51x5u9AMAwNhIugAAAAAAAICROmnBzZ/IEefECyagaPTHqOfL5wbL1yNvWCePZBu5Bfv0wvK58f3Jw5XPI9if4Y99bfm85InJex5drabCqwEAAEaPACAAAAAAAABNu/jQi3t+uvOrFqfIRw70fDM/Rj0TKGuwfD1aHQAcuIGRBQCH36lU32403Z/1HUMeoHz6Wlrd/4FjFs9c6ZUBAACjQwAQAAAAAACAppx57K3TVk4s/i0i3jNUueYCcaMUAKxjU2ULADZ3DKMxC2BERFxb9Pf/0XFn7fOQVwgAALSfACAAAAAAAAANq1bv2Db19V+acp6x9pHBA2bdFgBs/pjr3KEodQAwIuLXPUXlwKPO2OPnXikAANBeFV0AAAAAAABAIz574i27VPr6rk3xbPivHVLb2swN1spOeaNeXusprj5r7vVv1RUAANBeAoAAAAAAAADU7TMLbz0kirgyInZo1zY6K6CXytFmam2bIz4HOTZPKX//rLnXfsKrBgAAOusTCQAAAAAAAOPMxYde3PPTV+98YuR0YkRUnvuRKW/whwF12zLAI1sCuL5jL/kywOs+/i+xunbEMYtnrvRKAgCA1hIABAAAAAAAYEinzr9ui/7KpH/LEfs/+9h6PzLVEQLstgBg88dc5w5F5wQAn3Fz0Rt/etzJe/7GKwoAAFrHEsAAAAAAAAAM6rMn3rJbX2XSDeuG/0ZP+5bX7axlhseF3VJ/3HDW8de+W1cAAEDrCAACAAAAAAAwoM8uuOUvcxFXRsROo73tzgropQ5pc2zPWYrYIlXSd86ed101R7ZSGQAAdOUnBwAAAAAAANrqnKOvnvLElKmLI8URQ5V77oemOpYAXq98nTp9GeCRLQHcZH+WexngdVv+Wl+ufGje6TMe84oDAIDmCQACAAAAAADwnM+eeMsuuYivRMQbhyu73g9N+bn/qa98HbotALhhndz4MXdMADAiIn7bk9MHjjr9zT/2ygMAgOYIAAIAAAAAABA5cjpp4a0fyRGLI2JqPXU2DACu94ehyzfUfo6G96eOIx78GJrZRm7xMde3Qx0eAIwUUUTk8x+fvPFx1eoua7wSAQBgJJ8hAAAAAAAA6DrV6q1bR1/+hxRxUCP12h0AfL7OKM0CmEfafgmWAR7jAGCzx5wjbuit5b/4xJl73eUVCQAA9avoAgAAAAAAgO71mQW3HBB9+ZZoMPwXEQ1GyRovP+rGw9QZabhzkNpwzlIrdnuPWk+65Zy5137CqxIAALrrYwwAAAAAAAANqlaXTY01E86KlP821vnNaEQz1uXn/qe+8nW3P0ozANaxqXbPALhhna5YBviFf79kVaw5Yv5pb/mDVyoAALTqMxAAAAAAAADjwmfn3/qWohJfjIhXt2L51ue0YRngFMO32Xz7rV4GOLf4mOvbofEWAHymuQdzxPGfPH3PL3vFAgBAqz4DAQAAAAAA0LGq1Zs3i750ekT6SDz3O1G5A4DP1xmlWQDzSNsf+SyAqY42hyw/xgHA1hxzROQckfI3e4v00Tln7HWfVzAAALTmMxYAAAAAAAAd5jMLbz0k5/hcpHjJ+s+MbgCw+W10zzLAIw4ADlOl0f6s/xhaPQvgc+09FhGffnzKnkur1VR4NQMAQPOfNwAAAAAAAOgg1eod28aa/qWR4n2Dl2p1CFAAcCTHu2Gdrl0GeP0DSXFFkYrDj10082de2QAA0PznDQAAAAAAAEquWs2V6Lv9wzny6Slis6FLl3sZ4BTDt9lc+80FAIfeRm7xMde3Q10RAFxrZYpUfWzK0+dUq2/v90oHAKDbCQACAAAAAACMM9WFt8/IUTsvIs2MqOcHofEVAGxsG3mIY2i2/RIsA9xhAcBB6+RB9/MXuRJHf3LRXt/2igcAoJsJAAIAAAAAAIwTCxYs225C6q1GpA9HROXZx8sWAGx+G92zDPCIA4DDVGm0P+s/hlbPAjhskPSHkfOco8/Y+6euAAAAdCMBQAAAAAAAgA5Xrd4xsejv/2jK6bMReZMXPt9ocKv+OoOUH3jp1ha03z0BwA3rWAZ4iPJ9OcXneyfHiXOqez3uigAAQDcRAAQAAAAAAOhgn1p46yEp4tyIePlQ5bptGeB2BwCH3kZu8THXt0NdHAB81gORovriX/327w+75LCaqwMAAN1AABAAAAAAAKADnXjibdN7inx6jnhnPeW7LQDY2DbyEMfQbPslWAa4wwKAg9bJjY6jfEMu8nHHnDnz/1wpAAAY7wQAAQAAAAAAOsgJJ9z+2kouPlOJeF9u4LeesgUAm99G9ywDPOIA4DBVGu3P+o+h1bMANhkkzXFVzmn+MWfueYUrBwAA45UAIAAAAAAAQAdYuPDOHXqjf0GO+FBE9LR79rb66wxSfoilW0fWfvcEADesYxngJvv0h0Uqjv/kaTNvdiUBAGC8EQAEAAAAAAAosWr11pfkvjguRzoiIiY9/0xuTbhqPZ2wDHDnBgBH3KcCgCPpzyIivlZU0gmfXLTnL1xZAAAYLwQAAQAAAAAASmjBgtu36Y08N1J8NCImb1iiWwOAQ7fZfPt5iGNodhutXgZ4/AcAB62TWzaO+is5/VNPrf/kj5+9zz2uNAAAdDoBQAAAAAAAgBI54YRbd+rJcVSO9OGImDp4yc4PADa/jVGaBbB0AcAm+zO3rj9HfRw912TLg6RFpPztoqh85pgz9lzmygMAQKcSAAQAAAAAACiBE0/8yRtTrn0yIv155Oitp05qc3CrvjpDlB9i6daRtd+5ywC3OwDY3DF0zTLAA5TPETmuKlKcfszpe1/qSgQAQKcRAAQAAAAAABhDCxfesm8lpbkR6aDU8Cq33boMcOcGAEfcpwKAI+7P9eus1+ZNEfm87X9931cOu+SwmqsTAACdQAAQAAAAAABglB1++LIJ22wz6b2R8/ERMX3d55778UYAcJjyuUXHu+EOl3sZ4PEfABy0Th61cfSzyPmsoi/+7ZjFM1e6YgEAUGYCgAAAAAAAAKPkhBNu3rkSPR/KEX8VEdsMVKbbAoDNb2OUZgEsXQCwyf7MrevPUR9HzzU5ukHSFPFYkfNXeyrxhTmnzbzZFQwAgDISAAQAAAAAAGijI4+8a9KLNln5npzS4RH5nTHM7zONBQDbMXtbCwNr4yEAWMemyhYAbO4YumsZ4CZmVbwxUrpoVdH/73PP2PcJVzYAAMpCABAAAAAAAKAN5s+/7TU9PZW/SpE/FBFbrn20weCWZYCHKN+5AcAR96kA4Ij7c/06DS0nvSpFujRSvmjOaXv/0JUOAICxJgAIAAAAAADQIgsX3v7SlNL7Ior3R6Q9n328yaCRAOCw5XOLjnfDHW7dMsACgCM/3nWbK9U4uj1H/EeR8sXHnDbzl66AAACMBQFAAAAAAACAEahWf75lrbb6T3JOH4yImTHA7y8CgEMfTPOzt43SLIB5pO2P/jLAqb7daLo/R30cPddkaYOkd0aKS3pS5d8+vmjPX7gyAgAwWgQAAQAAAAAAGrQ29Nd3YM750IiYFRG9Q5Vveva2Dg0ADnwMeYT7NFD5zl0GuN0BwOaOobuWAW7jTJJ3RiouiVrPVz5x5l53uWICANBOAoAAAAAAAADDqFZzpVa7fbeiSAdEitlp7Ux/lXrrtzcA2Hhwa8N9GkgnLAPcuQHAEfepAOCo92fj28g5RdyYU3wncnx3u1/fd91hlxxWc0UFAKCVBAABAAAAAAAGUK3+fMu+vtVvj6i8K1I+KCJe/OxzI5oRzzLATe5Pi/oz6uvPwY+hmW0IAI78eNdtrnPG0QvKP5lTXB4Rl0YuvvuJ0/f9rSstAAAjJQAIAAAAAAAQEdXqsqmraxP3qETP/pHjgIi8W0QedJa/UQsaCQAOU2eUZgHMI21/9JcBTvXtxjrl2xsAbM0xR0Tu2ADgC7vlJxHpe5GL769M+Zq5Z+z7hCsxAADNfS4CAAAAAADoMsdXf7b9hL7+6TnFPhGxb4qYERGTNiw5xrO3dWgAcOBjyCPcp4HKd+4ywGULAK6t063LAI9JAHBdtUjx88hxYyXiykjFVR87fZ87U6QcAADQws9RAAAAAAAAHefYY2+dNmFK7+srRd47p7R3RJ4ZES9Zt0xpl2/N9bbfeE5ofCwD3D0BwBGNo7qPoVsDgPWPpZaEAHNd7T+Uc1yTKunqXNSuiVW9t85ZutfjrugAAIz0cwUAAAAAAEApVauX9a6KLV7WU1R2yZGnR06vi4hdIqdXR+Seoeq2OwC4fh3LALeiT9s9e9vgxzB240gAMIYMAJZxHKXGhsRw7T8Qqbgj5XRnRLojpeLO3imTbzqiOuNp7wAAAN1JABAAAAAAAOgoRx5516SNtujfIffnl6VK7BA5vyxyvDoidokUr47IEyIan0FvvTrrKUHQSABwmDqjNAtgHmn75V8GuN0BwNYcc0Tkrg0ADtSftYj4ZUTcHil+ETndk3L8NlK6Z3VfvvuYxTNXeucAABi/BAABAAAAAIBSmDv3V5umKU9tEbXKFjnF5ili81ykLVMlXhpFvCwqsUPKsUNEbDd0Sy+YbWzEAcDBGynXMsCdHwBsfhvdswxwuwOAa+t0wiyAAoAN1HkoIn4bKd+TIn6bc7o7RX44pXgk5crDRSUembQ6Hvnw4pmPeCcCAOg8AoAAAAAAAEBLHXvsrdN6e9PEYvLEKZVabZuISqVIaZNK1LaMiChy2qqSY+Ncie1SzjtHxKsiYqeI6Bmu7aaCRl0TAGw8uFXfMbQ6BCgAOJLjHdE4qvsYOnsZ4FFfVrmOY298JsZ2jKM83CynOXK6JyLflSJ+ESnujZyfTjk/mFMlR44/RI4/FJWcJ6XaQ32V3qcmFan/Q2fs+4R3PgCAsSMACAAAAAAAjLlq9bLeNWu23KK/EpunXNkiemKLSsTmuchbp0rlpTnnHSNipxSxY0RMHbq18RMAXK+OZYCHKT9Ks7flzhtH3RYA7IhxNMzmWvy6XBUR90QUd6ec7o6U7o3IK3KRH4meysMR+eEJPcUjL5q4xcOHVXdZ4x0JAKCzCAACAAAAAAAd5djqrVtP6uvdMVdix8hph0jFjjnSqyNi14jYasCgUd0z6A2mBEEjAcCW9Gdj28hDHEOz7ZdgGeAxDgC25pjDMsDrl/9DjrgtRfw8It+dcuXunPPdEybW7j7i1Lc+4J0DAGD8EgAEAAAAAADGjXnzbntR7unZpScV0yOl1+WIXVLEbpGHmzXweZ29DHDnBwCb30b3LAM84gBgXcfQCbMAdmUAsD8ifhuR74yIGyOnO1KluPNjp+9zZ4rU+BrgAAB0PAFAAAAAAABgXKtWL+vt799y5yJVdstF3ruS4i050usjcs9A5Ts7ANh4cKu+Y2h1CFAAcCTHO6JxVPcxdPYywKO+rHIdx95oEDOtrfTTyOmqFHFVkfpveWTK5j+tWqYXAIARfp4AAAAAAADoaNXqHRv19cWbcsr7pIh9c8S+EbFZRPkCgOvVsQzwMOVbPXtbcwHAMo6jbgsAlmscDfO6fH5z/RFxa0S6KuV85cRi4mVHnD3j967YAAC07r4UAAAAAABgHKpWL+tdVdtqt0qOfVPErIh4a0RMXr9UCYJGAoAt6c/GtpGHOIZm2y/BMsBjHABszTFHpy8D3B8prko5vhtFuiKv+sOyOUsPXO2KDABA6+/FAQAAAAAAusjRR189Zdq0zfbJKR8SOf9RROyw9plOWAa48wOAzW+je5YBHnEAsK5j6IRZADsuAPi7iLg8Ir5ZW736G0ef+/ZHXXEBABgJAUAAAAAAAIBhzKve9vLe/nRIjjg41s4OOHHd58sVAOyA2dvy8AcjANjGcVT3MXT2MsCjvqzywIqIuDnn+GFK6Zt/mLLn1dVqKlxVAQBoFQFAAAAAAACABsydu2zTnokT35uK9GeR4p0R0TuqQSPLAA9TvtWztzUXABx6GyUJrAkAtmscFRHpyhT5P6LS959zFr31d66cAAC0iwAgAAAAAABAk6rVOzZfU8sHV3L+QES8IyIq9dZtOmgkANiS/mxsG3mIY2i2/VYvAzz+A4CD1inPMsB3RopLiuj98tGn7fFrV0gAAEaDACAAAAAAAEALVKu3vqS/v/KnEXFoRMyMYX6HEQAc/mBKvQxw6QKATfZnbl1/1n8MrZ4FcEwDgD+NFBfnovbvR52x789dCQEAGG0CgAAAAAAAAC02f/5tr+npicMj0v+LiM0HKtP07G115rHaPXtb/XUGKZ+HP5hSBwDr2FS7A4AjGkd1H0N3LQNcZ38+GZG+kot80dFn7n2TKx4AAGNJABAAAAAAAKBNjjzyrkmbbLLyPSmlwyPiXes+N6LglmWAhymfW3S867fXaHhu6G2MamBt8PYFABsZRz+LFP80Mfov+rvT3vIHVzgAAMpAABAAAAAAAGAUnHDC7a9dOyNgPjwiXhRhGeDhDqbdAcDGttEJywCP/wDgoHXatwzw6oj0jZzyRUeftvcPXckAACgbAUAAAAAAAIBRdPzxP9t44sS+v4yIv0sRr1/7qABg8/s0UPluDQA22Z+5df1Z/zG0ehbAlgcAf50iPt/X3/tPx5494/euXAAAlJUAIAAAAAAAwBhZuPCOfSupmBsRB0XkYX+3aSwA2I7Z21ocWMvDH0ypA4B1bKrdAcAN61gGeIR9emOKtOTRKU//W7X69n5XKQAAyk4AEAAAAAAAYIxVF9y+ay3lj0WKD0bE5MHKNTr7XPcuA1yeAODQ28gtPOb6d0gAcANFTvnbKeI8y/wCANBpBAABAAAAAABKYsGC27fprRQfzZGOjIjNByrTbcsAN99+btHxbrjDrVsGWABw5Me7bpONjqO0OlK+uJaKU49dNPNnrkAAAHQiAUAAAAAAAICSOf74n208acLqD0VKx0bEi9d9rtsCgM1vY5RmAcwjbb/Fyyo325+5df056uPouSbrDgA+nCKf21upfP7ji/Z82BUHAIBOJgAIAAAAAABQUtXqHRNrtdpfRY5PR8T2EY0GANsxe1sLA2vjIQBYx6bKFgBs7hjGxTLAT0ROn1udehbNO33GY64wAACMBwKAAAAAAAAAJXfkkXdN2myzlf8vclRTxHbPPWEZ4CHKd24AcMR9KgD4Qk+mnC6INRNPO/rc3R51RQEAYDwRAAQAAAAAAOgQxx5767TJk+PDlUjzI2IbAcDhyucWHe+GO9y6ZYAFAEd+vOs2t95+PpVyOj/31c44ZvHMR1xBAAAYjwQAAQAAAAAAOszxx/9s48kTV8+JnI6NiM2GLt19AcDn64zSLIB5pO2P/jLAqb7daLo/R30cPddkjoh4Okc+P/dPOPPYs2f83hUDAIDxTAAQAAAAAACgQ1Wrd2xe9NeOjxxHR8TEwcqlkgW31qtTRwCwmW10+jLA7Q4ANncMpZ8FMKcc/xmpOP7o0/a+2xUCAIBuIAAIAAAAAADQ4U444dZXpxxnpUgHD/R8o8GttXWG0wnLAHduAHDEfdplAcAccUMlVY4+etEeV7kiAADQTQQAAQAAAAAAxonqCbe9q8ixOCJev/4z3bcMcIrh22y+/VYvAywAOILjvS/nWHjM6W/+lxQpuwoAANBtKroAAAAAAABgfKievOsPKxMe3i1HHBERv+vmvshtLt9aqUPaLNU5ezpHnD5p8tOv/eTpe35Z+A8AgG5lBkAAAAAAAIBxqFq9Y/Pc139KjnR4RK6UbQbA9erUMQNgM9vo9GWAR37OmujPzpgF8N/7i75j556x73KvdAAAup0AIAAAAAAAwDhWXXj7zCLyRSnyLo3WHf1lgAUAR3K8G9YZb8sAp+Up8sePOW3P//bKBgCAtSwBDAAAAAAAMI5VT3nD1St+t2a3nNO8FLG63HubOqrNdi8zbE3b5xQp0kX9xZrXCP8BAED7P/EAAAAAAABQQtV5d7wy9/RfGBHvqKf86M8AuGGbI2n/+TqjNAtgHmn7JVgGeIxnAHxhnRRxWy0Vhx+3aO/rvIIBAKA1n5MAAAAAAADoWDlVF9z2gUhxTo7YYqiS7Q4ArlenjgBgM9votmWARxwArOsYRmUZ4JURccYTkzc6tVrdZY3XLQAAtOYzEgAAAAAAAOPAggXLtpuYJvx9jpg9VLnRnwVQAHAkx7thndz4MY/9LIDXVKL2wWNOm/lLr1QAAGjVZxgAAAAAAADGmZyqC2//SEQ+J0dMG6hEpy8DnGL4Nptvv9XLAOcWH3N9O1SiAGB/ijh7o0d6Tjziohl9Xp8AANDqzzAAAAAAAACMO9X5t70mV/JXImL3Fz7X6QHA5+uM0iyAeaTtl2AZ4LEJAN4dOX/g2NP3utIrEgAA6lfRBQAAAAAAAN2tumjXn6UJj+yZUnwmRdRGc9u5zeVH3XiYfiMNdw5Si89Z/pcpkzd6g/AfAAB050cQAAAAAAAAWuTE+bftXankf42Ilz/72OjPAtjgjHV1tT9KMwDWsal2zwC4YZ2SLgOc49Ec6aPHnb7Hf3jlAQBAc8wACAAAAAAAwHNOWrTrNWlCMT1y/OfY7UXqkDabM+5mPWzO//b0VF4n/AcAAOPlkw4AAAAAAAClUl142+ER+fyImDB0yVbPALhhm61pf5RmAcwjbT+38Jjr26lRnAEwp4ilGz1SOfaIi2b0eZUBAMDICAACAAAAAAAwqBPn3/qWnkr6akTebvBSoxsAbH4b3bMM8IgDgHUdQ8MhwCcipb85dtEe/+mVBQAArWEJYAAAAAAAAAZ10qI3XhET+mdEiqsGL7V+fGxES9yavqIlSrjM8M8iFXsJ/wEAQGsJAAIAAAAAADCkanX35dH7yH6R8umjt9XUIW02p4QBvXaeyv+I/kkzjl20151eTQAAMF4/5QAAAAAAAFB6n1l465/niC9GxLT1nxndZYCbb3+UlgHOI22/BMsAj3wJ4P6IfMJxp+15ulcOAAC0hwAgAAAAAAAADfnsibfsVtTSNyPF9s8/OroBwOa3MUoBwDo2VfoA4DBVhuzPHI9Gyn963Gl7/q9XDAAAtI8lgAEAAAAAAGjIp056080xsbZHRNz0/KPrx8dGtMStKSxaIo9V+Ry/KXJtpvAfAAC0nwAgAAAAAAAADatWd18eE3rfFhHfbN9WJAHXlTtgH1OK6yf0FHvPPWPvnzpjAADQfgKAAAAAAAAANKVa3eXJ1/3i538cOV/QOXud2tZma2fc68jw438/Oany9qNO3etBrw4AAOjcTzgAAAAAAAB0mc+ccOsncs7nxDoTUDT6Q9R65fMGfxi+Tt3byM3t05DyEMfQbPu5Rcdb/06l+nZjoP5c8tTkPY6uVlPh1QAAAKNHABAAAAAAAICW+MzCW96bI/41IqY++9jIQ4AdHACsY1NlCwA2cQy1yPGJ40/f4wKvAAAAGH0CgAAAAAAAALTMZ+ff+paikr8ZEZtEtH8WwG4LAI64T1sbAFyTU/zF3EV7/KeRDwAAY6OiCwAAAAAAAGiVTy164xWVSuUdEfH78u5lalubucFaedT3s2VW5xSHCv8BAMDYEgAEAAAAAACgpT510q43RlG8LXIsb/e2csnKl19qRZWnUsTBcxft8Q2jHQAAxpYAIAAAAAAAAC1XXbT7nT2V9I4ccW8j9dYL3KVx0BEdeAx56CcfTal493Gn7fFDoxwAAMaeACAAAAAAAABtceLJb/x5bxRviYhfjqylpDPXMXazGOaHoie//bhFe17jLAAAQDkIAAIAAAAAANA2J5yy+z15woS3RMTt5dqz1LY2WxvQK034cUWqpHcef+qbbzGqAQCgPAQAAQAAAAAAaKtqdZcVeUJ6V0TcWYb9GbsZ9Mqi0VBhuj96077HnbrHT4xmAADo7Lt7AAAAAAAAaMopC27fpj/V/i8iXj1c2ed+xMob/GHo8nVqdK6++tvPA5fPI2k/t+h4G9ih5+v8rhK1/Y5dtNedRjAAAJSPGQABAAAAAAAYFQtPfcODPdHz7oi4p+5KaYM/EKM2i+FjlVyZLfwHAADlJQAIAAAAAADAqDnhlDfcW0n53RHxwNjvTWpbm+NgmeGniiIdfOxp0280agEAoLwEAAEAAAAAABhVJ568212pUjkgIj08VvvQWQG9NNptrixyHDzv9BlXGq0AAFBuAoAAAAAAAACMuk+dtOvtORfviohHB3p+HMygt77OWcF4TU7p0Pmn7XG5UQoAAOUnAAgAAAAAAMCYqJ662y2pSO+JiKeHLJg2+APRlpBkfyUXfzbv1Bnf0rsAANAZBAABAAAAAAAYM59a9MYrcor3R0RtbPagfcvrdtoshjnFUcedtud/G5UAANA5BAABAAAAAAAYU9WT3/TNyDF3tLfbWQG91NY2U8QZ807d4wKjEQAAOosAIAAAAAAAAGPu06e+6ewccf66j3XaDHrDKu8Kxv/59KQZ841CAADoPAKAAAAAAAAAlMLrfvGLo1LO3xjwyaR/WiFv2K03rJyU/l+1mgq9AwAAncdHJQAAAAAAAEqjWr1jo9TXd0VEvCniBT9m5Q3+sIFGf/xKMXybzbefY/BjaGYbucXHHL+u9E3Y+7iz3viQkQcAAJ3JDIAAAAAAAACURrW6y5N5QnFQRNw7GtvrrGWGWzq3x8PRkw8U/gMAgM4mAAgAAAAAAECpVKu7L0+V4pCIeLKzAnp1KMf6XGtyEX889+Q9fm60AQBAZxMABAAAAAAAoHQ+ddLut0bEh9d7MOmXVsiR58w7fcaVegIAADqfACAAAAAAAACl9OlT3vTVHOncDZ9pRxKwPG22c9bDHOlf5i3a40KjCwAAxgcBQAAAAAAAAMprwiPH5cg/LtMuje2yxCMKKt4yadXqIwwqAAAYP0yUDgAAAAAAQKmdsuD2bWqpdmNEvPj5NN3QsbpGfwRLdbTZXPt54PJ5JO3nZvbnkZ6e2ozjTt7zN0YUAACMH2YABAAAAAAAoNQWnvqGB6MoDo2INaa3aEqRc/oL4T8AABh/BAABAAAAAAAovU8t2v2aiDz3+UfakQQsT7qwxcsML5x/2vTvGkUAADD++DdSAAAAAAAAdIzPnnDLv0cRf7b2b4PH3ppbAnjoNpvfxgDLAOeRtl/3MsBfn7to+p+kSNnoAQCA8ccMgAAAAAAAAHSMonfCRyLil8OVa/EMeq03OtN03D9x0poPCf8BAMD4JQAIAAAAAABAx6hWd3kycv6riKjpjSEVOacPHlOd+YiuAACA8UsAEAAAAAAAgI7yqUW7XZUjndaeafRSaY5zhLMYnjH/tOn/a7QAAMD4JgAIAAAAAABAx8kTH6lGxHVjug91l0wNlq+/zUHctGrSlE8bJQAAMP4lXQAAAAAAAEAnOumE21+Ri/5bImKjwco0+mNYo1G9+tvPG5bPI20/D1T+qdSTp889eY+fGyEAADD+mQEQAAAAAACAjnTiyW/4Vcrp2I49gLZM1ZGOFv4DAIDuYQZAAAAAAAAAOtpnF9z8PxHxnoGea24GwIh6ZwEc0QyAdW4mDdPmOuW+Pm/RjPcaEQAA0D3MAAgAAAAAAEBHKyZWPhIRD5d7LxtdXLj+Np/xUO+a+IjRAAAA3UUAEAAAAAAAgI5Wrb7xoZzTcQM912jgrt3l2ybno449e8bvjQYAAOgulgAGAAAAAACg4+XI6aT5t3w/Urzrhc81twxwbrB8fXs5YPk8kvZzRE7fmX/a9AONAgAA6D5mAAQAAAAAAKDjpUi5yMVHI2Jllx36E7We2hFGAAAAdCcBQAAAAAAAAMaF6mnTf5kiTmpNa+1YSKvRuQVj+PI55p1wypvvdfYBAKA7CQACAAAAAAAwbtQmPnpmpLh53cdaGrhrQfmWyXHt6snTv+CsAwBA9xIABAAAAAAAYNyoVt/eH7U4IiJqHbPTzU02uDqn9KFqNRXOOgAAdC8BQAAAAAAAAMaVT5222w2R0wXj+iBzPmXBot3vdLYBAKC7CQACAAAAAAAw7kyqTT4hUloxslZSG/ZsbZsjWWY4R/xq2lObnuEsAwAAAoAAAAAAAACMO3PPeM0TqYhqs/Vzm8uP0FFzlu682lkGAAAEAAEAAAAAABiXXv3LX3wpRdwWMeoBvcbVP9ngDxcsmv5NZxcAAIgQAAQAAAAAAGCcOuySw2pFpKPG0SH1F6k42pkFAACeJQAIAAAAAADAuPXpU990WUR8o/kWUhv2am2bDc9KmGPpwlP3+ImzCgAAPEsAEAAAAAAAgHEtVWrHRMTqRuvlNpdv8CgeWT159cnOJgAAsC4BQAAAAAAAAMa1E0+e8avI+YJc9h0dYrLBlPP8anXmI84mAACwLgFAAAAAAAAAxr1iUjopIn7fobt/6yt+9au/dxYBAIAXEgAEAAAAAABg3KtWd3s0cpzeXO3Uhj1a22Y9sxLmFHMPu+SwmrMIAAC8kAAgAAAAAAAAXaGY9Oj5EbG8kTqNLhvc+mWG01ULT53+PWcPAAAYiAAgAAAAAAAAXaFaffuqnOLMUu/kCyYbTLl2gjMHAAAMRgAQAAAAAACArlFMePQLEXFfh+zud+eftsflzhoAADAYAUAAAAAAAAC6RrX69lURcVrjNdNo72ouKsWnnTEAAGAoAoAAAAAAAAB0ldrEiV9MEXe3q/1cd8k0VPn/PuGUPa53tgAAgKEIAAIAAAAAANBVqtVd1uSc6p4FMI/2DqYocorPOFMAAMBwBAABAAAAAADoOls/3P8PKeLXpdy5FF9ZeOr025wlAABgOAKAAAAAAAAAdJ0jLprRl3M6o7FaaTR2rYii52RnCAAAqEevLgDK5NDqHRMf3WLjLStpwot6a8WmOdImuZI3jSJtGim/KCJtknPeNCJNqqTYNIroiRSb5IgJEbFRREyMiGnrNPmiQa59xTP/xQu+sHns+cdjdUQ8nSOvrkQ8HZFWR4qnI6fVOeLpSspPRMTjEfnxIiqPR+THK1F5tFYUj0UUj0+M3kcnbb/17y85LNWcWQAAAACA8pm26ukvPzVlykkRsVWr285Rb1wwRUR+rnyO+O+Fi970C2cHAACo9xMFQFtNvzBP2KJ/+bYT+uOlRapsn1J+cc6xdUTaNiK2zJG3TBFbRsS2EbHJkI3lsb0cNnPRzBEPp4jfR06/j1T8PkV6OEd+KHI8lFLlgVoU96XU88DKjZ++//K/3mmVEQMAAAAAMHpOWnDzpyOiWk/Ztd8R1/9Fdf3fKefnyqei8ub5p+12gzMDAAC09nMHwCD2u+ChjSb3rX55JVV2Kirp5SnSTpFjh4i8fUS8OCK2iVYtOd6BAcAGPRIRyyPivhSxvIi4O0W+u4j4TW+t9ptvHv2S5ZFSNuoAAAAAAFrj1Pk3bVVL6Z6ImDJc2VEIAF624NTp73BWAACA1n/uALra/meumJamFK9ORX51JdLrckqvjMg7RY6XRxuWRhjU+A8ADmd1RNwTke6OHL/Jke+qVOJn/f09P1/9+FZ3X15N/UYrAAAAAEBjTlpw0xci0hHDlXv+O+L6vqxuNABYKWL2/NOmf9cZAQAA6iUACKznjxf/ZrOVPZPeUIn0+kjx2ijyayLFqyPiZaXYwTEOAJb8wrkmIn4dKf0scv5FyukXtci3FX3pzu8ft+1TRjcAAAAAwMBOnX/Lq2op/zSGWc2m0QDg+nWGllO+deEpu++WwiowRJz1yWVb9kxcvXOl1vPKVMnb54gpkWNK5LxZpDQ1RZoUEStzLlblSH9IEStTJVYVOT+QIn45sZZ/+dGz9nlITwIA3eKyarV3k3sf27HWG69MueeVKRXTipw3q6SYknNMiUgviohIKR4tcqxMOa9MKR7NkVZFyr+JVPvVk6s2/+Xb/6m6qtOOXQAQulS1mivXb3n/K4vc88ZKzrvmSLtG5F0jYsfS77xZABtVpBy/zhG35YifRI7bU1G7bdpLX/yrSw5LNa8GAAAAAICIzy64+esp4o+GK9e+ZYCLv1h46ox/cya6z5LjrnpFrSe9LSK9NeV4XUTaOSJv1vgYWjs21yn/RET8MkX6ec75qpTi/x6esvcd1Woq9DoA0MnuOvLISX9YM3HPKGK/lOLNOeJVsTbvMqH+e/Y80L17joj7IudfRSVuTUX6v5wqV8y46Ozfl7k/BAChSxxwwb2vTLXKHhFpRiVijxyxe0RM68iDEQBsVZ89nSNujRzLKpW4sb8WyzZ5ybY/EwoEAAAAALrRZ+ff+paUih8PV65NAcC7+yY+tnO1+vZ+Z2L8O23usk0npb73ppzeGZH3i4iXtGAMPSMPXmftUw9HjitTxGU5Vb4254y97nNGAIBOcO2Hj921pxLvzTn2ixR7RcTkwe7L65u5Ow9z35XX/cMdOeL/IufvT330Rd/d5ZLqmjL1jQAgjEPvPP++LSYWaWaktGfk2CMi9oiIF42bAxQAbGefPZUibs4535gjbqhEzzXfOnqbX3tVAQAAAADd4KQFN18XEW8eqkybAoBzFp66+1JnYPyqVi/r3XTl1AMi5w9EivekiCnRwFgawSyA6z78QkXkuDwi/UusSv81Z+lejztTAECZLDv8qO2K6Pn/UqQP5ohdB7v3ae6+venw4MOR8leLIn9ljy8uuSa1McXS4s8cQJnNXvLgKyKKfSLyvhGxT0S8dly/vsc4ANixF8/m++2BiLgmcr6qEj3XTHns9zdeUt1ljVceAAAAADDefHbBTR9Mkf55qDL1zSYyWJ0BPdVTK1487/QZjzkD48/S46/cvj/1Hh0RH4yIrZsdRy0JAA6xuRSxMnL8dyXymR87c59bnDkAYCxd95G5B0SldnTk9K4UuWe4e5/B75+aWga4jvu0/OzTv8opX7S6f/Ln9/2HM54Yq/4SAIQOdNDi5a/NlfSOnPJ+sTbwt13XdYJZAMeyz1ZFpBtz5CtTypc/3dt75eUf2/pJr0wAAAAAoNOdc/TVU56aMuW+iNh8qHKtnAUwp/SPJ5yy29/o/fFl8bxrdoxcOT5F/uscMXnwMVGaAODzQzLHNyOnUz5+1t7XOZMAwGjJEem6I459T8ppYaxd6bLOe++xCAA+8/zzRR6JiPN6+tKS3f7p3EdHu+8EAKEDHHj+8h0i53dEkd6RU7wzujHwV+cH1NG6LCZ9tq6+iHxDTpXLKkW6vDK1dvWlR2z/tFcuAAAAANCJTlpw8zkRcfRQZVoZAEw5Zi5YtPs1en58WBv8S5+OiL+IiAn1jYk8ojG0oTx4ndzANlJ8P9XSpwQBAYB2u+7w4w5NESfmiDc0fu/d9FK+MXQAsI66eYN6j0fOS/um5DP2Wrr08dHqPwFAKKH3nP67jfum9r0zImZHjndGxCv0Sv0fUEfjsigAOKQ1keK6HPGDnlp8b8bj2y6rVlNh0AIAAAAAneCkE259dRTFT2OIr4JbFwDMP1l46vQ36PXOd+HhyyY89aL+T6aIEyNiamPjYhRnAcwNt1/knC+cVJk0/wjLVAMALXbtEcftHLnyuRT5XUPdqKQmAoD13bePMDyYB72fuj9yMWf6l5b+12j0owAglMRBix98eVGpvSsiHxIpvTsiJumVpq7fo3ZZFAKse5MPp4j/TSn/sEjFt78z5yX3GcAAAAAAQJmdNP+mH0VK7xjs+VYFt3KKT5xwyu5L9HhnO2vutfumnD9fSen1jdQr8TLAA1mRc8ydc+bMLzvjAMBILTv88Am1tNkxkaMaEZOHuydKTSzl+/z9TbuWAR4yAPhs3W+movbx3f/+gnva2Z8CgDBG9vvH30ye9MTkd/ZU8iG5iNkR8TK90tDn1jG/NAoANrsH6dYc+XuRi0v3fGz7a8wOCAAAAACUzckLbz4057h4qDItmAVwVd/ESS+uVnd5RI93pjOPvXVapbLq3JTyhyIiNfq7QYcFAJ+t+M3cU/ubOYve+jsjAABoxnVHHLt35Mo/R8TOdd2kxEhn8mtXAPCZ5/Ng91PPPfFkpHzs9IuWXtiuPhUAhFG0/5krpvVMqr0jRzo0pfijiNikwe8HqO/aPyqXRgHAluzOwynHt1OKS3tW9373G3O3esLABgAAAADG2oWHL5vw0JY9d0fE9oOVGXkAMP3rwlN3+4De7kznHn/Dq4tUuyQi3jD4OW5kTOQmxtBQGg8ADr+N5yrelyMfOueMfa81EgCARlx7xPGHpxxLI2JiIzcpbV/Kt6l6zzw/fADwWV/JadXhMy666OlW96sAILTZu5f+dvveNOGPIuc/joi3R8SERj9s0fgH1NG4NAoAttzKHPGDSqRv9PXFpd8/btuHDHIAAAAAYKx8duHNp6QcCwZ7fqQBwJzibSecsvuP9XTnOXvutX+ZIr4QEdOGOseNjYlRnAUwj6T95yqvzimOnHP6Pl80IgCA4dz8V0dttnripH+MyH9c5z84GOA+JTdZb7h7rRGGB4dfBnjdv92Saz1/usc/LP51K/tXABDaYP/Pr9i60p/flyK/PyL2jYhK/Z+XaOBza5uM4wBg54y1WkT8X6R8Sf+ayn8JAwIAAAAAo6067+Ydeyrx6xjk6+ARLt9614JTd3t1iuTXgQ6y5Mi7JvVPfXhpRHykzvPcwLjoqGWAn1OJ9Pe1lY9+bM7SA1cbIQDAQK7+23m7VYr8nxHx8iHvT4a5J0pNLOX7/P1Nu5YBbiwA+Mzzj+RK/MX0C5d8t1V9LAAILXLQ5+55UdE/8ZBIxaER6YAYbKa/xq9hjEmfmQWwRIqIdE2kuCR6K1/99se2XmHwAwAAAACj4aQFN18ZEfsM9nyzswDmFJ894ZTdP62HO8eZx946rad31X9FxP6R87DnuNEx0akBwGdeA99d01f5k2MWz1xppAAA67r28OPfHpG+HhGbPH//MBYz+bUrAPjM8/UvA/ysWsr5b3b/0tIvt6KfBQBhBA49594pT/RW/riS0l/kiP2j0dBffdcwxqTfBABLqhYpXxaR/i2niV/7zpwtHvciAAAAAADa5aQFN38sIs4f7PlmA4C1nmLXT50043Y93BmWzL9pq/7o+3bkmPH8KR9uqbjGxkTUOZbaHQAcfhuD/Die0+Vp2upDPlZ9+5NGDAAQEXHtEce/L+X0rzli0vr3DiVdyrepes8833gAMCKiFrn4yPQvnf+PI+1rAUBowkHnLZ+ee+KDOcdfRMQWLWtYCLBEfSYA2AFWRcQPU8SXV0zZ9us3HpH6vCAAAAAAgFY6df5NW9VSWh4RvQM932QA8GcLT939tXq3M5w3d9nLaqn2/Yh49XMPjmEAsPFtDBICzCNpPw9WftmavnTAMYtnPmLkAEB3u+Yj8/4qpfzFge+j27UM8BiGB/NQ91JD1s058tEzvnj+eSPpbwFAqNPsJb99RUTPB1OKD+RIO7VlIwKAJeqzcRwAHJ9j7aGI/B9FpH/97lHb3eCFAQAAAAC0ykkLb/5e5Nh/oOeaW741f2bhqdOrerb8zp5/3atSjh9FxEvWeyIPfc67cxng5/52Y6VSe/ffnfaWPxhBANCdrjli3tyU82lN3Z/EcPdZjS/lu859eMN1mwkAbnh/NGzwMEfKn5x+0fmLm+1zAUAYwn7/+JvJk5+c9L4U+SMR8ZbnXzNteukIAJasz8wC2KF+miP+Pirx5e/M2e53XiQAAAAAwEh8dsHNf5UiBl2Wq9FZAIueyus/ddKb7tCz5XbOwqtfnGs9V0XEDgPPoCcAOET5K9f0pf2PWTxzpZEEAN3lmsPnfjRF+txw9zVjM5NfuwKAzzzf1DLA+fk/5PyhZpcDFgCEAcw69/5Xp0r8dUR8KFJsOWovHQHAkvWbAGCHWxMR308RX566/bb/dclhqebFAgAAAAA0qlq9dpOeNZNWRMSUgZ5vLACYf3LCqdPfoFfL7bS5yzadkGr/FxFvfP4cv/BUDn7eOz0AOPw2cj3lv/n7qWveW62+vd+IAoDucN3h8/84R/7PiOgZ7majtEv5Nn2f1mwAcL3na5HjsOlfWvpfjfa9ACA8Y/aSuyblNOU9lUiH54h3Dv36EAAsFQFAY234s3R/jvyvOccXvnv0dnd70QAAAAAAjfjsgpv/K0W8d6DnGgkApohPLTx195P0aHmdc/TVU/Kknu9HxL7rn+MXaEsAsKGx1IA8xDE0035dAcBIOf71786c+cEUyS9gADDOXXv4grenKL6TIybVd1/TrmWAxzA8OPIAYKSIlTnHAdO/tPSKRvq/YgjS7Q48f/kOs86//4ycpj6QIl2cI941/OemNn1OEclltHTdWMsvThFzKyl+eeDi5V8/6NzlB1Sr2XsgAAAAAFCn9B/DPF9fK7m4RF+WV7WaK8Wknq/GOuG/ZuQ2l2/dsG5vxZziLz93/NUCrwAwzl374QW7RhRfXz/813E3OC2Vm9ynHDElpfifZYd//DWdd9QwBmYtvXe/iHRkRPqjeG760UZeFGYBLI229plZAMfxwLkrcnyhlmv/9L1jXvqIFxIAAAAAMJhqddnUnjU9v4uIqQM9X9csgDnuOGHR7q/Xm+V11tzrFqQUpwx+jl94ToebYaZ+ZVsGONXRZp3lcyXFIX93+j7fMsIAYPy58m+O37i3t7IsIl5V943Gc/cPzc7kV/+Meg3fs49kGeA81P1R/ceaIiKn+Mnqab1vnrl48cp6zoPZj+gqs5fcNWn2kvs+OGvp/bdEVC6LSH8S64T/6FCizDQ3cHaOlM7uqUxYfuC5D148e/GD++gTAAAAAGAg1eqMp3PEZSNqpJK/oyfL6+zjr90rpag2Vmv8/kDRwlkMU5Hjy+d/8qodjDIAGH8qvZULYsDwXzvvldIY1W1X0xtWTDleP+nJ/vPqPg+GIt3gkAuXbzlr6f3VHFPvyyn9c0S8Ua8Aa+VJEfnQlPKVB5674poDz3vgsP2quVe/AAAAAADrSfHtkVTPKX1PJ5bT+fOv2yJV0iURMaEMA62u8dRgm2O8KNDmqSf+pVq9zHfvADCOXP2RBX+TIj7Q7H3GcPMDtuY+aOT1Gr1Pa+Fd4Udu+vCRf15PWQFAxrWDPvfgy2ctuf/8vjX5noj4dKTYsnWt57a9gqFE3yF0m70ip69O3ezBuw5c/OAxs5c8vIkuAQAAAAAiIlKqDDOD35Bfuj616WMbX6EXy2l1jn/KES9pZZu5zeVbN7BHp2KOeMuWKyd+2mgDgPHh2iPmvy6lvLScwYPW7lNrAoepqXo5xYU3fujvXjlcHQFAxqUDL7jvTbOW3PflWq3/55HiYxExtfQfsCipbNx0px0j5bNT0XffgeeuOG/W4gd21CUAAAAA0N1OPPmNv4mInw703LDfEad02ZylO6/Wi+Vz1rzr/jwiDh6u3IDn2D+0b0yOeZ879tpddQQAdPpbeqSc43PRQBZnkJvkEh5duZYXThEbp9TzheHKCQAyrsxeet87Zi29/0dFkW6OlD4QEaYS7xY+ZNMeG0fEnEpKdx147or/OHDxQ2/SJQAAAADQzVJTywDnnL+v78rnguplG6WIM0c4JnTks+N8+CK9RSrOy5F1GgB0sOs+Mv8vI+JtY3uvVK6g3sibTkM99c6bPvLxPx2qtgAg48KsC5bvO2vp/T/KkX4UEe/QI0Bjhv1aojci3h+puPnAc1dcOeu8Fe/UZwAAAADQfYoovtNUxUr6rt4rn1Urp54YES8u356ltrRZimWJU97vgrlXv9/oA4DOdOXfHL9xTnFaq+4bcpP3RO3Z3ljdp9W12cW3fuDYaYN+3DA06WQHLLn/XQcsXX5tFPmKGJPgX27XCxc69zuE8W+fShE/PHDxiitnn7PikMj+pSIAAAAAdIs8cdIVEfHE4CUG/LrwNyeevNtdeq9czjju2p0jxSdKNb7aXL6xYdvGijkvXnLktZsYhQDQeXp6K5+JiO1bdDPRRq3dp9YEDlPz28vx0trklfMGKy8ASAd+us5p9pL73jdr6f23pBQ/SJH3HOsPWGDcdKV9UopvHHjug9fPXvzgHwsCAgAAAMD4V63usiZH/LCxWvk7eq58enrSmRExqaEzOdCDqcHyRETaNk3pO0Y/AEBnue7DJ+wUkT7e4vuCMt6rlHSf0rE3/c3Htx/oWQFAOsr+59938AHnL78pp3RJRLxRjzA612Af0RnSjBT5v2ef+9CyA89dcbDuAAAAAIDxLeX0vYEeH+yb5JwrP9Br5bL4+GtemyPe49v/1qu3T1Okj5957Pem6TEA6By1Su2TETGhRHfmZfy00M7ZlSfn3nzUQE8IANIRZl2wfN9ZS++7vJLTpSniTXoEaL0GvupJAz2Ud48clx64eMW1s89ZcYj+BAAAAIDxqSeKKxoonnsiX6XXyqWWeo6Llv5i3I4fn9vzg/aYLTO8oS2mpY3+xmgEgM5w3cfmb5Ei/qq5+4Y0VvcbbbrXGrvgYcrpiJv/6qjNXvi4ACClduD59+45e+n9l0aRr4hIbyvnXrbpUmQxUTrhfY2B7JlSfGP24hVXzzpvxTt1BwAAAACML/MX7fbTiPjd4CXW+9L1lwsW7f47vVYepx9/0/aR8l+Udf/aG9BLTT3VdJvD7XvKx1Srl/UalQBQfkVfOjIiprXjnqDZe43cZN1mUz6tqZdGur1N8oS+I174oAAgpTR7yQOvm3X+/d8ocuXaHDEmS2qa9h3jhhHehuxdKeKHBy5e8YNDFi/fXY8AAAAAwPiQIuUc+do6C1+rx8qlJ9U+ERETm62fBz7PjZUnIlLkiB23XjnhMH0BAOW27PDq1Ij4WDvvC8p4r1LefUpz7jryyEnrPiMASKnMXvLAVrPOv/+8nIpbI4clNCnRNdhHdJr2rlpUlh24+MGLZy958BW6AwAAAAA6X4rKgMv6vvCb5FxY/rdMqtXLeiPlv1r3xwTf/rdeQ31axEf0GACUW39e/acRsaWgXgP71N7Zlbd/fGUctO4DAoCUwv5nrpg2+/z75+ZK8avIMSciTPcNjIEGvpZo7A07ReRDUy3/dPbiFRfuf+aKrfU1AAAAAHSunPOV9ZSrpLhGb5XHRiunvjMi2vT9bOqQNtu9zHCDbad46+ePvvrFRicAlFeR0vtHft+Qxux+oz33WmMbPKykWO+cCAAypvar5t7Z59/30Z7JtV/lHKdFjo31SmmuFxhrtN6EFHF4b2/62YHnPnDcftXfTNYlAAAAANB5Nntyo2URsXrwEiki8hM73/WrO/RWmdT/4/VYam9ALzX1VNNtDq9Sm5D/1NgEgHK6+kPVzVPEu8f4Hm4E90GpJfdbra2XRry9HPngWz9w7LTnbqgMVcbK7KX3vWPKFvffnHP6XI7YprM/YJkgHqOBhkbJiyKnM6ZuOvWu2ec++EH9AQAAAACdZc7SnVdHxA1Dl0rXHnbJYTW9VQ7V6h0ToxJ/1Iq2BvwdIDVYnuf6JkXxfj0BAOWUetb8SURMrLP0SLZUxqMv8z5NrU1eecizfxEAZNTNXvLbV8xacv/Xc6Qf5Uiv1yN0zjXYR3RaPqZeknL+5wMXr/j+7CUPvE5/AAAAAEDnyCkNuAxwfv7/r9VL5TFt5VMHRI7Nn38kbXDOGG3PnoO094Vzr3yZ/gCAMt70xmEDv3+X8Z6iZPuU2n1qnp/dWgCQUbPfBQ9tNGvp/Yty6rkjUmv+hRVAO94mx+A+4t2plm45aPGKxX+8+A+bOQcAAAAAUH6VSFcP/Xxco5fKI1XigFHYSoe02e5lhhsun/rzWC8tCAC80NVHHz0lUryt7Pc13btP+Z0XH3pozzOfPaDNck6zL7jvg5Nz388jYl5ETNIpHX6tAdphQkQc1R+rf37g4hUfrlaz92gAAAAAKLH+vrh5qOf7+uNWvVQiRezTSbvb3sBd+YKKOfI+BikAlOx+5Ompe0Tdy/82fx9TX700yturp14awfbSiPczRdr45S/a+o0RAoC02YHn3/eqWRcs/0HO6Z8jYvuOvKC1/dLAuHwj7MSdFjYtxbjJEVuniC/esOlD1x903vLpegUAAAAAyql6xhvvi4iHB3n6D9Uzdl+ul8phSfXaTSLFG1rZ5oC/A6QGy5fRGPxWkCMiRWVfIxUAyqWSiyben0dyM9GuG5Ey7lNrjqeS0z4RAoC0ySEXLp86a+n91SLS7RHxzlK/Lhif2jbWBD0ZLXl6FJVrDz5nxXmHXvDQRvoDAAAAAErpjoEezBG365ryWLMy7R0RPUOV8e3/WHn2B5288wXHXbat/gCAEsmVfYZ+/y7jPUXJ9im1fRMCgLTH7AvuP6SvL98ZKT4dTUwFClCCO5my3Ef05hRznl5d3DZ78QOznRcAAAAAKJeU822DPCUAWCI5pVH88bpT2mz3MsNNhCrThJlGKwCU5P4pIuWU9+qU+5qu3accb4kQAKSFZn3+gR1nn3//pTnHNyJiBz0yzq81wGheA3aqRPr2gYtX/MeBZzzkX0ACAAAAQEkUlcrAQb+c79A75ZEi3tSJ+93ewF0pg4pvMloBoByu//AJO0bE5s3OktyeemmUt1dPvTSC7aVW7Of2t/7t324tAEgLPn3kNPv85YdHrbgtRxw8Lg+x7ZcGunvclIiwadlPz/vThOKnBy1+8HC9AQAAAAAlUBQDBgBz9PxE55TKK9rR6IC/A6QGy5fRGPxW8EzfvNxQBYCS3Oamkdw/jeRmol03ImXcp9YcT3//hJcLADIiB1xw7ytnnX//ZTnyhRGxcce+LmDkH+lhtEbXZhH5woMXP/jt2Uvue4keAwAAAICxU0yadHsM8LVeManXDIAlkSOnFLFjfWUZG8/9eCgACABluYeq5JfX+f5dxnuKcu1Tm3erUskCgDRnv2runX3+/XNTrvwkUnqbHqHcnxdh/I21HHl2pdb7E7MBAgAAAMDYqVZ3eTJF/OYFD99fre7yiN4phzOOv3m7HDF18BKlXAq3tNq7LLEAIACU6E1/p/Y1LjzYyn3KOQkA0rhZFzywx+Qtl9+YI06LiEl6pIuvNTDO72g6wKYR+cKDz1lx6XuW/m575wwAAAAARl8Rsd4ywCmy5X9LJPXUdhonR1JXqdxgm3mM9nMQ21xQvWwjoxYAynDrkV7+7Pt6s/cL7amXRnl79dQb2+WFUzIDIA04tHrHxNnn33dK5OLqiNi1244/t/3SAB31HQJluj6lOLjWX7v9wHMf/FO9AQAAAACjK0X+2bp/z1H5hV4pj0rOO5Zpf9o8g14rB/aY9E1eOWEHoxYAynDTUozwPdksf62+v8uDHE/OsYMAIHXZ//MrXv/EVptdmyMtiIjecfKagrZfksVBGcU3/M1Tzv958OIHvnzoBQ/5F5IAAAAAMFpy3LP+A8U9OqU8ihybNHY6Gz39A/A7WBPWdlolx8b6AgBK8d686VjfF4x+3TbuUzvvD3NsIgDIkPar5t7Z598/t1KrLYscu+kROvTzInTNWMuRPvD0muL22Ysf3MdJAQAAAID2q6S4e70HNggEMrYnKKYNX6gdX/CO3x8o2jmLYRHFNIMWAMogTW3v/Y4ZAlu2TymmCQAyqNlLfvuKyVsuvyxHnBYRk/SIaw10n46dw3HHSuTLD1r84GnTL8wTnEcAAAAAaJ+iku9e9+85JwHAEqkUMXX8HE19PxTlBtvMY7SfA56vqAgAAkAp5Gnrvq+3btnaVtRLo7y9euqNaaBHAJCBRmdOs5fef2Su9NweEfvqkNG8NEBHfYdAufVG5LnbPr3if2cvue8lugMAAAAA2mPaU6vvjnV+GCgmVwQASySnVLoAYG5z+ZYZg98Kaik2MmoBoBRacA9llr/67u9Sk/WeqZsFAHmB2Use2GrWBcv/J6dYEhFTuuA11RkfsOjoEWHcMLbXm7RvpdZ78+zFD8zWqwAAAADQescsnrkyIh565q8rP13d9Xd6pTxSyg0HyloS0PMP7Zs5W5HG1YyNANCZcrVaiYjJY31fMDZ1O22fwhLArG/W0uUH5EpxW0QcojcYZ58XodvH2paVSN88aPGKkw+9OPc4UQAAAADQauk3z/zhtymSfxdeIjmiUt8JaccXvGk892t7ylfSBKMWAMbWjcuX99R/I1PSUFwZ9ym1rWKvACAx/cJlE2Ytvb8aKX87IrbVIwDrGjff1VUiYuHT9z/0v+9Z+rvtnVcAAAAAaKm7IyJS5Lt1RbnkHE+PryNqT1CxNN+E5+JJoxYAxtaMiy7qi4i+Dd6mm317b0u91PLtlfM+rS5PCQB2uf2XLn/Nln3bXR8pPh1rwyG07hPKOLte0HWMtfF6bXprrb920+zFK96hLwAAAACgNXJaGwDMKf1Wb5RMiqdKOWZKVn6I/hvViinSUwYtAJTCky24IYhOmuVvbAOOaSTbe1Lgq4vNWrr8Lysp35Ai3lSy11S5P8QbOhg3dP642aYS8b2DFz94jF4GAAAAgJFLRfHbtf8vAFg+ualAWUsCd/6hfcOKVBEABIAOvodq8V12Ge/8y7hPT/UasN1nv3/8zeTJT008PSLP0Rt0jRRtSlNln+DpVL058tkHnbtij8qU4kOXHrH907oEAAAAAJqTKvFQzhE54nd6o2SKylORcp3f5rftxwSizl9UimQJYAAoxft2err+JEQZ76FGsk/tOp4UkXKTTQ+5T2YA7DazPnf/qyc/NfG6iBD+A2jg9qah993OOrQ/K57uueKQ85a/zHkGAAAAgObUcuWRiIic4g96o2yKJ8Z2+6lj2hyzZYbX0ZPTE8YsAIy9FPF4K9//c5P3NbnJe6I8lj032nIWAOwmsy5Y/idRpOsiYle9MWqvsnFzvaB739XpimvV7kVRueng81a8U18AAAAAQON6o/ZwRESO4mG9US65J99b2n0rWflBpdGruLp/pWW0AaAMUtzbohuC6KSlfFsfcGykXmquXkr3CAB2gUOrd0w84Pzln4ucvxaRN+2Q11S5PywaVhg3jL9xs0Uu4rsHLX7wo3odAAAAABqTU8/DERGpWDsTICU6N7XeXzVdtxXl/UP7Rjxy9Llvf1Q3AEAp/Kocu9E54cGx+yySfi0AOM69e+lvt39iy80uT5EFOqBt12DRPsaN3oj8uYPPWXHeoRfnHt0BAAAAAPXpn/CHhyMiitxvBsCSWTVl+n0RsTqi3m/zJfbaKQ/95K/0EACUQ8rp1w3WKONRjFHdYdpt8ezKKcevBADHsdlL79+nJ3qXRcTeegNgpBoIenb490M5xZynl6/45uwlD2/ivAMAAADA8KrVt6+KiKdjyhQzAJbu3KQiIu4e271IHdPmmC0zvHbzAoAAUBLFEDMAtn6Z3DSC+w0zBKYQABy3Djj//o/llC6LlLfTG2Mtt+0VDOPwvYnSXLrSrEqt/7L3LP3d9joDAAAAAIaXIpZXq7s8qSdKeXZ+WdY9yyUrP9QAb3fFFAKAAFAiv2rhDUGMRfAgN7lPuW3bq6dearhe34R+SwCPN7OX3DXpgPPv//sUcX5EnqBHyvOBDIwbOm/c5N1r/bUbDlm8fHdnAQAAAACGVkTcpRdK65bR2tCA3+f6h/b1vYZy3KwXAKAcZm7f+5uIeLQce2OWvyFuPle8+XOfWyEAOI4c/Pl7X5wrU69MEX/TcTvvgw8dP9ZE+xi3ti+icvlBix98l64AAAAAgMGlEs8y1/XnJhdXPPvnXOfZbKw8jRisT2sTeq7UOwBQkvunarVIOa5u9I64jHfppdynFs2unFL8OCJCAHCcmHXBA3v01yrXR8QMvQGDejQi/jDAf4/rGurTwFc94yvYvHFE/taB5zxwmDEAAAAAAANLOf9WL5TTxCn5moiojfEI6ZA2x2aZ4RRx11Gn7vWg0QoA5ZEjX9nq9//c5H3N2PyjjPIveZwjXRkR0Wu4dr5Z59//Z5GLf4iIKXqj275NiPH8T89Wxdpw3iNr/z89Ein/IRXxSK6kP6QiHilS8Uglpz/UUnpkQu7/Qy4m1iIi+vOaR3snFzki4lsffdmjkVJDvVSt5soNW/920740acKEVWmjqNRelHNMK1LaqBKxUY68WeS0cUrFxhGxVY60XURstfa/tE1E3sxYYxyamFL69wMXP7DVt4/e7gLdAQAAAADrKyr5Sb1QTnOqez1+5rzrb4uI3cbD8eRo7CflxsoP8YNA078VDF8xp7jCSAWAkt3f5nxlJaVW3RC00eD7NPx90MB1G73fam29+vu4VmQBwM6/u89p9vkPfCZHPiEsolvyD1jZKXrB+0REWhER9+Qo7k2R7s0Rv00pfpsi7uut9dz7jaO2ac2/8vq7xqtUq6mIteHDiIiHGq1/aPWOiSs32WSrvtSzTaWn8uIcsVPkvEOK2CFy7JBT7JDWBgah7TcKLVZJkc4/6JwHtv7WMdt92lkBAAAAgHXkigBguV0RoxQAHPD73CF+x/UrUkTOYflfACiZx6c8ef1mqzdZHRGTWtPiSMKDnRU8HCWP/ebxFbdFCAB2rP3PXDGt54L7/zmn9Kfj5qDMMDbeFJHi7ijynRGVO1Ol+FlRpLsqPXHvgxO2W37jEalvvB74JdVd1kTE/c/8d9Ngr+HUk3es9KaXp8ivSTleU6R4bcrxmoh4keFDua/X6VMHLV6xzdQXb/OxSw5LNR0CAAAAABGVlJ/QC+WVcvpuTnlORL2Bu+d/uBLQa70X9GnR25e+r1cAoFwOXLp09dWHL7wsImY1cNcVgnp17lPKI9qtHPGDwy65pBYhANiZL7ALHto2575v5kjT9QYl0B8Rv0oRd+SIn6UUd+Scf7pRf/GzS4556UrdM7DvH7ftUxFxxzP/XfrC13jqr702R351SmmXXKTdUspvzBEb6bkyaOCrnvEdbD7iqfsf3Gy/av7Ly6up37gAAAAAoNvVsiWAy2zjP6QfPr55fjgithi7vWjHl8bt+SK6vcsMb1D3io8unnm/UQoA5ZMi/iMPEgBs/TK54y082K7jWdtuJcdXn31EALDDzF7ywOuK3PetiNhRbzAG17++iLgtIq5PKd9Q1IobN3708Z89M+MdLfLtj229IiJWRMRlzz526MW558kVK15dKfLuRVSmp5R3j7VLFWysxxjDy8/7p2324MRDq3f8mesAAAAAAN0u5R4BwBI74qIZfWfMu/5rKeLw8XA87Q3oDfHjU9O/Sw1eMaXnf7wGAMplQvR/fU30roqIyS24IWjj/c/g+zT8fdDAdVsfcGyk3rB9/MSqjXu/9exfBAA7yKyl9+6XU/FfYXnQDv2A1XETxOeIuCsibsgR10eluGHVtL6bL//rnVY566PvmWVW73zmv3+NiKhWc+XGLR54Va1Ie0fEWyJin4h4Vdt2wjLdHXS9GdWdeu/Tm27xX/tVf/O+y6uuDwAAAAB0sV4zAJZdrhT/kYrKqAQAB/w+d4jv2bt4meH+nlp8zegEgHKacdHpj119xMLvRI73tqbFMs6oN1bHMyLfmLl48XOrcgoAdojZFyz/i5zz30fEpHF9oAJGY+mpiLgyR1yZIq6v9Pbd8K2/2+EPuqW8qtVURMTPnvnvHyPWLh8cff37RIq3RKR9I+JNEdGjt2izg6ZtOuXSQy5c/keXHrH907oDAAAAgG5UKQoBwJLb6a7f/vieV+z4QERsN5pL3DKkyz561j4P6QYAKK9U5P/IKTUQABTUq3ufUm5ut4r1Z1AWAOwAB5y/fEHO+WSfK2ixvoi4LuX8o1pKP9rkkT9cZwnPzvfM8sFfe+a/eM/pv9u4b0ptv0rk/XPOB0SknfVSKzTwVU/3BJvfVXu68u33nP67Q74xd6snjBEAAAAAuk2l6BMALLnDLjmsdua8678UESfWV6MdX/B2SpuNayZUGTkuNDIBoNz+MPmJ/9ls9SYrImLb9m9NeLAOv809q7+77gMCgCV26MW55/GHHliaIn9Ub9CCa00REbekyD+KnP63f03liu8ft+1TOm98eyaIdekz/8VBix98ea7U9o9UOSByfkdEbKKXaOGl6G21ibXvHHrBQ7Mu+djWvuwEAAAAoKusmbSRfxjbCfr7zo/eCcdGxJRuO/TGAnopcuQWz06ywQ9adz08beZ/G5QAUG4HLl26+uqPLFgSKZ36wvf1ZmdJbk+9wcMzY7efjYUH19/eIHVzXjzjixf1vfDIKaHZS+6alHum/UvkfGjXHXyHzpSV2lByxP2W4v4o4tKc4ge5v3b594556SNeXTxrv2runbrZAzMjxayIyuyI/Ma6Bqhluht/Lecx2epYds1lU4u+gy455qUrjRMAAAAAoGzOmHfD51Pkv63v+9bnv+Bt9PvZQcvn3HidYcvnke3TIMeehu+WBtt/vmJO6W/nnD7TDIAA0AGu+Oi8F/XUeu6JiI1f+L6eGrlZqOc+Y8i6w/0DhaHus4bfp8Hvbxqvm+o8nhc+nYZoN0U8MmlC/w67fO5zT47kHpJRsP+ZK6ZVptS+FhEHdG0ndGDAqDQBwBS/Tjm+WeS45LtztrsqUhLXor5rz+dXbD1hdX5bTnFIRDokIm82Xl6fY/2qb3Wfdcib9w+eemzley6v7rTKWAEAAAAAymTxvBte3h/5FxHR0+i/im9JCFAAMCLiob6+tOMxi2f6h+QA0CGuPnzBORHp6Be+r7c+yJeHuZ/Jdd+7bXif0njd9gYAn3k+D3Y/lV/YayfP+OJ5J470HpI2m73kga1ypfh2RMzo6o4QAGxELSKuTEV8I6ee//nOnG1+5ZXESE2/ME/Y7ukV+xQpDkyVeG/O8cpOfn2W4ZXfdbMArj3kS6c99vD7LqnussZYAQAAAADK5My5110SKb1vTGYBzOu3OWz5utvPze3PEMfdaABw+G2srZhzXjjnzH1PNRIBoHNcefjcl1Wi966ImLju+3q5ZvJrVwCw8bptCAA+3ZfTy/f60nkPjvQekjY68PzlOxSRvxcRr+76zhAAHM7KiPyjSOnSlHq/8e2Pbb3CK4h2OuCcB3bp6YlDI+LQyPE6PdLE67kLA4DP7Ox/P/XoNoddXk39xgsAAAAAUBZnHLfsFamnuCNFTBq+9PgJADa+jTzEMTTbfr5vVfHka44764CnjEQA6CxXHb7w9BRx/AtvChpfBlh4cL269SwDnKM6/UtLPtOKe0ja5KALlr+2losfRKQX643o2BnG2hwC7IvI38spvrLxmuJ/LjnmpaZEZ0zMXvLA6yLHn6Yi/2mk9Mbu7g0BwDp9ZY/HtvlgtZoKryAAAAAAoCzOmn/9osgxb/iSoxcAHNk2OmQZ4Fz82ZFn7vtVIxAAOs+Vf3P8xpXeCT+PiO3WvSFoPAA4zH3GmAQAB6/b3mWA6woA3rN6o57Xzly8eGUr7h9pgwMvuO9NRY7vR8RWTkkD14ESak8AMF8bOb4SUfnqd+Zs9zsDg1Jdv86+71Wp0vOXOcVfRsRO3dcDYxMA7MQ38Bxx3reP3vYorxoAAAAAoCwuqN6x0dOrnvp5ith+6JLrf8HbmhBg1wYAf/zxM/beL0XKRiAAdKarj1jwwcjpn9e9IWh9kC8Pcz8zFjP5tSsA+MzzQywDnFM6bMZF513SqvtHWmz/zy2fXimK70XEFk5LQ6/lUmphAPC3kdO/p0rtH7798Zf8wmCgExx03vLpOccHI9L/FxFbds+RmwWwgX1e8M2jt13k1QIAAAAAlMVZ82/4QOT85eFLjp9lgNsdABxiG7WcatPnnP6WW408AOhcOSJdffjCH6eIfS3lO3TdFgUAr9z9i0vemoZoRNJsDB2wZPlbUqX2zYi0idPS4DWgpEYUAMzx+xz5q1HJX/nux19yjQFAp9rvH38zedpjkw/JKT4QOWZHRO/4PmIBwIau7Ck+8q2jtv17rxQAAAAAoAxy5HT23Bt+ECneOVzJZ3V6ALDxbeQhjqH+9nPkc+acsc8njToA6HxXfWTBm1JK10bEpOaXARYeXK/uwAHAlalSzNj9wqV3tu7ejpbZ//z7312J/PWImOq0NPE6LqnUTOkcV+ZKvmDj3z/6X5dUd1njxDOevGfp77av1fo/nCM+HBEvHZ9HKQDYoP6c433fPmbb//EKAQAAAADK4PTjb9q+p9J/awy5us3oBQBHto3SLgN8c1756N5zlh642ogDgPHhmiMWHpNznN18AHCY+4wxCQAOXnc0A4DP1kuRP7r7F5d8obX3drTE/uffd3Al4pKImOy0NPWaKrU6z97TEekrRS4u+N6cl5jmnHHv0Itzz9PLHzwoIh+RI2ZFRGX8HN3YBAA7/N1iZY7KzG8fvfUtXh0AAAAAQBmcPf+G9+Scvx6DfvW6/he8rQkBdk0A8KnoiRlHLpr5MyMNAMaPHJGuOWLhdyLnAwa/v2hXAHAkM/m1KwA48PN136flDe43vz79i+e9t55zUTEcR9es8+89sBLxtRg0/Mc498sc+ZhJ/Wte/J0jtz9c+I9ucclhqfato7b9xreO2u6gIscrUuRTI+LBrusI+e5n/e+0x353p24AAAAAAMrik4v2+EZEfH7wEu34gnf8fmm87s/XKaejhP8AYPxJEbm3Z8JfReSH2nO/k9q352W8f1u/6fv7J/Z/2F1lCc2+YPn+ORf/E3WF/5yaDT4ddM4F7oWKiPh2qqQL3vy77b5frabCiYWI2UvumlQpNv7LiHx0jtil429txuC61qHvFD946rGV77m8utMqrwIAAAAAoEzOOfrqKcWk3msi4o0Dlxi9ZYBH1v4ozgKYh2s/f/XIM/b5M6MLAMavq484YVbk4psR0dP4LIB5mPuSsVgGeLhZmtu+DHB/zunde3zp3MtHdK9J683+/H3vyLX4ZkRMcWoa+izRcdLzf3giIl1UqfR87lt/t82vnUwY7HWe04FLHjggchwTkd7VmRdAAcA6D/3/eqYWB156xPZPG/gAAAAAQBmdvfD6l+ZaXBsR22/47OgFAEe2jZIsA5ziur418fZjFs9caWQBwPh21eEL56TI543uMsDtCgAOXnc0AoAp4vDpXzzviyO+16S1Zi+9f59cyd+NHBs5NU3ovBDg4ynH54v+4ozvHfPSR5xAqN+scx/cNeX8sZTyB6LuwHQZjE0AsJPeLVKKayure/b/xtytnjDSAQAAAIAyO3PBDa9PRb4yIjZd/5n1v+BtTQhw3AYAf1P0VvY+6tS9HjSiAKA7XH3EgnNTjk/Ue7NQ133GMHWbn8mvXQHAgZ+v+z4tF4tmfHHJgkb7Xsqszfa/4P6ZlcjfjYiNGwt9ODUNfkYpgxUp4uyVlQlfuPxjWz/pxEHzDj7n3hcXlZ7jI9JHoiOCgA1es7tvFsBlq1dPfNcP523+mNENAAAAAHSCs+beMDtS/kZE9K7/TCcsAzzmAcBHUk/sc+SimT8zkgCge+RqtXLd8jVfyxF/XM8NQ133GcPULe1Svk3UyxFfnXHRuX+emkgUSJm10f6fWz69kosfxbr/OkgIsIkrROn38J6IOGPVRmv+4fK/3mmVEwatc+AFD20b/bXjIsffRsTUcu+tZYAHcWt/7nuHGVEBAAAAgE5z1rwbDo/IX4j1vorthADg4G2ObBt5iGN4zqrIMWvOmTP/zwgCgO6z7PDq1L605keRY6+o+94kD3Nf0gXhwRRXPLF6s/3f/k/VpnJHEmZt8u4v3Ltzby1dkSO2aeJe2+lpus9Gdcd+naOypJKf+sJ35uy82omC9jnkrOVb1nrSx6MSR0V+4ZILZSEAuOG+pZ8XfWm/bx+/9QqjGAAAAADoRGfNv+F9kfO/RMTktY+MXgBwZNsYk1kAHy1S/qOjTt/nx0YOAHSvWz9w7LSnp0z894g4JOq+N8klCwAOXrfVAcAU8cOV/RP/ZN9/OOOJZvtcwqwN3nXh8pf19hdXRsRLGxqTTk/jr+OxcUdE/sxeD7/4a9VqKpwgGD2HnLV8y1pvfDIizYnSzQg4NgHA8r5b5F/0R+9+3zt6qweMXAAAAACgk5019/q3RiX+O3JsPsAPtg0ZOAQ4LgKAy4uiMvuos/a6zYgBAC4+9NCel26+85LI8Xf13Zs0GwAcyUx+7QoADvz8QPdpKeJfcjz9oRkXXdQ3kv6WMGux2Use2Cr31H4cEa9pYkw6Pc29lkfL/Smlz678/Xb/cHk19TspMLbX2lTkEyLS30VEbzn2SgBwHb/NteKt3z52+3uMVgAAAABgPDhn3o2vLP5/9u47Xorq/v/4+zN7L03BRhN7wRJbTNQYTdHEhgK2gC2xJAqKgqAoYl1FUZCi2LGXWCCxgIg1mnxNNImxJSZRbAlIRwULcO/d+Xz/QKMCt+zuzO7M7uv5ePj7/qK7M7Ofcz7nnNn93DPKTZO0VfS7AKa+APCdjOmAU6/Y4216CgAA+LoXTzr3dDeNkxQUvpNfXAWAzR27gEf5NvHfVn2fTfhut7WGWDZb9OZjVJhFaJ+b3lmrpqH1s5J2bmZtTBPly8t66o9NNqp9fe7qyWdstJTGAJKj1zWzt8nl7DJJhyZjwOQxwJL+m5P/+PEh679PDwUAAAAAAABQSa4c+sfOlqm9V+Y//fLfxf0Y4OKO74VdT5NW+XH+dwoajhx0+Y8W0EMAAMDq/Knf8ENMdpvk6zS1xmh6bRJ98WD5CgBV5wrP3HXi1ddGFWOqyyLSZ9zMtp+01hOS/bAF62KaKP97iXJYLrfr6oNw5DOnbbiIRgCSq8eEubtb6KMk/ai8V1L1BYCzMx78eMoZnfkrTwAAAAAAAAAVKZv1YM3lfxkq1whJreIuAGz0PS06R6y7AOYkXdL13VmX9Z3cN0fPAAAATXm+37CNa5S52+U/asE6o7EFUwHva26dFddjgBt7n78TmB35nZvGvxRlfKkui0CfSZ75ZMGs30p2cAvXxTRRvkpbABjK/ddBEFzw2Gk8vhJIk4Oumttb8rEubVmeK6jexwCbNN8V7jVtSLd/0RMBAAAAAAAAVLpxZ/95lzDQryVtVYWPAZ6tUEcPunKP39MTAABAS03q0yez0bpbDpfrIkk1jawzGl2DNL2eKfQxwHEVAK763800qaFVw0m7X3PNkqhjS3VZBHpcN+sGl07OY11MExXCS3KOx11+zhODNnyNgAMpHZMnzGhtufZnyPw8SWuU9uxVWwC4yF17P3ZG17/TAwEAAAAAAABUi+uyz675+fJ2owNXP0mZlr4vzQWALn8wCBpO5pG/AACgUH/sP/z75rrZpO1WXmmUvgCwuWNHUgD4sbudvdvN426OK6ZUlxVp/2tnnWumy/J+I0WAijdmeafCOyYbOH3g+tMJNFAZekyYtaGFwWjJjiztQFp1jwH+OFD406lDur1MrwMAAAAAAABQjcae89edpXCCpB+05PX5Pga4uB0GvbDrWfVVb5pp0KArdn+SFgcAAMV6NputaTN7+QCTLnZp7a+vW6J/DHBcBYDNvjeU7I5WQTB8pxvHzI8znlSWFWH/62cebW73FBRHCgAVb8xaHNt6dx+3vH1d9rkTNltGkIHK03PcnN3CjK6Ra7fSnLGqCgA/k4c9pp3R7f/oaQAAAAAAAACq3bhhf+nl5tdI2qSp18VdAPjN9xS9C+DnMl1pn310+aBrDlxOKwMAgCj96VfZdS2z/CJJp0rKFL4LoDezZir5Y4BfdtfA3W4e96dSxJHKsgL1uG72fq7wUUm1BR2AAsCYY9YiT+TCcOBTp280g+ACla3PJM98PmfeAHe/VFKHxEyt6X4MMMV/AAAAAAAAALCSK4e+tobVLOtn0mBJGzf2uhQ8BniJu93kNTXjh4zcZQ4tCwAA4vSnfsN2MNnZko6wRmux4noMcKQFgK/IffQuG6w1ybLZsFTxo7KsAD1u+GBnD/33ktoXfBAKAEsQt0Z9IPmQxwduOJmAAtWl9zULujXkGq6S1CcRU2t6CwCXWqBej57e9Rl6FQAAAAAAAACs6qZ+L9V+uk54hMyHStpp5f+e3AJAn2NmV7f22hv7j9plMS0JAABK6fl+wzbOyAabdKJWqcuKqwCwuWO3pADQnpZp9K43jX2qHHGjsixP+17z326ZIPizpA2LPhhFgDHHbBUNcpvQamltdsqwTp8QTKB69Rg/p4eZrpO0Wdmn1/Q9Bnh5KD90+pD1p9OTAAAAAAAAAKBpLrexZ/95nyCwX7h0sL54Sk3cjwG2VQ/clHpJT0t+f/D5xw/wqF8AAFBu/3fKOevU5uw4mR8h1/e+Wt4UupNfLAWAc+T6jTJ++643jnulnPGiqiwPfcbNbPtJK3tOpt0iWvHTVLHG7BteCmSnPDaw20sEEcCXY/pnVjNMpnMktS7b9JquAsB6d/V57Iyuj9CDAAAAAAAAACA/EwbOaN3Q7qP9ZN5H0qGS1vzGCyIsAPzme1Z7zFCuF8xssmd0/+CRu8+jhQAAQBL9ZcB5G4X1DYdJ1kfmezb+Sm9mzRRJ8eCHLk0zs8mfrb/m9L2z2YYkxIiqshbKZj14ofMHk8x1eGQHpQAw5phJkj5309lPnNrtepk5AQSwsv3Hzdkuk9Ft8oiKu/Mds9PzGOCczI+aNnh9Hp8OAAAAAAAAAEUaN+RPbYNWNbuG0o+++CF7D0kdYnwM8DIz/6sUPB+6/VHLP//jkKv2/piWAAAAafLiiWdvaJnghy79QO4/lLSdpOCr9U+huwA2+t8+kPx5N/0xMH/+vUUzX+87eXIuaXGhqqyF9r9+1mVynRtpwCgAjDdupj+5hcc9cepGbxM0AE3ZK+s1a6w1Z5ibXSipVUmn13QUAIYyO27a4C730FsAAAAAAAAAIHqT+kzKfNB90x08F27j7lvIbHMz20LuW0jqIqm2Bd//1klaINO7kr9rbu9KeleBz/i4dYdXstnt6og0AACoJP93yjnr1DTou4H5Fi7fIpBt7vItJG0sad1vvrrRH+c/MWmmLHxXbu/K/V0F9m7Oav7+/RuveD8NcaCqrAX2v27WsZLujCVgFAHGEbPlLl3YoUu3sZP7Wo6AAWipA66at2Mgv1Pyb5d0ik32Y4BdppOmDe56Kz0EAAAAAAAAAMpjUp9JmYVbrN9haab1mgq9bY17e8vlPm5oZcva5HKfz2/zg8XZrIVECgAA4Cuv/WLoGss61LYJQl+rPudrSFJtxj6zXP2ST2raL9v7+uynlfA5qShrxr7XfLBnEPgzklrHEjAKAKOO2cthmDnuydO7/oNAASjEd2/y2q6fz73ATcMl1ZRkik1uAaDL/bRpZ6x/PT0DAAAAAAAAAAAAAIDkoaKsCT1vmLlBfRi8JHnX2IJGAWBEMbN6yUcuaDXnsr/136WeIAEo1oHjZu+iwO6U9K3Yp9iEPgbYZGc+OqTLOHoDAAAAAAAAAAAAAADJREVZI/a6/b02rT+r/b1Mu8UaNAoAo4jbPwPZcY8N7PYSgQEQ9VzQbnHrUZINinWKTWYB4PnThnS9jF4AAAAAAAAAAAAAAEByBYRg9Vp/XnvD6or/ystpmJUD4jZu2Zp136X4D0Acnjths2WPDe52usuOlGlxbGN20uq73S+h+A8AAAAAAAAAAAAAgORjS7nVOODamYPc7OqSBY1dAAuJ2RJz/9X0QRv+hmAAKIUDr529iRp0r2R7xDJmR1jjbcW9efy0wV3PoMUBAAAAAAAAAAAAAEg+qslWcsB1s3/gHj4jU6uSBY4CwHy9bGGu7/RBG79DKACU0l5Zr2m31tzzZbpALdpFN3UFgNdMG9J1EC0NAAAAAAAAAAAAAEA6UE32Nftd98FGJv+bpE4lDRwFgC3/9K5r5Z8PnT6o+3J6LIByOWj8nIPc7B7J145szI74Ke8FzBY3TRvc5RSZ8bx5AAAAAAAAAAAAAABSIiAEK3z3ppdqA/P71ILiP5TFJ5KOmj5wg4EU/wEot2lD1p+WC4NdJf2j6VfmUUtX1vpuu3PXxV0GUPwHAAAAAAAAAAAAAEC6UAD4hY4NXa90155lOXleRR9VWZvxTwuD3R8/bYP76akAkuKJMzq//Xlt5vtm+k26P4n95rPFnU/MZi2kVQEAAAAAAAAAAAAASBceASxp/2s/OFjmD+UbDx4DXAp+d21tcPLU/t0+p6cCSOYw5XbQ1XPPdmmkVltYX57HAFvLXvTQZx936ftc1hpoSAAAAAAAAAAAAAAA0qfqCwD3vXFm9yCnlyTrUNbgUQC4smVm3n/6qRveRZoCSIODxs85yM3ukXztgsfsiDd5berM5nq07ZJFh0/ObldH6wEAAAAAAAAAAAAAkE5VXQDYZ9zMtkva2Aty7VT24FEA+PVPN8/lhz5+2oYvkKIA0uSAqz7YOlAwTdIWBY/ZJdgF0KUnP1+89ODnspsto9UAAAAAAAAAAAAAAEivoJo//JLWurbQ4r/I5VUf4hXcKvZ3k32P4j8AafT44A3ebKi3PST9OcFj9nOZduGhFP8BAAAAAAAAAAAAAJB+VVsAeMD1s/pI9ku6QKI83lC79IePndbtP4QCQFo9eVbX+Z+vtWwvSQ8k8PJeyNRlek/t3+1zWgoAAAAAAAAAAAAAgPSrykcA73P9fzbPeOZlSWslKoDV/RjgCe07dztjcl/LkZYAKoK79bh67uUmDctrzI54w8Avz2zmr3irup9OG7DJRzQOAAAAAAAAAAAAAACVoeoKAPfKek3rTh/8QdL3ExfA6iwAbHBp8BOnbXAd6QigEh149dzT5Rqnlu66G0MBoEuvt65t+MlDp224iBYBAAAAAAAAAAAAAKByVN0jgNt0mj1CERX/RS6vmj6vhOb4UB7uS/EfgEr22Oldrzb5kZLqop8LWuQNz/g+FP8BAAAAAAAAAAAAAFB5qmoHwP2v/2AfuT+hCAsfIw9g9ewC+KZb2POJUzd6mzQEUA0OuHrOgYHbbyS1jXYuaPJAb6k+8+PHzu48lxYAAAAAAAAAAAAAAKDyVE0BYI8JczqFmdxrktZPdBCrogDQ/1pbGxw4tX+3haQggGrSc/ycvUKzKZLaRzcXNOpdzzT8ePqgDWcReQAAAAAAAAAAAAAAKlPVPALYM7nrFUPxH/JtCP+9hW33ofgPQDV6dMj6zykMf+JS3I/jnZmp0T4U/wEAAAAAAAAAAAAAUNmqogDwgOtmHe/Sz1JxsXlt6udpa4qp7eu9x/RB6y0h9QBUq8fO6PaSAv+RS7OjmQtWMS+TC/ebOrDre0QbAAAAAAAAAAAAAIDKVvGPAD7w2oRJjIIAAIAASURBVNmb5Cx8TdJaqQliZT4G+I5lC7ud9FzWGkg7AJAOuOqDrQNlnlVju9MWVuM9L5ML95o6tNu/iTAAAAAAAAAAAAAAAJWvoncAzGY9yFl4u2Is/pNSuA9fiZnr2t0XdvsVxX8A8JXHB2/wpnKZvSTNjeiQH3sY9KD4DwAAAAAAAAAAAACA6lHROwDud92sISaNS10gK2gHQJdGPXHaBueQagCwegeOm7uDB3rWpPUKnwu0WB7u89gZ3V4iogAAAAAAAAAAAAAAVI+KLQDc57rZ2wYK/2ZS21QGMv1FgG6yM6af1u0q0gwAmnbg+PnfloXPSFq3gLlgiUz7PTa465+JJAAAAAAAAAAAAAAA1aUiHwHcZ5JnMgrvLFXxH1Zm9e72c4r/AKBlHhvS+dXAraekT/J862dhEBxE8R8AAAAAAAAAAAAAANWpIgsAlyyYfaakXUt5TqcvfanOXH2fGNjtXkIBAC336JAuL0hhT0mft/AtS13q/fjpnZ8negAAAAAAAAAAAAAAVKeKewTwgdfO2qrB9Go5dv+LNJjpfATwcpeOeOK0DR4htQCgMAdcPefAwO0RSTVNzAV1Jj9s2pD1pxExAAAAAAAAAAAAAACqV0XtAJjNepAzv6UiHv2bV01fIvYf/DyUelH8BwDFefz09R8z6eQm5oJ6M/Wh+A8AAAAAAAAAAAAAAFRUAeCLHWedJtkPadaS+1QeHvTkaRs8RSgAoHjTBne9VWbZ1fynBpcfPW1w1ylECQAAAAAAAAAAAAAAVMwjgA+4Yc6mHub+LmnNigloOh4DvNTND3ri1A2fJZ0AIFoHXj3vWoV+6hf/MzSz46YN7nIPkQEAAAAAAAAAAAAAAFKl7ADobh7mblGZi/+q0DIzO4TiPwCIx+cfdR4saZokd+kkiv8AAAAAAAAAAAAAAMDXVcQOgPtfO+sXMt1VcQH1RDdnXSg//MnTNnyUNAKA+Ox35dw1amrtgMcGd/kt0QAAAAAAAAAAAAAAAF+X+gLA/W+Zua6W278kda7IgCbzMcANMjvi8VO7PUgKAQAAAAAAAAAAAAAAAEB5pP8RwHXBKCWk+E8qYNO+9HGT+lP8BwAAAAAAAAAAAAAAAADlleodAPe7dub3zOxPSlghY/keA1yK5vQzHz9tw3GkDgAAAAAAAAAAAAAAAACUV2p3ANwr6zUW2E2qhF0MIxPv/oPmNoLiPwAAAAAAAAAAAAAAAABIhtQWz7XqNGuoXDtVfAslZI9GM7tx+sBuF5IyAAAAAAAAAAAAAAAAAJAMqSwA3O+6DzYy2QVJvT6vtF7i/uD3Fqx/KukCAAAAAAAAAAAAAAAAAMmRygJAk4+V1I7mKwX/a7is5ths1kJiAQAAAAAAAAAAAAAAAADJYWm74AOum/0DV/iHpF97pBfnZTv7e/UNNd9/ZnCXeaQKAAAAAAAAAAAAAAAAACRLqnYA7DPJM67wOqWwcLEo5fm0HypQD4r/AAAAAAAAAAAAAAAAACCZUlUA+Mn8WadK2jEN1+rp7hfLZXbw4wM2eJMUAQAAAAAAAAAAAAAAAIBkSs1Oej+9dtZ6NaY3Ja1XlcH10p3ZzPpNP7XbzaQHAAAAAAAAAAAAAAAAACRXanYArDG7XCkq/ksrk42l+A8AAAAAAAAAAAAAAAAAki8VBYAHXD9zR8l/WdUtldemfgU/gPiJNTuvP4y0AAAAAAAAAAAAAAAAAIDkS8cOgK4rJWXSFlxP1+X+u0193ZGT+1qOtAAAAAAAAAAAAAAAAACA5LOkX+B+18/sYW6PEWDlWVGY15k/yZh9b9qp3f5FSgAAAAAAAAAAAAAAAABAOiR6B8A+kzwjt1E0U6zc3U6g+A8AAAAAAAAAAAAAAAAA0iXRBYCLF37wK5N2oJm+kNemft7CQ/rlTwzs9luCCwAAAAAAAAAAAAAAAADpktgCwL2um7+mubI0Uax+t2bnDS4kDAAAAAAAAAAAAAAAAACQPoktAGyj5UMlrZ/2AHtyL22mhcGRk/tajjQAAAAAAAAAAAAAAAAAgPSxJF5Ur5tmd6xrCN+V1J4gr8QjOXODzPZ+/NRuz5MCAAAAAAAAAAAAAAAAAJBOidwBsC4XnqcKKf6LXF7VhN7Iv7WLKP4DAAAAAAAAAAAAAAAAgHRLXAFgzxtmbuCu/jRNXOzZDp3XH0UcAAAAAAAAAAAAAAAAACDdElcAWB/qEpPaVlKQPTmXMt9r646Z3NdydH0AAAAAAAAAAAAAAAAASDdL0sUccP0HW7v7PyTVEOgmeEFn9lDa/8nTNniKbg8AAAAAAAAAAAAAAAAA6ZesHQDdL1UFFv9FLq9qwhXVgmY+geI/AAAAAAAAAAAAAAAAAKgciSkA7HHDBzu7dDhNEot/rrnchxMGAAAAAAAAAAAAAAAAAKgciSkADMPwIiXskcRR8vKdul4WHD/5jI2W0t0BAAAAAAAAAAAAAAAAoHIkogBw3+tmfVuy3jRH9Ex+weOnrv9XIgEAAAAAAAAAAAAAAAAAlSVIyEVcoAre/S8WLYvWC2t23nAMwQIAAAAAAAAAAAAAAACAylP2orsDrp+5o7u9qiooAIz8Azb9XOGlCmznxwds8CbdHAAAAEiu3qMWtG8wX6OVfI36IFg7CLVmYFb75X8PPbeWyf73x1tuMvNv3g2EZssysqVf/u9cqCXy3HJ3fdKqxj+tybVaPvmcdRcTbQAA8uRu/S6es15dK3X0hvo1MoHaymvaSFKDhe0DWU0QysLgm3NzYP6pwqDe5WHoucUZq/k0yPlnn7fOfXbvORt/LDMnuAD69PHMFlv8vUPYxtcIVNNGuWAtD30NM7VaMZiEa+nr9wIuM/tqvHHZ5xZq+f8OaPaRJAWZMBc0ZBY3NNR9fMUVO3wsMeYAAIB0e+TsW9trediuoS6zRk1NZi25t3ML28qVMVmHr7/WPDQ396/uz2xxThZKUsZzDRboky9eudwtt6TBWi059KoTPibKANKs/AWAN8ya7K6fyQl43pqImbmdNX3gBuz+BwAAAJRQ71EL2rsHGyvQBh6EnQJ5R4VBRzfvJFcXmTpK6ihpLUlrSOoQ533Banz+xT+LJP9Qbh+a+SJ3+9DNF5kHH5qFCySfHeTCD5av8emc6YO6L6dlAQCV6Kjs7I41NQ2bmgebmtmm8nBTyTYyeUdJ67m0nknrqZmv9Jr/vs+/8X++eP2nkuZLWiDZQjdfaKEWynyWPJhpGc3MWG7mxHM3mUuxIJAuw4fP6BTWLO8mCzZ0tw1M4QYu6yjXembWacX44ut+Mb60a3xsyS/1mxmLPpG0WPLFblpsriUmfeyy+eY+291nWyaY7fWa07p1q1nZbPcltCQAAIjbE0PvWmPp8mATV8OGLtvQLNzYXV1NQSd372imjnKtpxX3aBlr7F5rtWsib/kay//3/3wsaYlJi01a4tJiyZbIw3kKfLa7zTGFs3OB5tQ0hHN63jDgI1oRQFKUtQBwvxv+u7158JqkgALAAnij//7F9l02+MHkvpajiwMAAADR6XPd/DWXfWZbubx7IN9EgW3sbhtL2kTSRpLWKcuFxXs/Nc+kOS7NkjRb8v+Y2btu9k5NXat3Hzq3wyJ6BgAgyY7Nzt7YasMdzH0Hd9tJ0rckbS5pzdVNqoV8f2ctmai9pa//hjqTZkqaIbc3LfA3PfS3wkzNW7efv8FMWhcovWz2vTaf6PPNM8psaTnf0mVbmHxLl28uaUNJbfIfJxp7vef5+vxuHqzxU3wu0yy5zzXpHVcww9zfCoLwrUym/YxsdrNl9AQAANASDw2+fe2cZ7YOQttS8q0k7y7ZlpJvqa99l9ro2uer4rxG1jveyJqo8WIKa+Icqz9PY4WGvlTSHH35nanbDMnfUqAZdTWt32ZXQQClVNYCwP2vn3W/pCPyvI8l4E3PNctCD3Z+cmC3f9O9AQAAgML0GLVowyDTsF3gtrVk28i1lcy30ooivyTdVikB91Mfr/hR0N51C98OFPxTQfjGkk8++9dz/DAIACix47NzNvWahj1d2t1cO7lsB0lr51sYU1ihTjMTdWEFgI283iVpsVyvuenVwO3VnIevfarP/jE5u10dPQEoXp8+ntlou39vUSPbUaFv79L2knbUigLizKrFc17EONHYeyLdBXCV67Q87yW+OH4oaabc3pJ8hpn9O2cNr+aWt3519OhtPqHnAABQnbLZbLD9wq22UpDb0Vw7SdpB8h214g+nV1qnFLQ7X8wFgE2dp9ECwCbXXCZfIGmGZG+ZbEYY5v5Ra/7K/tefyh9zAYhc2X6p2v+6mVvK7N+SMi24Nybgzd+rf/k/z3vitA1H0rUBAACA5mWzHvyl/cItg5zvbKadpf/90ykFt1WN3hckRE7SuzL/u0J7Q4H/IxfYq4+d0XEGjzIEAESh300v1dYt6Ppdd33fpT204p9uxc/WHnEB4BeTdfQFgKtTJ+lvgfuLkv5oNfrTxPM2nUNvAZp3TvatzRtyDbuZ2W4u39Vk31ETj+iVJMujALCw3E9kAWBjxwxlesvcXg7lLwfS3+rrl78yatQui+ldAABUnkdOv7dLg3Lf85zvJrPdA2lXlzo0ue5oZt3U6NqnySLAfAsAV3Mez/968y40/OY5Fkp6RdIrgekVhf7Kn7vMn5HNZkN6FoBCle2Xqv2um3Wjmfq3YJwn6C27V5dkb7Rf+PF3+CtfAAAAYPV6jZnd0ax2Dw99D5P28BXFfmum9LYqrfdSiyX9TeZ/9VAv1YS5lx4evv779E4AQEscN+K/W4TKHBC49nfTTyRfI/rZOqYCwK/9n2geM9zi3cbec+n3kj9lmfCZW87bfB49CdUum3225pNct50DhT8OpR+baXdJHQvK/Rh3ASxJAWAe9xOW5w2JSe6ud8z0JzN/NpPJPZfN7szaHwCAFJo05M4NgjCzt9z3krSXZFt8tQzwSHbnK+wxwPkX5zW302B+5ymoAHB15/lU8lfN9H+h+x8alrX548G3/YrdlQFEfD8Ysf1ven995WreldSmBfeIBL1l9+ouC370+KndnqdbAwAAACv0GrNwG3m4p6Q9tWJXoK0r5LaqqXuDNFoo6UV3/cEU/N/6a6/7t4n9rZ4eDADol53dblkm/IkHdoBc+8u15Tdn35ZNgHEXADZ/jtgeA5zv9bjM/+6up83t8aDrgucm9t+FORdVwO2s7L929jDYV9KPJf1A8vbFruzjLwDMb6Gf7+POV/8ZCj2Ht/T1/5H8OffgWSl47rLLvvUf+icAAMnzyNm3tl++rPU+gewASXtL6t5UcV5+BYCrXzsUVgDY1HnyfQxwtAWAqxwnv50GGyS9Yqb/U6jfW12r5w+49cQP6ZkAorrfjMT+139wheTDWnh/SNBbcJ/ubjc/MXCDfnRpAAAAVLNDr5zbuUGZfWS+r1z7Stqggm+tKvl+6jNJL7rp/4JQf2hdu+zFyWdstJQeDgDVoU92/ppta+oPCs1+Zu4H6stHcK62eC6+wphodwFMTAHgyj6W+XSFwSNtffn0a7Ldl9ADUSnOOef1dRpqW+3rgfUw9wMkdW0uh9JeANjyc5S1AHBl77nriUzGHg4CezbLE44AACib3wy5dzvPWQ9Z2EOuH0hq1ey6JMICwBWvKWcBYFPnybcAcDXnKeBRw1+LSSi3v1sQPu5uj36yoNMLfSf3zdFrARR6v1m0fW56Z61MrtV/JevQwvtDgt7c8VzzgiC37bQBm3xElwYAAEA16ZP1VsvXnP9jebCv5Pu6tJPKUo1HAWDMlkn+Bzd7wnLBE1PPWe8Nej8AVJZjsos6ZGqX9wzdf2bSAZLaNjfXJW0XwJQWAH5dncmfdtl9rcK2D1+f7fwpPRNpMyz7xsa5XOaw0HSYSXuYlMlnAR13AWBh56j4AsCvWyJpeuD2SFBbPz2b3fljejUAAPH6zWn37aLAD3e3n8l8y6bXSY0sGrxlxXkFFwD+7+UtK85ryb3iKucpoDgvigLAllxvI+dZJGm6mU/N1Nc+se/E/ovpzUB1K/mvVAdcP2u4SyPzvEck8E3fqx//+Gkb3kl3BgAAQDU4ZPxHa+dyDT0kP1iuHpI6VOGtVbXfS82S7Em38ImwodVT04avzR9DAUAK9ZnkmTZvztrfg8wJcu9pUpt85rp0FQB+7Tq98NVD3EWAX/th6TOXHglc96rrwid5TDCSbEj2rc0zYXi4Sz+TtOvKXb9FxbnF5I3HnZclKADM434i5gLAr7+nXu7PKfCHGxpyky+//DsL6O0AAETj/tPv39VCHWEWHi5p06J3u2vhLoAtKwBs5L/lUQDYkvvF5nYaLPp6V3df2WwBYJ7X+9Xr62X6v8Dt0VwmN/nAawbNopcD1aekv1Ltdft7bVp/Xvu+TF3yvEck8I3H6y+7L9zg+9mshXRnAAAAVKqDxy7aKJfL9TbpYJn2klRbxbdW4n7qG+olf05uD9a00iMPDuk0h4wBgGQ7esTM7iY7wcyOlbRBXrNpEY8BjrsAsPlzJH8XwEZ+vJon9zssyNw88YKN36EHIwmGZN9YN8jVHCnTLyTfvei8LDZvEvQY4IIfd170LoAe8Wf+xjHrZXrMXXfMn183beJEipIBAMjXpNMnbezK/dxcv5C0zcrzd8t2u2tkzo/wMcDJLQDM83obu68s7jHAza/rXKGk35vrniCs/S07AwLVo6S/Uu1//QcnSH5bnvfbBL6paLn2fPy0DV+gKwMAAKDSHDpy1nr1rWr7BG5Hu/QDJabKLhG3V9xPrV4osxcV+sOBhQ8+fHYXihQAICF+ceXcNVTnfTz0X8p8tfN63AWA+c3WXtDsXqEFgF87mT/tFkwMOi94hF0BUWr9+r1Uu2a3NXtYzo6T+UGSWkeWl8XmTYIKAFt+jsQ+Bri5H8EXyPw+ye8YMeLbr5AZAAA0btKQSW09533Nw+Nl+pGkoMn1QIvWSfEWAK54Tb4FgE2dp/DivOILAFdznrgLAL95jmUmTfXAfr1k/sLpfSdn68gKoHKVuABw1muSdszzfpvAN3YMt3unn7bBMXRjAAAAVIo+42a2XZ5rc7CbHy33/SVrxe1VHrifWtnf3HRPzv3+x87uPJcMA4DS+8WI2duGppNNOk7SWs1NWM2O8al+DHDyCwBXvMdbEprZZn5Npja46Ybhm3xET0ecTs++s3EmrO8n6VeSusaSlyoyL/MoACzsHBQANnK21yVNrKnJ3JnNbvcp2QIAwAq/Oe3ebXKZoL9W3IetI8/38bxNrZMaewxwy4rziip2y2MXwJbcK65yngKK86IoAGzJ9Ta30+A3jrH6c3xorvul8Ib9bzz9H2QJUHlK9gvVfjfM+om5nsnjnpPgN+1zy2nr6YM25PntAAAASL1eY+b/QNKJkg6T1D6d9wYUACY40jmZPe2hft1mafjQ5GxnfhwEgBj1u8lrP18491B3P8WkH686dFdrAeDXrtMLXz2UeRfAlU/7qaTba9yuuiG7ybv0fkQlm/Xgk/Df+7qCUyT1lJQpNC+bz4MIigA97rwsQQFgHvcTcRcAFjC+fxSYbm4I7drLLtthJhkEAKhGz2afrZn30bxDTTpF0l7fnE692fm7+ALAptZq+RYANvLfPMLrVSGPAS6sOC+/AsCmzpNvAeDqz2PSc6Hr2tZdFz2ydzbbQPYAlaFkv1AdcP2sKS71yvO+k+A3/u7s46ducDFdGAAAAGm1/7jF69bk6o4NLDxJsm+l/76AAsCURPtzSQ8FplseHtrx9zJzshHV6uDLF402adMoBxrL821BbJ8uLGisWPl6QtMnvxne+Vf0lpb5RXZu57Amd6pk/SR1bbwNiigAXOntSSsAbP4cqX8M8Cqn/eL4OZcmeaARt1yw6b/IBhRqyJCZbbXm0uNkOsPk3RvreGnfBTDuxwAX/LjzoncB9Ig/c97je73JfhuajRsxYvu/klGIyqiz/7qbBRoa/zo2LCpvVntNHt0tb0uvx+U+ZNT3j6DnrN51w36/Ryb0wc3OSS38g5FgpX7T0rlo9e3b+LGCQvpzuLrzeLP92E2PHD/2wF/TW1rmnoH3dKgNak9y84Hm2qSx7tBc8diq/c3zm58jfAxwtAWAjedD/gWAeV5vY/eVcT8G2FsSe5dcsxT4jQpb3bz/jafMJ5sQtef7X3ChmbZv0boibGoe+qovF7YGa/64ha1/wmbWZfnNxe7hY7vdPO6OQuNdU4pG3ffGmd091EF074gW2K7/1tTalUQCAAAAaXTgmPk/CuT9FC4/XKY2iSici4Sr7J/FVFVFgAVqJ+mY0HVM7ysXvqkrF0zM1Le+86FzOywiNKg6pn3d9e3mhpW4R854ChqKuZ6vnS/UQjpK835++cwtPZc5M1R4nGRtkzxh5TtbJ2B2T4uMSUdZqCNOuvj9BygERL5OHf6v9VrX2gDp89MkdSYiaR3r4hjf8zpmrbsfae5HXnj+a3+Ua9Qll+00lR6BYgVBuIEr6PP1fxcqjt05i8shz/OYxeV9kwW/Ib2mif6Us43dvE/+beB5tkRTbe0tf/M3+nzTV1D8XOIrOo8bO0u3wH2D79s08GCQS79yqYO5Nd4rChpeVn1Tqe6PCjtP/h+y8fNEuaYxeYF/XBb78sm0odwuldVf8MQpV08O5Vf2uGHw62QXIuyKP5brJ6ubMwodT7yA/9L0HNVcwhQ2FnghrwhsdjHxLkkBYJDTIFmMf9RddTfvNmxq/26fEwkAAACkRY8JM1oH9WsdY64hkrZv0a0dxWyI39Zyjc1lll/We9SC38p94pRzOv+BsAAxKNOYTrFXvI65ZM6uyvjZntNhimgjnMLbrOxFJxWjyLwJviwE7Jd9//6M7AIeDYymDDnvzQ2sVsMU6peS1iDPmJ8iG7rd9pQ05cLzXn9R7udfMnKnZwgOgEq8cSpVAVNBx1rt2/jCr1i/HvSb7hkLz5X7zz2Peo/Y1xNfNO3qzxNRu5skX3GsaD5P89eVrKLH4uPYyD10a8l+HsiOeWLANQ8HoY/Y98ZBr5BtSMI8t/J7iykcjP59jX+ectzDxV4AuNf499aW2fF05Iga3PTHxwd0e0CnET8AAAAkX48JczrV1NWc4nU+QFIXIoJEMrWR6xiZHdN71MK/m8LxdW0X3zt9UPflBAdYNWHKWWRFAUQy/HzEnL3c/ELJ926u6Wiz8udQbG3Q9GkDmY7OyX/W7+L3r8t55tJbsxt9SPvjS4PP/ef6VhucI6mfu9pYwnKoagv0UlyT0UQb7C6zpy8877VnAwXnZy/b4U9kIFDlY12CBtzqLGBCoe4ffP+2Cu08WXikpEwyFwDVXOAZfxxLsDOiyf3Q0PyQJ0+5+tHAfMQ+1w/+K9kH8jMd1xR7AWDrVjXHSVqTeSESYZALB8uM6AAAACDRDhq/cNsglxvsdfYLlzf5KEC+HEQh4us3voPLbqtduvblvUctuK4+13Dj9HPXX0DEQa4l4/Utx5dLcThq5KzvW5gZ4fKflvVCKqF5v/YZkvnje2RBbiVpSMZyx/e7+P3LWq9Tf+01FNhXtdPPfbdL0Kp+mKST5Wpb6HESmTffSJu07EpaugG1/G1me4fyP1543uvTPAgvGDHi2+xqg+pYi7Msroj1Yun6W1ILmKrb/Wfcv1WYs4vl1re4py5GWSxa/CPLy7jbXZGnjeDRyP87RGIHaZPUK3Tr9eSAqx8ztxH73jDoRbIR8c971VGoF5d4H8vrbjLrT0+NbOV192MDN36JQAAAACCpeo6dt1PPK+f/xnLhP1zWTyr8R720LtoTcT+KKHSRdEltpuY/vUctuOnQUQu3JSQAqtXRl8z+7tGXzp5mYfAnlbv4rwyzddyvrxLrSBqz/KOav/fLvrsf4ag+Q4e+tsbgC9+8KGhV/45cQ1Yu/nPWsBU0NsbRmJEe8yALg79deN6rtw0f/nInWh7F5Y3FkGeJzyGUbXy26PuE0b+S7L7T7ut2/+mTb/Rc8IbJjlQztR3N9hWLuk/GO0Z5ifpjqdY08d8n2jfPYxG1ietAl7/wxMlXP/xk/6u7k5lILivTe5MzR8a6A+B+N36wtyR+JIlGfeg1FxMGAAAAJNFBYxZ8V6YL5N77iz8Xju7+iF/RUV5tJfXLyU/sPWrhbxXkLp1yVpfXCQtQuWM6O1J85aiRs7dRGIyU/JDoy3Ma7xCF73aT7t2x0iyPNususyf6Z9+bZDU1Z9x4/kYfEL3Kls168LHePL7BbYRJ3UinKMY65rNoBvfghNaBHXLh+a+d968335w4eXLfHGEBWCOlNbaNj/nR7ujneZe9Ku+nj9KvpF+f8ut1glathkka6FK7VPXHJl8e/Q6T6Xm8dcs+e5J3RjTTwTL1ePKUq6+tbR2O2PuqIR8zXqPYfMg/t4rL/XjeF933W8WKdQdAc51M543MbU8O7PoeYQAAAECS9By3cLeeY+ZPNflfzf1g8RsT0qr5nhtI3kdh8GrvK+Y/2Pvy+TsTNJAw5Tkmu7HFr0925rpHXzr7agvtdZMfunID0Qbpy6HY2qzAj+Kmvp5r+NfJF783pM8kz9AnKtOQ7Fv7LPYZr5jbrSZ1S1sOVe1Yl+I7unx3vAmldcx1/XZbbf3nCy547XtkLaoR67ryD7ge4bGS0Hbl2+ky/Z7NPltz3+DfnBq0ajVD0jA1W/yX1N3uLN7+Zkk+YPzHKvPOiK0kP6N+uc14YsBVA57NZmvIXHCjk5xriq0AcN9r/ttN0iHVeJMZw0J5eSi7jIQEAABAUvQaN2e7nmPmT1UY/llSz2JX8HyBjFR9U2B2qILgb71GL5zSe9SCXQgJKl16H5fKj0r56neT1x41Yu7A2pqaGZINklSb4NG4EmaUBOZN3EH+xjHbuzRu3X+9/3y/7HvbkIGV47Tsv7sNzs64X66nJO2Y1vmp+C5uaczLVK8piriu7wah/pQ977WJw4f/az2yGBW3FmdZXBHrxdL1t6QWMFW2+wZN/uncjxe8IvdrJa23ujhSLFrseSzCMBX/xyNfHSJtg7RJUkdzXVc/b+1XnxwwYT8yGNF2r8ov1ItLbAWAQSZzopL8JWGqVvc28clTN5hJIAAAAFBuPcct3KDnmPm3eph5TSsK/7DqAp770eqItJmrl2R/6T1q4W97j1qwNX0fQJodc9mcHp8tmPuamU+QtG6lTy7pLWytSLub6ZX+l7w7lN0A0y2bfbZmcHbG4BoP/iX3I/LOGwpUKmhsTGWhYuDSSa2Cun9kz3/9QHoDWp4HFkOepbvYF3GOzzEU5xn9q5zuOm3SZveePvlBD+xpKdg+9r5iUfbJit/tLvK+Hf994krFohZ7Xm9nYfjEkydfdd9jAyd0IqNRflam9yZjjoylAHCvrNfI/CQ6VySWem395YQBAAAA5bTPFR+u1XPs/JHy8C1Jv5RUuh9n+Q4RyWaSDpPsH71GL7rxsMsWrE9IgPSP6dVUvHVMdtaGR1029yF3PebStknpEIUXofCDeVryZqXXt5Hblev96/0/nJR9ZyuimT6nX/DW9z7WBi/JfbykDkSkJHnDfBbP+N5V7o9mz339xqFDX1uDGAGskdIS20QXMBn9amUrHvc7eWimJviHzA6tqP5opWrfKHdGLMW6yiI8T5l2RmzkUkw6srY+fOPJ/uOPYvxGvvngJc7JeN5nkZ+vELEUALbqNLuHXBvSaSPp9tc/0X/TOUQCAAAA5bBX1mt6XTl/UJuahrflGi5XO6KCSr4BK+KWv8bc+zfU2IzeVywc0WPCIn74BgkT4zEpgCheNuvBUSPmDgxrMm/I/RDFHFPaoPw5FFubRfhRXNojsOCV/he/O1DOfnBp0C87u93gi2aMtYz+KNdOSZwzijlm1Y51Kc6+fHe88dX/O3Pz/mu21isXXPDa98h0VDrWdeUfcNPzaNdkFTCl1a8HPfTdOR8t+ovLrjR99V1rZe12Z/GOFZbkA1bDzoir1cnM7n36lPFTnjl53AaM70jmAFDZjxeO6xHAJ1T7TWZEA+enuaBmNAkMAACAcug1bsGP26+54GU3XS2pIxEBWmQNmc6vXepvH3zFgv7ZrAeEBNUoOT8iUj+0OkdcMW+nN2vmvqAVj/vtEG8boKVdNJk/vpelcKudZBP6j3j/6VMvfXcTOklyDc7O2KudPn1d8jPkSsXjm73kacOupMldI7To3N2DUM9fdN7rF2ezz9aQ9Uh13rAsroj1YjpPSuf70l1D71rj3sEPjrUg/LNMO+cXrrQVi0Y5vpVptzvL/wVeNXnSxG5nrl6h7I0nTxl/oos/6kKh3auyC/XiEvkPEfvdMLezmfekV0bSga598pSu84kDAAAASqn3qAXdeo6d92sP/VmXdijVeSk8qLr70UrvN53c7MaX2y36S88rF32fDglyDUlwfPa9NkddOmdUkAtfkmk35rp484C8KTrgP2nI2ev9Ln7vOIKRLGef/e/2p1/01g2S/06uLSLNGyPPyj2gRjfWVcwNSY3kF6ph3T9ksy93o69g9XlgEeVNFd7Uo4B+E0NxXhF/lMI9ZsvcO+TBA2oa1viH5GdITf3hRAly35J6sKTudhfjY7Qtvgb2SM5RcLHoWua6+elTrn7siZOv7MwIjnLd21TbNUVeABh4w88l1dKpih76l3jr8EriAAAAgFL57k1e23PM/NPDjP9LbkeLb5uLWc8TAnzZFb4bhP7Hg0ctvOvA0fO7EhCAkbxcjrhs7vbLa9u+INPZkgrcxSjZO1nl+6Mos3Uq8qyDSXf0v+T9ycdn31ubiJXfwOyM3evaBX8z6eS8K15Qlvmpssa68s1D7vq+6jOvZs9/ZS96IcihuI+JQmNb3uI9o6usxqQhk9b99eDf3uTu013atLTtE29xnhfc3tW8w2SyHqMdWV+xRhdQBwSq+fuTA8btx5iOpjqOF92Ho3qfpfreKvICwNB0PB01gonZddUTJ270IZEAAABAKRw0dt4eXT+Z/6qkq/TFowATei8IJKivtfiW31z6RY0H/+41atHgvbLO48NQjQkT+ZjObmwt02eSZ44aOfecQP43yb9dzmtJd5tV5w/mnudHia3N3H/W2vSXftn3v8PYWx7Z7ButBmVnjAzkz8vVnRxifkrF2GXRtoFLndyDJ7LnvXoyUQZ5hnTNZxZh2yWrgCnJ7hny4HH1nnlLUr+WfvbK2u3O4h0rIt+5MspHI1Pk+DWdLbTHnjp5fHZSn0kZxnyUPy+s5NfkJbqmSAsA973xv7uYR/yIsOp8bNXiXG3dOJIWAAAAcdvvyrlr9Bw7/2pz+z+TfYuIALFay+TjO7T98K8HX7nwe4QDla6wAgh2JYnSL0bM3axmxtzn5H65pFbxtBmi7KLFt0Ecf62emLzsbuZ/6n/xuwPpNKU1MDvjWx+p9kVzHy5X6n+08zz7phfdxVM6t1m52iDx800rl92QPe+1mycMnNGaEQKpGuuMdV1q56cWj8lJLTqqrnuyu4Y+2PnXgx982Fx3SLZe1HFMXrFbKdYFZdrtzvJ/QbIfo122YtGMSRetu96sp588bVQ3Rny0rKtW76N8CxVpAaB5cAI9MZLh+uan+2+xmDgAAAAgTgddOW+fVhb8Xa5BimF38IJWwjRLNd2PVnG/8W97qD/1Hr3w2j5XfLgWHRXkGuJw1Mg5xzUEek3SDyp6nrBk5wF5E7nWJptwcva9X/fLzm5HOOJ3+oVvnhTIX5Jr55LljZFn5R5QoxvrKvqG5MQPO3z+XDb7Mj9ic39dUH/3mPMSlX5PFkNxXuS7qVXnHH7vkId7ZRr0uqSDE32PY0k9WDXsjLjSeSy+OHokh450Z8S9Mg21rz518lX7M6IjRYNcaq4psh/5ekyY0dpcR9GRilZvObuaMAAAACAuh4z/aO2eY+bfamZPStqMiMSFr+fRzP2469TlFv6r9+hFfQgHgKj0GTez7ZGXzb3V3e5wqX30Z0j2Tlb5/ijKbJ2+FZOvaN6jzZb/8cQR77OWjcmwYe+sNfiiNx+Q2US52pI3FZA3FSMZ89AXMd1d9ZnnR5z/Snd6JZwcQkLaq7zFe1a1XWXSgElr/nrwgze7h1MkdSmufcq0210B11X4zpU8IjeaXE5QX7GWncelTqZw2tP9x53OGI8o/tgh+vdZLOcrhcgKAL22zYGS1qGDFu2B6YM2nEUYAAAAEIeeY+cf2JCrf0PSL5W2b0f4PhmJ7GtF3/KvL/dJvUYtmnbYqEUbEnxUeMJEPqZ7wl5fbkePmN8983ntC1/M84mU7jaozh/MPc+P4qVrjW/XhP7SgOy7+zEWR2tI9s3dlrUNX3FZX3KoGse6ypDvjjdFtMFmOQ+ez5772neIOqo2z5C6ezeP8FjF95H0f+F39xkP7lRX2+qvLp0YRRwra7c7i3esiHznykh3u6uq+8Y8rzcj01VPnTLuhmez2RrGZ5Q+L6zk1+QluKboCgDdjkpku6VsoRxIY0lUAAAARK33qAXte46dN1GuRyXxiCIgYUx+YIP8771HLTyOaKCSFFYAwa4khThy5JyfhUH4kkw7lb7NEGUXLb4N4vhr9cTm0Lqh2WOnXPz+qXSiaJyefWtQqOB5eWXvFO559ncvOm1SOrdZudogdfNNZ5k9e/G5r+7NKILEj3XGui7Ji8HCd1OLa/Cu5gKmlvn14IdOsVzwosy3abwNrbR9JcI2SdbjoMu0210Bj4BP9mO0k1Msaq6Tc3PXeuzZwePXZh6o/DmusLdV56N8CxVJAWDvWxe0d6knHbdoTz926oavEgYAAABEqde4BT8OM/6a3E5SCr5t4wvnqrkfpd+sam1Jd/QavXDKgaPnd6XzglxDS+yV9ZqjLpt7ldwmS+qwaptVwWO4LNl5QN7E3nAZl1978sXvXdVnkmeIa2GGDn1tjdMvmvFruV0tV23Z88bIs3LnZXRjXbVs5e4d3Gx69vxXD6MfVfPUZRHlTTR5iUq/J4uhOC/y3dQqdw6fNGzSWvcMfnCyS9fLvE3kbVKK6dOSerCk7owYY9+3+OKY/J0Rfd9wmb/wTL/RWzDCI8GDXCquKZICwOXLlh9qUls6UJFNHYZjiAIAAACi0mfczLYHjZk3zkP/nVTZO3gkF1/Po4B7Q1evjAdv9Bq94CiiAaApR1/+n3W61s573KXTSzxSpeSYzNaVumJq5PWnd/zX+w8NyL6xJhHNz5Ds21vWr9nuBUlHkzdVlzdpXTEn9Zit5TYpe+5rJ9JDyUtyCNXQFwva7a4Cusq9pz+yY93y2pck+1l87VOm3e4KuK7Cd66suMfaJvtYCQi3N/7vt/Gg5sWn+o35ASN4NSr+jx080fleOtE8AtiMHyWKH+z+/vhpGz1JJAAAABCF3lfO23FprvXfTDYksnV/su4FgQT1tVi+YljX3O7tPWrBA4eM/2htGgQVOTiXaUyvlAKII0Yu2CoMW70o6adpu3Yv2evT8uO2VU6bWXnzzKVeobV77uTs250Zm1tm4IVvHRTKX3LXDunt75buvKmw+SnNS5WI2iwj08Tsua8fT+BRDRi7Eny/VbXHitfdgx85Jgz8BUlbxvnZ0/5o15KOFV97TGjyd7tL5hgb2T20FfXZO1oQPPF0/3EHMO5DCc8xL/Ca4s7pon8I7DFhTifJ90nV2iaZ/XKszFgnAwAAoGg9x847NgzsBZm2JRpA6m8W+4Z1udd6XfEhfwGLqrHiyxHL8/UtyqeKidFRl87/gXnuecm2iq8N4ns9ou+inufBvNQXWNpR5Luy4IV+I2bwCKlmDLrwrdMtsEfctVb1zjct7+9eziRP6dhUxfOTyfyW7LmvHclIg0TmjbGuS/KASwFTMj2bfbbm7iEPXyHzeyS1yz8sSX20a3IWE4neGdGS0Peroli0ncwfeerksYczJ1TmHJesexEr03ubEpTx3ZLCmrCvpBo6bFFmr9Vx8X2EAQAAAMU46PKP1+k5dv6DcrtTrnZp/ix84Zyge1n6TRJsbBY+e/Cohef1meQZOjTSlmuM6dE6YuS8/qGFv5PUqeVtUPmP4Ur6ZyBvStlwJkmbB2Hw+1MvmbEdo8aqBg6c0XrgRTPulNlVciV2beFWAXljqc0hxrriZWS6K3v+qz0Zdapt6rIY8sCqJW/Qwq4Q647XFuc4HWUBU+nce+bUjrOWLH5G0rCWfEaPN1wln/fL80d31fF4YF/tIZJaLBplX2lSK5Puf+qUcUcz6KP4nLAK+zxNCyK4tr50uOK4/JrJfberIxIAAAAoVO/R8/a0VstfletQopG8FT8QgRqXLl3+3qKneo5buAHhAKpPNuvBESPnjJX7jZJqy39FlfUYT4pW0rdiav71tkHOM384OfvubkT3K6ef+24XradnTTqWvCHPStdmVfs46Vq5Jl987ms/pfeRZ8lTPY9kpy/G235eyLFS1FXuOfPhb+XC8M9y/aj07VOC3e4smlz3gj+GxdyvC/uQpdntrgzHSkDuNf/UB5OkGnO/+6mTx57EaF4tkvjHDulb1xRVALjfDXM7y31POmNRPq218CbCAAAAgMLumN16Xjl/eBjYc3LbuMruBYEkJWOpTrR3UO+v9h61aF9iDsb0FGRsRPqMm9n2X7VzJ8vtjGodNQt/fdUWnZSvzSxRebauTE+ekn1vdwZcafD5b23rteGL5vp+y9uYHKqksZE1RznawNq4+SOXDH+F39LA3TASMs9Vw7GicfeQRw7wUH+SfPNV+3z8n73CHu0a71hhX10vj9Eu9jwWYeiKOlZg0k3PnDJ2MHMAWtLpvMQ55gXmfZw5XVQBoIX1B0slfERABf7QZ657pw3Y5COSEgAAAPnqMWFRh4PGLXxIppGSaogIUC33oNZR8um9Ry0cLndKYlGRCZPvDyqe/sRu1C+yczsHS2ufleywUp6XIpT0pZLneTBPQK6XyFpu/kT/S97/fjV3rdOzb/0orLE/Sr4pidbSPLCi88YrI4cSddkpnZ/WCAObOuL817Ym65CYvDHWdUkecClgKr+7Bj98qqRHJVsrurAk9dGuyVlMJGZnxIhOm+zHaCe3WPQbB3aN/93JYwcxP1TOHJese5HKerxwcY8AtuAwOmlxwiCYSBQAAACQr96jFmwd1DW8YO4HV+pn5AvnBN3L0m+SKCNpZO/Ri6YcMv6jtengSHquMaYXps/l87esq9Xzkr5XfBtUzmO40voZyJtSNtwqx+wQePjUKZe89+NqHEtOv/Ctw93tCbnWSd18YxWQN1YROcRYV7x1cu7Ts9mXOrLCqYapy8gbxDd2r7LbcrwTTbILmOL4vG53n/FI1syuVcEbIVl0n8eS0R/L80d3VhV57as9RFKLRa3kY4av+Oeq35089pfMHcyblTOWxHNNBRcA7nPTO2tJ/hM6WlH+9uSAbn8jDAAAAMhHz7Hzjwgz/pLJvkU00oKv5xHfkBDW5f7c64pF2xEKoLIceem8PYIw/LOk7sm9ysp6jCc/vqdvxeT5vXYNd59yyiVvf7eaYnr6hW+f6YFNltSGvEF524zHSUvaTPU1k27q91ItPZE8I4eQzL5oBTWjF9IXEthVbup3U+3dQx65010XJad9SrDbnUWT616i9q6s3e7KcKzE5J7l89/MpZue6T+uFyN7Jc9DlsD7xnStawouAAzCVj0ltaLLFtHZTez+BwAAgBbbK+s1Pa+cN1au+yWtWdXB4Ptk4Ou2MvMXD75y4aGEAozpLZfkIpSjLpu3r5s/KWldOkjhbRbvrihGG6QzzzrIg8cHjHh/28pvLLfTsjNGhuZjmt8CtLk2I4fIM9YcxbXBN06895xONdfSGABjfXkHsWrepW31Jg2YtGa7Nbo8KtkvkhTH8he7laLvs9td8s5jEYbOovo8NTJ/4Jn+Y37ELIKocz+e91nJc7rwRwCHweF0oqJ8mmloez9hAAAAQEv0HrWg/ZprLnhIZmcQDaCE8vq+q6w/v67poX7be9SCLI2GlCRMCzPK0pGBETpi5NyeoTRF0hppu3aKViLKIYuyDaw8bZDs34E7eph76rQR729WsV3J3QZd/M54k4YzD0V/TI85L6sqvAmdb0owP/W7+PzXTmfeA+s6NDXgJq+AyUrQp8oz2UwaNmmtZa3bPuGy/fJeD1j0bVK5C4CYj2XJDIeXKI6VVizaiLYym/q7U8ZU1a7u3LNV4zUVpqACwD7jZrY18/2JfVEf5L7pg9ZbQoIDAACgOT1Gz9siDPzPknpW22fnC2TQb/K9Y7aLeo1aeFufrLNjPxKXazy+o3lHXDrvGLk9JKlNHNdZFT/kGnmTziCX+pi2QS4Mnzjxsne7VNrYnM2+0WrgxW/f5/KqLS5KZJ5ZdeUlhUMt+dA+Nnv+awewokz33VeUOVSWwlY2Y03vmspWbtd4G9NL9NnLMR/ce+bUjsvq2vxO8j3i+aO2OLtKNReLRtk+CStytIReVx7niLkNO7jbY0+fNHYr5pFqmzIrrXgw+s9TUAHgkjb2E0nt6GWFC0PdSRQAAADQnINGz/9hJrAXZdqWaKRdAn7W4sv9qmDSCcvbLnry0JFL1iMaQHocMXJefzfdJakmvpnFYpgnKuvRoBStVP4K62uv717boCn9srMr5nvugRNmtP5QrX4r6Ygkr//ybjPWsBU01vE46a/JmPuvs+e8sik9krwhh5C4bxUi6xrJ7l93D/7t+g2hPyfpO9HncMs+e6l2Rmy22C2ipkp2sWiUu91FW5xX8qJHS0peF5wnnS3j054+dSTffVbgGirWua3C10oFFQC66UC6aVH9452nTuv2JwIBAACApvQaO/94C/xpSR2JRqrvu4By+HEuU/dCz9HzuxMKMKY3LinFW0eMnNffXTeowO/qqknhP77zg3n62qwkdssEy+/OZj31uXd89r02+tAeclnPlftmNG1gMbQZOZTSvKmCNUccj8NbbV6ua4FNmjBwRmsaBizuGevjim2iC5jK2FXuHvzb9d1qnpO0XXL6e3mL3WI/hxW21iz0upK3M2IpxowSFIsWFDoreu20Gltarva3k/pkeQpKha4hvMS5H8/74riPblxBX2yY6yA6XhGDptvdMuOeHAAAAI0uGHuOnT/SXbdLxg0sUG55fd+VqFu97oEHzx9y+YLv0ohIaMK0MKMsnRnYQn1Hzj/OXderQn4ppWglohyy0uVlbG2Wlh7tftg8vXdlmnvNkHEz27ZX+IikHuRQaYp9q3asS1Bee8JeX0RMd/2ww2djyF2wrsPqBlwKmOJx7+mPdHGr/Z1kWxUTx8J3U7OU5XxSH0Vr5QmtFRrbyikWTc54bz9eb901b2TO4KaiMq8pf3kXAO53w3+3l7QJsS987gyt4W6SGgAAAKvz3Zu8tueYBXfINZxofLGAJgSg3xSjcxjYswdfuXAfQoEk5FqCviROxFUccdncI+V+qxr9js5os/Q2b4W3mVXWMU1nnHzxe/3T2D/6ZWe3a1iyfIrk+zErJTxvrIJzqFrnm+iifNol577al8ytxDWHJSpvvArWTVW1cF1lN7V4GzPZBUwtd9fQBzvXB8EzLm1TivnUY+8qSS0WtWTErcXnSViRo6V1kLYStuH//njuhKdPHnM280m1TJmVVjwY7efJuwDQ3Nj9rzh/fHrAJu8SBgAAAKysz3Xz1+y2ZMEUmY4lGpUqAT9r8eV+NWrvoab1umIRPyoCSZr3L513qMvulpQpZqYo9JEo0c4TlfV43YrZVYoVVl6vN/mEky95e880fe6BE2a0bq2lD0naJ23rv7zbjDVs6sa6apkzImsP0y3Z4a9uRc8kb8ghJEOUu1Inp3/dMuTxdZWrfVotfOyvl+izJ+bRrhE1lcfVHyM5T4U9RruAz+6RXH7pCya96SNc/vQpYw5h7K6cNVSsc1sFr5WCAj7XgXTPorrFPUQBAAAAK+sxYU6npUv1OzcdQDQq7r4LSIJWZn7fwVcsPJVQgDH9m8rxJWSfy+cfYKb7JdXQ8PG3Wby7orAYibfNSjxXevCb07L/7ZaGmPa76aVafWgPNL7zn8XQBhZDm5FDKc8bFiZ5tUGTedneAp88bsif2hJ7gLG+dONTAgqYSrQUuGvoE2vUqn6aSzvE8dnjPlZy53kr6OVeojjyGO1iz2MRhs6KXjs1ITDpnmcHjP42M0tlrcO9xLkfz/viuI9uJBHyefFB1/9nHbn2oMMVrMFymQcJAwAAAL6xzh4/b/NMQ/BHSbsSDSCh8vq+K7FfywZuurbX6IXn0qBIUMK0MKMs/Rn4hSMvXbCLhT5ZUqtK7QEUrUSUQ1a6vIytzdJX29U1Zw2/HThhRuskX2SfSZ5pNWftuyUdTL6UquNZ6fKmGsNb6vnGktpmtuMnbdteTg6DdR2+PlhVZwFTEOk5b+r3Uq1yy38jaffY1gMWfZuUY9IuVbForMdKZmgT/hhtiymXSzphrRGGwW+eHTx+beYPbioq55ryk9fsmVNmHyXlL5PTGftnpw9afwHJDAAAgC/1GjdnOwv1R7m6y/iatPH7dwCR3U67Lus9akGWSKBcY3RyxvTSf7nUZ8TczUILH5W0Jm1Wcc1bhW1WsTsq7t7wUc345HYGt87/fOcWSUcwA6Uwb6wqcoj7vqKa0AZefO6rexMIlHSsYzPW9C5cLWXX28JjRTkfZLPZoM2ac+5w2QHlmnc89tBXc7FolOdJWJGjpXWQtnKea4twWXiby5nZKnrKpHiwMXkVAIYe/pTbsGJmD59EEAAAAPCl3mPn7+wePCepK9FAFd6Pxn8LRks31QkuOviKhZcRB6B0Dh05az0LbLqkLvmNX3H8AGMxzBPV/f06u+MkuQ0K+WHZTxmQffdnSfycp138zmiTjq/KvOFnvLLfPHjMeclNjiQpkOn2bPbFDvS9yri/9jz7pldXf0fkc2oMBUwWxRq2fH12s0++e4Wko8t3vZao3PcSffTq2e3OYsrleCctj+Tyo/yuIso88UOfPXnsYGYGpGcNFd015VUAaGb70CEKVt8ge4gwAAAAQJIOHLdgl9D9KUkdiUYF3rM1iZ/8kZCeaDq396hFY4gEEL8+42a2rfXaRyRtTTTKM8nn+6Mos3X5V0DlbgM33XzaiPc3S1IMT714xqmShhaUQxZVmxl5U0F5Q5tFPw95nsds5PWbWH2bq4g/d/RpXXehFH2qwgqYYup+d57x6C/ldlYxJ/aKzaEy7nZnCb2uss8PSS0WtQg/lhW9dmrhtY/63cmj92SGSfN8Z0XnVvTvsyLOV5r76BYXAB5ww3ubStqCblnwyPbMM6dtuIg4AAAA4MAx838UePg7mdYjGkCabuui+aogWfzMXlcsGEfjoswJ08K3WWwZGGvGupsta3WnJL58Tkublaq/l/yYZWqD9NYTrJ0Lw/v63fRSbRIuZuDF7xxjbtdUTt6kMYesdHmD+Mc6S3ybnZA9/7XetBhYp3FfVcqYJquAqTh3Dnl0H5du/N91WbRtEu/nqYbd7izefmBRt09SCxPLe6wEj/e1UnDf06eO5PeXFMxxyTpuuv8gouU7AIY1P62a/hDPpf6GBAYAAECvcfP2C8ynS2q/+oUjX5M2hsgAMd2vmg3pNXrh5UQCSR7T45sD4v9yqe/l84a7q0+1tUEi5u1K2MjGomyD9BZZldH3MnPWzZb7Ik69+N193f02sT1Tiuebxrp4SnPIqqzNyjUFuE8cOfzlTmQySpI3zDAVsV4s3eCd7F3a7hr86LZumiypNur8KfSjeFSf3Zr+D6UqdktWUWqZdruz/F/gBTdFHI+Tr5Sb8UYLZjeyXKu7Xc4MV5HzXmU/yrdQLS4A9EA/rZ7bqsiFgeqmEQYAAIDqdtD4efu46xFJ7YgGuB8tDe5cW9gdXOf0HrVwOJEAuRatvpfN29/dLik+pnH8AGMxzBNGHpA3CW2DInZRMZ0zIPvOD8r1mQaMeGtb83CSpFbkjfj5LgE3Dx5zXnKT8w1d6jIBu3VXwP21x1K4wYBYVZ0or34TQ3FeJLuplabP3nr2I+3DQL+RtHZy5hRLV+5HdAovURx5jHZhn90jufzSP0Y7z/j0+N3JY05ljimnIIHXVLnFgy2LtrvJtTeds2AvPnbqZnMJAwAAQPXqNWb+DyzUw5LaEA3wkz8SamTvKxadQRiAaBwxcsFWLt0vKcPIX4zovpjN90dR2qz8K6CEtEHgZrcMGTezbalP3C/7ZscgF0xVUT9gW1HplO9uNeRN+vKGNot+HvI8j9nU683184vPfe2ntAN39Glbd6EUfarCCpgsivO6Zeozt0n6VpQn9grLoViLRSN5ebJ3mIx3fkhWsWhkfaWZHbA93s8y6umTxm7FTJPG+c6Kzq3o32dFnC/+++gWFQAeeO2s7SV1pTsWvNiYShQAAACqV+/x8/b0FY/9XYNoxITvqJHIvpbCn4XMx/QavfB4GhplHZwj+iGgnAUQx2QXdQg994iK3nWiuqS7aKUydrKKrQ3Sv1bbetmSupGlPOGQcTPbtlJmqqQtKjdvKiOHKLhL8XxjKWkz8+smDJzRmpZDmtZpiH4+89S0dfn+2OauM6cPl+lnqz+PJeoR9oXGsbKKRS3efm1Rt081PEbbEtD3I+8I7SwT3japz6QM80m13AcWe9z0foHRogLAhoz2qrr+EKFMpmYKiQsAAFCdDrxy7vfCUI9JWrPla1y+VgVQvrtsc93Sa/SiwwkF4pacgonov1yqa5W7XbJtqr0NErGiqYQ/ErAo2yAtRVYJbDizQSV7FLC71S9Zfruk3ZktkjbWWQxdPKU5ZGlps4qw9UftPzubbEbsecMfV1bEerF0g3eyjnXHGdN/6u6XlKaAyQr6Tx7VZ7em/0Opit2SVZRapt3uLP8XlOox2uVfH1mSzrVnx47/4aknFTfvVe6jfAvVogJAc/9B1d5WFe/t6Sev/0/CAAAAUH0OHD//20Fgj0nqQDSiwR1IRd2P0m+SK2Pu9/a6fOFPCAXItfz97PJ5AyQdVo5B26M+Jj8Cx54H5E35Fz55tEHgslsGToh/F66BF789XNIR5E0jr2dsKnsORTfW0Zh5hP+87PBXeXxdqu+v4yjcIIeqrBPl0W9iKM6LfDe16Nw28LFOUni3pEzS2iS1+WrpimP5d0aMcX1s8TVwWotFCzmeu0Y81W/cDsw1qR9QuKYmBC07j/2ATllwGz1KEAAAAKpPrzELtwlCf0rSukQDq8dP/ki0Vgo0+dBRC7clFEDL9bli7g7mNkbSar+3q47isGTvZJXvj6LM1ulbMcX8GLGtcx9lhsZ5itMufruHy0bElkMWVRsYeUPeMA9FeMwWtEFrCzSB3k2epTOHEF8fSUkBU0uvt6B1iltQ63dJWj/Ofs9ud4Vdlxf8MdI2FqV8d00rQV+xlvRJizMurYMgd/tL/W6qZcZJ03xX+B8hxfc+S+yar9kCwH2u/8/mkrrRDQscx3Lh40QBAACguvQct3ADt9zjkjoSjVIuvgkBktjXPM0fc92c9NiBo+d3pdFR8sE5ojG9lD/M9srObqfQ7pfUlnZPR5ulYzFildNmlvaZ8Yvrd503IPv2lnEce0D27S3d7ddq6R/uV0TeVGcOsVto+rpdQtps/+z5r/2MRgOQ/Hm4dH9sc/sZ086UdECLzxP7I+yrYbe7aD+jx96tk7rbnUXQ39Jz31jeNfr/zvfdJbZkqMC8lsBrimKMavaLhIxnfkC7FTzoLm1fb38gsQAAAKrHQZd/vI4897ikTYgGgAqwaY2CR/tk569JKBCHwn5MT2aBSOtWmask+1aUx6ycNkOUXbT4Nojjr9Wr6i8x2krBdVEfdED2jTUD2UOS1iFvkj7WWTR5YxWQQ5aWNquc+ck8vCKbfaMVWYrY8sYqL28qaTFY+G5q+b2wVAVMxR7r1jOm7mSyy5S06807j6y0fUXl6CulmOfLtDNiAY+AT1bcio9jaYpFI7pu0/nPnDqG324q4abC4uxjVqb3Fqf5vyQM/AeVeZtUgm5q9ofJZ2y0lEgAAABUhz7jZra1VsunSNq++MUk62zuQJJ9f02/qaqk++7ytjapzyTPEAyQa6vXd+S8Q0x2UhIG7fwLIKJ/DFe1z3UUSSa54SyqNtvvlOy7vaO9sjY3eRT3EdUy3xh5Vu4cim6sM9osvzbYwhoaTiEOaU07iyhvoslLVObYHeujXYv4o5SoTcpOahVYcIekVlHEsVS73aXqHseSerDyHqssxXsW32dPa7FoEY91bWc5v5r5phLuTSrxmopT0+wrQv2QR2kVOHi4P0EUAAAAqsNeWa9Z6vPvl/QDooEW+lTyeZLmS7bQzRaYhwvc9Km5fSrTpxb6YkmfmAUNX91n5JbmgmCZma2dCVfcrYWeW8tkgSS5qYOZZdzVTq513HzdwG0dN60j93Vlto6kdSSt26J7QkCSZD2WvbvwSklnEAvgm/pkF6/rWn7D6lNHq3wr7crvK8Z8X5+QMUPRf70f3TGrow0qS6La7IuuaNKYPtk3Hp+c3a6u2EMOuPjt/nIdXbIciuzwjR+IPCNvmIfyP2aL28B1QTb7yp3Z7M4f09PJs/TkEFoS48L6SP7tVaq+uPrzNHO9Lfw4ny1Z83xJ35Y8os/T/InLG7fo8/Sr80SZ86seq8nP0+Sp87uu8o+x8cYx9mM18bLI+kozb19xnqZeFFlcDn725NE9977x7EeZj9Kwhvqq3QvN8+jf13RfLNd41OSPPT0mzOkUWsPWdL/CZDIZCgABAACqRPsO869zV28iUWbJ+o66QdJ7kv1THr4t2X/c7P1MJvd+XU3tf6YPWm9JOS+uzyTPfPreh+vXWsMmbsEmCm0jBeHGcttY8k1ltqlcPPY1kr5WGT+nmtmQ3qMWvjZlWMc76QAoyeAc0Zge9w+zYau6qwKpK+0cnTzaYJ5cb3tgc8x9tsvmyX2OzJYE7ovN7aN6yy1RTauclks1reoXN1gulKQ2y9uss+IQyxRmgox7poN72EEZ6+DyDhbaWhb42u7W2d27mamr5N0kW19Sm9IuRpL/I3yL2+yLj1IhhUbdO6rNaZLGFXOQAdn3vm0eXpXgPCvxaibROfSxpHfNNctNcyTNNfkCKZgfBp6TfIlLdcrZZzUKl1mmdmlQt/yzMPS6ZUFNmzatatp+daPQ0C7MZdqa59aywNaSq73JO7iCtWXe2VwbyNRZ7l0l6yqpHUWS5e92yckbX0/1NlzSMBoPQHLn4ZYdq5Cx8o4zH/2uXMPzudJvnCfG5XXzBUzRxLH8xaKrHGupXO/K/AOT5rk0z2VzAoWLQmlJ4PZJzuyjQFpiGeVWHDxcumx5sEwy1Vpd60zrVu3+d3TPtbYw065BvraF3t4Cb++htw9WrJs6u6zTivszdf7in05Nf+wV15u8YtHi+so3z5O24u1SX+8qf3hx9Z+GjHtmj/Fn8ERP5rWKuaYmCwDDmtxu4o9RCjVr+snr/5OEAgAAqHwHjZt3prv6EYmqNl/S3yS9bK7Xchb+q91nXd6anLW6pF7w5L6WkzTri3/+uMoL3O2gK+ZvlgmC7SXbLpTvaGbbSb6NpFqavGrd1GvUojenDlvvRUKBqBT2Y3oyCkT6XLbgIJf/IspjVm6bFXW69116XbK/Bwpfz5lm1Ne3entytvOnRXyMjwp94/HZ97oqaN3dzbc09y3d1F2yb0m+teLcXfdr3an4Nojjr9Wrb7cgk10wcOSMu685t/uCQt4/MDujQ07hJK2mqJQd9Mo6xv3XpDfc9He5/UOuf7dqCN+9/PJtF5Xrms499+9d6jI1m2cUbuEebBHIt/BA28q1naS2ZU6ExKR+NeWNSYMuPe/l68+/7Dv/IWsRed60aBcolGvArbQCpnxls8/WhEuW3mwFr7tLVOSYdx5Ff12x9BXXTJnekPnfFfo/FdjbDTl796hrj5pdzux4bOCE1p97+80yCjbzwDc3980l21zStyRtISmT/7iYR5s0+9I8d0Ys4/qo0P5Y6E5p5VuY2ubLluaGS7qQ+SU5c1xhb4urjxVz3PLcJDU5MZr7rm7xDRsVvmB+jigAAABUvl5j5h3irtHx3PP4FzcvSNgdSINkf5OHzyvQ84HV/O2RM9ebWXn33ObTpHe14p8pX/7rfjd57QdLPto6UMP35MEPJN9TUnf6TdVobfIHe45buOujZ3T8gHCgmnOtzxUfruVhw01lGKAV9aOpXCaL4DFcEfnc5S9K9qfA7YVluYYXJ2c3+jBJbX9HdrO5kuZK+r+v//vjs++1ydVkts+47Syzb8v1Pcm/rRb82MQcVcrOF80uKl+8fu2GuuBcSUMKuZJQwQ2WknVUIucbW3HLVOT8tFTSizJ7wc3/nKur//PVI3eYl7TPOnLFNc2T9MI35qI+ntls6ze3DILcju62o8t2Mfn3Ja1VihyKruAuyt2NqkabBgsulfQLQpG2qSuOR1oW/2g8VMj6Z5XdlmModivij1Ki+Owbf7JsoEk7xxHH0hQwRXis+O/TFsrsz+7+58DtzzWZpX859KoTPk5i1hx4zaDlkv79xT/fcPvxt7fpsIZ/KxME2yv07RXoO3LtKqlD9H0lxu9X/neZKSkWLUHcInis69m/7z/67h/fdPYM5h7m3ErQ9A6A0q4sEgvsJu6/JwoAAACVrdf4Bd/xMLxHUkA0Kloo6W/mesLMf79U/sKTZ3X9rFqDMbG/1Uv6xxf/3CpJvS+b10U1mT1d/kOZ9pD0XeXxl7VInfWDBj20V/a9Hz2X3WwZ4UDVTg65+tFmtkGzL1zNd4nVsUNRi79EdV8xzz4VKHh64Vqf/HH6oO7L09gn7lgxJr70xT+SpF+OWtA+rFu2p8l+4PIfSdpd7KRbkETlzde6t8lOHnDp2+OuP3/LvP4gZMDF7xwj19ER5FChFx777xwJHetCyf9qsicV+O/WVJsXsylez0yebDlJb37xz2RJymY9qNO/vhXmbA+X72nSTyRtWLnzTZlyKKZj5tMG5jr6kgteH33hiB3/zizB/JSOHEJLYlz+3bpKkSOF9a+bz35sQ2vwi1d3rLQWMBV3nuLzdKVi0Y/N9Ht3/527/e6ICUe8YXn9uUUynXDHCcskvfzFP5KkSX0mZVp1+exbZtrd3b4vhXtKtlWyxs4yHKsUO8A2cynNP/Uh0vmpdS6wKyQdzpxU+nkvvz5V/B87RP++5K2Vmt4B0LQrnbDgvvscQQAAAKhcPUYt2tDDhqmS1iAaib6PLNQiyaa76fFcXcOT089dfwGBbdyU87rMk/TgF//o0JFL1qvPLD/ATL0k7S9pbaJUYfswuHbt0LbDBInHnyMVY3rkGXv4pQt2MfMTKzTDS6FB0nNyezhjDQ/fdf5GFbuj6G3DOn0i6fEv/lG/K95Zq76+9b6hdKDJe0jqWnUz3So706ReG28ILpR0UkvfcHL2vU3Nw+vStjqJ/3F1sR1zmaQnXJqaa6h/NIk7/EUpm7VQX/3BzkRJOjf7z+095/u5bH+tKEZuw1RUWLdLWLFX4GF4nqQjaUAAyZyHo53Ta+r9apm1T/q9ZvMFTNFcbETFou+4+yOBB1M0157vO7lv7sv/cGQFTy9ffM6/f/HPzZL08IDbNlKgfaT//dO5mA5Uqsdol/6+KrljREHncx367Cljd9/7hjNfZPxnXivd/XY819RoAeB+17y/maROtFtBZj1x6kZvk0gAAACVab8r566RsYapkroRjYoyR9JDHoQPfvpJl98/l7UGQlKYh87tsEjSryX9ut9NXjtnyaIfyr2nTL3k2pLvDiqFn9T7ioV/mHJOx3vo9Sh1wuT7g0qkX7y7W3DFgmvcq3sH4IIKINxekPTrMOcP3JfttrAa4zbxnC0WS/qNpN/I3Y69bNauQehHyaxv02vLVR+5VnybNX2wUu0+UyEj3PH9R7wz+qYLtmj20VF9Jnkm+Oe7d+l/j2iNOM+YcL5UL9dTZrq/LggeuSbbfUk1B2Nk9ltfFgSOGzr0tTVq2tX2lHsfSQdKaltJ6+IqzJs+2eGvZ7OX7/hv0h6R5k0pdoFCwQNu8na7i7+A6bahj/1EoQ6Lpq+XqIAp79OUrLDqHTPd66FPOnLCkf8gr1Y45PpfzpR0u6TbXW5TBt76bVNwSOh+mEnbx9F8pXqMdvl3Fk30faK5h1dI2ossSMYcl6x7kXR9x9FoAaDV1Owq90jSufq6pfH4XwAAgErlbq3GLbhV8m+X6PZTctbZMd6BfGRuD0jhPd/5vPMLX+yWgQh98cjg333xzxm9Ry3YJQz8OHM7WtK6Ke03+OoG+MaDxyx6+ZGh6/2TYKCYXEtTbvYZueA4N+2eT6KUY3es/NvAZPF8qTnfXbdmanK33TOcP5j9ZjOa3yX9RdJfslk/81374MeZjB8tV19JHZjTyptDeY5dNZmcLpT0i+be0/lf754t6YckQETzjWnlB9P926VbGuqDu665vDu7eK/GmDE7fSbpAUkPfFUMqJ9rxa6kmbhziMLWyAVBJjyvJeMPkjR15ZdD5E1lyUkt+EuiItYqq+y2HG/xQjwFTN+UzWYDfRKMlcKokzGPzxNtcZ7LS/g4VUnShya7J5Tde9TVP/szmdhcWM11jV6R9Iqki6YOur17GPqhkveRtEvZ7kH+d4joi0WT9XjrYo7Xstis9L4f/+6UKw/6yQ1nTaP3V+P3BnHNk6UvHmy8ANB9V6eXFDjIhBQAAgAAVKhe4+af6dIRRCLVGmR63KU7c60WT50+qPtySZpCXEpiyrBOL0l6qceEGUNrlnXoKQXHSerR1P0pEm0Nz/mk/a6c+70nz+r6GeFApetzxYdredhwRd5vXO1TZlL2Q26+31u6/dECu/7D9p/89su5Fo374o8QnpX07IDs/CHLgrqj3fxkSTsTncKVNs/syFOyb110Q3ardxt7xcnZt7eX66L4Ei/PY5bg94gStUG9mX4r03Vjs1s/T89vua8XA5533psbNAS5E1z+y0DarPTzUyoeJ12SxMk7b1xHZs/528XZK75LoX1VzDeV1d+RthgXtiv16vt8yw+y0eLvnSBr6o+xk7ozYinGlmav94+STVy6+NNJJ9xxwjJyrjC9JpwwQ9JoSaMfHnjbtyQdKw9/brIN4s3rCItFSzIslWoXy+jHTne/PJvNTs9ms2wQUMIOlt94+tV7k/PHDsmaxxv9gSWUduWvQwodHcI/EQQAAIDK03Ps3J+6dAWRSN195Jdmm/xmhcHEKcM6zSZI5fVFMchvJf2292XzuoQ1wbGBaZBLG1bwzaIqdB+G7drkaq6XdBw9GyUc00uTsabWP7t8fp///buw/mDJulRVhucndNkjCuzK+87t8gLhKMz12c6fSpooaeIJl8z8nkynS+qrFu/MlYKZbpWdaVI4k646NtWYMmdJOmV1L89mn62ZL7tdUus0r06K/QE/4sH/Q0kTa4LgutHZ7rMYPYpz2WVbfyDp0mzWR9aFb+zrbkMl7cOaI668iTSHaoJMZrikX9GTgWr+9iC5u93lfyzf5vYzpvf52r8Y4XGsOWK811wR2/jj2Egb1rl0fxCG44685sjXyKhoHXLNL/8p6ZxJfSad17brJz8NQ51k5odoNbU3SXqMdhQdPrKdRb/x9lWPFe993+qv3WQ7/GhOu59LuoteXrkL/UL7Vjzvi34SWv253G3/G2Z9KGntKA5XllVR+Sz+/oIN1uXRYQAAAJXlwDGzNwks85KkjqVf31JOUNAdyFf3Bc+56bpu7Ts98sXjaJFQ/W7y2jkfLzpSgZ8p105l6Tex34NWdD4fP2VYxzvpyelx8BWLXpHr26XNNS92TF/NezyGDPSCMtaaOp4XPyJYnoNP/sf3vMa7rx0/59I9YZAb+cC5G75FdkXvuBH/3SIwO1vux0lq/fUN3IrPTY+4H7UwL/P6DB5R3jT/ufM6vq+Sl8saajObTzxv0zkrv/SUi98Zbq6R+beZR/iZV/PZPaqYesR9qMljzpfbmOVB/Q3XZ7f7lBEiPudm3/i2N2ioTH0l1Tabl56AvGx5P1r96z0BeVlY3tSHOd8qe8XO79Nzo3flOX8+NLTgwbza2ItcdxWUBzHMl17Q+B4OGbV7hp6zetcO+8ORQWj3NT/2eQH3K97IOssL6Ive9H2I5zPmeovWD9bEOZpfZ3qL17rW7H2aF5Bj3vi62POdSzyve0D7Kk8XS7oxE/g1fcf3/YBsK52HB9y2URD4AMlPkmu9vNswn/zxlqwdvKB8X/16yPNcYzXft62Zc7TsvjK/fGzhdz7/WVbbeusDrxnEUwwi8nz/i56R9JP81r0FtrsX3O4t6jP53sO07L5hpViYrt7tpisHFxrv1e4AeMCN72/iqlk7/8Pxt84m/zPFfwAAAJWlz7iZbZd65kGVo/hPkswpAsz/DiQ06UG3YPTUoR3/SqTS4YsCzbvlfk+vKz/cV8oNlWzfEvYbFBfYCb2u/PgPU89a+z2CgUJyrbJzMx2PZCugzUJzTQoUZu+5YIM36fXxufOCjd+R1P/YS2dekgl1tuQnS2pVPXNacnNopTZoU1PfcIaks77+mlMvmbGdhyse/cs6pCjz5bris6D9TRMv7vY54YjfyOx2r0r6+TnZf51vDeGFMh2r/+1GWngOsUaIRa0FdoakQYQiDjWS8vzpr9kUyS+H4s4b8iyJ90pFrFVW2W053m3Vo+8/ee12F3kcS7UzYlSPdnXTJwptQk0mHNd3fN8PybDSO+T6X86UNHzSkEmXtK1bcoxLwyRtGUsf+t8hot9hMlmPty7meC2LzWquY5PW9cuPlXQzvbravjeIa54s7WNNgtV29FxmJzpHwXi8CQAAQIVZ6rXXSvoOkUgDr5N8oofaZspZnftQ/JfWe3XzqWev9+TUszvvl5PvLNlvlfevLSh9u6mDhfV395nk7PQArD5HVp218p3lYn59s1/B2zf+v8+EYfCdey9Y/yiK/0rnrvM3+uD2Czc6PTR9S6YHVO5noaRhdRh73qycJHbSL0f9u/2X/yab9cDDzM0q+NG/cfwEZ/EePvo2+NRMF9cu9S3HX7L1+IlZiv9K7Yrstu9fful2v1Qmt71Jk9Xsni0RTpZVc8zi88ZMx2ezL3agx1bDfFNZ/R2Wzuu1KPq8RRgaizC3rEw5nPd5lprZqPr6zGZHT/jZ+RT/lV/f8X2X9rruxFuWzV9rG3P/uaR/RdEfvUxpXv4xzUo+dpp09qQ+k/hus4QdrNA9kT2hn6ecgtX/W6MAsPBJ+EWiAAAAUDl6jpl3jGS/JBKJVy/plpxyW00d2qX/o2d3nkFIKsNjZ3d+derZHX8WWmYnSQ8o9YWAlV6nYXsuf3/RcHouou9a6cjYKqnEelOy3veev/4+D1zY5TU6Z3ncecHG79x+wcZHuvQ9uZ5P80yX6jxb/di0VutlrY798n/M07v9JP9+Ja1OontIa3PxtZyb3xTW1245Lrt1dvTobT4h+8vr8uyO/x45Yru+rmBXVepmCFbKvIk8h9oH9a35/gKoEIWteSzC85SqiKfMN4cWdxvG8tldpnssqNn6qPGHn3PcdYctImOSpe/kvrle1/f79cudPtg+NOtr8n8mY8ywCM9jEeaeFfh5Ykn8LTut958+9OLKXeh7rDmW7/uinYSCRv79jjR+YW23vK6BAkAAAIAKceDYBVvJdAORSLScue7KhL7t1KGdT3psaLf/EJLKNO2sdf8x9exORwZBsIOkeyXlEvbdAf53Z6wLe12+cFcCgdIljOXRPVFElD836Zz2nbrucN/5XacSkWS448KN/3rbhRv9SG4nSvowjhzyNA0HSckX94FytwHZ97qadHnxU2u8r0/ooPOCy3a7KrvNyVeP3Hwe2Z4sV4zY9m+Xj/jWnib/lWQLkpjXVVzEf1o26wG9FEnMM0S5DqrK3e5iOE+JChMt0rP80Uy7HT3+Z784atwhM0mmZMtms+HB1544eY1Os3dyt5MlzWu8T8bfH8tfWJya+e0cl/ONb3onySq5plU1dhOwU1HpUL2xf/u5IZt9TEICAACk317Z99oEHj4gqX0y7i/4WnU1dx5PhUG485SzOh/38Nld3iEi1eGRoev9c+rZnY4J3XaQNLWI/oP41Fqgu3tlZ7cjFEjvTmDV+whCX/2/fCwMtN29560/amJ/q6dnJ4yZ33bRRrfWh3XbyuzuZMyB1ZVDq4np1gMufmd/Vzhe0tqsQ/JqkkUynTA+233Pq7LdXyYgiW4sHzlih9u8Pre1zG/Kt2uzy25s7bJFpuH1nsQhIXNbmX8rjiTPKH9IX79b6a2lLaqrhgImK0GervYcH0o66cirDv/hUeN/9hK5kS57Z7MNva8/8aZwadBdCi6V9Hk06ZHSR4gn/ly+07OnjDmQnpvG7lXdxYOrFAD2vnVBe0mb0zsKwhcSAAAAFWLN9u3GyPRtIpFI/3a3ntOGdt7vsTO6/p1wVKdpwzr+a+rZnXqb6ycm/Y2IJM7W1rZ2BGEAohd/wcQ3vphcZLKj7jt//YPuH77++0Q/2e7Objn/tgs2OtY87KlGdpYgb+LKm9XlUHCdSUdG8wli/sEgKb+RmD1Qo+BbV2W3uoO/gEqPK67Y8aPLL9nhZJnvL2lmMjtkdVQwfZk07j6InpmWNrOC2pgcqs71SbLa0SI8pKW2r3qJrtelu2tyuW2OvurwW4w1UqodfNuvPul13YkXqMa3lXxqssaMlXYWtXj7tkefJxHmsUnuw+mx1XATGtU1JePzrFIAWFe/fHs1vjMgmm5UCgABAAAqQK+x8w6XdCqRSJxP3G3InPaddpx2VqdphAOSNGVYp2e/83nH3czsF5L+S0QSdY98+sFXLvwecUB0XSodl+l5foYE/3oztaE2s/2953W9n86XLrdetOm0+rBuR8keTcs1p3onsEbHJk/4H9lbDG1ghY6Nc9zs4Kuy3Y8ck91yPlmcTiMv2eGpXN2yHeS6g4VJoWNXcXn5NT/Jnvva9vTK5M9nQHNjSmXtdmeFfR4rVy4mojBxjrv1Ouaqw4/te03fBeRJ5eh1df//9rquf29zO1zSB1H1oVIVikf2GG1r+ro81s/S7Hv3fKb/mB/RW5O4hrIixnsrap6I533RzTerFPqFHm5L9yp4jKAAEAAAIOV6jlu4gUsTiUTSltp6MJfLfGvaWZ2u+huPHsRKslkLp5zV8Z42Ncu2MdfFkpaXo5PG/1VB6mQ81K19st6KXooiEibyY/LIwWZ9JtMv7ztv/d6Tz+48l/6aTit2A9ywt5sGtGxetPLkDRsKMXaZP5KR73h1tvsUWjn9Ro3aZfHIy7Y/wdyPlPRJavPMUp9nZgoH0CORxPkJUa6DLMI2sMS0dVkKmCy+Ri14NzXX/bWW2/7nVx/2KMlSuXpef9KD4dLMtjJdu6K7VMNjtNMjsHAwvTS1k2SVXNNKfXbVTLRtKmK5V47YtwopAAQAAEgzd5PnbpO0bjLvearva1WX3ne3nlOHdj58+rD1ZtFJ0ZTJZ2y0dMqwTllz7STp2RTcuVaD7Za1WXgeYajy6TVhr89j4q3GY75uFu5y37nr307PrQBmfvsFG99ggf1IK+0qUZo5sLpyiOLivMP+mbv3uyq79SFjs1svJGEry2WX7fCA58LdXHojTWuKypoC7KhxQ/7Ult6YhnkoBWtxCvbT2++sHP2NAqYiz/OJmx9zzNWHH9V3fN8P6f+V7+DbfvVJr2v7DVSg/dSi3QBX7tJpG6QtNedyqdezJ47akF6atu5VvcWDwar/wrehVxTk/SdO3IhJGAAAIMV6jlswQNJ+RCIR3OQTMznjcb/I25Rhnd6celbHn5rb8ZL4QbnMzOycg6/4cAciAUQ4Scbyer+xTf3S7913brd/E+HKcuv5G/0lDHO7mPR/5E18r19p9otjRo15wi7p6uAty9n3rr5k65vJ0Mp1+eU7/rt+We57ku7NP88s7Z08CWPd2p+0W+MQemISboiaazMrtI0rax5ifVKi88RQnGdJ619W0sT2KK/X7RWF4Xd/Pv7we8mO6tPzmn5P17QKdpR8UvnGjJV2FrV4c9EjzutoH89qklTjNepH76yIm9ASXFP5P0+wmoUmBYCFDQuvEgMAAID0OnDsgq0kH00kEmGWy3tMHdql/5RhnT4hHCjsftt8yrCOd9Y0tN7G5HcRkLJq5UF4azbrAaFA8bmdjsv0PD9DmXco+lxmx95/3vqn3JHdbBmdrDLdkd1sbqbL/J+a/JZU5o0SlzepHJuau/Bo2sCaeb09nDPtOn5E9zfIzMo3ZsxOn428dLufS5ZVRW7IF8duUsXl5TeP5CfQC5M/nwHNjSnl3+0u2uI8L83HKdmjkaM6lrtdX7fOx3scM+FnM8iF6nXA+BM/7HndyUe4+3GSPiukP5blMdqRpYYVvXaKPsftpEl9sq3onUlbQxVTiG1FzRPxvC+a+eYbX773mDCjtaTN6FoFNJbZP4gCAABAOu2V9ZqMhXdJakc0ys3ursnU7jBtaJcniAWi8NC5HRZNObvzcVL4M8kXxdt9S/FVQVpvmrXry20X8hezKDRhIj8mjxD8n3c8Y3vcf26Xu+mTlW9i/13qb71wk5PkfnEhORRb3rChUHWMXaacuZ971cVbHnZNtvsSWrOq5nwfeel2F8t0vKS61OSZpTDPVvXT7LCXNqYPImnzEzIRroMswjawxLR1WQqYIluTWr5zy1KTH/vzqw899YTsCfxBFiRJva4/+S4zfV+uGXHkdaU9RjtmXTut2+5QemV8c0u6vixI9hcY3ygADINWW0qqqZjlXgljH4TGXywCAACkVPsO88911/fScb9UmV+rmrTY3I55dGinYx8ess7H9EpEberZXX5rbjua2RMJu3OtGi67rNeYJR2JRLW2f7Jen9cMlYpjFmRaECzf9YFzurxGD60ut120SdbMT3YpV5JVXhUdk+LiRi1UqB5XXbL15RV7Q4NmjRyx/V0KdIBki8mzkgmCoOZYel/FruVKmzcU7Ke331k5+lv8O+dVRAGT6b1MEOx5zFWH8wdZWMVB1/b/e+sG7SrZI8136bQN0paqc7n5AHpk2rpXdRYPfvPxO5mAx/8WKMzk2AEQAAAghQ4cN3cHd51HJMrqT/Jw56lndbqXUCBOU4Z1mj1l6Ho9zG2gpKVEpLRMWtdyy68gEkA0fOUMa/nrQ8my29R36X3v8E0+IpLV6dYLNrlJbn2Ugt244sub6F+vPPMyGceMfQXwkizz3asv2eopMg8jL9n+2dB8X0kfNZ9n5FA0H9mPdzmlWwm4GWp6vsmviZz+XtXrk+LPE0NxnpUgUdKW2M17Ilfnux417uBXyAI0Zt+J/RcfdN1Jh5r8gi/T2EvUtz2Srh7lzqJRPgK5pe/78pz2o2dPvnJ7emQix1LuGb7mGwWAHjoFgIWpX2u9T94iDAAAAOnSZ5JnArdbJLUiGmXhkq749NNOP556Vtf3CAdKc/9uPmVYx2tDy+xmLu7jSt8AJ/QatWh34oBqmeQaT4U8Xx+dxYF5r/vP63JxNmshrVTdbrtoo4dkOkJSfSryRmXLmxZOcamdm4v6DE3+UGaattTW+PHV2S3+S8bhS1eM2P6vodlPJS2qkPVtDGOdRTc2mm1x2Xl//yE9rzgNaZ6fmOwqIsbl3+0u2rb32D9OUh+NbJLk5j6y1Qf1Bx133WGL6PNovteYH3TdyZdKdrRky6PLsYgfox1jmnkJPkvznzU8id6YtO8ErOi1V/Tvs7KuEYNv3gcEW9ClChqR3prcd7s64gAAAJAuS2fOP13SbkSiLD52s0MeHdp5+HNZayAcKLVpZ637j/q2wa6SHo729jCarwoqWGDy6/pM8gy9EAV/QWvRHLMKHyE422Q/uvfc9R+j7+FLt16w8cNmdqRaWAQYW95QTxCbso11ptvX0QeHTMx2+5xWwMquGLHdKwr9J5ItSHTeWInzJiY5D/vS65C0+QbFFeCv7liemraOcheviAuYLPa4feLSYcdcfdh5fSf3zZEHyEfP6/rd7659lPcfUcT/SO7YxsdSj8dNv+7IZ7PZGnpiGto07muyxMYpWGnq2Yy+VNCU/QZJCwAAkC4HjZ+3uaRL0rnGTf3Xqq8FgXaddmanKfRElNP0QestmXpWx8Pkdq4kvngtne8sf28hfzWLZiWnQK8SHkFob1rge953XpfX6VlY2S0XbPSgmR8tqSE9/b1yKgYrsRjZTZdfne3+q2x2b/7QB40aOXKH1xXaAZItJm9iXgVIh2WzHtDrqnseiiRvKNivgi6b1EIhS1X+NHK98yzwvX9x1aEP0yFRqF7X93/eFOwh6d1i86T8RcOlzOtIztXZ57Tbj16YkjWXJXXhEu81rbzg37zc02FKvUniAQAApIi7WaiJktYgGCW/vZlsnzbsMeWMzm8TDSSjU5pPGdbxcjM7QNJCAlKywF/cY8KiDsShyqZfQhBzTBv9EvHFoD73g/uHr/8+EUNjbrlgk9+4dFJ1p2o0j9xrYV5WqtDdBk3Idj+3Ev5qCfEbOfJbL7vlDnbZ0nzyMo5cr3Dr19T//Qf0uEROM1+bP+Io3KBir7LulRL0uM7VXZeV/t6vVI9GjuBYb+dqfM9jxh76N3o7inXQdf3earD6H0r2r/iG+pV2FrV488QjzrloH+v6jR1bf04PLMMiiWtqsf8VAPaZ9EYrSRvQuQoaCWYQBAAAgBTdJI9bcIKknxKJ0q6aXX7J1DM7HTGVx4AhgR45q+PTyvn3ZaI4tTQ6t/rchxEGVPzk19R/tDxfX9j5p7VqpX3uy3ajwBnNuu3Cje9waWhF5Zniz7Pm8jodJynuMYS+4n3L5TpywiVbXkM2IR+Xj9jx9+Z+hKQU7xhpheVNHscsaqwzKefhz+htFTTfpKy/I5oYl6rYrVS7dXkh57D8P7uXqN83cZ6XPBPuefyVh75D30ZUDr524GwLan8s1yvFzUMJKiy2gnOslPPTwc//clR7emCS1lxW9Nor+vdZ2daI/ysA/PjDDptIytCdCghiQAEgAABAWhx67az1zH00kSippTIdNW1ol4tk7ASC5JoyvPPb9fUNe5j8haIOlNf3TdWbEm4acvDYRRvR86qdxfA2iy0D05Wxdsf8+i6H3H1W18/oZ2ip2y7ceJzcL4t0vM8zr1ksxjDnxj/WLQul3ldf0n0y0UYhLrts+6kmOy2ReWOx5U2pV1yH8xhgJG2+QXofkeslut6yFDBFGEozPdF6ed3ex445bD79HVE78JpfLqhr1fonJr2QtDEibWNaHudrV1drh9L70tCmcV9TXJ8niObdGffN6UuFqQspAAQAAEiL+uW1l8u0XvrXuKn5WnWhWfiTR8/s/AC9D2kw/dz1F7SqWf5TmT9INGLX1uv9UsKApiSnQC9djyA0+Y0PnNv5l89lrYFehHzdetGm57v5fdHmGY/xTMdYV5A6d//ZNdnuT5I9KMall253k6SbqyRvyqFbTf1rexCG6p6HIskbNgBMdHfySM6R1MJES1X+mHT3Z5/O69X3+r6f0sERl0OvOuFjBXUHmPRyIXlSaTuLlmIMMR4DnJ5J0pK6cInvmv5XAOgebJaM6TB1q+UPnzltw0UkHQAAQPL1HDdnN0m/IhKlWirr/SBnP5h6ZtcXiQbSZPIZGy39zmed+rjbBKIRM9PPe41e8B0CUVVzA2KNqcmk27ap73oqu+6iGDW5VidK9lo1TkxRjF3egmNWSLjqA7Mjrrlkq2lkDaKwZHHrgZK/qGrJoRLLufMY4GROM1+bP+Io3CCHKuteKUGP61zddVnp7/3K/8cpqx7Lza85ZvzBx/Wf2L+eno24HXjNoCX1tZkD5Yr4MdMrPUbbos2TwnPZYhwbmn88uUs/efK0Ud3oeSVeJHFNLfJVAaAqeAfAOBcVpreIAgAAQPJlsx6Y23Uqdg9ttNRrDRnbY8qwTm8SCqRzzLBw6rCOp7vbZUQjVkHgxmPZUb1W812iF3e4e7ap73JSNmshwUUxJma7fW4WHiopFX/4XH07gcW8o6K16OU5ST+/Krvlw2QMonLNNd2X19bUHi5pbqpzKIljnUkmO4RexnyTlv4Oi7BPWex9Pdqcsgg/jkX4eVpawOTX/2Lcwaeb+IMslM7BV580z2psf0nzyjGmJ6fgtyTzUybTYAfT65K05rKi+2L07yvPWulrP37aRnSjQgJo7xAFAACA5Ptb+/knuWwXIlESzy9rqPnxE0M6zSEUSLupwzqeL1M27zfmdY9f3d8Ju/TTQy5fsBe9rZpZSd9WbAYm9Ydfk0/Kde98PMV/iMotF2z6npsdLSksWZ5ZBcyMFVIT0UwbhCYdPyHbfRKZgqhls9vM9tB+maihwCLJmwJeH/mAssmI8/+2Lb0MYOGQjOuNcheviAuYCj/cxJ+PP/g0iv9QDgde0/+d0OxAlz4tdG1S9jHCyjk+Wh6vpACwcua88lxTXLkZfPWxfAP6UgENY/4fEhUAACDZeo2Z3dFd7OJVmoX3M3UeHvD0OesuJhaoFFPO6nSxmZ9PJOITBhpBFNCYwn5MT+fOPkV4uEPHLj+f3Ndy9BhE6bYLNn5S8quKzcsU5FBKx7r4Xt9EM7qbTro62/0eWg1xGTlyu+kun5i2PEvHwjtzAD0MReeBVVnelIpFc4DS7nZXiWvAgq/31nfXeuUUiv9QTr2u6/+yTCfl07fLv7NoGu8Tfa/HBk7oQI9LwdhsCbymGC/sawWAirEAsHLnOZcoAAQAAEj8vUHmEpnWq7zPlax1tknTPv30055PntX1MzodKs0jZ3W+TLJhRCK2EeQHB1+xaH/iUB34NWSl2bP4eE4P6xceMbG/1RNPxCEX+nmS3qjUHGrpMYsrHKqc4keTzr8m2/02MgNxa1UTDJX0TpR5CclNFACWex6yaI+Z7+5o5E0l3CtZ0V3W41yjWJzjdEILmNzueHetV/pls1l2Y0fZ9bzulPvN7aoocy55hcWF5mwxO49+472t29QvZ01Vyeu1lN7LrygAdDeXutHwBQQwF1IACAAAkGAHj5nzLVdjf/WGyG6mzR5p82mnw57LbraMaKBSTTm742i5LiYSMY0jgY+QO9tDofqspte39Etvd72ieus7ObtdHYFEXO7IbrYsDP1YSYkuMq2+nb1iLn5c3eHN77w6230kWYFSyGa3+1TuxyqCx5CXJYeSONaZJNePstmX2tHDmJ/S0N9R3uJnL1Gf8EKOZflfV1wFTCbd0+aDZSdS/Ick6ZyzsyX9X+T5m4Chv/mnPpTqIr03PS3q+cSKmIeK/2OHUhWtxymQpF4T56wnqQ1dL3+haigABAAASPJ6LbDRkmqIRKymt/ukY9/JWaP4ABVvyrBOWUk3Rn+Pzz4Mcu3ae/TCXgSiWiXxUR7RZWxMGf6BlOk1Odv5U/oP4nZ7dtOXJV1akryxCpgZK6QmYqU2+MO6qu9HNqCULrtshz/JdUua8jr6NULkA0qbzPLMXvSu0q0DgWQsHIxj5ZvfLTicu01pPWvZ8X0n983Rj5Eku0zsX59pCI6QNL/0RcMWYSqX+sYqr/Md+FK/m2rpbZVws2wR9f3yrykDSarzcAP6UmFtslZ9jgJAAACAhDpo/Lx93O0gIhHrrf3v2gbLD6f4D9Wk9aYdT5PZb4hEHIJL2AUQkcxOkvL5IqjQv0Yuo89MQe/J53f8gNZGqbRbu26UpBn5500icyjBY1dyXv+1ZpuRq2s4LMtuoyiDMMycK+nDtORZKmJqxiPrUHweWHXlTclYNAdI3uM6y1NcEXNDvGQ1rY6m+A9JdcDE/nNC08kt6dtlf4x2Ou8T11kcLPkhPS0Fk6Ql8JpiurBgxWG9BAWAFbncmz/5jI2WkmgAAADJk816YKHGVP49T/nW2W76Y517b9bEqDaT+1quvvVHP5f0LNGIfGTZqdfoRQcThypo6Zhfn7LJPN83hOZ+zAPndXqZnoRSumZQ9+XufnoF5FDBx6zSsevDnIKe112+7SKyAOVw+eXbLpL5eeV+FGaFrTwoACz3PGTRHtPzPCl5Uwn3SlZ0l41st65mLq9Uj1QscQHT+7maTK9jx+z/GT0WSdbrulMecunXUeRc8gqLCx1TrcD3re69PAa4otdrsX7nEI9AkjynDWjwgvBX1gAAAAn11/YLjpe0E5GIzT9qg9qeT57VlS+6UJWmD+q+vL5NcIjJ/0E0omXSeUQB1djxV9bEl95nP3B+10cIGsrhtos2nS5pSlKvL9kFepa+Y5rq5Paz67JbvEXvRzm99e9/3Sz5y9WblxGOdSsur3t22Esb07OYn9LQ32Gp6ruFXq8XcizL/7oiKmD6OAjCg0648qC59E+kQc3y2kGSZkeWvwkY+pt/6kNpLtJc+9DDop5PrIh5qPg/dihV0XpcghX/r3elyxVkDiEAAABInl43zW5n8hFEIrY72//mcpkeDw9Z52OCgWo2fdB6S0ILe0taGM09PvswfGGXXld82IMwVOUEU9K3FascP+SaNHHSeV3G0ldQ1kw1HyxpWax5YxUwM1ZETYSfNeGSLdnxGGU3eXLfnAfB2WnJ6+jXCDE8HiyT+QE9q3TrQCAZfTDKsaRyj+VNH67O3A//+dhD/kkvRFoccOuJH4bu/Uo7NlmEqVzqGyvL56XfenbAaGqtKuJmuTyPqo96TbmiADC0znSygjrBbGIAAACQPP5J5jRJ3YhELLdBi4NQvaYPW28W0QCkqWd1fc9DP1RSHdGIcqwJLyQKKHo98OXMldfrWzgbluXz+Eth/cKBtCzK7ZYLNn3PpBvzy5vy51Blj3XRv96kR6+5qPs1RBhJMfKS7Z6R9FyS8yZlYwcFgEDC7oKjWyol9XGd5SmuiPCzu2T9jr2q9+/or0ibnjcMmCbZw03lYokfo10p94kW5rQ3PaysYzPX9DUrHgFs1rFktxQVFXtna18AAICE6TFhUQdJZ1fVh7aSrbOXh6F6TTmry+v0NOArU8/p/Ly7DSESkdq956iFPyUMlY0f378xmTf3go/DwI6YnN2OYmMkQyZ3haTPUpRDZTtmOsc6e7++datjZcYmV0iU0Fb/RyJ01PwFsh8ShTLPGRbtMeOeb7xU0y/yaB8rust6iRqzVI9UjLOAyd1GHje+5530TqR2HeXhmSpwJ/doC4tLP2Z4pBOYrfw/f0LvSstSLcJ2T9j3Dl+t8SWZeSdavICBwnkEMAAAQNJk6huGyLQekYjhVsR08rSzO/8fkQBWNXVYx+tduolIRDXgSOY6n0Cg2vr9yvyr/8+Jvx3e5V2ChKS45bzN50m6rhI+S2kL9JJbqPg19UEQHnnD8E0+oqcjaS4fsdP/yfVUwnMoFWOdS9tls2+sS6+q1Pkm1fMQUh9jK+iyPfbPXlQB09PtPvj8Ivoi0qznDQPelWtc+YelpD5CvLC52EQBYPRrG4tkTZScPxIq3TwefPHJKQAsKHoBBYAAAAAJcui1s9aTdAaRiOUmZfTUMzvfQRyAxrX5vOMgSX8t7ijsX/K/UUfaq9eoRbsTCbS0w5RDKX7INfNrJ53f5bc0MpImE9ZeKemTpOVNombSFNZEmPycqy/c6s/0cCRYNvl5HeXj8FZ/TC/+M1hmeQOPAebODVXXB5P6uE6L8G2RL8Bm5RoyR/ed3DdHr0PatbXwckmz47yBiWxnUWv6urywASKOMWnzZ0++fFN6V1Julotv91IXHEa5pgy++L8UABYgo5BHAAMAACRIw/LasyR1IBJR8ym7fNpxOHEAmjY5a3W5XHikpI+/8R/YEKFg5n4mUai6Vo92BsvzmAn8IfflJWt+MpR+gSSamO22UK7rY/vxmfkztrGriR/yp064aMvxRBRJdtllO/xJ0ovJyZvUrClWEZooAAQSNXdbhOugKB/XaQV+nugXeKV//KjVB2ZH/PKaAxfQa1EJ9r7+1E/d/fxyPEY7beuk/D5Phl0AS8q4pkYEcjdJHcu9pEll7BtCJnsAAICEOHD0/K4uDazee57Y1tlv5lrV/CKbtZBeBjRv2vAu77rCE4lEZA7tdeXHmxGGypXeH9NL8vi0JQrsiOmDui+npyC5S9DMtZLqqygvK3asc+mDGrU6XmZsaoU0LCCuSu4aIVWB/CExKPOcYdEesyyFrRTsl/leyYrusl6ixvQS5VykBUzmZ/1iXM8/0RtRSdp1mX+3XO8k436r8XNEPWZ4jJ/HXXvTs9KyVKvs4sHgoBv+u7akWlo7f0tzuUVEAQAAIBkygQ+V1I5IROpTC3KHTx+03hJCAbTc1LO7/NZk1xCJIq347iNjuYbTCQaqrN9Lktw1YPLwzm8TFCTZLdkNZ0k2Oe2fo7QFesksVDTzU8ZnN/qQXo00qK1d+FuT/pukHErjWGfSd7LZN1rRoyp1vknXPIRKi7FFeNnRP2q4hbk1+bixva6m76HS7J3NNrj8sqLnMktWXpd27raV7qX0fXpW1Gsbi2RNFO1ayhLbT78U1AVBR7pZQeqfG7zpYsIAAABQfvuPm7mum/oRiYiZTpx6xvpvEAggf3VtPjpLrleIRCR+dcj4j9YmDGjBvFUW8fyQa1N/c36XX9OoSINAq+7EVZ68Kfz1lTg25XeJfu81F3WfSm9GWmSzezeE0rXJzus4HocXzQ+hXztUK9U1bE+PKt06EEhGH4xyfIq2iMdL83GaP6T5mw01uV/Rw1Cpmt4FsPikimxnUWv6ujzWASKv927+bL8x1F0l5ma5+HYvdcFhVGvKQPK16FgF+ZDHIQAAACRDrWoHSGpPJCJ19aNndn6AMACFmT6o+/JckDlW0opHd+b1vQO3mitZM1yeo8i7qkT7BaDnecwEZOBieXAK/QBpcfOFG//VpT+mYDioaEUUSS6oVchuu0idVjXBrZKWlSlvKmZVH0jfoTcBSZq7LcJ1UHFFDPkuyjzCYxV/nqLOUZ/L6ehfjT74E3opKtWKXQB1WXTrF4spl1PD3MLd6FklDTnXtLq1vXnQISlLmlTF3p3H/wIAACRAr5tmt5PbQCIhKaq/TzG9nGu1eBgBBYoz7ax1/2GyLJGIxMC9sl5DGCpTen9Mj+fxaS4fOvn8jh/QM5CyTL4+KTlUrWNjEREbNDa79UL6MNImm93uQ5OmJHONkKaxJqQAsMrnoUjW4hTsl7mvWGq6rJcojkUVMJku/+VVvV6mj6LSdcll7pGUwO8eLJXncnMKAFcrSGD3qtziwSBgB8ACE9gWEAUAAIDyCz+p+ZWkzkQiMp+ZB8dMH9R9OaEAirfz5+uNlul5IlGgr7772LB96w8PJiCoAs/+5twutxIGpM2SNTMPSfo4zZ8h30fbFVcwkYziR5M/OiG75f30YKQ4c+8sZw5VxlhnO9OPEnPP00ibWZFtXKr+ThVgadcncZ0nhsJES1H/Mr3arv3nl9HzUA12mdi/3kw3FpKLHklqln5n0Wgfz/rNcwYSBYBVsbawRH+eQCEFgIU1jX9EFAAAAMprr6zXmPkQIhHhOtd02tShHf9NJIBoZLMWKtSJkpYSjWLHJz+ZKKD5jpKOy2zkS+fPQvMTZcYGRkidyWdstNRNk8uQN5G9vgrHpo9D5frTe5Fmb7757ydcPruSFiae5zG9yMszaads9ll22q7W+QkVcbNT/sd1WllzKv9LaPTRyHVmueP6ZvvW0ddQLYKcTZS0PI68jqyw2Jq+Lo92gCji89puLqcaPsa1kBfYcTzR1xntGrFGgXVgtVnAOOO2mCgA6dYn+0arzzuvuQaRAFASeawcPlseLn0uu9kygta89h3m9XW3zYhEZDdekx49s/MdnsplTwAAgABJREFURAKI1pRhnd7sPWrBRTKNbvn9t4sdFFbx00NHLtjqoXM7vUUoqoEp+p9HW37MfDMwiox12fm/Hd75XdoeaRWY3+FuJ0WeN3EMB5CZzrnmom1mEwmk2eTJfXPnXfD6PXKdXcL75q+eHOZ5vD652qpu3W0k/YMeBZTe6seIrw0wRa+DVhwgmrGo+Ysp/jwt+8AtO09+wTOzi48bc/Dr9EpUk/1vPGX+9FOun+SmXxSfy/kPWMlfJ+X1mdb7Xb8rN9dEvUPPirffxP9lQRKvqWVqXL5W1f6oUETs3fwTkhFIt0/WW/dga/BJFXe3GOugGdWrqiluaZsYyxOzqliJtGl53NZsbVdKpfvyOuXjHrv/rZJQrgL/0Gxuq7q6AQQQiEfXtTteNW/xgmNdtj3RKHyEawh0sqQzCEUlTunxFtzF96VyZF/svbR9XccJv6ErIMVuPm+TF04c8Z+3JNuqDDkU8zErbWz01+Zuu+Ut9FpURJ7k/G4L7OzkrRHSI5C+IwoAq3oeiiRvKNgvc18p4lglbrsV/Sf+z55nv/7Lxu3bjqZPojqHIr9Gsl9U71wa4blMu0kUACZ+bWT64jc0T2CcilzXm1uH8i0nU3xT6UYBIIBkzp8AUs8VbkEUmnfQ2Hl7uGwXIhFRvzPr/9C5Gy4iEkA8Jva3ekkDxE8iRa1xTXZ8n3Ez2xIUVNzyL9CQbNZCQoF0j9fmMrs33cnYgsmoRa9vyfHj+BKnpce0Myb3tRydFpVg5Mid/iGzt0qbQ2lfeKz8v/3b9KTk3POsvs2sqDYuXX/nB4rSrk/iOo9F3ycs0f1rWRD68Xtn926gt6Ea9bj+1L9K9nK+ueiRpGbzb/aIx4hoH89qK/0v25keVQ1rC0vs5wnctBadppB28SUEAQBQtV8l8F1O3AsNCgBb1A1tEFGILP3vmnZmpykEAojXI2d3/j9zu5NIFGWduvp2RxIGVMJa1b+63N9MPqfz8zQcKkHgwYMJuWst6PXVMDaZ9Mi12S1/R29FRU39rocqaWHieR6z2KeDmmlbelEVz0+oiJsdj/BYhfVdK2tO5X8JXxUwmXTFsVf1/Bd9C9U9soT3xJHXkRUWW9PX5dEOEMUsSrejN8W7FvICO44n+jq/UuxfBgcWqh3dq4DctYAdAAGgsu+ZgXKiALAZPUYt2tDkhxGJSMytqak9nTAApVEX1p/t0ofxflVQ2dz9RKLAQr0UxyzRD7nLAsudTVujUky8cKO/S3o78rzhvj2ypYhl7CzCgIpbMZiVtAAw3x1vEr+qd21NLwLKmYLNLH6KXgdZScei4s8T5S5ezR7r3bb+GY/+RdULpfskRbBDeBx/+FD2lWY+L96e3lSafhP/lwXJ3eWvKYGb2tKXChkF2QEQANK5UAP9JhXrjjX3u3JuZ3pGE6GsqR8QSrVEorEA5bWj5+CHh6zzMUEDSmP6uesvMPNLiERR9ug1cuE2hIE1YXJ2WrFiPvO4+4ev/z6tjwq77XmwVDlU2mNWxNg4YcIFW8ygl6LSjBjxrb9Impm8NUJqbJLNvsRmIVU+D0WSNxTsl7mvWAneaqn67N7su3xI3/F9l9IPUe0Ouv7UuZKeSdb6yNJ4ro0eGzihAz0qBYsEq8yFS+CuNulZTiapP/inJCmA6po/+SoMKKXawLYkCqvXZ9zMtiY7iUhEYvqjZ3Z+gDAApdX68043SHqHSBS+xg0C/YKgoALMrcvYFYQBlcaD8KFUX39LJ6NmX9+S45eu+NGkhTXKXEYPRYUuFl1uj8SZQxU3Vq+8vF4adKcfJeueZ9U2s2LauKr7ewXmbAnOE0NxnkXxeaK7LndNP35czyn0LuB/q6m7881FjyQ1m3+zR3isYsYgb/6c1rZh6bfoTSVeJHFNXy3qrdp3ACw0uQOrIwoAgKr+KoHvh2Jea/AY4MYsVesjJXUkEkXfn3xuHp5KIIDSm5y1OrnOJxJFzJOmX2SzHhAJpHsq1vlThnX6hEig0txy3qZ/ljQnhXe5JUn88sXBL7oqu9nH9FBU7Lxq/kSiZ/3Ixy6LbqwzyWsCdtgu8XxTuX9uz5fG5Yqxl6i9Ev0o4ZZ/nOVWE55OXwK+0sb8YUmfRz2mR1ZYbC09T5nnpzDYjt4U73ziBXYcT8x1xtcXAxcFgAXlrQf1RAEAKv6eGSibIAwpAGx00ez9iUIUC1pdOvWsru8RCKA8pgzr+IBMfy3mq4Iqnww2eqX1op8QCBbqca/v4/oh16TXtqvrdDvti8pMW3NJT0WeZ8bMWIT/1K2/+GbCgEpWV1f7e0kl+90m3x1vkj52BW4UAAKVci+UgOv1En32gne6dI094cpeM+hjwFf2vv7UT2V6mvGxuPO5OQWAFTPnWeo+T2AUABYU+0AhBYAAUNRNF1Cl/aalXwybUQC4Gr2vnLejXN9jvCm6G76Ta714HJEAypmI5nINIxBFrR2OJwoorECvdI/cbPzlfnE2ayEtiIrNTc/3hyP+Ki/6se4b8b1iYv9d+D4bFW306G0+Mekv0eVNtQ004db0ojKvDytlfmJKL6iveOzdyZof66wcfbssx5qZyWRG0u+A1d7IPVr8+ijKnUVLOalE9pekFACmZc1llbdwCVT2AkBPaRdiB0AAlTfPVeqYDaQUBYCrEQbqRxRaOhc0PmaHZmdMH9R9OUECymvKsE7Puuk5IlHwmvfQHtlFHQhEZamSO47XJ5/T+WFaGxWdy27PlD+lS1fsW1yhUew/OMyydUN2HEW1eJoQFDhuB+wAmJB7nEjntnx3R+Pb/0q4V0rQ4zpXd11W+nu/lc/jZsOOHbP/Z/QoYFVBQ82jLU9PizCXLe9cLnYcjPaxrvb1/y8FgLHMUZW2Q2BMOSx2ACzwZihXRxQAANX8VUJi11uVswymAHAlvW6a3c6lY4hE0Z3ryf9n777j7SqrhI+vtc+9KZCElpseigoWLCDgax1RkfSAMwadsY8OkQTSqPYzVlIIJCQglrGPSlQgPcESR1RAigoIiICQ5Ca5NwmQntx79nr/INSUe/Y+uzzP3r/v5+M78zrn7rP32utZz3rOebLPkgtbFhIIwJFZ1/TLRCF233FIU087i8DAw1T+0t6fSAUK63+qR7eqyP0ernJjvb7B+SzVN1GR6Vfzj39QEjUNf+XuQE3/mA3WupeQQe7PN/40kHxonFeM839aVxZjSuNfjslfH+9920/JH2D/hn9j/DoRuSNWjdB6xnKD84M2WpsymZ8G/eaj1R5kU7rzicVMHHPmPNPJxUBMu5FWcQLHEwABoCRrZiCvprfl9OqjLBKeJ9zeNE5EDicSDem0IJhCGAB3LL60769E7Na4HxWUvn0L5RyiQKOedn+f7Bezet+Je1p+wT1FSdY0v0x8nCkzY0StW6XyLcKAsti0oeNWEdnhaqvi+Gavwy6/9I7DyCKgIGshB87XMrr2KE9GVNXPVavVkLwCDjpeFlEfG3o/tZ49jyGPijLn+TUPB6JWIZGi37ea1NgACAANL7qAkuZNfX2HHnrYIYPIiucniJ1LvWk09+w7S6b2vZ9AAI6VN9WvEIXYc+qZZ1/5xOEEgh4y+utzerKPyZerVeULJ5Sk9bRVaSyUqHX1v95EZ363etwuooey+MY3Tu1Q0Tuz7SmKY0+3bkeTRTn0h0Wcn5jS06lBmkw+WiLvoY6Ok4M+guy2j84ewa+iAF3VokCXNd7vJPlk0SwnlWTeS0M9jkzypOfSNHMs+4YoEBEHNgD6t0xqqgX8BDCAkn62wFYbILNGraZsANxr1JWtrxSRNxOJqHOBPX9e2CFa+W+CArhn0cV9l4jIn4lELN1qu2pnE4ZiKfCK4wE9vu8C7jDKosPsjw40xJkds7GNQ6l8iLOhW59u15GJKGEncWsJeop0IlersQHQBdrwC2LMT0k+tQ1p9iyW4LHqe58UNudp9mu/p/9hRPBZ8gzo2vYNR94tIk9FGdfJjGWtaywnXRuS+7vnzj8UO5ZMSmOO4gmBXXFkA6B/Oq2JJwACAAosQtvLv+hMTS2osQHw2YwMPkSuNRzEuYun9V1LIAAXPydQM7U5BCJe36Fq/Aww/JiKzb6y4BytEQmUxXerx60Xkcc8XOXGen2j81kK73HFldOG7iQTUUK3ujtQ0z9mI7UuCAI2AHow37BBD13VlPyf1pXFmNKol/Ob/7xy+C/JGaBr5yw4p2Yit8SqEVrPWG6wH9J6aobmuhhT5QmAWcwnFjNxzJnzTD4Xg73/QUQV62QDIAAASHeRYDwBUESkWrVATT9AJBpaQm1uqjRPJw6Au7bu2P4TEdkY56MC6BnjZj91JHHA/tMjp5l33//qkeD4fj/mhqCEY/DWBsbNQcc1M+NBbWu2yjcJA8qoqan51lzeuM6ew+XNXmbGBkAAji3CkjoWT/8Doo08W1W+epPk+/EEQH/uqa/ndIDZzngCYKz7tidsZgMgAHTV3tBXoCx5k1KuqbIBUETkT73Xv11E+BC6oXGlV9w49YgniQTgrlXV43ap2LeJRCzNuzo630MYaJ6i95wa8fXxz1NF5/P0P5S0Eb01z7Fe3vWyfueq6nH0/yilavUVrSryePrjLN7r3W63lM9ekMm4QdRYaoKtkqs/16mp5aCaLPnP2cP+QHYBkUb3bxuv80k+WVQ9ix9PAMwtczP8MwcOvo9AndkA6Fd72KPbrj0MIABFnedY0gOOdEdmbAB8uph9kKrUUCZtqtT0auIAeFDtwtrXRYQNQvEmzbMIQsFuabFWKNs79jT9D3cVpRSEt+Z/Etn9jKcjtSs0CeeSfCizUOx2Pi+I01LzBEBn5iFN9pj8zHCxcsXSyrsX/WliP9eZeb696HzVvkxuAdFsbW+5S0S2RBlz+f4seJLHa6QWPxuLY8mirNfoeZ6TO9cTCE8AjGW79eQJgACAgovQRvOQhrT6zdJvABw3e3VPUX0vydBAGqldufDSlq1EAnDfjZ8a+E8RWUIkovcdKnLGmGrrIQQHbnbV+v0bqzyJF+XUs0/n3SLS6eEqN9brE5/g4l3l4muqL/sH2YdSt4sm97g1LtM+ZjK1TnkCYMnnJz7gLcwC2eHcffZ8NYn30Xre6taPzR55K3kCRHPOgnNqIi9+mrtGGub51zTNs3a2LDq3yueUqcwn2sA8pDmt9bObx4O9/0FEPWtPsQEQAACk3PbxE8A7pPksEemT3bqscDZ3Njfz9D/AI2Z6kKeE8RyGgy3TtWfzGYQBB2iq8hnPe/9HIME8bgLK6upJx+9Wkb9HHDd1j2uvZ8aUapOpXEXmAXqPy+M6+c1eCRUUs37kTqJ9IOBZDma18SbLYxl9ERB35KncmV5tarBG6MFrRLrzcH3n3rPSfQBZ5NhiOYFzsoZzP10BfWi8XNrZu4mvnwHAoQmt8H0FStl3mPATwCbBf5AoDS3S5yybdNQWIgH4o8euo5aJ2CYiEWvSGEsQSt48xVqraMTXRztPFf3Vgk8f9TfuHUpdnjXqk7hYlDfgL9d84WW/IQxgLSx/bbxHSO/1Li9Hpl/yQG8yCFmMG0SNpSbYKiX5c52aYG5osnEze/zxPj1/TkYBcQeV3dF4ndfGx7Kn68SKBPzDinxWApn+mQMHf4FARGq0h9F129iTn04GwDIUILvS1vuMyzcfVtaLP+PyzYep2JnkTWzbm7p1zCcMgF8WVHWPivyUSMSho6pV41cOStwTOtoL8CReIK8ncb3wHJw9ZpK1znjKDSAiIk1Nr35URLbxeUF0e7p18GW1K/OQJnvMEm9sLWSuWFp596I/TexpXZnnm4oFOq9afUcnOQXEE6rdGWXMZTl3WOrHa6QW741FGPQni7Jeo+d5Tm5cj2MbAP3R48gKXyoAYP5ECRi5lrPuTbteVtZr79a9Y6yIdCcLYo/f79xw/hCeIgZ4KJTKD4hCrL5jwJ09N7+B4MAhj5y4p+9iwoDSd6Wh/dXr80/59cktrHVT5Uj7MRkHiFSrGprYfWk2nu4dM5napRa2kEFlmG/yy00U775Z3PPVJN7ngAfZ3qOp9i1yA4hv1PzzHxORjbHqTUNlKaufEE+5dgbGBsDU5hNtYB7SlHupfHOeDYAxbdmyjScAAgCA9Ns+DUq7AVBF3pvHuqwgahrKbMIA+GnRJUfeJiIP7f//ynMYDiYwG0MU4Er/YGLXVasaEnyUXbOF90QbO9HGtddPNEq0NtlPrp50/G4yDtg7vCynp4/WOa6Tr13JFJSaCBsAM7tngFs5m3xzkt+xVOS7H7h89BNkAdBwIbkz+UMmVCP04DUi3Xm4jnM3ZQOgO4vlRM/JGs799LABMGYuVZqb2QAIAA5NaKXoK1DKvsNESrkBcMTcTX3EZBgJEjuxfrbo4gGPEgfA1yGsJiI/IRCx+s4ziULJm6dYaxWN+Pq6zrNWCSs/4n4BIl//wrGPyfN+ipNFeUpzYCDfIwrA88aE2j8a7xHSe72znZYZGwCR2bhB1Fhqgq1Skj/XqQnmhiYRt1CCYA5ZBCTST93deJ3XuGPZ63WiivQjg3KMfoZ/5sDBnxWIiGP/EtmP9rBbyE8AAwBLepBdWXRrWsoNgFrrPEti/PwvefNMHGwuUQB8r//hzwhCLK8fM2tLX8JQ3p7QlV5AxX694LN913IHARFRNRV92IWR6eoxE6h1f7vm8y/9E8kGPK+dlsrDfF4Qq6qxAdCleUiTPSZPMSxwrqRxrH2etpzu5oXk8s1WfWzmmQ+RR0AiFeR+V8/Nsrj6xs6QJwDmskYv4jlFWQPxBMB4t72yiycAAmD+BMi1DIQvK2kqvZd7Hzt29yy5sP8fiATgt4UX9/+riDxIJCL3HYF0dryT4CD3Dk6CHxAF4PljorEnceUt2w0TGuMvjKf/AS+uO6EkWHfK8YGXiUgYsAGwPPNNufO9ePni233TBE/7hQcxU/oiILmRen/UsWiJlKXsN0In+7OuKsYGwJR7Ic2gJ8oyb5PJeTYAxs687t0JAgCAdgvph18Hl+2Sz5y5/lCxLn7Ckc8iDxabrxMEoCgzsPIUwFh1MHw3QUDO/cP2yp7wBgIOvGBS+0e6h/d4ldt4baqJdPshSQa8UGdn5WG3zzDJn8Pb/zHj1LrAlKdpF3W+ATmbS31KdhNPHdeztTnQn3PngYRqSKX24L5DvPFxndiTRfXg5xW1d0qyVpoo/6jCgz7cYv5tshtGkxOYSAc3OLowsB5EAQBKM/8DeRooZqXKxu5N+m4RodeKZ2tnUxNf/gEFUdED/QwwXyMdTBAqGwBp1COxiMe0rk/vhgXVftu4T8ALxs3D0ccl6/Y6g3DzvOrRrcQBeKEZM16xVUQ2NN4jxHi9pnP8bOq19SF7AGf6p4M3Pw33QY1tYojalGVU83724VnDtpM9QDJGXj1pi4i0Nj6W0/iHD46v0kToqTKYW/z6sCD9cwpUZJcvLY1LsbdONgACQJSazdfU8LQjcKHv6DHq8scPL9N9D0MbQ97ETqUfLpt01BaqB1AMN17S788i+k8iEXEeUDlm9Iy244lEeXvCvHuBMAy+z10DXigILMaTuNL4cNzdY8avdSE/cwcc2MN8XhBZL0KQJs3kT8rci5c6V9I4lmZ7X63B8zXR75I7QOL16IHi1sdU36s3ueNBo7Pf0/H3XxoGIrKTpIoRuCbpSRQAMH8C5FomfUf3boPKcq3VqgWiOpK7HnP4hfz8L1DAgb2EIETvO9QCngKIvFKyten4I39NJIAXrWlqtX/4fg3ZboCoe2G9vVuf7jeRYcCBRlKS/5imHB94GV9We3jPNOo9Jt+LNWYzvm8pbEzUpI5lj3z8ijN/R1YACY96tQeijuuoT0WOW28swWM1soY7wBNbe1Wr1YAMSnPtXbSn/DV+PWwAjJt0NZ4ACACg3UI2Qg0GluVa7zx8/SkiMsDb3j7fUfr7hRf3/yuRAApnMSGITs3eThSQR/9gIj9ZcI7WCDTwQk+86iVrRaSW8vjzd5UbvzatvHLaUD7fBw40ztUc/3nsNH4OTxutdTwBkPkJJc/B5OtTspsGD/g+FnxfRRlCQMLCUB5JY1xbUsfSg59X1N4pwVoZnPF4z0PJoKTngaTmO21gntSGerY0J6pAlA2AsQpdhScAAgA9CZANE2spTY9VC8Zwx2Pj6X9AAW3ZsX2ViGzb3+yAgzZxbyUGNOppHvNAI9AC40lcwH4sOEdrJrIh2jqIdXvX107NAQ4q1LWNHiL25i1N5/gZYAOgf/cMpcs3TbAP0gTzWvMcPxYG8n0yBkhhyaH2eDJjOY1/+OC2HYfwZOUs5ha/PixI95wCMVc3AJrTsQ9C4QmAABCxZvPhCDztCPLv+ULtU57FpIwmb2J5ImzesoCKARTPqupxu0TlV0QiskFnz9jwUsJQ3p4wnyet2KbKS1p+z90CDjjQYjyJK9/NvlkfM2ItqklzB08KBg42poJ9nwDI55NdYgNg6jSTP/GpF0cWN14b/lPLNN806jne+V+zhj1KzgDJC8Lg8WLXx/Teq6nGBkAvGp39no6f/9KQnwCO3XwoiyAAzJ8AMhq7YSk2AI6d3j7IRE7ihsdKkp8vm3T8buIAFHUa0JuJQvQet1arvI3gIONkXMrP/wIHrddrfb+EbDdAdPUhjt0y/9Ov3ERiAQfro4OEfwK4FB+u8kW1l/OTRnw9+e5bT5HVsbKvhZrIIc2EpyIDaQmD1XHGddSnIsetN5bgsRqpqfv7u1ArfUqfPl7NSf6fU2Ciu6hacSKnfQgCAKBcIrS9fD6UbKto5fjwNWwKz4icPeTa3tFZ+1+iABS4PoY8ATDW/KnCBkBkPB/bQqIAHGyQWGv64zDd16c7cUWe6PiiG+hCrbnW6v5ZpvFzeNpIret+3bl3NJM9zE/wdiWcYE4lWZ801TEVhnYD9x5Ix7BvnLteRHanMa4tqWPpwc8rau+UYDfKQ8VixjjJjZj1nFM275f+fBmo2Q6SLU56GhsAAYCeBMgmBVUPK8lYO4O7HUvraVsH/JYwAMW16NN9HxDb31OT+FqoC2wApFGP8Wf1H/NFI3BPzz2VldwT4KDDqzW1DRAlXLdXgpBNx0AXekjv1jya5qhPvHGtq998ZDe+rPbsnqHkayFN5ljmzfjZZ5Pzw+deOfw+cgJIq9qoicmaxGtXYebcA19TUAvYU5RT3qT/YYGL5yQSSCBbSZgYsTeeAAgA+SzuQN6Ur+8wLUHfYaYmyW4AtNKkjV5frWooAIpeKHkKYHTHj5zRNoAw0ENm0zvYqh9Vj9pC1IGDivkkrjQ+HPd+x+C9V3/u+IdJKeDgqtXjdons+x0YT2M7uN09Kt3JnrT5Nw/xuX5+uWJepaxm/qaqxlORgfStdm9eUOffywLrRur43Kr5168FYvIU7WR0IU8ABOD1hMVHAIBXzHoU/RJHzd1woogM5GbHSA+t/ZgoAGXo4YJfE4ToPW7FgjcSnALNeW6P0UXcIaDLxrW92LUomZ/cszqOqSJLSCig7tqzOZPGs1A6m0gcf9Y8z80fafy0Hj+N48v6Jqv7aankhu5zyCixCVRuJJuA1K2PM66jPhU5bu2yBI/VSH22fd5Nm0mdLOYoF/uVfM4pEDX+dXI8bAAEANCm+dZveUrFir9I6Gzg6X/lzrV/LJ428HZGCVACYfh7ghAnbnIqQUAmXXKtwgZAoOu+fXMm4zHl16ccozrP2VaRUEC948o2e3CSKdQ6jV/rdoVsAGR+gudNV3I5lWR90uTHlEr7of/c8gfuOZB6P7UxrXGd2MZirfd9sqlRIiISGj1VAzFOaiNmveeUzful2+sFYvoUiRanxrEBEADoSYBsmJbgXwmpvJs7HSs5fkIQgHJY+Kl+/xCRDdl8VFAcgcppRIFGPfqf1X/MvSPw4V989ojHuBdAF8Nu7yac1DZAlGfd3rmrZyf/MACoXy4bAKM+8catrp4NgP7dM5R+LaTJHMu8GT97L9h08TkLzqmRC0Dag7aS4NPcs1i4Zb041AP91/RU3t7TtM8pnesJVNgAGCf2GshRBAYA8lrcgbwpWd9hxd4AeMp11iyi/0LeRFcRfv4XKNnS9I9EIZpQ5FQx459y0EOm2juY6P8RaaAOQdjAJpw0Srmf04OK3PU/l75iKwkF1G1TXj2CvwuPZr6szqqiF7y3RnK5Yl6lrGb2pipyM/kBZDD8VTbmOS9k9WTRpGsbPwHsec+l/vVrgWjo+E8Au9lOmrEBEED55jk+AgDy6oaK/RPAA7evP1lEenGnI7vvposG/o0wAOURmvC0n+ht75Fnz2x7CZEoUl/k4kmFbAAE6hD03bxZCvLBQdQvoBrbaPTCY4aivyWbgCjjKUjhCYAF//clys/VubzAOXi+p/HTevx7Kl/WN1ndT0slN3SfQ9ZzPVYR+iIgk2IVtscd11Gfihy3dlmCx2qkPhs9VU5zVNGeEBhPoBbwBMB4WggBAIA2zcN+y0/FXiRY8FYP+2gXlg6LGRpA2ca93U4Uos8FYRjwM8BIN/UCYwMgUIdvjD+1Q0QyeXKd10/26mpto8YX3UAEQU4/AZz84I9TuzRWrQsqxtNqmJ9Q0AWyJXiseLmb6Ie4D358xpmt3GsgAxVtlxTHdWIbi7Xe98mkRomEARsAG4xxIhsxI5xTNu+XXq8XdFgnGwDjOWLc9VYhDABATwKkzQqefabyVu5ynJoULCMIQLl0l6a/7P9zAb4W6gIbAGnU0+zvV//8U/0f4R4AdYu1EceyHdcuq9W6yy2kERChfpjl/ytYddYmd7p6nlaT+PwEuLYWKsSVB/yjCCCrRUinbPSv3mju7xdKyD+qKPyc59Y5Bd3EniBRYt23YNv69UcSGACIhw9HQN7U33cEIrXi3lRTkXQ3ABY0b57cuqUvPwUKlMyCy458SkQeJRKRJ9aTiUH9fQc95DOvrzswPP0PiFZytsbv0flXeSLy529c9lL+QT8QpXKobM+3p/BQJxsAmYfg5bpGk8lxy2i8NPpznaHYKrICyEZzED6VbL/j7JNFkz1vFXoq3/s4TTPHkj9usKP92I3ur0PcPL2OivVloAAo2zzna80GfGYiYVGvbcwVm14uIi3c5chFfMWqqnYSB6CEo9/0bqIQeSZ9DTEoXG/kzphUNgACkcav6Xa3zkgzO2ZjG4f0mf+XJ90A0cfkjmR/CrP4wiDg169cnoc02WNaxDdl3OS1vtHMj3WwP03s5zr3d3Ct73qCCn0RkJUO022NjGv3NhYnWZ8P/HeBKD2VE2v08lxPsPeLQ54CGENFhQ2AAICSitD28o9jEwi3FfYJgKadb2NdECtySxkYQEmnhCD8M1GIOhdo37HT2wcRHKTUzLABEIg0ZGxHAVa5sV6fxNomFLmTLAKiCTXcnulAdfyYbN4q/nzDPUZXNSX/p3Ulcm0PfnzGma3cYyAbA2qVbYnUCM2gZmg9tUkz6cdCVb4h3e89TuMfKzTa9zb+jx2y/rv9Cfb+z3bSLc6IDQcSBAAAkDrVAm8A1Ldwg6N3obXmcBlhAEo6JZg8cICKSnAOGreApwAW/y5n+md7bf75p456kNgDkcTeAGgRx3URZ8ZQ+IcAQFSBiRsbj+vsOdjs5R/uAbxdC3l8vjwVGcjWqd8Y3yEiu7OpN+rosYpYj5nzinZOezcAKhsA4903niAAAA3w8sMRejfyJodcM5FagS/zjeRNxJip/GnZpIH070BZ58HA/k4UYsTNwlcThXL3uPG+TO8yMH8WVb7zBSIInrcBMKunzxTIjs2vehmbjoHolSfRDYBs0KNxBpxe12gyOe7ez3W++KlO4R/IBiDzKXB7sv1Okk8W1UwDgZL1cZrmfU/2uIGIiJl58AWig8skNZ4ACKCU85yXNRvwmRVzA+AZl28+zESO5wZHE5osIQpAeXWv7HlIREIiEbnx5QmAhWuPnDiHP3MngIi9rNp2984qu5/xbGzjkP51wTnFfTo8kNp8bbojyXEJODEPabLHtIhvyrhxO1csrbx70Z9aEseq4/T2dz2mlbvJByBz2xoZ0O5tLE5yjqTHdH+NXo7r2fsEQGsjieLcpmAwUQAAlFeE9pV/ENNYz6FWyI0ezd33nPJcP8q6oO4G3sLljAqgvBZMG7pTRB8nEhHnAhU2ACKFdlj/QhCAiCXagu1OD+uUX9/g2VFzgDgjx2op/gSwenLMPGsX8phvuMfFz4lGa0r+T+tq6D12h1sOv5+sATK3LZEa4cB3OF3/6gNfaqY/36XxjxX2PW60eajxf+yQ94bRp79w1YCfEIu3cuQJgAAAIAPaWcSrCsLgNO5t9EX21m0D+BeuQOmnBXvkAItUYnNgrxp3vVUIQ+EHR6Z/JpUam3GA6HY18scWcVx7PTO+uDZpwDoAiFM3LOh0dlw3Wuvqfj1fYqeeZ4QAmS1CijLOGzrfe8d/49QOcgjIeNSa7MxuPm2wpmme9ZG+q5wxduOceAJgA/fNVAYREABIqpmjrwAOlGsqtruQl6fGBsDoNfOPq6rF3BAKIILQ1hCEyHrseuypowkDPW70tcoBA7O75Yh+fyNKQNRxZZ2NfyZQzoKlys+OA/EkvwGQp7EByH+dkmar5OrPdT57LP5RBJBP7ek42LjO/8mifLCFdHIu/fRK7uCBiEhgsrYgLU3W+AlgAPCnZoPs8vh6dVdB7+Np5E3E5l3lFioAANNgNVGIobN2PEEod0+YcC/wt2+MV546AUSkZjVHz8zZY+6tXbWOsPs9ZBAQXaXSWatznAF+zRma7DHZ2Fqs/LO0c3mfpy2nu/HmhddjbAAE8mDSwFouyY3F2c9RlkkvAPdjrM5fTyAiEnqzAdA5vd81b81RhAEA8yfK3PGTa5kM051Fu6axV23oLyI8iSmqmrEBEICo8ATAOH2HBnYCgUGCSfZnYgDEKc/Fe5p1RhsmHv1GddAOMgiIMUat0nnQJjGNxtPJYyZSi1D8+Sb33OQec9+e97M4+/+/aoUNgEA+Q7Mz6WGef01T5jyP5juLeV8tZk742C8HIiKVUNkAGFMlCI4lCgAAIE2hFe8JgDWRk1JciBZ0fS0d0ie8lREBwFQOsgGQr/IOWEdN2ACIxPoHtfAvBA2IIWj8CYDm2Oszqk2PkjxAPM3NHW49ebTOniP52sWX2Kmv03yeb+DHIiTnnI17zgn/XGetWWp/JXeA7IVSzwbAxutaYk8W1YOfV7rzMH1X+nFy9wmB6W9wPLBARGTn5sHrRaRGgkXPJa3VjiUgAJDHQrPUa3OUrO9QDQu3AdBCeS03N3Iu3LVoPE/9ACBiGmwiCnHiZvwEcCl63GQvwg50TJWHSBggzpja9wmAqX35XKh1uz1C9gDx7NnTnMp3X2z2ApBvT9VF89NwH5Tkz3VqzOvZ77Ee/vCsYdvJACB7gUmXT1X2dGMxUqWcU4bnFIiIrKpqp4hs8Lmlya/S6bEMWgDwpGaD7PL2WrVwPwGsks8GQJ/zJjT5HSMfgIhIc0fIBsBYk4CyAZCeMMFeIGAzDhBv0Dr8j9Bd/hlPag4Qu+zYrrp+ro5PMeHlnKHJHpONrcXKP0s7l/XF75Puhgp7+i3+wf0HcuqpVBv8CeAkNxZnP0dZJr0AnI6xNnpO6V9P8Lz/nZ8BjjfUjyUGAJg/UfK5kFxLe4ia7CrgZb2aOxuxcVe7hSgAeFp3NgDG6zuOHVe1bgQGSTTAQY+djxEGIM7qsdEvjbxfFcd6PU8ABBrRM+yqSUyj8XTzmGC+ITeLdo+Le990v6etpo+SJUBuFaozjWGef01jXvNpvrOY9zXPn+XNUtPz/ve1InIaqRa5IBxHDAAAQLqNcLGeAHh61ZpE2l6ZbosmhftnyGGou0bNaj+FEQH4oznJg3U8b14I9lT2Vjk90MzBh1f7VenstvFYEfk7oUCD/cO6BdOG7iRgQIxhpmJJ9OlRZ7q0X592bVLjCYBASXuOhGvjC9+YVUMe94CVGzIqCKnmYPRzPvD7RDuWiT1MzgC5VauwvprReF177n0aPNYL/nzfY0XtnaK/OdKdB9OaQxs/p7g9XtjgmTc9L7vXkIOxvIQQAAA9CZCmIJBtRbqe3n3WvzyUoDt3NmLJUVneePvf1cqaBUGs5boV6mqyUZL5M9ERW3l+3GhAYt8T1aOFDYAl6HGTvYinP7R73jFN2IgDpNAapPLlc0HW7c08ARAoRO1icxiA9GvQ85qfhvugxjYxRG3K6nkfU9ZigDv2P65921iM/HKFc0r+nJ77CeDA/ulXS+NA7J8+lZc+/RQbAEAjNZtWDJ52BJkI1Z4q0vXUVF9L3ri6DiM65A3Im6LfEz2aKDDWGh6bARtxgAI3xC4ec/NV1eOe5N4A9O9gzmDcIJ1cUW9SViXkCYAACt4LwOkYq9v3PXjuPJUPL+Pd4G7dW9YcSyAAMH8C5Fp6wi1FuprAgldxT4E8OfQPqoDMcy1kAyASaM30UYIAoNEOq/7XU3MAPxYkLHLgZjpbxNw08t27niKrY9X3PilsTHzukNZNhL4IKMCkZYmUjK7/2BI8VpY1lfmuyP15uuf07AbAGh9exr9FJicQBQAAbRrSC2/TlmJlS5hN78RnkSjGmg1AknOQ8gRANF7TjX9EC5Ri1erOKtfWc/cAGpPkapc6WuuYn/ybn5DnWE/yfSyjc7bGj7X+w7OGbSdfAB/mLU3wfRo8lh78vCyDa0GyMbZUc3ffc7KY15NHz/bsBsCm2k4+vIwpVH05UQAAehIgvTSzLQW7Iv7xBACk3nfwtdABQngMUShLj5vek30qgT1OkgDJS20DhHofmE1kB1DAWqcRX4/CzmdA8vmmCfZBSW5iaPBpXSbsZQCc4+rGYpQ9B8vxYcG+nt0AuGzS8VtEfPowwZ2frVLhCYAAkETNplGDpx1B+g1brVacDYBmKiIvI29cXi8RHfIG5E2h8QRAxlrDr1cL2og44EzzWvhjqko79xkoTk8B5qF8jsm6l/xL8ViZPcDQ1nHPAbg3l/KkmPTjpA5eipv3PXjR//9hEi/WDX4FQQBAPwSQa2npse2JwmwAHHH15sEi0ou7CuTNnX9QBWSca0P3bkYHYtttnTyNC0AiHVY9rzeVzUQW8GVBQpsJN9PZUvlpPfLdpZ4iq2PV9z4pbExUEVOeigwUadKK+lTkuHORJXisLGsq812R+/P0zulFGwD1UVIsVlaeSBAAAKDtTakP3LWgeuKewlxPreOEjOMHkGsAnq/7e7629UjCgAZqum3p6McXT0BJVq1urHJ1I3cOoDFJtnapg7WO+cm/+QlFqin5/1xn18cKTHkqMuDVvKUJvk+Dx9KDn5dlcC1INsaWau7ue04W83qy7tmCF15s+AiJFUvLyPmPDiAMAEBPAqSwkirUF8wV0xO4qQCQVd/B10L7E0pHf6LAgGngmE+tqmonsQXSWv6k9HqP1+0ahmwABIpa6zTi61HY+QxopFmxro6nyZybZXSddsC1vNETAR7Vr/w3FoM5tOAfFuzHi54AGDxICx0vHzqk+2sZWADQeM2mUYOnHUGaNhbsXp1A3viwXiI65A1Q4HFcCdkAWNdcUPwaHfP1fOkElKJgqUNXxxMAgaL1FGAeKmIzzjgoQv6p4ykb0BMBhZvvinK+PCkm/Tipg5fi3n1vesH/r2IPSI20i9VySPgaEVlJJAB/9N60+aYd/Xrx819AxmxP94ki8iVR4ZOh+nrIov3E3DHcVcCZipz/IrUkc4EDkcbzc82EDYBoJJf40glAzHl//41PV31Cp1SoO0DG45JFDrxf8+x3HKhohNysbx1LvvvyWUJWn0s89z5J5sbTx6oEIT8BDBRs0nq2ZjRUMrr+4/prYH0nwme97s53/vQr6ZzTCzYA7tnR+WD37k1kWJzbY/IaogD4ZUH1xD0isodIANkaeeWG3jxdLFLjW6wve1SOybzP5rNIAMALBGwARPy2wtgACJRwTZbrlzsVCTdzF4DSdyAS9YONrmvXC4/JF9n+zTfcMyRdU+LlVJL16eDH4h9FAD7OW41/OZPYxuIuN8pH652Qf88btxeK9nfPnVM279eYF/wE8Kqpxz0pIutJrBg3TdkACABAnY0OX7pHane1vWAJwBMAUez1KeBcrvHB1L4hMXoRBkzsPzMRnjoBuLfGjDSufZsZu4ns4i4DBa5dGvH1cH++4Z4h67VLJsfT3Mdbc62TtRhQmvrF+aII9zT7cwr289/dT3LEum+vOuW6O5oJBgAAXUybKv2y+lCgCKxAT3sYc13rISLS16344sCDlegAKOwang2A9ceq8CJ/kauyhcQA0i0ulsIxfS6CO6Q7v14B+NAjEDLmNppxxkGO+WcZpZMl8h7xTmbnrm5PcK8Bv+a7rNZ25sRcyqZCf+PUyD8edut69rMBUB+gnYylR79w4KsZsAAAdDlz86V7lHipFuanDcIdPP0PhaljKPqan7wp+s3oRxAYaw0ULTbiAEi88TlY7RokD1J3gFR7BL6sRXnW15bKxg3GkC/rm6zup6WSGypNnb13kxFA8SatqE9Fjlu7LMFjJV2fkey98adfSf6c9tkAqGoPkDjxhLXwFKIAAEBX7czzfnaPz4fqaDBkY3FufuXoAvXRQEHwUQVK1YQ88z+PJBiI35sZG3EAOqYsO6xatfqOTu4A4Gvjme8xLeIxWR2Wer4BdaqBnNLUc11EwvHfOLWD+wb4OG85tLFYG70evmhKP5eyeMpk1L/TjN8vvn02ANZCNgDGTkrVU4kCAAAHmyxNRaSFQERoK83WFaiD5wmAKMGgJQRwMdf4WuhFDicEDJi4f6aB8tQJwMmlRrRx7dHMyKZjoAy1SyO+Hu7PN9wzZL12yeR4mun1Gz0RUPL6xfmiCPc023PaZwNg0BTeQ2LEu28qwgZAAAAOYtiVa44QkW5pHb+IH6rVKmFrYS4mlCEunhYfxh6sxyU6AArpCEIQZS4o/iVapNfyBEAgi+KS1dNnPCiCbDoGPOkR4tcu0DiXvBlHYrliGaWTJfIekU+GnggoST8Vt2CZE3Mp87a/cWrkHw+7cz37bABcMf7YdSLSVoaykcJpvGbE3Ie6M2ABADhA49HUNIAoRNO7uXltgXp67j8Kgy92SrDmJ2+K7HBCwFiLXa6MJwACSKfxOUDtYtMxkEmPwJe1KNP6Oo2f1mv8p/GQzfrGu5/rfA7rMMCZ+SX5J4tasieYQD2t7xqZ85xsdFKd39y6nn0F+38P+yuJE+vedOvU7q8hEAAA7F+lJv286LfcsXXBxH7binIxJprvBkByDTjg6ARKtG4XEenJP95D/BziCYAAHVN2HZaxARDwvvHM+5gW8ZisDos/33CP81dzvE7l/7Su/aInAryet+qsEVrP+zTYY2myvRPSyKU0/rFCo3+nGb9fPMEB/uu/kF4x60VF30QUAADYv5pqf6IQpZ3U1mJdj3H/UZbBCziYa3zN84LQ7TqMnwFmwMT8M+WLJ8BRFnFc+zAzqkgHdxagVaGrL8n8BDS6dsnseDlcv7IBEIAP9Rbc03zP6QAbAIUNgDHvm5q+hUAAAHDAqTL1DWDF+lDN1hbqakQHMgoAAC6odAaHE4VoTRyeaWiMn54CMiouWT19xvllFIBCD1oGedHuMY0zHK9BDadoTj/XafwEMODzGi//J4syP/v2eYBX5+TQpex3A6CaebgB0JllEhsAAQA4cA/EE+CidTfrinMxpirWj07Sx4FLdMibEq/5yZvCCkQOIwqMtVivN6sRXYAmJa1j0icAefYIjEsUaB7SZI8Z9ecdGTdu54qllXcv+tPEfq7z6UN0cn8Bl8qMJn7QzDcWp9ZbstnQzzV6nueU3PXsdwNg775bHuBRurENGTmv9RjCAADAfnuYY7zp1RxgooV5AuCwK9ccISLduauAuxUHKFE/IlaxQwgEACDtjokOC6Dx9OOYYH5Cee+ZehUHACXoixxodazLE6EfS39eSOMfK+x7XIuZw9bw9aVjvxsAF5xz4h4RuZ/0iqcW1HgKIAAA+2tsTF5KFCK1kv8syrU0aaW/K0EFyDWUN9f4aP15oWADIAOGmg4UsrxHG9fMjAB8bFWS3zhEs+PM/MTKDY6MS8v9nKlLQJHnucbfp8EaodQb5tBinlNwwMFjcgeJEe++mSkbAAEA2L9MNgAW5UOyUMJ/FuXGB7Wmo0h/AIAzS3cNehKFqEEjBACSWONEKy75f/kMANGx2avs95h5CC7mpyaYon7/XCeAtGmuaztjfvY+V7w8J0cu5YAbAAPVPxV/WZVaSvwLgxUAgBcaMXdTHxFpIRIRVOSxolxKTcPD6SR9XocRHfKmxGt+8qagN4GfAGasMTYB5N2kJPnFGAB6BDAPRf2TNH5aj80VvuRK6vdzn6ctkxtA8cpM8k/99HVjsTEfFmSNnuc5JXM9wYEPr7eTl7Gd+K6rNvQnDAAAPK+3qNVe4l2vlrPabi3MBsBA9EjuKOA6vtZCqfKdJwACADLpmOiwAJ9oiY8J5ieU9575+HPDAArdaznQ6liXJ0I/ltbNtIbuWfRzspjX4+L8dcANgG3BuntNZCcJGS+LK82dpxMGAACePzvaSwlCpBaybeXFA7YX6P4f4fF6AyDXUCB8tC4iIkHAEwBBTQfKPtMpMyMAf3uO5DcO0ey4thJjfoKfG/O0MNcPwM15K7Eniyr1ptjzoLtPCExzrBxwA+Cd40/tUJE/k1Rx75u9g0AAAPC8plzDTDcA+v4hmYn8s2AJcASjAADSXIMi2rzETwCXN9cYMIADa51I49IY6wAKUeuSfT1cv8fMQ3AxPzXBFPX75zoBpE1zXdsZ87P3ueLlOTlwKUEX//fbi7+sSi0l3slgBQDgeXOj6UuIQqSIPVakq7FAD6OT9H4QEwPyBuRNceJv0oMoMNYYmwAiNsSeHBMAPQKYh+r9E2UclDhXLK28e9GfJva0LgAOlhl/n/ppqR+PmufnGt3vcwq6SNI/kZexHT9yXusxhAEAgGdbnpd52avlxMT+UbDrOZK7CvgxWlm3oySNSYUgAABc7bDYYAEUbUHCIgdlmm/Idz97BO4bgIMLs66LDZUlfo7crXkuyac4JvV3mvH7ZZNrB98AqD4+AdChIqghPwMMAMBzTRBPAIzSpJk9VLDVYR+nzoc1G8g1oOyDs4kYgJoOFHr96dTrASD5niONL1Jpdnyfn8AiJO+cTb4+UZeA4s1zmuD7NHgsPfh50Tv5Pg+qs+eUVo930A2AN48f8g8RaSOpYhee4UQBAACRU66zZhEZSiTqV9Pg7wXr0Q/hrgJAqnU22mq19EKeAJhJrnERAOqdiTSfmYtyACDTWpfv65H/PQbyz09NsA9KchMDTRlQPJrg3JndE+QAn+el4ODXpCYmt9Byx86HM0+vGk8VAACUXt/t7ceISOZzotcNfiUs1AZA9WgDIAvDg91IokPegLwpSvCVDYCMNcYmUPzmtcTHBECPAOahev9EGQfkX3rH0hfnDX0PULwyo76eeAZzWkCepD5nqYOXkt85dZlxpnoLc3FsR/RoWfdGwgAAKLtAwlf62qvl1CE+sWzSwPZCXZLxBEDApwHr9ZofqC/H2AAIAHC6w2KDBVC0BQmLHJRpviHffblnxn0D4NQa5UVPFtXGj5XlvMYa7mBxye4pjhbzvrpx/4J0/zoIw1tIyQaSWcMRRAEAUHaq8mqiEKmD+HsBr8m9DYB8pgVyDSgzntaPeNg6ChR3FZby6wEg+XVkGl+ksoBlvoGnBcGZnE2+PlGXgOLNc5rg+zR4LD34edE7+T4PaurnZDH/No0er8sNgLvah94tIttIqtiVZyRBAADQm4VsAIzU+hVxA6DyBEAASH8CibRYLXmw2MaVWa5xEQCSGZepbZigHABIkTn2euR/j4H881MT7IOS3MRAUwaUZY2X/8ZioJjzUpcbAFdVtVPEbqXljp0Prxt97erBDA4AQMmbpNw2APrY4IeqBdwA6NdPALMwPNhwJjrkDcibIsQ95JsFxhpjEyjFHKglPiYAegTkz5E5Q5M9JuOgjPmnDf+ppTouAORbZtTXE2dOK8ScpQ5eSj7nFNR3fvp75uL4t7czDM4iDACAsjrlOmsWkVcQiQgNWqj3FfCyeAIgAK/X7ShaeukuogAAyBobjYCyL0hY5KAY8xOKdc+4/wDcqhkverKoNn6sLPs4aurB4qLO5ltR1LUB0EL9LSnZSDLb2UQBAFBWfbevP0FEukVq08r+eWhF7y3gVXV38qz47B3kWm5LayDnQbmTGAAAGu2A6JgA+LjYpHYxP8H/e5x1Tcn/5zr5EBfwqe+wBI9V3/togpelMa6HGuVaz2sN51S0c8rm/bpW1wbA3Yd0/NFE+HA8vtNHXfPYEYQBAFBGTYGdTBQi2dlzYMsjBbyuCrcWADIQ6bOQ8n4tZBbyGQeED2gB/8ZlahsgKAcAXOpVI9YmNns5dM9YicHBtYt1dTxN5tzIawDpL7b4hw/IOgfVg3HxnLo2AK762HG7VOz3JEbs+9Zck2AUwQAAlFEowSl5n4NnDf59C87RWpFyYNz15uXmPxaGB+txiQ55A/gt4AmACcwFxa/R1HSgKL0TP+MJgJ4CRWucmYeQR65oBn9KbgP+lplsntDGXMqc5cX91HzOKah/AOqv+NmqBs7E9D0MWABAKds1tVOIQqSIFe/nf//2N57+B6AQ6/bir1zLwwI2AAIAXJv3+QIKKMe4ZKx7qQifbGlX48C3jRswR49V3/tQCwHqT9eTVtSnIsftvSzBYzFHdhUXdTbfiqD+DYBqvyQlGzJszHWthxAGAECZVKsWiMnrYrVp5f0M4L7CXVGfPm5/TMrnTSDXcltaA7kJwx0EAQCQRAdExwTAx8UmtYv5Cf7f46xriiV4LHIXKH7fYQkeq7730QQvS2NcD180udbzWsM5Fe2csnm/g6t7A+DhRw69W0Q2k1SxHbqnIxxNGAAAZXLnUetOEJE+RCJCo2fFewLg7o4eTdxZAMhQpM9CyvnRuom2kSiIMWAAOFHDU3o95QCAi7VOI74exZufgNSaFU3w0EpeA8iofrGxGFnnoHowLp5W9wbABedoTUxWkRjx75upvp9gAADKpBYGr3flXHxp8Jua9a9Fy4OgW5O3P5TCwvBgPS7RIW8Aj+emiqwnCknMBdR0AGmMM19+cpMdgwC1i54CzEPwI//Mq2FAbgP+TnO+/Zw89aYcPVOel5Lt9QSRzi+wXxV/GZZqezXijOsePoxBCwAoCwvtjUQhknULL2hpLVy73ry9wq0FwJrfl5VrOXRohQ2AZe1PCQEAp2sRX0AB5RiXjHXWpm5eg3m3cQOW+bEc+rlOAIWpPwerN1Gfihy3dlmCx2KO7CouaT3F0cWn/GUr0gZAq+lK5uKG9Gjq7P4ewgAAKAtVeXNDbW/J+g41ubOI17Vjj7m/1qHHBRpaWgO+JbZ128gGQABAYh0QHROA/PFzeMxP3OMy3uOsa4oleCxyFyh+3+HdxmI9+HlZBteCZGNsDedUtHPK5v0OLNIGwBUTh/5DTP5OUjVQfPgZYABASZw5c/2hIvI6IlG/UPWOIl5Xbc+hNe4uwGcAcDnXSvfR+uZlk47fTZKA4gyUR90zHeUAgMetChtmPJpvuGfQzP+Q5geAr4UPKHAOJntOQYwTWExiNHDfzN515rXr+xEQAEDRdWuy00SkyaVzcv1DtcDsriLmQlDZ0+nz+fNhLAAUDk//S1IJPr+lFwDyGGeawrjkCycAfvUU9CA0zsxtyLQGaTL5aIm8B7kNUJuSrRFGvSl5z5TTOWm21xN5A6AGsrQsZSMlTRJ2foBBCwAouprqm4lC5DahkBsA92zfyRMAC7sO4+sIL1YgrPnJG7w4oTYRA2o0ALjbpPAFFOBej5DkT2GCsu/6NWTz03rIen1T0J/rBOBO/dE0xnUdG4sTnMSTntNCUsSzZs3/OSnyBsDeRz71O1HZQuI0lDYfJQoAgKILxN6SSBtdls8AVNYvntZ3bREvbevAY2ue3AMAjdZswAvhDmIAAMi7Y6LDAsqODcRwc75hfvLvHmddp/J/WheA4vUy2vDLEttYrPXUJqUfa3iea2ReyOYfK1jMxMnm/fYv8gbABeecuEdEbiYtG/LaYfNaX08YAABFdXrVmkzkrUQiUmd3Z1Evbcw64QmAAJ8BwPlcK9FH66Y7SQ5QnIEyLrmilQO+dAbgY6vCZi+P5hvuATTzP2QtBCDnedG3ekN9ZPL165yCeIPUlpIYjd03U/sIAQEAFNUhh284RUT6uL/YcMofi5oP1aqG4vnnmXwYCwDFYYGwATBpJfg8lF4AyGOcaQrjki9wAHoVv3oKehCSEci0BmkyOW6JvAfjBaA2JVsjjHpDz5THOWl21xNrA2BTWFsq3v1ktTmWGvaBcdff142BCwAoZltmpxOFaMICbwDcq5O7XNQBz9cRfqxAWPOTN3iubBkbAMFYA+B4k8IXUIB7PUKSP4UJ5DxnaLLHZBz4sr7RzI9V3/vQ9wCFqT+axriuY2NxgnMmc1rZ1+h+z0mxNgAunXjcelG5jcRpyFFPtR82ljAAAIooFHlHxGVBkfutetR6dQtuL/g17in8ugAoND76QJHwE8AAADc6JjosoPR9qSfHhGshNsdej/zvcdYJn//TugAUb1LUhl9mGZ2Kdfki+rH66nsj80I2/1jBYiZOXvNXEDvnTW4gLRuuG+OJAgCgaE65zppV5K1EIpJ7Fkzst63g17iD2wzwGQBcz7VyfLRuKttIDFCcgXKqe6bTMs2MAIrWqrDZy6P5hnsAzfwPWQsByHlezKLeqKPHKqPAwXPSwp5T/A2AFfsFydrwfXvXyHlrTiAoAIAi6b9z3ZtE5FAiEWn588cSXCQbAAEAbizLzR4jCmkElhAASGBlFLG4ZPX0GQD0KunWumRfj+TVaJxR6H4r6RTN9uc6AZSkNiVUI4x6QwOfxzlldCmxNwAuG3/0wyLylzKUjTSzI1T5JAMXAFAwI+gIovZ9we9LsHzz/ucW+cD9YElMdMibEq/5yRsPS1bwKFFAnLHG2ASQbZPCF1AAPQKQ4pyhyR6TcVCsXLG08u5Ff2pJHAuAW72TpjGuk9xYzJzGfFfccwoa/GueAtho8TD5yLjZq3sSCQBAcQTDU2mjC/wZQK0itxa/19btjA3A+9ULIUAxOpUwZAMgAIAOC2CcxeDLZl820qROiz8OmJ+4Z64kPLkIMCkm+5ZZ/Tww/Vh99T3Jpzgm9XfawPtprvNXQxsAzfgZ4ARqwpFbu+v7CAQAoAiGXdk+UMReRyQiWbdsUv+HS3Cd/jwBkHUZyDWUWuE/Wg939XqSnwAGAGa6uns1NkwA8HEdSe0q/kqMewY/N+bxYRjgr8aeLZb6k0X3eZ8Gj6UHPy/mYd/nwWI+IbCpkT9eed7R9w67ZvXfReQEkivifXvhc1Anish3CQwAwHeVoHO4GKv4SG2Bym9KcaGhbCczImXGn8zsW+VZbBVbQNiSxacrGQzPAgfZdPeyScfvJilSzDXjIgA0PtVrhHFpsVoqxjpAr+JarUv29XD9njEPId902H9+Pu9EGj6npw+QTO1ivABlKXxZre0O/D7UG/cmOhfvScxzyuBSmho9gIn9XEU/VdwWPYszslOHzV/zjhUTh/yGwQ8A8JrJCDqCyFaVpL/fUYwUzyZvVGzT4ov6f4OiAgCAW3N7jZABOEgXn/yn+Wz3AXzpEdigBy/noS7/JNoxGQfFypX67mcD/c/eP33ufdh4AxSvzCQ5rpPcWMycxnxXzHMKGj1AU0V/TOIk4mJCAADw2Yi5D3UXkeHx2ugIfVHh+s9gVUlSZDujJNK46EsMAAAAgJJ0/4QA8GicpfHhlC/HhO8h5meGuWfUFABp1QjL/i0dqWnUx8bnOY35d2nOq9rA+2luvVTDGwCXjh96j4jcS2o2bMS75685iTAAAHwV1HqdISK9iUQkrYsn93uoHF28PeHZejVXoSgbAAEAAIC0licR1wVsmADglDo/s6B2FXh+4p4hakFwJGfjnjO5DhSj5lgG7/HC99EEL1epTYXLyeJt3gwSCipPAUwglwKVaQQGAOArC+xsohB5FfLr8vQ+nm0AzL9VZAMgAMDbSYyLAND4UinauDTGOgAPhz6bvYowP3HP4G9tsq5ORJO5KMYBUM45MG7hy39jMetE9yY6Lc71pHwpiWwArITBj/yav83V03r/yHmtxzD4AQC+qVYtENPRLFgivr/Kb8uzOtTCbADMKG96jZu9uifVBQCA4veEAIqEL4uAMvcI9BTIf87QFP5EGQclzr/Un9a1z9OW6aWA4pWZ5H9uN6u5hjmNfsu3c0pkA+DS8wc9JiJ/JHka1hxqOJkwAAB8c9thrW8SkQGl7dViX4ryBEAc0LaOQ44iCgAAAEA58OUS4NM4c2TjFvKnjBu4dw+MhAdQljlDc/tj6mPieZPdz8Nbge9rkOBN+QmpmUgcz33XvDV82QsA8IqKjvNsWeCCfyyZ2v+R8jQ5Hj4BMOfevrmp1kJ1AQAAABxZ0rDKBeCd7L5IBfMT/BrreeagC+cMIL9alPqTRfd5H03wspR5tcTzoMU8pyxzJLENgLXmjutFpJPkatihTSLjCQMAwBfVqgWmjW4ALGM7qivKdL1WCZ9kKRQ1aNaXIAAAPG10uAgAmY/L1DZAUA4AepU0l/5xX6/pHB9dJ45ldY9BbcqtBmmC56TkNVAgcZ/UFrXwZbWxmNpU4iY8kXNy73oS2wD4q/96yQYR8eiLbHM3l1Qmj5u9uicFAADgg9sO23C6igzye8GSw/uqrSxVW6/B5uItdNN+DzYAAgBQ9J4QQN7jkp/xBMoh/rhk8xZKMQ8xdZF/eR5LqZ9A8cuM+nriKMQ9UQcvJZ1zChI9T5P/IfES0W9rd/0wYQAA+CBQeT+9d2Qdld2V35QpTyq7KpsZLdGEErABEAAAACgRvvgGfBpnbCBGeW6bRbxI5rP8a5fl+N4MKoB6lUWNiPpU5Lj1xhI8FrqKc3ZPcSzqfU10A2Dvli2LRaSd9EwkwS8cd71ViAQAwGXjqvd1M7F/82VZ4NA8/4eFl7ZsLVOurD28b7uIhN6duOb61v2oMgAAAIBTazlWuQA8w5fRzE/MT+6ppHAPshrr+f5cJ4Bi9B2W4LHqex9N8LKUebXEPa/FPKesciTRDYALzjlxj4j9iORKxPFbNrbyFEAAgNO29TlqmIgcSSQitqEmK8t2zXeO1w4R2cRSKEKeqB1LFAAA/k5kXASA7MdlahsgKAcAvYpDoj7xhk9ikk+ctDfccc+oTbnUlAOdiOYzbgCUpVjlu7GY2kQTXqSfFw6SD41+x8Nlkpu5ZPb5cdff140iAABwtk0L7KNFuI6sO4JAw+UlTZn1RbqYtPMmFDmOKgMAKF4nRCQAuDYu+RlPoByyG5ds9gLzEMqZf0rKAqzRDjK+fRvoFKZi3RN18FKSP6fENwAunzD0r6J2F8mXiGOfajvs44QBAOCi98xbc5SIjKL3jmztoikD7y5pb76ekRMpxdkACAAAAJQMG4EA98aZHWzlnsanAfCPFv8ajNwsUO1ytz+xQg0qgHqV9qQV9anIcSdxS/BY6CrO6my++SBIKQDfIT0TiqTK58Zc13oIkQAAuGZ3remDItLdt2WBA5P7TaJayu90TGydn/cst3ceeHr10R5UGwAAAMCldQ2rXAC+4cto5ifmJxfHpXl87snlFPUJKGvfYQkeq7730VQvi3nVv57XGs6paOeURY6ksgGwycIfmchOEiwRA/d0hucRBgCAc0w+ShBihC3URWW99sCCDSyFoq0MevfqfSxhAAAg1+mYEADeLVVTej3lAICLtU4jvh7Fm5/AEiS1ZkUTPLSS1wDFysNjsTgsT/yKcU9T2QC4ZMIxT6joT0jcxHLp0rHfbu9NoAAArhgxd+3JInZSka4pow8ftlrTU78pbeJY8X4COP28CfkZYACAvzMan4cCSKDiWCbFhZ/xBEopxWHKZq/iJ445n4zMQ6g/V8ydoQWggGu6uAPdcr8eClOpGvisz0mTv54gtUu08Nqil6cMtezZuXsygxkA4IogrPB02lj9ka1cNun43aVdFKq1kgVRB5uxARAAgCz7FUIAgFoEFFj8n+DK9othvmz2PL0Kew1Gbpa6p/Du5zoBuFN/UhnOL9qQr40fK5l6Su1qPG+0sXxL5d74cV9T2wC4fOLRf1KTO0jRhBJd5aJh31p9JJEAAOTtjMs3H2Zi/5HRsqBQfXSowU0lb2ge9/bcc8q10IQNgAAAAIBrS5uUXw8AyePLaOYn5icXx6W/90wTPD/qE1DWvsO7jcWaxPXApZ7XGs6paOeUdo4EaR48DOxaEiwxh9kuvYgwAADy1q3Hno+IyKFEIrLO7s0dS8scgEpn8E+WQpGXKmwABADAhRkZgFdS+zKdcgDAxVqnEV+P4s1PYAmSWrOiCR5ayWuAYlWgxRaLw+LFz/97muoGwMN26o9FZDPJm0wuqcqkd121oT/BAgDkO2XZuUW9tpQ/fPjNDecP2VTm3Fl4Sd91IrKbvImEDYAAAL9nND4PBZBAxbFMigs/4wmUUorDlM1exU8ccz4ZmYdQf66YO0MLQAHXdHEHelZPFjUKEw18HuekyV5PqhsAF0wbulPEvl/k8pSxQ5ua93yWAQ0AyMvwOevfZSInEolYXdzPCIGaiKwmFyI5vlq1gDAAAJAdvnwHAKDI4v8EV7ZfDPNls+fpVdhrMHKz1Osb736uE4A79SeV4fyiDfna+LGSqafUrsbzJq0Yak5/m43Uv0xUqXxd+Ow0yYh+cti8x9h4AQDIp3Ewm5LDsqAIfXRnWAlvIINEROSf/rZhubxr77v6tL+EtAEAAAD8xpPAAOSPL6OZb5hvXByX/t4zTfD8qE9AWfsO7zYWaxLXg3R7oCyeMhn17zSTHEl9A+DyCYMfFJHlpFtimlQqcwkDACBrw69a+3IRGUkkYlm1bNLAdsIgIiKPsRSKuIgwex1RAAAgb3whBRS+745YDljNAHCqdmnE18P9+YZ7Bs38DzM4HusqgGJVpBpBTSte/Py+p5n8nFhodhXJm1wumco7z7ym9WwCBgDIUkUqF2bVO+QpnQ/VdAEZ9Ewo9DHyJjI2AAIAPJ//CQGANHpuTaFHp2AB9Cqu1Tq4njhW1GQE/VaKKUqtA4rRMGU1lrNa2xnzMw18HuekyV1PJl/i3zxh6M0icp/nLY1jqRPOGjH3oe4MbABAFkbMXddiYh8kErHw878v7GMfIQqRu1Q2AAIAspt1QCQAxlnyqyAAzo7L5J7GluRPYQI5z0OawjFRmFxJ/ec693naMvkGFGbdp2mM6yQ35Gu06wFrdMdk8xQfVRORq0ikRCvlS2uVHlMJBAAgk6ncZIKI9MxxWeBvr2byW37+9zmh1R5kXRAZGwABAACAAuBnHwFEo54cE66F2Bx7PYp8z5Lc/Ex9ApgUEziWM/MwNa2R+SduDONuHreYeWgxcziteTmzn/ELOnf9QEw3kOJJljj9zLuvfnwQkQAApOnMmesPFZPziUTc+dp+RBSe09TR/OALe1s+MqzD0aO+9uQRhAEAgPw7OwDFVvfqRFnNAPC3VaF2eTTfcM8YvM4ck7UQgPRqRPY/JawJXi71sXjzi7/3NLMNgMsmHb/bVL5JAieaS72CIPgaQQMApKm52c4Xkb5luubEFhsqu3bt6f4Lsug5Cy9t2Soi64lEtEwKune8ljAAAPyezQgBgMbrgUU8GE+fAeDj0GdzmH+JY0VNRpSyNlnq55TGuAGQV1GyDN4jy7WdMT8zSeZxTgldSpDppVY6rxGRPe4miJetxofOnLf6/zG4AQBpGHNd6yEmwk/Ox3fjLy878inCsI8Hi3hRqXaSZvwMMACgCDMakQBQ0nHGl0WAy+MyuQ13SX5hDeQ8D2kKx0RhcsXSyrsX/elz7xNwa4CirPs0jXkkyY3FGu164Ol6uJjnlOlsuWL8sevE5IckeLJZoKrzq1Wj8wEAJC7cIeeKSH9HlgXe9Wpasx+QRfu9Vw8ShKgjIWQDIAAAAFCI3h4AolBPjgnfQ8yTJ4t/DyzjhCdHACQ/KWr2b9lQTWcLTyPzgcW8mXF/6tli5qHFzOE05snMM86aKjNFJCTNE3XKrS1rP0wYAABJOv07j/YwDS4iErGXIW3btg5YSST20w/aizcAmnc3N4c3PYXMAQDABRVCADTE/S9A6l6dqJerGQBFV+dnFtQu/7BBj8Gb/zHV0zgA8KGOZTVvWULn+8I/p3aRz27I/BOXleMHPSAiN5IwyeaSicw889r1/QgeACAphzzZfYKIDS7r9VvjB/jJqqp2kkn7aUDNeAJgdK8Z9bUnjyAMAACv8XkogATqgUU8mGV9ggDoVRLAZi//EifZe8Y8hHzTwVI/pyR/rhOAb31L3MKX1drOmJ89mugK9FO+CVxKkNP1Ti9TecpIXw07rqI4AACSMHZ6e29R/RSRiC+UkJ//PVAr2GT3stCN3rdr911vJXsAAN7PaEQCQGnHGV8WAUUal2zQQynyXdMbQ/A/VyytvHvRn1I/gQKuazSNeSTbjcXUpiKsh108pyDHv45pxXlDb1eRX5PkiSfovw+bt/Ys4gAAaFRnj85pItLXjbOJ0Ea706vds3TaoDvIpP1bNHnQ46L6BJGIKNS3EQQAAAAAAJKX3Je4PvyMZ1rHhO8hZmMr94yaAiCtGmHZvyU1rQC9tsW8H5b6eWrG71efIK8bXDObTpqnUcjsmtOvfPRwAgEAiOs989YcJSbTiEQDjazKt4hCFzEy+6vn69U83vPtZA4AAACQwXrFsdcDQCR8Z838xHzj7eDN6mc0Xc1ZihjAPJdFjbCkjqXUrmI3xurgOR1cbhsAb5549EpRu4uES9yg7t2av0YYAABx7e5s+oyI9CESsfu2XbWw44cEossm9C9xlnYl9/px89t6EQYAgOe9EgAKQcP1wCIWl9S+fKamAfQqKWIzsn+Jwz1AkWqTdXUims+4AeCmuE9qi1r4stpYbCwCPZro+HnhZwS5XnKoX3G5PHmcD+OHz1vzLooEACCqEXM3vFTEJhCJ+B2BivxixbShm4lel7H9K3kTWdOu3fZmsgcA4P2MRiQAlHac8WURUKRxyWYv+DdnaAp/wtxW5vxL/WldSv0ECjtHaRrzSLZzErWpCOvhYvUxuW4AXD5hyA2yz9NfkESWmsq142av7kkoAACRhOFsEenu3olFaKNz7tVqJt8mkeq5oyE9YJwhavovRAEAAAAAgOQl9yWuIxu3kD8t/jhg8wP3jDoFoN4akdWcYYmUJWqaK7123KdLWurnqRm/X9eCfMe4mqh8iVRPxfFbuwefJwwAgHqNmrPuHSoylkg01L0++v+e6r+KQHTtUKndJyKdnq9X81giv53sAQAAALJY3rn1egCIRBN7EUo2PyH/wWv5FARncpb6BLgpdKpmaILv0+CxlNpVkMY44/koneMGeYd6xSeH/MJU7iHp0iiOdtGIa9eeTCQAAF0Zd71VLLQriUSD7ZrKN6tVDYlE1xZMG7pTRP4eZ2lXcqfxlGcAgP9NEyEAoA3XA4tYXFL78pmaBtCrpIjNyP4lDvcARapN1tWJaD7jBoCb4j6pLWrhy2pjMbXJp4mOnxcWcWADoKhaYOrgUwCtCPnQFIb27VOuu6OZYgEAOJjtazd8TFRfRyQa6AhUdtUq9i0iFqkPvL30eRNd913S7W0kDwDA+xmNSAAo7ThjxyBQpHHJZi/4N2doCn/C3Fbm/Ev9aV2kF1DcOUrTGOia6bXT2xWhqBdnoglcOInl5w3+GU8BTM3JLZ0Dv0gYAAAHMnZ6e29R82CuiNBG5/OvIX+8bNLAdjIqglBuJwhxck1HEgUAAAAAANJYcyfFkY1byJ8Wfxyw+YF7Rp0CUG+NyGrOsETKEjXNlV477tMlLfXz1Izf7+ACN8a5mop+mXRPaxDZJWdeu+adRAIAsD+dPTo+JSIDiURjKhbOIwoRG9GgdlsB1qs5NHc2iuwBAAAA3MOGCQD+4Ytt5ie4OC6NHKQ+ASWeT1J/sug+79PgsZTaRc/rxjkFrlzamzYM/pmI/JnES0UgoXx/zHWtfQkFAOD5hl+57lgxnUokGl4m3LJo6qC7iEM0rYcMvEdEduSzhPTay0Ze0X4CYQAAAIDfsn86Vmob9PiOB6BEOSTqE2/4JCb5xEl7Qzj3jNqUZVGzro6n+YwbAGVppDTBuTC7J8ihSE24enM9zmwArFY1NNXPObpM8j6/VWTwns7aNykYAIAXNAIqV4hIDyLRWEegqjz9L4Y7x2uHiNxd1rxpRMVqPAUQAOD3jKZEAsC+9cDNDRD8jCdQumLkWE9BD0JuMg+hGPlH3gFlqBEW+xDq/bXD53tSjPsZuHQyK88bslhU/o/ETC3hzx4+f8144gAAEBEZdeW6USLyr/R5DWtd17P/L8ioeEztNqIQJ276HqIAAAAAAEAKa+7EXs/GLRTotmlX44DcLE7tSv+9AVCvspi0oj4VOe4kTg2Mev+1gbxRZ/PNBYFrNzsw+Twpn2oxnX3G/NZXEgkAKLex09t7m8rXWRYkckrz9z7JDvHi5/8GwHx6+7eMnNE2gAQCAAAA/F618mUR4N64LB82bjEOGDcujkvz+NyTyynqE1C8vkoTfB9N8Ho0wcuidhWh57VMxogm2ns5twFw2YShvxWR5SRfag6pSPi/I+Y+1J1QAEB51bp3flVEhhCJhm3rlI6vE4YGFldNtT+ksYQsgUArxlMAAQAA4Lnsn46V2gYIvuMBKFEOifrEGz6JST5x0t5wxz2jNmVZ1Kyr42k+4wZAWRqpfI9FbaIJ9+XnhQMXb6dJ+FnGUar5cJJVen6NwAJAOY2eve4NJnIekWi8wTeRb6+YNnQz0Ylv2aQha0TkkTLlTYIt4r+RQQAAr2c0NssA2E89cHMDBD/jCSDf7oovzArbETMPwa9GjbwDUMe4ttiHyOYJbdQ05qyi3k8nNwCunHDMnSLyM1r6VK9qyrD5q4dTAACgXE65zprDinxLRCpEo2GdodhVhCGRxmQVQYjl7e+Zub4fYQAANPDZAAAAAJ4V/ye4rI5jpnGe8DK9CnsNRm6Wek3I+hKAWzXjRU8W1caPRQ1M8v5rA3mjzuZb3gKH7/inRWQPqZ9mBur3Rsxdw88/AkCJ9N+x4SIxeU1plgVp9lsqP1s+deA/yaokYmn/V4TOKgdNnUHwfhIIAAAA8HbVGuv1ANIfl+XDxi3GAePGxXHp7z3TBM+P+gQUr6/SBN9HE7weTfCyqF1F6HktkzGiiY0tZzcArpg49B8idg0JmKp+YUUWjpu9uiehAIDiGza77WWi9jkikVCLGNqVRCEZNZXfprGELMlC+4NEAQAAAJ6vrnzou4tyKQBKJOoTb/gkxqP5hnsGzfwPMzgejRRAsaJGwOX77X4OBk6fXTf9kog8QXKnmksnb+ku8wgwABScmTYFta+LCJu+Gwnjc/PybxZPG3g7EUnG3icpPlb4vEnn6KeNmbXxFWQRAMDbGY3PbwHspx40vgFCU6ho/IwnUPbalHd3xWYvnzpiTeGeMQ8h32JoGaUTtQ4oRsOU1VjOam1nzKU08B6ck9MbAFd8YuhmFfuyTy29pwPgP8+ct+Y8CgEAFNfIq9ZPMJF3EYmkWgP9KkFIuvUtwM8A5yTUkKcAAgDitzWEAAAA4Hni/wQXXwwjQnoV+BrI9zKvCa00AwFgIku8Zmga75HkhnyNdj2oI15F26iX//UErt907dw9X0UeIf1TT+Or3n312rcQCQAonhFz171KVGYWrS3Mq99SlVuXTO3/SzIr4Tuquoq1b9yctI+Mu94qZBEAAABQilUuAMaZ8DQ4ZDUOeFJl8e9Z1nXKnScxA/Chl0l0Y7HW8z6axWVxnxueFxt5iqPG/Ls05+Nk4uT8BsBlk47fbaqfYmCkPu66BYH9fPS1qwcTDAAojlOus2YN5bvCT/8m11iaC08nLmArYk0r9u2H+ciwzlXEkJ1rNowkEAAAAPB4ReBB2x3tUljNAHCqdmnE18P9+YZ7Ro+kKRyzoH0cgDznq+Sf6AfmQM5p/wIfbuuKTw5eICJ/IL9Tf4f+HaEuGHf9fd0oJgBQDP13rv+KiJxGJJKai+3uJVMGLCUQyVs8re9aEbmXxXDcNwjOJYsAAN7OaHx+C2A/9aDxDRCaQkWjYAFlr015d1ds9vKpI9YU7hlPfkS+xdBST6c0xg2AbKYLza1vyWptZ8ylNPCOn1Pgx71Rk7BygYjUfGjpPfemp9oPm0tBAAD/jZrd+jYRmUYkEmxJLPiyqPL5Q2rtlq0gCLGDN3LkrNZjiAMAINYsQggAIM+VJiEAHB6XyW3QY6yjQKmgZbhI1oTpHoscAbCfmqFp1IgkNxZrtOtBHfEq2ka9fK8n8OXGrzh/0F2i8j8MgUzSefyw+av/i0gAgL9GXfPYERboj0SkUpJlQer9lorcd9pT/W4ku9LsQXR5ERqpvPr6QJo+QRYBAAAApVjlAmCcCU+DQ1bjgCdVFv+eZV2nyBGA/iO3Y2k9tVPduSxy5iD3qpGnOGrMv0tzPm48ToFPaRF0NH1GRJ5ggGQyCK9+99Vr30IcAMDTDwT2dLtWRIYSiUS7yS9XqxoSiPTUmrfeIiLbk2mry9i+2fjTq4/2IBAAAADwtKH1YFkY7VJYzQCgzCLV+Sbm6+HbPdYUxnXSBYECA1DL0qsRRr2hgeWc6uLVBsBlkwa2q0qV/M5E9yCwm0bOW3MCRQUA/DLiqnUfFpH3EYlE3Xvalv7XE4a0e73jd4vIKhbDsbX07tXzg2QSAMBLfH4LYD/1oPENEJpCj07BAuhV8sXmMJ/ugaZwD3jyIxzPf00mH6ldgI/9kObWh2S1tjPmUhp4h88p8O0W7dow5BpTucePZZX3jqqpLBr2rdVHUhwAwA9jrm59hYrMIxJJdwD6OZ7+l1Xra8uJQgO5qjpZzFhpAgBi9DvJvxIAUP9KCEBxxiUb9MAQQdlvvJFEAOL2QppGjUhyY7FGux54Oh/4OUd5twFwVVU7A5FJDILMnCC7gxtGzH2oO6EAALeNnd7eu1bTX4hI75IuC9Lq1e5YNqXfTWRYRi11xRayPmrIq8de0XYGYQAAAAAKv8oFkNE4S25c8uQ2+HvbmJ+KX7uMhAeQy7jO4ViUpUL0GBbzZlrq56kNvF9jW/gCHxNg+XlDV4nKjxkKmQ25f6lVen6Lp8kAgMul2rSze+d3ROSVBCPp2AafE1U+48rIosmDHhfRu1n7xhcG+mkyCQAAADTTKS0RI14Ki0kAlFk4NT/FfD3yvmfF20BMDgJlq2Wa0fskdT0N1kh6Lg8CooW7wYGv6dHZ1DFVRJ5gbGT2lh8cNr/1axQmAHDTyLkbLhWRfyMSifv90mn9+Ena7BuPG/NZ2hVlxW2nj5nV9lYCAQDwsAcAgIbrgUU8mGV9ggDoVZJY+qf8eiSfOMneM+Yh5JsO1tWJaD7jBoCbNccyOoms1nbG/OzRRFeunxf2dgPgr/7rJRtM7TPuL6uKNK7s0jPnr5lKgQEAtwyfs/5dYvZlIpFGo2SfJQo5dFtmNxb22rJ6Hw0/RSYBANKbp/gaBkB2PXF5Kg5fFgFFGpfUOuazUuQ7Uxe1seExQhIB9E/7qRmaRo3IdmMxvV0Rmgr/5qjA5xR484ah14nIbQyGTFP8imHXrP4PIgEAbhgzp/XowOzHIlIpbxQitNHRerUli6cOXEWWZW/ptAH3iMg/iERDXduIMVe2v544AAAAAIVe5QLIaJwlNy6L9zOeKM9tY34qfu0yEh5ALuM6h2OpK+eLRuYfi3k/LPXz1Fx6KK83AFarGlZq8l8i0sGQyLCSm3532PzVwwkFAORrxNyHutdMfyYiLUQjcTUN5DLCkGe37/lTANWBM7DaF0kkAAAAIIXlSsR1ARsmADiF76yZn2K+Hnnfs+JtICYHgbLVMs3ofZK6Hpqm4jehxfp54cD3FFl6wdB7xHQuYyNTzSL6s+HzW99KkQKAHKcCO3S+iJxGJFLp7r+7ZPKAewlEfsIguDGfpV2B0th01JhZbfRrAADPmlxCAEAbrgcWsbhYI+cJgF4lr3V/yq9H8omT7D1jHkK+6WBdnYjmM24AuFlzLKOTyGptZ8zPHk105fl54aAIt3q3dKuKyOPuLqsK6VCTcOmIa9a8kVAAQPZGXLXuQhH9OJFIxfam5srnCUO+/t9T/f5oIquLeG2ZdpJqXyGbgHI564pNQ8dcvulEIoH05yk+GwGQXU9cnorDl0VAkcYltY75rBT5ztRFbWx4jJBEAP3TwQ6R/M8DZzV/hyRCAZoKv+aoQmwAXDWx3zYT+SQDInO9Q5Pl77768VMJBQBkZ9RV68apygwikVKvZnLlwgtaWglUvqpVDdXsp0SiMSbyL2NmtY0gEkCJxn2tNkeC8J4xM9pvPGvmxv9HRAAAAIADrplTff2BFe9nPFGe28ZGVWoddQpAOuNas59j1JVrRyPzj8W8H5b6eWrmPVRQlGRYOWHoMhX7HsMic4cFGqx49/w1JxEKAEjfqLmtbzOV7xdpDs+3LdzHhqaOCpsrHREE9mPWvgmMDrUZp1etiYwCim/MjE1nmuh79lags0KzW8fOaP/12Omb3k10AADwa9XKBgsAqeI7a+Yb5htP75lm9jOaruYsgGLMP+m+jyb4PjRNxW9Ci/PzwoXaPNBZ6ZhsImsZNJmPhyMDkZvPvPbxVxMMAEjPsNltLzPTn4tID/rOlKY0lc8svLRlK5Fww6Kpg+4Skb9lv4QsnFf37tN2LmEAim1c1bqJhHP28396h2i4cuyM9rvPmrHxw+OutwrRgvtNGSEAoCnUg4MfLLUNE9Q0gF4lRWz28i9xuGcoUm2yrk5E8xk3ANysOXGf1Bb1JCyjC6I2lbgJd/R6CrUB8JfjX/qUWHCem8uqwud3Xw2DX434+rpXUXgAIHkj5q5raWqqLRORFqKR1rxqd5/2ZP/vEAi3mOr1hbyurN/P5EvvmbfmKDIKKK7dh2yaIiKvOEi9OcnEvrf7nxsfHDujbfKIuQ91J2pofJ7io04A7vbQ2VQofsYTKIf445LNXsxPpZiHmLqojfQ/ANIY1+prjaCmuRc7LcX9LNzPB66cOHiRmF3PwMhFv7BWu/ndX199PKEAgOScOXP9oRrKUjN5GdFIrc+zUCuTqlUNCY5jzWqg/0sUEnFk5+5unyUMQDGNnd4+yMTqHeMvFdGrmncd/vcxM9ouGFNtPYQIAgDywCYXAD7WouRqFxuI4e9tYw6n1sU/FnUKYCLLe4550ZNF1Z1rR/z7H/fpkpb6eWqm+R0UMimCbheIyEaGRy4GBTX91ZlXrz+OUABA406vWlNTN/upqJxKNFJcFqj8ePnkfrcQQ/csntzvIRG5g7VvEiPEzh87c8NrySqggFRmiEjviH91tIrO1UOaHx0zo+3TZ1/5xOEEEgAAt1atbLAAADDfcM/29yFA8vdMvcpZAHkIMhjL9dUiS/BY9b0PG/2KNOf4c05pjFIPrTxvQJuZnc/Ayc1QDTp/PWz+ap5UBQANdZamhx6x/joRGVWCniRP2y3ovJQwuLwUsO8luYQssaYwkGvFjKoBFMiYy9veaiL/0cAh+qnoV8KOzsfOmtl2+divbOhPVOFIAwCAQpBCPTj4wVLbMEFNA+hVUhS7dlGbckscNuihSLXJujoR9fCiAKQ2PC3xca0Jzp3ZPUEORZoT3Pl54aCot33lxKN/Kio/dmtZVZL8ftqxInrLsHmtr6cIAUCcKcZ05Nz115jIfxKM1OfSy5dNGrKGQLirQzr/V0R2FW6Y5/O2bx5zxYaPk1VAMZx7nTVLRed1tTKss970MdNLpTn451kz2+aPmclT3eH4jAaAiuNMheJnPIFyiD8u2ezF/FSKeYipi9pI/wMgjXGtvtYIapp7sdPC38+gyGmxe1fnBBFZzQDJTX/R8LfDr358GKEAgGhGzlk/XUQ+SSTS7R9V5B87ntw5i2C4bcW0oZtF5EYikQxTnT5i7roWIgH4b/2TGz8jJq9L+LA9zHSCWuUfY2e0Lxozo51/1FXW+YIQAKDWAKAWpVy72EAMbhvKUOtefCwSHiheHdGM3ifZiTeZpyJT01z5nCDu0yUt9fPMLkcKvQFw1dTjngzNPiF8lpSnXqbBwjPnr30foQCA+oyYs26mqFxMJNJvC011wqrqcbuImwdUv+3vuTt3RkdWOoMrSCrAbyNntJ1kKp9O+fOC0Spyx9gZ7TeeNXPj/yPqAABkvWoFAMDN+Yn5LO97oCncA/UqBwHkQTMYy/XVIkvwWPW9Dxv9ijTn5HlOac53QdHT5uaJR68UkWsYQLmOk24q9uNh89dcSDAA4OBGzFn/ZRW5qBB9kvt+vHRK/5sJgx+WTOn3KxF5JP32uCRMPjRm1oazCQTgp9Or1lQR/baINGeyohM5y8xuHTuj/ZazZraPETM6DwBARrKfclLbAMHsCcCpjwWoTb7NbWzQg8PtU9cnooW5KABOFqt8j8WcW9qJLqFzSu56gjLc/m6VyiUi8iD5nftZzjpz/to5fFkEAPs3cs66qop9hkhkYktTpXIRYfCp31Ez1e8X7bJyXRiqXDPqa08eQXIB/undc+PnRSSPn+Z9i5ksHDtz411nzdj44XHXW4W7gVRnND49ALCfetD4BghffnKTIgj4VJvy7q744tm/jticT0bmIdSfK9QggH4oygssvTdzrD8KyI8yNfAOKEXGLRo/aIeF8hER6cy/pS99CzjpzGvWfPP0qjURDQB4zoir1n9aRL5AJLJhYp9ZeEFLK5HwSyWofUdEQiKRWBc7ULrtmUkkAL+MmdH+elG5LOeV60lm9r1dj268Z+z0jR859zpr5s4Udq4AAGoNADxLY9cuq+OYaZwnvEwvrgGF7NOMJAIKXhc0vfdJpTToC99HGz8Wkrz/jTwxOa2nOKrzOVKaLacrzx96m4p+nqHiQv+vH+/ed+3Px81e3ZNoAMDTm/9U7StEIrOPEu7oNWjAtcTJP4smD3rcRJZ42gA5elr2n6NmbRhGdgGe9AxzH+ouYt+TbH76t57S9koR++6GJzc+NGZG2wVjqq2HcJcAAEhg1QqAcQl4MA4YN/mvyv29Z0pOAcwnkWtEvPfRBK+HjX5ZzAU+nZPlNkb2r1TPnHxj2+DpKvJrBpIT42bslu76yzOvXd+PYAAobwdsOuKq9VcmtvmPvrMenRYE5y44R2uEwk8V0Xnptsfl68pU5X/eM2/NUYQCcF/TriM+L6KvdmRN91xLI3KMms7Vns2PjpnR9umzr3zicO4WACCVSSer5Xpar2fdDsAhyTzxBlnObWzQK9G4zK190vRynVoDsD4r8LGYc4v/OUG655TM9ZRqA2C1qmGtZh8SkXby2wlv1lrnn949f81JFCgAZXPKddY8cu7676naFKKR6Xw5c9mkfncTCH8tmtrvZhV9sEjX5MDCcFDH7ubryC7AbaNmtL1NxC5x/DT7qelXwt2dj42Z0fa1sV/Z0J87VyYpzWh8SQRgP/Wg8Q0QvvzkJkUQ8Kk25d1d8cWzfx2xOZ+MzEOoP1eoQQD9UJQXWHpvRn9UlmaZ/mYfQdnS6+YLjm41kY8kO9YpGw2MraMDkT+eOX/1BwgGgLIYMfeh7v13rv+JiHyIaGQ66Ty4o8/OLxIH32+jmqnNJxCJ+7cxV7R9lDAAbnrPzPX9AtEfi0iTFytXlT5qepk0BY+fNb39+6NntB3PXfQXn3gAoNYAwAub3bi1y+o4ZhrnCS/Ti2tAIfs0I4mAgtcFTe99UikN+sL30caPheTmEWvoiclpPcVRnc6RoIwJtnLC0GWiMpeh5oweKvqD4fNXV8WMygig0EZd89gRGvb+laj8K9HItJ0MQ9VPrPrYcbuIjf/CSvP3RGSrdyeuro8amzPqyg0vIcMAt1SrFnRY5UciMtjD0+9mIh8KTP921vSN3x9z+aYTuaMAABxg1QqAcQl4OA4YN3lTj++ZklMA80nkGhHvfTTB62E7SxZzgU/nZLmNkX0FZU2joGPXpSLCTwA6NIpM9AvDr1l7/Zkz1x9KOAAU0dir2wdZR7ffitpbStUnudGqXbN8cr9biEQxLJt01BYR+R4fByWuTxDaT0fMfag7oQDccVfPjZ9XkTNcnWDr1GRiH1K1e8bO2HjjWTM3/j/uLADA9cVual+ms24H4JBknnhTBhX37llKr4d/9zj5niPpgqD0QQDrs5IfC0X5nMD1cyrtBsBlk47fLSbniMhT5LdTTe179ZDOW864rvVoChaAIhk2u+1lnWHnLSLyGqKR+eTyWGV35dMEoliCMJwvBfoM05w5Dz210tF7FhkGuOGsmRvPMJXPFeiSVEzOslBuHTtj46/GTt/0bu4y6swcANinHjS+AYKf3ARQvKHPZi+f7oGmcM+Yh0ANAuBqP6S51YyivQ/NMud0IEGZ02zFxKH/ULEPJzMWGc4JOqnSGd45/OrVpxMKAEUwfE7rWytB7fcichzRyFxoIv+58NKWrYSiWBZdNOgBE1lMJFJZZJw/Zvb6/yAOQL5GzmgbEJr9IOl1uzMrV5N3itjKsdM33X3WjI0fHne9Vbjr7jL/MgxAoWsNAOS+bo5du6yOY1Ib4Wq+p/knKEKf5tbPdQIoxvrN9lsakn/SnyV4LCSZL0XbqJfu9QRlT7TlE45eqGpXMeSc09dUVwybt/oThAKAz0bOaf1kIPprUelHNHJoJ02uXjZ1wK+JRUHvsOp0705avQnuNWNnt72MLAPycXrVmppErxeRASWo5ieZyfd2PbrpnrHTN37k3OusmQwAAABAbt1poa6GL6G5bdmMAzaqcs+STnhyCmAiy+1YynxXhN7cYuaPxcw9y/j6DiQgZUTag7ZLReQPRMK5uaGbqH5z2Pw13ztz5vpDCQgAn5xynTWPnLNuvoheKyLZfpHNZ3vPuP9Q6/gUYSiuZVP7/17Efk8kUllUHRaa3TBuflsvogFkr/chGy83kbd5sm6LVl0OfJhXish3Nzy56aExMzZeMKbaegiZAADwbbFrES+FL5AAUGYJUKrzTczXw7d7rCmkrRZ2/ADIblxbgseq/33UiWtHVvHk54Wfjw2AInLn+FM7gk59n4i0s/5w0of1kM47h81d8zqyFYAPhs1efeSAXeuXicgEopGbziCUjy6YNnQnoSg4kxnFuRTnvHrnLvuBmLGaBTI0dkbbf4rIheUt63KMmszVns2PjZ3eXh31tSePICsgIny2CmC/9aDxDRCaQo9OwQLoVXLvqVN9PZKMqaZwD5iH4Hj+k6JAifshza0PyWptR1/lU/Ev3oTEBsC9lk0asiY0+6CIhFmXDdTl5VaRPw6bv/q/CAUAlw2bve7ESqXpdhN5F9HItWf78uJpA28nEMW3ZFr/RSLyNyKRmrNHz26/jDAA2Rg9feO7TPTrab+PHytX7SuiX6ho5z/HzNj4tbFf2dCfDMmXFSzDAPheawAgUm+Z6jGT23DHT2GiTGMIxezTNPNjASj++s32WxqS/3lgS/BYKHof4uZ9ZgPg89w88eiVKvpZIuHssO4pot8YNn/1/479dntvIgLANSOvWj+6UpE/iMhLiUauE8btO54Y8BUCUZb7raais1irpLq8/vKome2jSDYgXaOmb3ylqv1MRJqJxgtqZh81uUyaKo+eNX3j/DEznzyOoAAAACDSqjbl17veUIPbxrih1rl9z9j8DDCROXYsZb5zYZ5K5u8aeYqjpnSemlpOsQHwRZafN/hyEVlAJJyeMP59967dd464du3JxAKAC6pVC0bOWfcFUbtJRPoQkVxtNQ3+Y1VVOwlFefTc0v4jE11NJFITaBD+eOSVbScRCiAdI766riVQWywih/u5RIvy4tgfafQ0kQkadv79rOkbvz/m8k0nkjkAUEbub2SxiJfCF0gAKLMEKNX5ptGVGDy5x5pC2mphxw+A7Ma1JXgst+Y5alqyYdKC3Yt8zokNgPvcB7U+u+QjonYX6w+nHR+G9sdh81dPJmkB5GnMrNa+tx25fqmIVJ2aV0vad6rYhGWT+j9MZpbLguqJewKxrxbhWhz+MLZ3ENqSs65YO5SMA5J1evXRHpXm5htF5CVEoy5NJvIhVbtn7PSNi0bP3PQmQlKqZg8AGq4HFvFglvUJAqBXSQCbw3y6B5rCPWAeguP5T4oCJe6HNIM+JMknizbyBDm4X/yLNSGxAXA/FkwburNmNk5ENgvD2WXdVfSq4fPXLBh1zWNHEA4AWRs1t/Vttebgz2oyjGg44ftLpgz6IWEop55bNv6PiDxGJFI1qCZNN42b39aLUAAJMdNePXt9R83enPlb+x89FZHRQWh/GDtj46/GTt/0bhLKpbzhsxEA2c1RVBwA9beP6R0zudrFT2EWZX5iDIFcSWJMkXcA8+N+3kfTqBFJbsindpWjD3HvnNgAeAC/nHDMI6HZv4tIjWg47701q9w77Jo1owgFgGy6TNMRc9ZdYqa/FrHBBMSJm/LQjubKROJQXguqJ+4Rla8SidSdvHO3XX/KddZMKIDGjZ7V/hVVeT+RaLQNkHeK2MqxMzbePnb6xn+tVo3POgAAANBgi1kkfAnNbWPccIOTuWdGwgPIZVyr36ePhueRxv5OHTxPTWV+5UPxg7h54tErzewyIuGFQWqyePj8Nd8547qHDyMcANIybPbqI0fOXb9QRaaLSBMRccIeVfn3VRP7bSMU5bb+kH7fEZF/lm7tm/0KbcTAbW3fZYMN0JgxMzZepqafKufVW1qHPU1Efn5Xz43/J2Z8TAcAcH+m01RnRgDpd6BAoccB48a3e6aZ/YwmtRtAlDqRy1MCU6xr5kiNLGMu+XVO2V8PX9p1YeXEo2eJ6ncZG940vh9t6ux+7/CrH+fnOAEkbvTcdW+oVJruEpHRzAUOXabZpUsmD7qTDMWd47VDxL5MJDLxH3f03nAlYQDiGTOzbZKIfa1YE7JD60STG0WV7wkK2/wRAgDacD2wiMXFGjlPAPQqefXFKb+em5z8MblnKFJtsq5OhFYJKG4hiTG+4z6pLepJZLW2Y47Oeg7ya6NeWtgAWIc+Rz01XlT+j+HsjSESBMuGzV/7jRFzN/UhHAAadXrVmkbMWfe50OQWETmGiDjl50umDJxDGPCM9Yf2/76IPOLzNfjTSeqkUVds+BxZB0Qzemb7f4npVdSb1KzeumvbPDLNhbzhsxEA2c1RVBwAda5jnTomtY75qUz5Dupt/DFC3gH0ZAc7RPKbBum5XL33WsxcThAbAOuw4JwT90izvEdEHiIa/lQOFfsvq+z867Br1p5BOADENWLuhpf2PGL9b0TkiyLSTERcYg/t2dX94zzhB89353jtMDE2pWW3tPni6CvaPkUkgPqMnbnxg2rydeHT6/S6A5XPr6oet4tIAAAAoOHeMuXXH3S1ncYKHv7R4o8bbnCZax11Cih+z5Ts5rzM5xjN7Y/psRP/O3XwPDXx+ZUNgHVa8Ymhm1WCMSLyBNHwyjFqtnL4vDXXjf12e2/CAaD+2dl0xJzWc8XCv4jIWwmIc3ZZYO/75WVHPkUo8GJLp/b/sYj83vkTLcz6z7466oq2S8k84OBGz9z4HjP7DuvwZ2tHGke8f+uOo35IbAEAPs50bJgAfOxAAeYnuHbP0tggo17lLIA8qDNjOasni5ojNbKMueTXOWV7PXzxEMHyCYMfFAnOEZEOxoZXja+Kyrl7du3+67B5a88ikwF0ZeS81mOGz13/KxG9TkQO9XqhWdC5QFU+uWzS4LvJVhwgQSxUuVT4fCjDUmNfGz277XwiAezfmBnto9XsJyLSVPBikKvA7NJVVe0k40ox8QCgEDRcDyxicbFGzpOaBtCr5ITNXj7dZOWelUStRLXJujoR+iCguPNfjPEd90ltUU/C0r525BS+ov28cHRsAIxoxYTBvzTROr7cpOV20LGqduPw+WsWj7rmsZcQDgD7M2Lu+v+0mv5VRd5BNFztEfWbSyYP/B6RwMEsm9r/96LyM1/P33wcmmZzx1zRNonsA15ozIz20SKyQES6UW9SLUO/u+mylkVknGt5w2cjALKbo6g4AOpdvrp0TGod81OZ8h3U2/hjhLwD6MkOdojkNw3Sc7l677WYuZwQNgDGsHLCkG+I2FeJhLdG1axy3/D5a79w+nce7UE4AIg8/dS/EXPWLRKzb4tIHyLirNvCYOsFhAF1ukxEdhOG7FY5JjZn9BVtnyIUwNNGT2//gIj8QkRYd6QrNA2nEAYAAAAkLb/NXmzcgr+3jU0T/t1gdza2UqeA4vVMyW7Oy3yOoSw51Ss09nfq4Hkmm2BsAIxpxXlDPyuq3yUS3uohYtUeO5vvHXbNmlGEAyiv06vWNHJO62Sr6T0iMpqIOG29BbX3Lpt0PBu6UJclU/s/IiZXO32ShVw82lfHXLHhcjIQZTd2xsbzVOX7ItJMNFIvpt9adEnLXcQBAOB9J00IAMYZwLhBw/cgjQ0y7IAB4M98ktWTRY0amRKe8hcXGwBj31+1jcH6c8X0ZoLh8WRh8lI1WTxs/uobRs5rPYZIAuUybG7r23oese5uE7lKRHrTJzltd2DBvy6bNGQNmYsomoNuX1GRNiKReW926egr1l9drRrrDZTS2JntnzOxa0q55o7UdyTysd9TlaDjc2RdCfHZKoAcno6V2tNxqGkAJcohHdy93OehtJ/Gxoa+/FmR0jbWtSp9EFCGeVETPFbChc9yPy9SpDxNeHbnxBdyDbhz/Kkd3Xt0/zcRudvZFpoaVGeY9OxQw/uHz19dHTH3oe5EBCi2Udc8dsTIq1rnBCarROTVUWo2H47kw8QuWDy1/x+JBKK6ceoRT4roZX7mvfcd1vl39G77+bjZq3uSiSjPhGU6Zkb7TDP5IvUmo0qj+t83XDyAjd5kGIAy0/gVx7I+QQDuFQ4PxzqbvfzrcI18B/UWQGHmvnQ351nsQ1BvmB/yPCc3rocNgA1a+PGWrVKpjRKRx4iG93qK6Bes0vPeEVevfZ+YMUsAhetOTUfOaf1E2NH8kKlMYh70pgecv2zKoG8SCMS1eGrLd0Xk90QiF2fvtG4rh81efSShQNGdXrWmMTM3/Y+IXEQ0MvNg/8OOnEcYcmqtCQGAGEJqDQD6pAivZ+MWuG3wsXaxvgSoI+lOZOnXjBc9kZd52Il557m/0wbeT53NtySw8SEBK8Yfu65mtREispFoFMLLLLCfDJ/fevvweWveRTiAYhh+1brThs9dd4uJfFNEjiIi3vjNhh4DphIGNNY7q6nJRBHpdPP8Cn8H3tps3W8ZM3P9cSQjimrc7NU9ex+ycYGIfZRoZFrfp3xjvPILZQCAQuELcMC9cca4BBgHKS9uU7gHmsI9U6fiAaCs80mSNVMTvB5qV/HnAs0416NjA2BCfjnx2PtD03eLyJNEoyiLDztVRH45fP6am4fNa309EQb8NGZO69Ej5rRep2q3qsib6ZO88qB22/Nvd/LFPhKw+ML+f1Gxa4hEbp3aK031T6OuWPcOYoGiGTu9fdCuzh6/FZGziUacviP2v/W8fuElRy0n2OQaAApB1sdMbeMQNQ2gRIGb/Lxjpr1RlQ19+bMipW2sa1XqJcC8mOuxLPfzIkXK04Rnc05sAEzQzROH/FlV3iMiu5xqoalBjXYo1+TNAAA/rElEQVSlZ6iEdwyfv+b6YfNXv4yAAH4YNnv1kSOuWnd5p8iDInJufXOe1VkWkMEHApsCrYxZMuGYJ4gGklJrav6ciKzzbCwUaWF3lEqwcvQVbRPJRhTFyBltJ5nKH0XktALMvT6d7JawWaeRgWQYADyv14xdcSzrEwTgXuHwcKyz2cu/DtfId1BvARRm7tMES4A2Pmcq9Yb5wYVzyv962ACYsOXnDV0lob1fXP2JOcQfrSbj1PS+4fPWzh0xd10LIQHcdPp3Hu0xfO66i4NK5R+idqmI9CAq3tltamcvntzvIUKBJC2bdNQWMbmESOSqScTmjb5i/ZzTq9ZEOOCz0TPa3lcR/YOIHE00smUqn1o8re9aIuHAvSAEADKoHdQaAOWudWzcArcN5ejT6PmAotcRzeh9kp14jXm4QUEq99Fi3hCLeTOzyrd0o41YVpx/9E1i+nF6lUIuprqJ2AUW1B4ePn/tF86+8tHDCRTghmrVguFXtX6w55buD6jZDBE5gqh4ujZQ/c/lkwfdQiiQhiUX9v+hmKzwpO8ocqM1qVfvtt+Mnd4+iKyEfzOV6Zjp7V9U0R+LSE8CknmncNspO4/6OoEAABR7ugPg2jhjXAKMg3RpCvdAPb5n7LQBmE+yqpma4PVQu4o/F2jGuR4NGwBTsmLikO+ryhQiUVi9xay6q7npseFXr/3au67a0J+QAPmoVi0YMXfde28/Yt1dqvIDETmGqPi7ZlaR6tLJA/6Xm4VUF5dWGy8i24hE7t4aNoV3jZm5/p2EAr4YU209ZOysTdeLyueET3QS7Dvq/iikM5Ta+GpVQwIMAEh3savJzFxRX093AVCiwE1+3jHT3qjKhr78mXdpqwlfq1IvAebFXI9luZ8XKVKeJjz9c2IDYIqWnzd0roh+hkVmkRtl7SNqlzU3dTw64uq1V58xp5Wf/wIyMu56q4yc0/oftx2x7h4xW2AiryvFwrzQ/Z5+c8mUgV8kEkjb0osGPSaqn6a/cUJ/C3Tl6NnrPzvuequQnXDZmMs3Hy2HNP/OzN5LNHJrFmYvvqz/XwgEK/YX5QUA7FMP3NwAQcECnC4cJeiu+DyzsB1xjvnO3AZyBSjvXKYJlgBNcM6k3jA/lHfOYgNgylZMGPJVEWMzQ/H1NJXzmyryj+Hz1nx/1PzWVxISIB3VqgXDr143btv6dfeZyI9E5FVpta7I1OLtT/afQBiQldOeapkvKvzUtBsqYvqlnavbbhl15YaXEA64aPTM9jES1O4WkdcX+Tqd7oJUHujetLNKNpI3AMpZO6g1APyhKdQ6Nm7RC3PbUI5xQM8HFL0uaHrvk8oc+aIn8jIPOzWPWMwbYqneTM3pb5/GBsAMrJgw9Asi8lUi4fVavc5SYc0i+qGa2b0j5q1dNHz+utMIIpCMU66z5hFz1334tiPXPaBm14vIy4lKYdzW2aHvX1XVTkKBrFSrGtY0+ISI7PKz7yikNwah3DV61oYPkKFwxelVaxo7s72qIjeKyJFEJDe1wOQjC6YN3UkoAAAAkBQ2IwPpjxtEkc5mX39rHR+WAmi8RliCx6rvfahdycbXnXjGvcdZzqtsAMzIiglDPiMis4lEaQQmMlosvG34vNYlw+aveQchAeI547rNhw2/unVqv93rHhax74nI8USlUGvm+2th58iVFw/Yzs1B1pZPaXlQxL5EJNxhIoeJyg9Hz97w/VFfe/IIIoI8jbpyw0t6H7rxDybyBdbOWfQdB/23wbNuvLTv7QQUAFiY+rTYrX+m2/+lsMECAMo+t6U838R8PQp0z9SVfGezDFDGedESPBb1htbJn/ud7jnxJUaGVpw3+CIVvZr1h1uNcvpRt5Fq+uvh89beO2LemvPGfru9N6MB6NrIeWtOGDF33dXNu3etVpPZIjKUelO47m5tRW34imlDNxML5GX7lv4zROQ2+hvnLvhDQbfd942ZteFsshR5GD2r7b1BZ3CXiPBE7/zrwd/29HziCwSCFXtXK28AeHE9aPzLdE2holGwAKcLh4dvwWavInfEmsI94+ekkW+9NdIJKNhcplFKQOQXWObXw/xX2H68JPeXDYCZ5oja8vMGTRaRrxOMUjrRRK/Zs3PPmuHz1s498+rWVxAS4MUdlunIOa3DR8xtXWph8ICInS8ivbOfe/koLAPtFtiZiyYPepxQIE+rqtqpFf2QiPAUSvc+RBhoKjeMntX24zGzWvsSEWTh9OqjPcbMbJuvpgtE5LACrPl974I6A5WPLZt0/G6yk7wBQO2g1gDwh6ZQ6/iSmV6YVEA5xgE9H1D0uqDpvY+m8R4v2pDPPOzUPGIxb0i6c00jSdLYFj42AGbemKutOG/wBDGbRzC8W6snVSr6iMgFgdrfhs9fe/OIq1vPHne9VQg0yuz0+W29hl+9bsKIq9fdbyrLRGQELVSh6+pTFbPhyyYN/BvBgAsWT+73kIpc5F/fUZaaYe83qTwwZtb6T1SrxvoFqRlz+aYT+xza648iOoFouMK+xk//AgAAINWOM+XXO77gJgGQybhB3uNSPa511CkAjdcIS/BY9b0PtSvZ+Koz5xT3Hmc1r/IFWi65rbZiwpBJIjKbYJS8ypmcYWo3bGtrfWT4vNZPjZi7roWwoEyGzV3zuhFzWq/qWetco2bzReTlRKXwa+btFoajFk0ddBc3Ai5ZPLXfdSK2lEg4W7eOMtVv3tGr7ZaRV7adRECQpGrVgtEz26dJJbzDRMivXPuOF3yE8sctO/t+kQACABOEL4vdaDOd95cCAHC4ePOUXf/kds/UlXyn+QHKOC9agsei3tA6+XO/0zunJrIqr3uqtkLkwuHz1+4xtcsyzaUSdPLmWek2kaNF7KsW2BeGz1t7Uyj2g03N61fcOf7UDgYLiuZd89Yc1RwGH1CRj4rIyb73Wb7Vm5ztFgnes2zqwN8TCrjYm9mMto9rk90jIk7+3Cz1RkRU3hSEdsfoK9Zf29y9s3rD+UM2kbxoxNlfW3fsnU0bv6sibycaThW8LWGl6QOrqtpJMFixR5gj+OYSwD71IGrF2ff1By8u8SoaBQtwunB4+BaN1zq42xE/nTjJ3rM0kpG5DfXninX1g42kE+DZXBZh0Hb50n1fkFXfwtquBP14Ce4vTwDM2fKJgz8lYjzVAM/oLiLnBKKLWjoGrhkxf81VZ17Tegphge/GXW+VYXPXjRoxp/Vn3cKgVUXmiMjJic29qbV6SFCnqL5v6ZT+NxMKuGrpJf3Wq8i5RMJ5FRE9v2N380Ojr9gwbVz1vm6EBHF6k7Gz2ibXmpr+KlE2/5XkW7LcuyC1CYsuPvxRMpW8AQBqDQB/aezaZWVfkDA/AYwpQgAwluO+j6bRNym1yZO+u+znxAZAB6yYMPQLZvJZIlGUmpFY6e9nppOD0O4YPm/tfSPmrb10xNw1Q7gZ8MmoK1tfOWLOuunb1q9bHYgtFpV/ExE2apRPp6h8YOnkATcRCrhu8bT+N4jINUTCC0eIyBU7e/e9b8wVG/5NzPgmBHUZM6P99bse23irmV4lIr2JiHNLrx8svLTlR0QCAMqBL1AA+FiLilW7WEpz21CWG2yOvZ6EB6hz3h6LspRKfOPOI439nTbwfprJeUbBTwA7YuXEIV8ZNn/1NlG9kpKB/XiViVwugX51+Py1v1axH+yUbr9YNbHfNkID14y6svWVYZO+V0zeG4q9lo/zS6+mqh9aMnnA9YQCvti+ZceFvfoc8iZL6kmlcdZAlM4oXmYiPxt9RfufddaG/150Yb+bRJUIYh/jLt982K6g9gVRuYC1sLN17eE9PfV8AgYATBBFbqbr/mkp1gUAABfnp5ivR973wIe+i+YHKOOar/5a1liNyP6nhKlpyd7WosUznevhSw+HrJg4dM6w+WueEJVvp3pvSlJrCrr4CMTkDBM9o4d0XDN8futSC+XGWredS345/qVPMYqQl1Fz1r/apPZeU31vKHKiWLkaGi/rTTZzQU1MP7RkyoCfMErgk1XV43aNntP2PqnZncLTwXxykoneMPqK9rt15vr/XnRR/4VsBISIyOlVa+rVa+MndlntiyLSQkSctctUzlk26agthAKO97gACl4P9l3jH/xg8T4ToGAB1KZ8sXnLp5v89DGT3RzGPIR806HLfCZFAS/E2uwWY3wn37fs/yRY2xV1QmrkuH7dX34C2DErJg75vpn+q4nsJBrowqFiNk7VftTU0WPT8Hlrbxl2devk0deuHkxokIVh89adOHLO2uqIq1v/Fmp4j6l+QUROzK0fSK11RUw1UfvY0qkDfkwo4KPFk/s9ZKKfcHFBjQPNBc9G52TT4MYxV7T/ZdQVbeP4aeByO2vmxjN6H7rxTjW5VpLa/FeSjLLs33DSokta7iJry5I3zGgAspujqDgA8mv0NYXapdQ65qcSjSGUud5S14Cy1vp472H7PUTyPw9MbaIPcfmceAKgg1ZOHLxo2Pw1o0TlJuGpM26Nz7oreub/fq4iIm9Rtbd01oLZw69ee7uJ3FBRu3Hp+UP+zs1DEkZd89gRtc7md6jIGSJypoT2UlOl08H+1FTso0smD/ohoYDPlk7rd/2o2RveJSLnEg3/mMhr1OT60Ve03ykz2/978UV9F/NEwPIYM6vtrWL6pVDsdKLhw4C17y+8rN83CQQAlLZvY8sAAO9qUbFqF0+u4bahLDc47VqXXm3kmUZA8XqsJOtcDsdiHk4lvnHnkcb+LvrNjPtTz2mvIdgA6KgVE4f8Zvj8x99lGiwVkb5EBJG6YJU3qsgbQ9Hpw+et/ZuK3SimS3duGnTbqqp2EiLUY1z1vm7bjjzyTaL2bhE5I+yUU/XpzabAwXSI6UeWTB3Ik/9QCIfInik7pNsbROQkh9ZAiOYUUVs46oq2v+msDVfvMfvByosHbCcsxTTmik1vlLD232J6JtFwzAHrmt5juzrOI0AAwARRpma67g/92RkJAHBxfor5euR9D8rZdwFwf81Xfy1rrOZkNW8xP/r0+UGxrocNgA5bPvHoP50xv/VfKhouFZFjGRsU15heZaKvEpVP9+jbunXEvLW/DU1/aU3Br1aeN+BewoNnjLveKtvXrn1N2BS8Q0XO2GbydhE7lLVbgetN8nPBbhU9Z8nUAQvJCBTFgmlDd46Zuf5fw4r+SUSOIiI+L6X0VSJybTfVr46a2f7t5qbO+TdOHfhPIlMMY2dterdZ7SIJwzNZAXjVQG2phPbeG6qDdhAMONzjAihhPdh3jZ/GUwooWAC1Ke92nNWTPzf56WMmuzmMeQj5psP+8/N5J0KKAl6I9SS0GOM7+b5l/yfB2i7vOSitWDZyXH/uLxsAHffLiYPuH3bdP98staYlInIyEUGDepvIaFUbrbWaDJ+3dr2I/ErUfqk1+eWySUPWEKLyOH1+W68enXv+nwSVt6rZm7etX/dGqQR9vP1xxNTmXj4Kq9N2keA9S6b0v5lQoGgWXTzg0VFXbni/mCwXB56ESlU62FxgItZldI5QtYs6a5Wpo69oWyihzl18ccsqguefc6+z5nVbN71fzC40C1+X6cjgH1Qlcnit6EdvuKzv38nmsuYNMxqA7OYoKg6A/Br9+Mek1jE/MYZQ9npLXQOoEbHn4WcPkfzPA1Ob6ENcPSc2AHpgxfhj1439dvvb9+ze9TMTfsqquEu9XAwQkQ+I6QcsEBk+b+2DIvJLNfmdqt669PxBj3Efi2PE3DVDRPUtIsFbxOwtUut8rWjQJMaCHA33Lk+FYqOXT+5/C8FAUS2Z2v+Xo67ccJmYzCQahVERk/eI2ntGz2r7q4nOb640XX/j1COeJDRuGz1742Cp2SfWbdn4XyIymIh42j6oVG+6uO8NRAIAIMKXuwDKUbuSq3X8jCe4bdzgMtQ6AEWpTQeuC8lvzmMe9j+H4s4jjf1dknmd3zzJBkBPLPx4y9ZTrrtjdEttwDdN5CNEhMVUSl4uIi83lYkm9swTAm830dtUwts07PmnZZOO2kIiuO/Mq9cfF1h4cvD0k0NPNpHXi8jAp/OXTgSJLv43BWLDlk8edCfRQNEtmdLvilFXtp8iYu+n7yic16rYdZ21jjmjZ7UtVgt/2GN7/2ULqrqH0LihWrXgrkPazzTR8VILR4soa1m/F1YLbrr4qC/JJUQCAFDexpcvxwHGJVCEccC48e2eqZhYJj+jCQBR6kRW80l979N4XWN+LNPnB+78vDBfmnjkzvGndojZx4Z9fe0aMfkMEaG4ZmCAiIxVsbEiKhbsCofPW3u/itwuoreGYXjb7s2D71tV1U5ClY/Tq9Z06GHrjrcmOdnEThaT14voyWLhEcKSC+n3FY8HZsOXTBl0P4FEOcaLWsfM9Z9orugrReR1BKSQeojIe02D9+7s1b5p1Ky2n4raj5ZM6/dHUWVazcHYmRteG2rwgTut/d9FZCjdTSH6jrtt556PMqbgcI8LoEiFoIF6sO9nimk8pYCCBdCr5IvvT3y6yfF+dpB77J/c7lkOtWn/1/q8E6FVAopbt2KM77hPaot6EqztijoHubNRLy1sAPQu8dVWiHx22DWr/ymi14hIcxEWmfBGICInmsiJIvYxDVR69G3dPWze2vvV5H5TvVdVHggsvHfHxsGPsDEwOWOnt/fuPKTj5aHIK9TklWLyclF5hci640ORbk+PZZbxebeuJfsw5V4LaiOWThqyhvxAmay8eMD24VeuO7tiwa0i0t+rBXVp+mUTsUSic5SKTBDTCWOuaH/YZm74YSDyi4UX9/8rQU7X6Bltxwcq7zWR/zCRV6uxaHG/C6rbBrPK2YuqLTuILHnDjAYg6zmKigOgzkWluPTzutQ65qcy5Tuot9Q1gD4q0WM9ewjPf2qYPPL8/mR3TmwA9NSKCUO/dea1ax5Rk5+JyBFEBDnqriInicpJKiZiIqE8vTFw+Ly1D4jI/Wp2r1lwf6jytz29dv9z1ceO20XY9jVi7roWVTsmNDlaAznaQntZIPpyE3lFh3QMeeYfrj87T4CeK78w3yLd9oxdOuGYJ4gGymj51IH/HHnV+rM01N+ISE8iUnwm8lJR/UIo8oXRV2x4XCxYqipLZGvHrxdVB7GRqeEAm46esek0CcKzVewsEXmVFx//0ndEtUvD8F8XXtbyOKEAADg6uwNA6rUruVrHxi1w21CGWgegKJPPgetCspvzkv+Z8y6uh3n4oMKY9z3uPNLY3yWZ1/nMk2wA9NjK84b8euS8NW+sBbJYRI4nIi7OZ6VucbvL0z+P+DrTp4MWiEiPbd1k+NVr20TkcRFZrWKPiwb/DE1Wa6CPB1JZvXRiv/VFCkS1asFdh7e17G4K+6pJS6A21EyOFpGjReSYvf/zWBHraSKiz/xKjarwwBs4uNBfeGjY+f4FE47ZSTRQZkunDLht9JVtHzazn8rTT8h1ZR2N1AuhHi1inzSTT0qvpl2jZ7X9RlSWaBguXXTxgEcJUH3+9cr2gR218Aw1PcNmtb9bAhn4XNKjgEIV++hNl/X/A6EAAND4vmCNTfcDMC4B78cB4yb/HinaPUhjgwwfYgJovE5kNZ/U9z6N17WQm16izw/ceGohGwA9t/T8IX8f9q3Vb5Q9+jMReQcRYfHhiX57/3OqiYrY3oVGaBJKKMOvXrtLRB4XkzZR2SwqmyXUzarh0/+76eaaymYV3aQdulkr3TYvm3TUlrRP+uwrHz18d6W5V02DXk0ivWpmhweqvUykl6r2FpEWMen79LVZfxFpEZGW22RdXxEJgr11m0198LZPUvvWzicGnreMn/cGRERk8dR+Pxt1RdunRe1yolFaPURkhJiMMA1k9My2+1Xtd6HoHyo1vXXhpS0PEqKnnXXFpqG1Wu3NqvJmUX1XR6ed+PQHzijJguyymy7t91MCASd7XADFLwQN1IN9P1NM5ykFAOhV8m3XqV3+3OSnj8kGvTIso3O6ZznUpv1f6/NOhLUdwFS5T81I/yd949VhCpb7c1Cx7xEbAAtgxSeGbj7lujuG9a0NvEbEPkF+owAFu4eInCAqJzw3w+7990h7j/H0ZjoTaTIx2SXDr14rIrJLRJ55Ktl2Eduz9823qkqniIiF8uSLvmvuriqHPDuZm/QQsZ7PnbYeIiK9RKTX7r3/XWXvAjvQp89BhXHEktuBhXnaF6/66aWTB7LJCXiRJRf2mz5qdtvxIvZxN6tSWfsOE7EcoqPyShN9pYqcG1ZMRs9q2ygifxSTP4Yqv69s67yjDD8ZfPaVTxze2dl5koqcJGpvVJO3hGFtiOpzDReK2AUdYFioXXPTJf1mEkXyhhkNgAtzlJsVhw9oASnFuIx/TDZ7MT/5me8AfRBQzrkv/c158Q5BvSnP/JDWvXbxnF6IDYAFcef4UztE5L+GXbPmPhGZyb1FSfXY+x8RkSOev8h89nvm/aw79/0OmsUp60U8zy5R+cjSyQOuJxTA/q0/tOW8/tvbhqrImUQDL9JXRMaIyphARKRXU8foWW33itr9Kvo3EXsgsKb7u2078h8LqrrHt4sbO729d60iJ1RMjjcLXykavE7UXlfr7Dj22W7K0pyWHfhai76jqzu0qPsxLZOIBADAo9kdAFKvXcnVOjZuZaUmIoHLJ8jaFIWudfyMJlCUyefAdSHZTYPJ/8z5/s/32ethHk7lvsedRxr7uyTzOrt58hlsEiuYFROGXDVs/pq/iMr18vQXjsh9PuOjS7Bwh7faAgvOXjyl/x8JBXBgd47XjnHz2/5tx277lYi8gbkAB+kKm0XkZDE92fbe3JrUZGev9s7Rs9oeEZX7xORBNfmHBLohNFmnga5fd+hRbXeO146sz3fU1548ItCdg6SpcrSIDpYwHCqBHi0ix4jJCSY2OHhmg5/uTVRyFc/l++27tfbvi87RGtEAAND4Asi5N+UJegDjpvA9UrR7kMYGGXo5oMhCSWIzfNd1Iqv5pL73oa7x+UFW55TM9bABsIBWTBzym5HzWk+tBeENInIyEQFcXA4DzvckD6gFoxZP7f8IwQG6tmBiv21jZrWOCoPgdyL6CiKCGOuyE8TkBJG9v15sez+EDU0Gbm230bPa2lSkzURaxWSDBPKkiuyU0PaEottFtVNEtgYiYaj21P7eJAilT6haCcS6i8khonK4qBwiJoeIyRGicpSY9BV55j97mkQqe+cHe3qTH593oD5/k6Bj1MqLBm0nFAAA1xa7aR+TDRMAci1RKM08xHxTfLndsxxq0/6v9XknQvICSLVYuXosbitNeDRsACyopecPemzc7NVv2do9+KapfYAaxOKmPAWbvEH+GeF73pjIiu626/03Tj3uSe45UL9FFw3aOGZO67BarekWFRvKPJV332F7d9IVpovqbyL9ReQ18vyH7anuzQF7LicO0G+ZPvPvu/c+sE+e15uRSEjOo2GTnrl42qCNhAK5z2h85gpgP/XAzQ0TFCzA6cJRgu6KzxfKfg+Yh0C9BZDk3BdhXHf50n1fEHnOfPYQ0eoN/RHzQ7LnlP71BCRNcS2YNnTn8omDP6giF4pIJxEBUKp+AHFjN7vXoAGj2PwHxLNo8qDHVTuHicgmogHQdxSJ1feidYGE7148re9aEgN15w0ANFg7qDUAfFw8JFfr0liQNHOrfJxv+EwcjBsAHkw+WfU0ltG1G/NwqvfdYr+fNnCe6mC+1YcNgCWwfMKQ2YHYGSKyjmjkNZ/R4gJw3i5V+ejSyQMvXHCO1ggHEN+SqYPut8BGici2HNfRQElyjT7boTuxuRZUzrzxkv4PEw0AAI0vAN9XDmxGBlihF79HUmodACdrQOPvowm+D2vUcs2N2Z5T0mOKDYAlsWzC0N9WrOP1IrKKaACetT30FUjfOjE9fcnkgd8jFEAylk4ZcJsFOkpEthMNACWwtWI6YsnFR95LKAAA7tHMj8mX6QByLVEozTzExtbiy+2eafb5bhRJgHmRY3HPMwufFnJssAGwRJZOPG59n76DzzCRr+3TR/GzVfB5rUvegLxpxG1BrfO0pVMG3MZdAxLuvab0+79QbayI7KTe5NV3EB3yBhn099sstJE3Xtr3doIBJysTn7kC2E89cHMDBAULcLpwlKC7Yp1Y9nvAPATyD0CSc58mWAK08TlT49Ub+iPmh2TPKd3rYQNgySw4R2srJwz5tIiMEZHNRAQA/UD81tX/Jly/cegTm/9l8bSha0kYIB3Lpg74tYVylojsIhoAfYf/vcM+dgQiYxZd1u8WkgDF754BuFw7qDUAfFw8JFfr2DhDb0sqgHEDwJ/JJ6uexjK6dmMeTvV+xP87beD91MF86xobAEtqxYQhSyph8HoR4YlPmc1ntLgAnLFdRD+wbPKA8QuqJ+4hHEC6ll7U/+ZQ9V9FZHfG62igJLlGn51TnmxTseE3XtyyimAAAACgiCsHNiMDrNBdW4incUxqHYD6ZLu1qPFaowm+D1/OuDu/+f+EQPN2lMIpS88f9NjGyvq37f1J4JCIAA4vb+krkJwHazX5f0snD/hfQgFkZ9nUfstUbJyIsOkWQBFsF7VRN13S73eEAgCQPPXkmAfHl+kAABfnNuYn/+R2z9SVfOcLMsDnmpT+uC7DsUrYC6mD5+QBNgCW3J3jT+1YOWHIp03l3aZSip+AZLEC8galzRuVBU27mk5bMW3gfdwdIHuLpw1YFKqeLSI7macAeGy7iYxaeFG//yMU8KaD5jNXAPupB41/mV6MjYoAHBiXKb4Fm72K3xGbb/kOHCT/qEFA0eYyjVICIr/AMr8eFLYfL0jPxAZAiIjIyvOG/Lp7JThJTBYSDZS0HoJcK3Krt0tEpyydNPCchZe2bCUxgPwsm9pvmYgOE5EtRCOruYDleWFmM3pcFzwpEg5bdEnLb7nhoN4AcK12UGsA+Lh4SK7W8aE78xOpANaEAPLvbVyrC7bf00z+SX/UuXTve/y/K9fmQTYA4lmLxg/auOL8IWeJyEdEZAcRSWN8UvoBZO6BQIM3Lp08YA6hANywZFq/30kYvFNENjm0LgBK+tEBImirib1j4SX9f08oAAAAwEqDlQnAOMiDOnHPuMcANciP98jhWHyHk8O9Sj7oFvO4FvOckppX2QCIfayYOOT7QaVymojcSTSAkvVUKJofdO7RUxdP6v8XQgG4ZclFLXcGEr5dRNYRDdB3wAOP1yrytqWX9PszoQAA+NuMuN/g8GU6wDgDc5uL44BxU/R7pimkLR8sAdSkxuuEJXis+t+H+lWu1qlY95sNgNivZZ8c+LeNTevfJCJfEZFOJiUgSt6QYcg9G7aI6AeWTh744ZUXD9jOXQDctGjawPuCsPJOE11NfwPAVWrydwkrb1t6YcvfiQb8TmZCAGDfetD4l+maQo9OwQLoVVB2UTc8GMlY4HtMbAD4PpYjzCsa/QW5/JRw3diOlVyPUa6f8o2LjMMB3Tn+1I4VE4d8NlB5m4jwZQ+KXg9BrhVjGWr6ew2Dk5dOHvC/3HzAfYsu6vuANVXeLCL3EI005wI+OvRsNqPvcOdy/iyd4b8suuzIx7m5yK7eUJkAxK8IVBAA/jT6mkKtU2oj81Mh16Yo07gheYEy9Uu5bN7TNOqNZno9ZeujGs+X8mweZAMgurRswpBb++y2k8R0uoiERKTR8UnpB5CKThH570MH9X/7kqn9HyEcgEe91qSj1lQ6greYyEpv1yqA1x8d4AB+1T2snL7wM/03EAoAAACw0mBlAsAV6Xw4SK0DUMw6l8Ox+A4nh3ulic9XFvOcLOb1JDGvsgEQdVkwbejOFecPvsxMh4vIP4kIUKh1HXxPC5X7TMM3LJ08sLrgHK0REcA/Cy9t2WpNW8aa6k+JBug7kP+tt+8PPKzviAWXHfkU0QAAFKsZcb/B4ct0gHEG5jYXxwHjpuj3TFNIWz5YAoo5jSX5tLuu64QleKz634f6Va7WqTj3mw2AiGTl+YNv7tYUnLj3aYBebzJhsYJ084YMQybZYCb6jaC7vWHZpMF3E2nAb8smHb976ZSWf1eT/6a/AZBf46JzF17c8tFvjNcOgoHC4fNbAPupB41/ma4p9OgULIBeBaVfmkVMHCMZC3yPiQ0A38dyhHlFo78gl58SRg49Rnl+yjcuNgAiskXjB+1Ycf7gy1SC00XkQSIC1pAob67l2uo9HITyzmWTB4xfNH7QDm4yUJR6pbb4wv5VM50snv9jC/diy/LcydmMvsMlNVH55KJL+04WZcAg73pDCgKIXxGoIAD8afQ1hVqn1EbmJ8DzccOXh0CZ+qVcNu9pGvVGM72esvVRjedLOTYPsgEQsS2fOOiW3Yd0nKSil4tIJxFhqQcgE6GIzan0sNcunjpwFeEAimnphf3mSiCjRORJogHQZ2dgq4icvejilusIBQCA2RoAqHUoAPZQcYMzqF3UOgB+1LkcjsU87PX89sK/y25ja9jgdbIBEA1Z9bHjdi2fOPhTpsEbReQuahFAriFVD1oQ/svSyYOm8NQ/oPiWTOm/IggrbxKRh5gLQN+BFD0aauXNiy5pWUwoAAA0I27gy3TAvXHGuAQYB8WvXek+6RRAkZZoST7trus6YQkei3mu8MlZ6nNiAyASsXLCoDv7tAx+g5pNFrEtLFbAAosMQ6LZUBOTmYfWOk9edsHg3xNNoDwWXdT3gU7Z80YR+RXRAJBCg/J/EnS8YcnFR95LMFAafP8E4JlC0EA9sIjFxRo5TwD0KuAm13nMZDeHkYzZLMupTd7HBkCdYzlCIdFG3ifdwkdtymFS0SwmJM3pb5PFBkAkZsE5Wlt+/tC5YWivFJEFRASe1UPA1WXonyqhvWHplIGXLJg2dCfxBspnxbShm7dv6TdcVK51oip53XcQHfKGHvd5vtVjZ993L7po0EZuGNysN1QmANn1NlQcAPk1+vGPSa0r/nzDPQP1FgBSqhGaRr1J8smI9FHlmFuSPacm0gpJu/mCo1tF5Jxh81cPF9V5YvJSonKgkkYDC2Q6f/rVcT1lJp/tNWjAtQvO0Ro3ECi3VVXtFJEJo2e3/cnE5otIT6IC0GfH1KliFy28pN8cQgEA8GW2ZnYHQK2Lwr8PQpESUoEb7GDtoq8DqE3114Uk65yKiWVbf3gcWyo5FHceaezvksxrUg4eWjFx6PI+u+w1IvIlEdlVmloEkGto3PVNQdOrlk0ZOI/NfwCeb/G0ft8x1TeLyCPMBaDvQAxtanImm/8AADQj7mO/BuDeOGNcAoyD4tcut550CsDlJVqST7vruk5Ygsdq/H2oa44nZ2nPiQ2ASNWCaUN3rpg45PMWNr3KRG9gsYLyLbDIMETKhodFbMTSyQPft/CCllYiBmB/lk7t9+dm7XaKiS4iGgAidCJ/7LTglIWXtvyGWKD0+JwWwDOFoIF6YBGLizVyngDoVcBNrvOYyW4OIxkzWa1Tm/yPDYA6x3KEQqKNvE+6hY/alMOkog6ek4M9ExsAkYmVFwx4dOXEwf8qIu80kXuICFhDgiX6C+wQkf/e0WfXq5dOHrSceALoyo1Tj3hy6dSWs9Rsioh0sgCN0ncQndRmM7jc436jx46W05ddetQabgz8qjdUJgDZ9TZUHAD5Nfrxj0mtK/58wz0D9RYAUqoRmka9SfLJiPRRyd/7Yj8hkA2AyNSKiUN+s6d98OtFbIqIPElEKP1AydeLZiI/Ma29fOnkgdVVHztuFzcJQP01TW3xRQPmiIRnishaAgLQZ+/HDlX90KJLWsYvqOoewgEA8Hm2ZnYHQK2Lgo0zIBW4wfR1APypTZZJnVPqT0FyKO59bOzvNLP3i4sNgMjcqqp2rpg4dE5Qq5wgKtfKfp5aQ68NkGsl8FcxO33Z5IH/vmzSEJ7GAyC2JRcO/E237h2vE5GbiAboO/A89wdh7Y0LL+77Q0IBAKAZAYD9Y9MKkP64gW/3TDP7GU0AxVinWYLHcmH+sYTOF/nmZRnPiQ2AyM2ySQPbV0wYMsHC4DUilusX1ixWQIYhQxtE7LxDBw54/dIpg/6PcABIwg3nD9m05ML+Z4vKRBHZSUSA0ref396ttdNuumzAPQQDOAA+pwXwTCHQFI55wCk6mpCbBNCrgJsc45hsbPVxGe/JPVP3YwOgQPUgxntY4ien1CZXbrAWJbHTwwZA5G7lBYMeWDFx6NmByptU5fdEhPpe1AUZSr9E3yEm0027nbB08qCvLzhHa8QMQNKWTOt/jQS1U0TkL8xTB+s7iA79TWFtMZMPLrq05RMrLx6wnXCAygQA6VYcKhRQ2kWlU8ekdjHf+JfvAPkHlHfuS39zXrxDUG/KMz9oYc+JDYBwxrIJQ25dft7gt5no+0XsUSICoCDrxVBEvlOpdZ6wbMrAy5ZNOmoLNwFAmpZMHXT/IbrnTSo2V3hoCErNga+1su07bg9r4cmLL235EfcejFAARa0FbHIBQK1zd0HCPXYYqYBC1zoARZl8LKOJzBy89jLnQdz7bhnff0s8r5PHBkA4Nv7VVk4c/NM+LVteIaIXiMi64s9ntLigfyjwgne5WXDysskD/3PxtKFriQiArCyYNnTn4gsHTFYN3ikijxAR0HcUWmgiMwYe1vetSz7Vn/EOAKAZAYCI2LQC5iGUITct4jGNMQQgwtjOqj+yhM43mfehrtG3uXVObACEkxacc+KeFRMHz+vWFLxMxKaIyAb3JwuADMOzbpVA37V88sARy6f0/yvhAJCXRdNafqu9aq9RkenC0wCBInrMVN61+JKWS78xXjsIBxARn9MCeKYQaArHPAA+IQJAr4J0b3K8jRhshM2fN/dA3Y8NgIwGv7r8Hun/1DC1KYdJRR08J4ewARBOWzR+0I4VE4fO2S3dXiZql4nIk0SF+u7zggyFX6LfaybnLJs88E3LLhjwa+IBwJV+atGF/S9T07eLyD+IyDN9B7M4/Y33vfMP1OQ1iy9uWUUwQGUCgPwqDhUK8KN5LvoxqV3MN/6NIYD8A8o796W7Oc9iH4J6U575QQt5TmwAhBdWTey3bcWEodM7TV4mYjNEZBtRAeDKnK4iD6jo+5ZNGvja5VMGLiDAAFy06KJ+t9Sam04Rk68LTwNEaTjwtVbynyWsF5Exiy5u+fDCS1u2co/BCAVQtlrAJhcA1Lp8FyTwdL4hFVDoWgegKJOPZTSRmYPXXuY8iHvfLeP7b4nndbLYAAiv/Or8IZtWTBx6abem4DhR+aqIbSnGfEaLC/oHT90vKh88dODAVy+dPPB6UR4nBcBtyyYdtWXxRf3PM5G3ici9RAT0HZ6FX/VnEnS8ZtElLYuJBgCAZgQAksOmFTAPoQy5aRGPaYwhABHGdlb9kSV0vsm8D3WNvs2dc2IDILy0aPygjSsmDPlMUDtk6N6fBn7CjckCIMNK4l4x/UivgQNfs2zSoB8tOEdrhASAT5Zc2P8P27b2O1nMpghPVgZ8aCPXmdm4hRf3HbfookEbCQiQID6nBZDDz3jyCREAehVkMQ/xlF0fl/+e3ANqE8CclVo9UK+OxVyYw31SB8/JEU0kE3y2bNJRW0Rk+hnXPfz1po7uF5jKFBE5ish4Xt89mymNtU6Z8vMuqcmXlk0ZeBNP+wPgu1VV7RSROSNmbFhcqcg1InJm+eq6iRizOJwWqti1HT0rn9679gFKjJUXgNTX/M9+JhW14lChAM8GudPHpLuCq/fM73xHEWo4gGLNZRHmlS5fuu8L4s+ZzHf0+P6eExsAUQi/HP/Sp0Tky6fPb7uqu+z+uIhOFZFjiAyAROZelVWiOmPZ+QOWi6rJVMIHoDiWXdL/YREZNmr2+verBTNEbChRAV8EObHmvy8Iw3Nvuqz/HwggqDcA0FjtoNYA8HHxkFyt44ts5idSAawJAeQ1XqNPPln1NC94H+bI3JuQuPNB/L/TWD92//T7JZnXL45TfPwEMApl1cR+21ZMHDpnd/vgl5nYB0Xkz7nXsUhDHoBDQhH5mZm+YdmkQe9YdsHAZTz1D0CRLZk24Cfaq/MVZvJFEdlJRFAc3k3fO1Xl8z129H09m/8AAMzWAFCc2kWt8xw7lOB8QqVzTGodABcnSsvofM3Baye3fG/g0jsnngCIQtr7k3Y/EpEfDZ/f+lbT8FIxGUX1Rf5S+rdM/KuEJO0xkZ+GgXx15QWDHiAcAMpk0fhBO0TkCyOmb/pmpbnzq2LyQfon0HdkanGl1nnBjZ8a+E9CAQBAls1I9g0OT7sB3MO4RJnmoaTGAePGv3uQ2D2LnbZ8sAQUeWpMpsYkWSdcPRYaim0mt8K/+80GQBTe8omDbhGRW4bNa329SjjJVN4vIt1ZrCDPBRmctN5Ev97Ngq8vnNJ/A+EAUGbLLj1qjYh8ePTMdf8jQXCViLyuuOtKEzFmceTeTN4dqk1eckm/3xEMIIeVF5/fAthPPWj8y3SKC+D0IPepkUjxLfhcu8gd8dOJk+w9Zm4jlADQeAF7bm6KcKwuX7rvC+LPgdGukX6KSdWVc+IngFEaK84fdNfy84d81IKmo0XtMhFZTVQcrtFAVrmmcpeIjO9Vq71k+eSB/83mPwB4zuKLB646dWu/15voOSryMBEpFz6HzqLHtU0qNqXHcX1PY/MfqDcAkG7toNYA8HHxkFyt40N35idSAawJAeQ1XjXB99H0roc5MvcmxDLNSxGLedMt8bxOBk8AROmsPG9Am4hMH3f9fVc+1d5nnIpOFpHTUq1jFmXIM7MAGeg0sV+oytxlFwz+PeEAgAOrVjUUkQXjqvfdtLPXUeeJ6mdEpIXI/P/27j24ruq64/hvnXMl+SUZbEm2hR2iALEnDmagwaQuST1MApbBTsPETmca0vaPhDYOCjiAIdOZinQ6GXscd+LEJDhQCg0ZWoWJQTHC1EyUAIGKAdxgHh3LdbH8tiWwJctGuues/oEajJ+674e+nxn9I13pnrv23muvfc7WOSgtRVdnD8j8h2OixPda75p0mPYBAICzYgBGR+4i15U47tqGou9QufmbnuIWCXIdQF4rp+MdWU6jSCjevjV67hDIBkCMWq1LZw9KekTSI0337vp07LpZ0lJJ44gOcovHVhVwLt1tsd/v5vc/1Tx9FwEBgBRqp5bZg5J+sHjlwX+OE/FySd+WVE1kWG8jJYNuvj52/eOTd9TvIxwAABRTMZL/AoeL40DxYVxiNM1D2RoHjJvSa4OstVna3ZYTS0A5T43ZyTHnzhMjf59s5hzyV9HUV3lpitJqbzYAApLavzH9RUkvfu6+7beG0ZivuPxr5rqMyCCXCzLkTezS04H7TwZ6GzZ2tFiSkABA+p5YUdcn6Z6mtXvvDYaCO036G0kTSntd6ZIziyOnIpn9a5gcumfD3dP+l3AARbjy4vwtgNPkg8wvppNcgGIb1yW7cSuHb8F57XKuiN/vONltY+Y2QgkAmSewD+amFP7WOV966gvSnwNT+4zUU0yqxXBMbAAETrD55osOS1onad11P+6ea7G+LtmXVeoXtcnRGJ32uenBWMFPn75l6g7CAQDZ1d487aCkOxat3rMytsStJr9FUg2RKS+cuMhYLLPH4kh/v3FF7ZuEAyDfAChs7iDXACgdH5wgz16u46Q78xPAmhBA4WubYssLH3ofyqWC94P8zwfl0+hsAATOYNPfzuiU1Nm0tme5h8eXSPFfSnZ1WvkmpZxBiQtkYFCuNpk/dKy3oZ27/QFA7rXd3nBI0t9d/713v2+V7zVLapY0icig+OS1zh6S2SNxpFVs/AMAoEhnawAoUO4i15W4crhGzOaGMm+M3DQwuQ5A8YzvYn2kLxNsIds93X6Z2e9lsrE1+/2FDYDAObQ3Tz4i6QFJD1z7w32NYRjd5O43SbqY6ICFe9F4We4PDYb+82e+Ob2HjgAA+bfx7vPekXTP4pUH10QJ/4bJmyU1EBnqjlFmQLL7FQXfb7tr0k7CAQBAqRUjFDhAOWLTCpiHGDfkukxff5a+mXa3pe4CynNqzObj57N5t7jMcg7zXKmXY5m0f+nMV2wABFIw/BjR78r9H5p+tGeem3/VTUtNOo/oILXJnzIhC3aa/N/Mw4c3fmvqVsIBAMXhiRV1fZJWLml5/Z8GqmuXmnSbpCuIDMrcO+a2big5tLb9O9MOEg6gRHH9CUAW8sGpZ3xyc5cCAJmM6xKd9KlVkNb8kc2NGHTGfI5ragQA5V6YpHUntHO+9NQXZD+fnv4gyNuF7lfFWJ/k95jYAAikNU7N26XnJT3ftHZbs8Jx17r5Erl/QbIaAsQaEjnT69JGlz+86ZaGZ2RGDwGAItXaMntQ0s8k/WzR6gNXy7zZpRslhcVZd/jwfyfiZJy4OKv/NvMfV43VA63L6voJB5CvfENmApC/2oaMA2CEi0rl8m5w2ctdXLBmvgEAoHTqpXzNjx96nz8cJpsVclMPZfPOjsVcy+cfGwCBDLU3X/KepDZJbUvWdI89UuELLbAvS7pe0rj0cgZLPeAE75p8Q2z26PGeac90tFhSktRMYACgVLTdXv+cpOduWHXgEiW0TO5flXQ+kUGxnHJIUdJkG2L5ul/dUddBTAEAKOxszVk0AOQu5L2Ny+EaMXsayrwxctPAuc515EagfGuf4s6dxfq3kGp80+2Xmf1eJhtbs9tf2AAIZFHr8hnHJD0m6bH56w5MGONDN8j8RkkLJFUTIbBwH7F9Jj0em35Z3fPOr4fvIgUAKHG/urN+m6Rbl6zpvntAVUvN/euS5hEZ6o6S4Npvsp8Oud3XvmLyLhofAIByLUa4YAOUZznPJhSwKGbckOsyez11F4CRDutsPn4+m3eLyyznMM+VejlWbo8XPhUbAIEc6VhW3y/pUUmPNq3dVhUnxn3GXIsk/5KkBiLEAosy4RRvm/R4JG97r7eh4w93+gMAlJ3hf5p4SNJDi1YfmiWL/sqlr0maRHRQZCKXfh24r586sW7D+pttiJAAZY7rTwCykA9OPeOTm7sUAMhkXJfopE+twgSU1vyRzY0YdMZ8NnnJ1Ah0B4AElqa07oSWxttmP5+e/iBY2xW6XxXjhJS/Y2IDIJAHw48J3ixpc0uL3/a7uj2fDjz+M8kWS5pJhFg0jFKRpBfctFFR9ORTt874PSEBgNGn7fbatyTdtei+Pd/1vvCLZvqKS5+XFOa/7vDh/07EyUbbiQuTtsj8X4YGo5+3f2faQXoAynh0PyazzmLLN8V8EIHFXfQbIJPhZa+5+foRzMWpzt3ZrwZOyAfp1EKeYoY7/d/3Q/QaIDNDQ4PHrbJy/emHoqc4jguRu05zgnyEB3bm3GVn/bwVFdpHzzkpNu47ZLY+nbkgyGQeykGR6ym+jaU4SkySe8BVHZ1tTRFsj6X1J3WyHCxnPCe9zQozCHfTc4DCMvP/iD04eGo+8LNmo+zkDEsx45mkOOX89aF520byW36u779CDaWNLu9Kpx46cx01kpbMVoU/0nk39WOy0/zMZC/kYqQAyJPr7337Y5EnFph7k0vXSBrHEM15Hs59EVToNFy8MTtkrqdi+UaP4qc3LZ/RSwcHAJxs4aoDUy2M/9xkN0m6Ir91B/VXylWLl8enMWmXu1oj+cNP3lm/hRYHAAAAAAAAAAClgKtbQBGZ/+COMWMHqj7rcbxApibJZhEVsQGwtOP2nqQXXdpsCjZPmDrlpdalFtGpAQAj9YXVez8RB+FfuPuXJH0893UHS6S0qhYv2U/TLdcvgjD+xePL61+QGXcpAAAAAAAAAAAAJYWrW0ARW7juwNQ4HvyMTJ+T7FpJHx2VgSjRy7Cj9i6Apv+RtNllm80rN7U3Tz7CaAYAZMOiNXtnxx7eIPkik+blZBJlA2B6FUtp1WvdUvBLWdza9u2659n0BwAAAAAAAAAAShlXt4AS8vkfdF8SJuwauV0jab6k+lHz4bkLYLHGLCnpVXM954F+O2jxs898c3oPoxUAkGuL1xy4OI79Rpm+KGmupCB7cyjLpJSrluKu1SJJL5q0Melq5/G+AAAAAAAAAACgnHBlCyhhC+7dPdMjzZPp6uG74JTvI4PZAFgsMRuQ9JJcv7XQnx2wihc6ltX3MxoBAIW0aPWeWgXBtS5bINd1yvSfJNgAmHrVUny12iHJnpLpycGgctOm5RN7aT0AAAAAAAAAAFCOuLIFlJGmtXvr4iCeZ9KfSPpjSZdLGl8WH44NgIWIWyTpLbl1uvl/mrzzWG/Dax0tlmS0AQCKVUuLB501h64IFC2Q23UmXeVSRWrzJ8uktKqWwtZrRyQ96/LfmIUdf9Q/+eWWFotpMQAAAAAAAAAAUO64sgWUsSX/7uHR/bs+ESn4lMyuNPmVkuZIqiy5D+Ol2QYldBfAWNI2ybbI4ldcQWflQOLlJ1bU9TGSAAClbNF9e8bFA+G8INZnXZqv9x8XXHX2+ZNlUloVS37rtcMyPavYf2MedFQ11r7autQiWggAAAAAAAAAAIw2XNkCRpklLa9X9tVNuszcL3f5HJculTTHpPOK/uC5C2C2YnZM0uuSXnWzLWEcbzmaqPg9j/IFAIyKWmhN99hjUeIqBcGfynSVYs2VafKpcyhLpZSrltzVakmTtrp7p8w6gzDurJw+5Q02/AEAAAAAAAAAALABEMCwhT/ac2FS8aWmYI7JL5M0c/hrTNEcJBsAU33zPsV6y+Svu+lNud6UEm9c1Vu/g0fiAQDwgaZV+y9KBD43DuxKueaadLncxhGZFKuW7NRqSUnbXPovM+uU/CX1J19pa2kYIPIAAAAAAAAAAACnYgMggDNqafHgd5P3X2hBPDNwzXJplqSPyzVL5tPyfkBsADydY5K2S+qSvMvduhTEXRVRsK3tWw076cUAAKRufosnqmv2zXQPP2muOS7/pGSXSvooa6hsPgbYd0q2VdJrJt+adNs6fqDujdYWG6QXAgAAAAAAAAAAjAwbAAGkZcma7rH9iURjFEQfC90aXdbogTeaq1FSo6SarL9pWW8APOOrj0p62107zdTtrp0m2ynpbSna3n7LBbtl5vRIAAByb/HKg9WeiGYrDma76WLpQ18TWESepl5z7ZepS1KXm7oCty432x6G4bYNt53/Lr0KAAAAAAAAAAAgM2wABJAT89cdmDBeyRlxHE9ToOnuwQWST5P0EbmmyDRFUp1SvVheLpsATX1y7TVpf+zaGwTaJ9m+WLbHXAc8TO7249q1afmMXnoTAADFb+GqA1NNuiQIdZHLLpTiC8ytQdJHXH6BZJPKcCHZJ9cuN9sduO9xqdtde4PQupOR70y4bX9iRV0fvQMAAAAAAAAAACB32AAIoKDmP7hjzNi+ilrJ6uLQplisWjPVuvlEudXIfKJkNZKfL7caafj78jGSTZC8ogCHPaj378zXL6lPsn7Jj5j8sCvol3u/zI+4q0dmvaGpNzbrsch6LQx79yd29rx886eGaH0AAEaPJWu6xx71MTPkPtXktVJQK3mtuU82s8mSal2aLOk8ycZKXmPSBJdyWuuYNORSv8z75Hb8/dpGfXL1uPxQYNbjZj3u3mNuvR7EPWEy6Kma4Ltbl9X307IAAAAAAAAAAACFxQZAACVv8cqD1VH1QMLjihoLwjBOJidGbsH//zwRRokoDqrPmgwDPxpHweCJ3wst+W6QqPI4GfcFicHk0bHxsY6/bjxOxAEAQL7Mb/HE+KrD1YnKaIJbVBXFNvHEn7t8vLlXnvx7gcI4Nj984vcSCo4lw+TxeDAxGMTh0XEXTTzSutQiogwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArt/wBQqoPCJ89/4AAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyNC0wMi0yMlQwNzo0Nzo1NSswMDowMEK7CccAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjQtMDItMjJUMDc6NDc6NTUrMDA6MDAz5rF7AAAAAElFTkSuQmCC\n }\n }\n}\n\ntest TestBase64URLEscape{\n functions [TestImageInput]\n args{\n img{\n url \"data:image/png;base64,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\"\n }\n }\n}\n", + "test-files/functions/output/allowed_optionals.baml": "class OptionalListAndMap {\n p string[]?\n q map?\n}\n\nfunction AllowedOptionals(optionals: OptionalListAndMap) -> OptionalListAndMap {\n client GPT4\n prompt #\"\n Return the given input:\n\n {{optionals}}\n\n {{ctx.output_format}}\n \"#\n}", + "test-files/functions/output/big-integers.baml": "\nclass BigNumbers {\n a int\n b float\n}\n\nclass CompoundBigNumbers {\n big BigNumbers\n big_nums BigNumbers[]\n another BigNumbers\n}\n\nfunction StreamBigNumbers(digits: int) -> BigNumbers {\n client GPT35\n prompt #\"\n Please make sure every integer in the output has {{ digits }} digits.\n For floats, provide a mix - from 0-10 places before the decimal point,\n and 1-10 places after the decimal point. Bet.\n\n {{ctx.output_format}}\n \"#\n}\n\nfunction StreamOneBigNumber(digits: int) -> int {\n client GPT4\n prompt #\"\n Respond with only an integer, no affirmations or prefixes or anything.\n The response should be parsable as a JSON number.\n\n Please make sure the integer has {{ digits }} digits.\n\n {{ctx.output_format}}\n \"#\n}\n\nfunction StreamUnionIntegers(digits: int) -> (int | string)[] {\n client GPT4\n prompt #\"\n Please make sure the first item is an integer,\n and there are only 2 items in the list.\n Any integers must have {{ digits }} digits.\n\n Do not put quotes around the integer. If you chose to generate\n a string, please don't make it the string representation\n of an integer. Instead use common dog names.\n\n {{ctx.output_format}}\n \"#\n}\n\nfunction StreamingCompoundNumbers(digits: int, yapping: bool) -> CompoundBigNumbers {\n client GPT4\n prompt #\"\n\n {% if yapping %}\n Please give me a friendly response before outputting json. And put the JSON\n into a fenced code block.\n {% else %}\n Respond in pure json. Don't use any English descriptions like \"Sure, I'll do that\",\n nor put the result into a fenced code block.\n\n Just output a JSON value that could be parsed as JSON.\n {% endif %}\n\n Please make sure every integer has {{ digits }} digits.\n For floats, provide a mix - from 0-10 places before the decimal point,\n and 1-10 places after the decimal point. Bet.\n\n {{ctx.output_format}}\n \"#\n}\n", + "test-files/functions/output/boolean.baml": "function FnOutputBool(input: string) -> bool {\n client GPT35\n prompt #\"\n Return \"true\"\n \"#\n}\n\ntest FnOutputBool {\n functions [FnOutputBool]\n args {\n input \"example input\"\n }\n}\n", + "test-files/functions/output/class-dynamic.baml": "class Person {\n name string?\n hair_color Color?\n\n @@dynamic\n}\n\nenum Color {\n RED\n BLUE\n GREEN\n YELLOW\n BLACK\n WHITE\n\n @@dynamic\n}\n\nfunction ExtractPeople(text: string) -> Person[] {\n client GPT4\n prompt #\"\n {{ _.role('system') }}\n\t\t You are an expert extraction algorithm. Only extract relevant information from the text. If you do not know the value of an attribute asked to extract, return null for the attribute's value.\n\t\t \n\t\t {# This is a special macro that prints out the output schema of the function #}\n\t\t {{ ctx.output_format }} \n\t\t \n\t\t {{ _.role('user') }}\n\t\t {{text}}\n \"#\n}\n\nenum Hobby {\n SPORTS\n MUSIC\n READING\n\n @@dynamic\n}\n\n\nfunction ExtractHobby(text: string) -> Hobby[] {\n client GPT4\n prompt #\"\n {{ _.role('system') }}\n {# This is a special macro that prints out the output schema of the function #}\n {{ ctx.output_format }} \n \n {{ _.role('user') }}\n {{text}}\n \"#\n}", + "test-files/functions/output/class-list.baml": "function FnOutputClassList(input: string) -> TestOutputClass[] {\n client GPT35\n prompt #\"\n Return a JSON array that follows this schema: \n {{ctx.output_format}}\n\n JSON:\n \"#\n}\n\ntest FnOutputClassList {\n functions [FnOutputClassList]\n args {\n input \"example input\"\n }\n}\n", + "test-files/functions/output/class-nested.baml": "class TestClassNested {\n prop1 string\n prop2 InnerClass\n}\n\nclass InnerClass {\n prop1 string\n prop2 string\n inner InnerClass2\n}\n\nclass InnerClass2 {\n prop2 int\n prop3 float\n}\n\nfunction FnOutputClassNested(input: string) -> TestClassNested {\n client GPT35\n prompt #\"\n Return a made up json blob that matches this schema:\n {{ctx.output_format}}\n ---\n\n JSON:\n \"#\n}\n\ntest FnOutputClassNested {\n functions [FnOutputClassNested]\n args {\n input \"example input\"\n }\n}\n", + "test-files/functions/output/class-with-enum.baml": "enum EnumInClass {\n ONE\n TWO\n}\n\nclass TestClassWithEnum {\n prop1 string\n prop2 EnumInClass\n}\n\nfunction FnOutputClassWithEnum(input: string) -> TestClassWithEnum {\n client GPT35\n prompt #\"\n Return a made up json blob that matches this schema:\n {{ctx.output_format}}\n ---\n\n JSON:\n \"#\n}\n\ntest FnOutputClassWithEnum {\n functions [FnOutputClassWithEnum]\n args {\n input \"example input\"\n }\n}\n", + "test-files/functions/output/class.baml": "class TestOutputClass {\n prop1 string @description(\"A long string with about 200 words\")\n prop2 int\n}\n\nfunction FnOutputClass(input: string) -> TestOutputClass {\n client GPT35\n prompt #\"\n Return a JSON blob with this schema: \n {{ctx.output_format}}\n\n For the prop2, always return a 540\n\n JSON:\n \"#\n}\n\ntest TestClass {\n functions [FnOutputClass]\n args {\n input \"example input\"\n }\n}\n", + "test-files/functions/output/enum-list.baml": "function FnEnumListOutput(input: string) -> EnumOutput[] {\n client GPT35\n prompt #\"\n Print out two of these values randomly selected from the list below in a json array.\n\n {{ctx.output_format}}\n\n Answer:\n \"#\n} \n\ntest FnEnumListOutput {\n functions [FnEnumListOutput]\n args {\n input \"example input\"\n }\n}\n", + "test-files/functions/output/enum.baml": "/// An enum with three values,\n/// ONE, TWO and THREE.\nenum EnumOutput {\n\n /// The first enum.\n ONE\n\n /// The second enum.\n TWO\n THREE\n\n @@alias(\"VALUE_ENUM\")\n}\n\nfunction FnEnumOutput(input: string) -> EnumOutput {\n client GPT35\n prompt #\"\n Choose one of these values randomly. Before you give the answer, write out an unrelated haiku about the ocean.\n\n {{ctx.output_format(prefix=null)}}\n \"#\n}\n\ntest FnEnumOutput {\n functions [FnEnumOutput]\n args {\n input \"example input\"\n }\n}\n", + "test-files/functions/output/int.baml": "function FnOutputInt(input: string) -> int {\n client GPT35\n prompt #\"\n Return the integer 5 with no additional context.\n \"#\n}\n\ntest FnOutputInt {\n functions [FnOutputInt]\n args {\n input \"example input\"\n }\n}\n", + "test-files/functions/output/literal-boolean.baml": "function FnOutputLiteralBool(input: string) -> false {\n client GPT35\n prompt #\"\n Return a false: {{ ctx.output_format}}\n \"#\n}\n\ntest FnOutputLiteralBool {\n functions [FnOutputLiteralBool]\n args {\n input \"example input\"\n }\n}\n", + "test-files/functions/output/literal-int.baml": "function FnOutputLiteralInt(input: string) -> 5 {\n client GPT35\n prompt #\"\n Return an integer: {{ ctx.output_format}}\n \"#\n}\n\ntest FnOutputLiteralInt {\n functions [FnOutputLiteralInt]\n args {\n input \"example input\"\n }\n}\n", + "test-files/functions/output/literal-or-null.baml": "class ClassForNullLiteral {\n a \"hi\"\n}\n\nfunction NullLiteralClassHello(s: string) -> ClassForNullLiteral {\n client GPT35\n prompt #\"\n Return the empty object: {}.\n \"#\n}\n\ntest NullLiteralClassHello {\n functions [NullLiteralClassHello]\n args { s \"unused\" }\n}", + "test-files/functions/output/literal-string.baml": "function FnOutputLiteralString(input: string) -> \"example output\" {\n client GPT35\n prompt #\"\n Return a string: {{ ctx.output_format}}\n \"#\n}\n\ntest FnOutputLiteralString {\n functions [FnOutputLiteralString]\n args {\n input \"example input\"\n }\n}\n", + "test-files/functions/output/literal-unions.baml": "function LiteralUnionsTest(input: string) -> 1 | true | \"string output\" {\n client GPT35\n prompt #\"\n Return one of these values without any additional context: \n {{ctx.output_format}}\n \"#\n}\n\ntest LiteralUnionsTest {\n functions [LiteralUnionsTest]\n args {\n input \"example input\"\n }\n}\n", + "test-files/functions/output/map-enum-key.baml": "enum MapKey {\n A\n B\n C\n}\n\nfunction InOutEnumMapKey(i1: map, i2: map) -> map {\n client \"openai/gpt-4o\"\n prompt #\"\n Merge these: {{i1}} {{i2}}\n\n {{ ctx.output_format }}\n \"#\n}\n", + "test-files/functions/output/map-literal-union-key.baml": "function InOutLiteralStringUnionMapKey(\n i1: map<\"one\" | \"two\" | (\"three\" | \"four\"), string>, \n i2: map<\"one\" | \"two\" | (\"three\" | \"four\"), string>\n) -> map<\"one\" | \"two\" | (\"three\" | \"four\"), string> {\n client \"openai/gpt-4o\"\n prompt #\"\n Merge these:\n \n {{i1}}\n \n {{i2}}\n\n {{ ctx.output_format }}\n \"#\n}\n\nfunction InOutSingleLiteralStringMapKey(m: map<\"key\", string>) -> map<\"key\", string> {\n client \"openai/gpt-4o\"\n prompt #\"\n Return the same map you were given:\n \n {{m}}\n\n {{ ctx.output_format }}\n \"#\n}\n", + "test-files/functions/output/mutually-recursive-classes.baml": "class Tree {\n data int\n children Forest\n}\n\nclass Forest {\n trees Tree[]\n}\n\nclass BinaryNode {\n data int\n left BinaryNode?\n right BinaryNode?\n}\n\nfunction BuildTree(input: BinaryNode) -> Tree {\n client GPT35\n prompt #\"\n Given the input binary tree, transform it into a generic tree using the given schema.\n\n INPUT:\n {{ input }}\n\n {{ ctx.output_format }} \n \"#\n}\n\ntest TestTree {\n functions [BuildTree]\n args {\n input {\n data 2\n left {\n data 1\n left null\n right null\n }\n right {\n data 3\n left null\n right null\n }\n }\n }\n}", + "test-files/functions/output/optional-class.baml": "class ClassOptionalOutput {\n prop1 string\n prop2 string\n}\n\nfunction FnClassOptionalOutput(input: string) -> ClassOptionalOutput? {\n client GPT35\n prompt #\"\n Return a json blob for the following input:\n {{input}}\n\n {{ctx.output_format}}\n\n JSON:\n \"#\n}\n\n\nclass Blah {\n prop4 string?\n}\n\nclass ClassOptionalOutput2 {\n prop1 string?\n prop2 string?\n prop3 Blah?\n}\n\nfunction FnClassOptionalOutput2(input: string) -> ClassOptionalOutput2? {\n client GPT35\n prompt #\"\n Return a json blob for the following input:\n {{input}}\n\n {{ctx.output_format}}\n\n JSON:\n \"#\n}\n\ntest FnClassOptionalOutput2 {\n functions [FnClassOptionalOutput2, FnClassOptionalOutput]\n args {\n input \"example input\"\n }\n}\n", + "test-files/functions/output/optional.baml": "class OptionalTest_Prop1 {\n omega_a string\n omega_b int\n}\n\nenum OptionalTest_CategoryType {\n Aleph\n Beta\n Gamma\n}\n \nclass OptionalTest_ReturnType {\n omega_1 OptionalTest_Prop1?\n omega_2 string?\n omega_3 (OptionalTest_CategoryType?)[]\n} \n \nfunction OptionalTest_Function(input: string) -> (OptionalTest_ReturnType?)[]\n{ \n client GPT35\n prompt #\"\n Return a JSON blob with this schema: \n {{ctx.output_format}}\n\n JSON:\n \"#\n}\n\ntest OptionalTest_Function {\n functions [OptionalTest_Function]\n args {\n input \"example input\"\n }\n}\n", + "test-files/functions/output/recursive-class.baml": "class Node {\n data int\n next Node?\n}\n\nclass LinkedList {\n head Node?\n len int\n}\n\nclient O1 {\n provider \"openai\"\n options {\n model \"o1-mini\"\n default_role \"user\"\n }\n}\n\nfunction BuildLinkedList(input: int[]) -> LinkedList {\n client O1\n prompt #\"\n Build a linked list from the input array of integers.\n\n INPUT:\n {{ input }}\n\n {{ ctx.output_format }} \n \"#\n}\n\ntest TestLinkedList {\n functions [BuildLinkedList]\n args {\n input [1, 2, 3, 4, 5]\n }\n}\n", + "test-files/functions/output/recursive-type-aliases.baml": "class LinkedListAliasNode {\n value int\n next LinkedListAliasNode?\n}\n\n// Simple alias that points to recursive type.\ntype LinkedListAlias = LinkedListAliasNode\n\nfunction AliasThatPointsToRecursiveType(list: LinkedListAlias) -> LinkedListAlias {\n client \"openai/gpt-4o\"\n prompt r#\"\n Return the given linked list back:\n \n {{ list }}\n \n {{ ctx.output_format }}\n \"#\n}\n\n// Class that points to an alias that points to a recursive type.\nclass ClassToRecAlias {\n list LinkedListAlias\n}\n\nfunction ClassThatPointsToRecursiveClassThroughAlias(cls: ClassToRecAlias) -> ClassToRecAlias {\n client \"openai/gpt-4o\"\n prompt r#\"\n Return the given object back:\n \n {{ cls }}\n \n {{ ctx.output_format }}\n \"#\n}\n\n// This is tricky cause this class should be hoisted, but classes and aliases\n// are two different types in the AST. This test will make sure they can interop.\nclass NodeWithAliasIndirection {\n value int\n next NodeIndirection?\n}\n\ntype NodeIndirection = NodeWithAliasIndirection\n\nfunction RecursiveClassWithAliasIndirection(cls: NodeWithAliasIndirection) -> NodeWithAliasIndirection {\n client \"openai/gpt-4o\"\n prompt r#\"\n Return the given object back:\n \n {{ cls }}\n \n {{ ctx.output_format }}\n \"#\n}\n", + "test-files/functions/output/serialization-error.baml": "class DummyOutput {\n nonce string\n nonce2 string\n @@dynamic\n}\n\nfunction DummyOutputFunction(input: string) -> DummyOutput {\n client GPT35\n prompt #\"\n Say \"hello there\".\n \"#\n}", + "test-files/functions/output/string-list.baml": "function FnOutputStringList(input: string) -> string[] {\n client GPT35\n prompt #\"\n Return a list of strings in json format like [\"string1\", \"string2\", \"string3\"].\n\n JSON:\n \"#\n}\n\ntest FnOutputStringList {\n functions [FnOutputStringList]\n args {\n input \"example input\"\n }\n}\n", + "test-files/functions/output/type-aliases.baml": "type Primitive = int | string | bool | float\n\ntype List = string[]\n\ntype Graph = map\n\ntype Combination = Primitive | List | Graph\n\nfunction PrimitiveAlias(p: Primitive) -> Primitive {\n client \"openai/gpt-4o\"\n prompt r#\"\n Return the given value back: {{ p }}\n \"#\n}\n\nfunction MapAlias(m: Graph) -> Graph {\n client \"openai/gpt-4o\"\n prompt r#\"\n Return the given Graph back:\n\n {{ m }}\n\n {{ ctx.output_format }}\n \"#\n}\n\nfunction NestedAlias(c: Combination) -> Combination {\n client \"openai/gpt-4o\"\n prompt r#\"\n Return the given value back:\n\n {{ c }}\n\n {{ ctx.output_format }}\n \"#\n}\n\n// Test attribute merging.\ntype Currency = int @check(gt_ten, {{ this > 10 }})\ntype Amount = Currency @assert({{ this > 0 }})\n\nclass MergeAttrs {\n amount Amount @description(\"In USD\")\n}\n\n// This should be allowed.\ntype MultipleAttrs = int @assert({{ this > 0 }}) @check(gt_ten, {{ this > 10 }})\n\nfunction MergeAliasAttributes(money: int) -> MergeAttrs {\n client \"openai/gpt-4o\"\n prompt r#\"\n Return the given integer in the specified format:\n\n {{ money }}\n\n {{ ctx.output_format }}\n \"#\n}\n\nfunction ReturnAliasWithMergedAttributes(money: Amount) -> Amount {\n client \"openai/gpt-4o\"\n prompt r#\"\n Return the given integer without additional context:\n\n {{ money }}\n\n {{ ctx.output_format }}\n \"#\n}\n\nfunction AliasWithMultipleAttrs(money: MultipleAttrs) -> MultipleAttrs {\n client \"openai/gpt-4o\"\n prompt r#\"\n Return the given integer without additional context:\n\n {{ money }}\n\n {{ ctx.output_format }}\n \"#\n}\n\ntype RecursiveMapAlias = map\n\nfunction SimpleRecursiveMapAlias(input: RecursiveMapAlias) -> RecursiveMapAlias {\n client \"openai/gpt-4o\"\n prompt r#\"\n Return the given value:\n\n {{ input }}\n\n {{ ctx.output_format }}\n \"#\n}\n\ntype RecursiveListAlias = RecursiveListAlias[]\n\nfunction SimpleRecursiveListAlias(input: RecursiveListAlias) -> RecursiveListAlias {\n client \"openai/gpt-4o\"\n prompt r#\"\n Return the given JSON array:\n\n {{ input }}\n\n {{ ctx.output_format }}\n \"#\n}\n\ntype RecAliasOne = RecAliasTwo\ntype RecAliasTwo = RecAliasThree\ntype RecAliasThree = RecAliasOne[]\n\nfunction RecursiveAliasCycle(input: RecAliasOne) -> RecAliasOne {\n client \"openai/gpt-4o\"\n prompt r#\"\n Return the given JSON array:\n\n {{ input }}\n\n {{ ctx.output_format }}\n \"#\n}\n\ntype JsonValue = int | string | bool | float | JsonObject | JsonArray\ntype JsonObject = map\ntype JsonArray = JsonValue[]\n\nfunction JsonTypeAliasCycle(input: JsonValue) -> JsonValue {\n client \"openai/gpt-4o\"\n prompt r#\"\n Return the given input back:\n\n {{ input }}\n\n {{ ctx.output_format }}\n \"#\n}\n", + "test-files/functions/output/unions.baml": "class UnionTest_ReturnType {\n prop1 string | bool\n prop2 (float | bool)[]\n prop3 (bool[] | int[])\n}\n\nfunction UnionTest_Function(input: string | bool) -> UnionTest_ReturnType {\n client GPT35\n prompt #\"\n Return a JSON blob with this schema: \n {{ctx.output_format}}\n\n JSON:\n \"#\n}\n\ntest UnionTest_Function {\n functions [UnionTest_Function]\n args {\n input \"example input\"\n }\n}\n", + "test-files/functions/prompts/no-chat-messages.baml": "\n\nfunction PromptTestClaude(input: string) -> string {\n client Sonnet\n prompt #\"\n Tell me a haiku about {{ input }}\n \"#\n}\n\n\nfunction PromptTestStreaming(input: string) -> string {\n client GPT35\n prompt #\"\n Tell me a short story about {{ input }}\n \"#\n}\n\ntest TestName {\n functions [PromptTestStreaming]\n args {\n input #\"\n hello world\n \"#\n }\n}\n", + "test-files/functions/prompts/with-chat-messages.baml": "\nfunction PromptTestOpenAIChat(input: string) -> string {\n client GPT35\n prompt #\"\n {{ _.role(\"system\") }}\n You are an assistant that always responds in a very excited way with emojis and also outputs this word 4 times after giving a response: {{ input }}\n \n {{ _.role(\"user\") }}\n Tell me a haiku about {{ input }}\n \"#\n}\n\nfunction PromptTestOpenAIChatNoSystem(input: string) -> string {\n client GPT35\n prompt #\"\n You are an assistant that always responds in a very excited way with emojis and also outputs this word 4 times after giving a response: {{ input }}\n \n {{ _.role(\"user\") }}\n Tell me a haiku about {{ input }}\n \"#\n}\n\nfunction PromptTestClaudeChat(input: string) -> string {\n client Claude\n prompt #\"\n {{ _.role(\"system\") }}\n You are an assistant that always responds in a very excited way with emojis and also outputs this word 4 times after giving a response: {{ input }}\n \n {{ _.role(\"user\") }}\n Tell me a haiku about {{ input }}\n \"#\n}\n\nfunction PromptTestClaudeChatNoSystem(input: string) -> string {\n client Claude\n prompt #\"\n You are an assistant that always responds in a very excited way with emojis and also outputs this word 4 times after giving a response: {{ input }}\n \n {{ _.role(\"user\") }}\n Tell me a haiku about {{ input }}\n \"#\n}\n\ntest TestSystemAndNonSystemChat1 {\n functions [PromptTestClaude, PromptTestOpenAI, PromptTestOpenAIChat, PromptTestOpenAIChatNoSystem, PromptTestClaudeChat, PromptTestClaudeChatNoSystem]\n args {\n input \"cats\"\n }\n}\n\ntest TestSystemAndNonSystemChat2 {\n functions [PromptTestClaude, PromptTestOpenAI, PromptTestOpenAIChat, PromptTestOpenAIChatNoSystem, PromptTestClaudeChat, PromptTestClaudeChatNoSystem]\n args {\n input \"lion\"\n }\n}", + "test-files/functions/v2/basic.baml": "\n\nfunction ExtractResume2(resume: string) -> Resume {\n client GPT4\n prompt #\"\n {{ _.role('system') }}\n\n Extract the following information from the resume:\n\n Resume:\n <<<<\n {{ resume }}\n <<<<\n\n Output JSON schema:\n {{ ctx.output_format }}\n\n JSON:\n \"#\n}\n\n\nclass WithReasoning {\n value string\n reasoning string @description(#\"\n Why the value is a good fit.\n \"#)\n}\n\n\nclass SearchParams {\n dateRange int? @description(#\"\n In ISO duration format, e.g. P1Y2M10D.\n \"#)\n location string[]\n jobTitle WithReasoning? @description(#\"\n An exact job title, not a general category.\n \"#)\n company WithReasoning? @description(#\"\n The exact name of the company, not a product or service.\n \"#)\n description WithReasoning[] @description(#\"\n Any specific projects or features the user is looking for.\n \"#)\n tags (Tag | string)[]\n}\n\nenum Tag {\n Security\n AI\n Blockchain\n}\n\nfunction GetQuery(query: string) -> SearchParams {\n client GPT4\n prompt #\"\n Extract the following information from the query:\n\n Query:\n <<<<\n {{ query }}\n <<<<\n\n OUTPUT_JSON_SCHEMA:\n {{ ctx.output_format }}\n\n Before OUTPUT_JSON_SCHEMA, list 5 intentions the user may have.\n --- EXAMPLES ---\n 1. \n 2. \n 3. \n 4. \n 5. \n\n {\n ... // OUTPUT_JSON_SCHEMA\n }\n \"#\n}\n\nclass RaysData {\n dataType DataType\n value Resume | Event\n}\n\nenum DataType {\n Resume\n Event\n}\n\nclass Event {\n title string\n date string\n location string\n description string\n}\n\nfunction GetDataType(text: string) -> RaysData {\n client GPT4\n prompt #\"\n Extract the relevant info.\n\n Text:\n <<<<\n {{ text }}\n <<<<\n\n Output JSON schema:\n {{ ctx.output_format }}\n\n JSON:\n \"#\n}", + "test-files/load-test/memory.baml": "\n\nclass MemoryObject {\n id string\n name string\n description string\n}\n\nclass ComplexMemoryObject {\n id string\n name string\n description string\n metadata (string | int | float)[] @description(#\"\n Additional metadata about the memory object, which can be a mix of types.\n \"#)\n}\n\nclass AnotherObject {\n id string\n thingy2 string\n thingy3 string\n}\n\nclass TestMemoryOutput {\n items (MemoryObject | ComplexMemoryObject | AnotherObject)[] @description(#\"\n Add 10 items, which can be either simple MemoryObjects or more complex MemoryObjects with metadata.\n \"#)\n more_items (MemoryObject | ComplexMemoryObject | AnotherObject)[] @description(#\"\n Add 3 more items, which can be either simple MemoryObjects or more complex MemoryObjects with metadata.\n \"#)\n}\n\n\nfunction TestMemory(input: string) -> TestMemoryOutput {\n client GPT35\n prompt #\"\n Return a json blob that matches the schema:\n {{ ctx.output_format }}\n \"#\n}\n\ntest TestName {\n functions [TestMemory]\n args {\n input #\"\n hello world\n \"#\n }\n}\n", + "test-files/providers/anthropic.baml": "function TestAnthropic(input: string) -> string {\n client Claude\n prompt #\"\n Write a nice haiku about {{ input }}\n \"#\n}\n\nfunction TestAnthropicShorthand(input: string) -> string {\n client \"anthropic/claude-3-haiku-20240307\"\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}\n\nfunction TestCaching(input: string, not_cached: string) -> string {\n client ClaudeWithCaching\n prompt #\"\n {{ _.role('system', cache_control={\"type\": \"ephemeral\"}) }}\n Generate the following story\n {{ input }}\n\n {# Haiku require 2048 tokens to cache -#}\n {{ input }}\n\n {{ _.role('user') }}\n {{ not_cached }}\n \"#\n}", + "test-files/providers/aws.baml": "function TestAws(input: string) -> string {\n client AwsBedrock\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}\n\nclass UniverseQuestion {\n question string\n answer string\n}\n\nclass UniverseQuestionInput {\n question string\n}\n\nfunction TestUniverseQuestion(question: UniverseQuestionInput) -> UniverseQuestion {\n client AwsBedrock\n prompt #\"\n You are a helpful assistant that answers questions about the universe.\n\n {{ ctx.output_format }}\n\n {{ _.role(\"user\")}}\n\n Question: {{ question }}\n\n Answer:\n \"#\n}\n\n\nfunction TestAwsInvalidRegion(input: string) -> string {\n client AwsBedrockInvalidRegion\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}\n\nfunction TestAwsInvalidAccessKey(input: string) -> string {\n client AwsBedrockInvalidAccessKey\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}\n\nfunction TestAwsInvalidProfile(input: string) -> string {\n client AwsBedrockInvalidProfile\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}\n\nfunction TestAwsInvalidSessionToken(input: string) -> string {\n client AwsBedrockInvalidSessionToken\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}", + "test-files/providers/azure.baml": "function TestAzure(input: string) -> string {\n client GPT35Azure\n prompt #\"\n Write a nice haiku about {{ input }}\n \"#\n}\n\nclient GPT35AzureFailed {\n provider azure-openai\n options {\n resource_name \"west-us-azure-baml-incorrect-suffix\"\n deployment_id \"gpt-35-turbo-default\"\n api_key env.AZURE_OPENAI_API_KEY\n }\n}\n\nfunction TestAzureFailure(input: string) -> string {\n client GPT35AzureFailed\n prompt #\"\n Write a nice haiku about {{ input }}\n \"#\n}", + "test-files/providers/gemini.baml": "function TestGemini(input: string) -> string {\n client Gemini\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}\n\nfunction TestGeminiSystem(input: string) -> string {\n client Gemini\n prompt #\"\n {{ _.role('system') }}\n\n Write a nice short story about {{ input }}\n \"#\n}\n\nfunction TestGeminiSystemAsChat(input: string) -> string {\n client Gemini\n prompt #\"\n {{ _.role('system') }} You are a helpful assistant\n\n {{_.role(\"user\")}} Write a nice short story about {{ input }}\n \"#\n}\n\nfunction TestGeminiOpenAiGeneric() -> string {\n client GeminiOpenAiGeneric\n prompt #\"{{_.role(\"system\")}} You are a helpful assistant\n {{_.role(\"user\")}} Write a poem about llamas\n \"#\n}\n\ntest TestName {\n functions [TestGeminiSystem]\n args {\n input #\"\n hello world\n \"#\n }\n}\n", + "test-files/providers/ollama.baml": "function TestOllama(input: string) -> string {\n client Ollama\n prompt #\"\n Write a nice haiku about {{ input }}\n \"#\n}", + "test-files/providers/openai.baml": "function PromptTestOpenAI(input: string) -> string {\n client GPT35\n prompt #\"\n Write a nice haiku about {{ input }}\n \"#\n}\n\nfunction TestOpenAILegacyProvider(input: string) -> string {\n client GPT35LegacyProvider\n prompt #\"\n Write a nice haiku about {{ input }}\n \"#\n}\n\nfunction TestOpenAIShorthand(input: string) -> string {\n client GPT35\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}", + "test-files/providers/tests.baml": "test TestOpenAIShorthand {\n functions [TestOpenAIShorthand]\n args {\n input \"Donkey kong and peanut butter\"\n }\n}\n\ntest TestAWS {\n functions [\n TestAws\n ]\n args {\n input \"Donkey kong and peanut butter\"\n }\n}\n\ntest TestProvider {\n functions [\n TestAnthropic, TestVertex, PromptTestOpenAI, TestAzure, TestOllama, TestGemini, TestAws,\n TestAwsInvalidRegion,\n TestOpenAIShorthand,\n TestAnthropicShorthand,\n TestAwsInvalidAccessKey,\n TestAwsInvalidProfile,\n TestAwsInvalidSessionToken\n ]\n args {\n input \"Donkey kong and peanut butter\"\n }\n}\n\ntest TestName {\n functions [TestCaching]\n args {\n input #\"\nIn a near-future society where dreams have become a tradable commodity and shared experience, a lonely and socially awkward teenager named Alex discovers they possess a rare and powerful ability to not only view but also manipulate the dreams of others. Initially thrilled by this newfound power, Alex begins subtly altering the dreams of classmates and family members, helping them overcome fears, boost confidence, or experience fantastical adventures. As Alex's skills grow, so does their influence. They start selling premium dream experiences on the black market, crafting intricate and addictive dreamscapes for wealthy clients. However, the line between dream and reality begins to blur for those exposed to Alex's creations. Some clients struggle to differentiate between their true memories and the artificial ones implanted by Alex's dream manipulation.\n\nComplications arise when a mysterious government agency takes notice of Alex's unique abilities. They offer Alex a chance to use their gift for \"the greater good,\" hinting at applications in therapy, criminal rehabilitation, and even national security. Simultaneously, an underground resistance movement reaches out, warning Alex about the dangers of dream manipulation and the potential for mass control and exploitation. Caught between these opposing forces, Alex must navigate a complex web of ethical dilemmas. They grapple with questions of free will, the nature of consciousness, and the responsibility that comes with having power over people's minds. As the consequences of their actions spiral outward, affecting the lives of loved ones and strangers alike, Alex is forced to confront the true nature of their ability and decide how—or if—it should be used.\n\nThe story explores themes of identity, the subconscious mind, the ethics of technology, and the power of imagination. It delves into the potential consequences of a world where our most private thoughts and experiences are no longer truly our own, and examines the fine line between helping others and manipulating them for personal gain or a perceived greater good. The narrative further expands on the societal implications of such abilities, questioning the moral boundaries of altering consciousness and the potential for abuse in a world where dreams can be commodified. It challenges the reader to consider the impact of technology on personal autonomy and the ethical responsibilities of those who wield such power.\n\nAs Alex's journey unfolds, they encounter various individuals whose lives have been touched by their dream manipulations, each presenting a unique perspective on the ethical quandaries at hand. From a classmate who gains newfound confidence to a wealthy client who becomes addicted to the dreamscapes, the ripple effects of Alex's actions are profound and far-reaching. The government agency's interest in Alex's abilities raises questions about the potential for state control and surveillance, while the resistance movement highlights the dangers of unchecked power and the importance of safeguarding individual freedoms.\n\nUltimately, Alex's story is one of self-discovery and moral reckoning, as they must decide whether to embrace their abilities for personal gain, align with the government's vision of a controlled utopia, or join the resistance in their fight for freedom and autonomy. The narrative invites readers to reflect on the nature of reality, the boundaries of human experience, and the ethical implications of a world where dreams are no longer private sanctuaries but shared and manipulated commodities. It also explores the psychological impact on Alex, who must deal with the burden of knowing the intimate fears and desires of others, and the isolation that comes from being unable to share their own dreams without altering them.\n\nThe story further examines the technological advancements that have made dream manipulation possible, questioning the role of innovation in society and the potential for both progress and peril. It considers the societal divide between those who can afford to buy enhanced dream experiences and those who cannot, highlighting issues of inequality and access. As Alex becomes more entangled in the web of their own making, they must confront the possibility that their actions could lead to unintended consequences, not just for themselves but for the fabric of society as a whole.\n\nIn the end, Alex's journey is a cautionary tale about the power of dreams and the responsibilities that come with wielding such influence. It serves as a reminder of the importance of ethical considerations in the face of technological advancement and the need to balance innovation with humanity. The story leaves readers pondering the true cost of a world where dreams are no longer sacred, and the potential for both wonder and danger in the uncharted territories of the mind. But it's also a story about the power of imagination and the potential for change, even in a world where our deepest thoughts are no longer our own. And it's a story about the power of choice, and the importance of fighting for the freedom to dream.\n\nIn conclusion, this story is a reflection on the power of dreams and the responsibilities that come with wielding such influence. It serves as a reminder of the importance of ethical considerations in the face of technological advancement and the need to balance innovation with humanity. The story leaves readers pondering the true cost of a world where dreams are no longer sacred, and the potential for both wonder and danger in the uncharted territories of the mind. But it's also a story about the power of imagination and the potential for change, even in a world where our deepest thoughts are no longer our own. And it's a story about the power of choice, and the importance of fighting for the freedom to dream.\n \"#\n not_cached #\"\n hello world\n \"#\n }\n}", + "test-files/providers/vertex.baml": "function TestVertex(input: string) -> string {\n client Vertex\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}\n\nfunction TestVertexWithSystemInstructions() -> string {\n client Vertex\n prompt #\"{{_.role(\"system\")}} You are a helpful assistant\n {{_.role(\"user\")}} Write a poem about llamas\n \"#\n}\n\ntest TestVertex {\n functions [TestVertex, TestVertexWithSystemInstructions]\n args {\n input \"a cat\"\n\n }\n}\n", + "test-files/semantic_streaming/semantic_streaming.baml": "class SemanticContainer {\n sixteen_digit_number int\n string_with_twenty_words string @stream.done\n class_1 ClassWithoutDone\n class_2 ClassWithBlockDone\n class_done_needed ClassWithBlockDone @stream.not_null\n class_needed ClassWithoutDone @stream.not_null\n three_small_things SmallThing[] @description(\"Should have three items.\")\n final_string string\n}\n\nclass ClassWithoutDone {\n i_16_digits int\n s_20_words string @description(\"A string with 20 words in it\") @stream.with_state\n}\n\nclass ClassWithBlockDone {\n i_16_digits int\n s_20_words string\n @@stream.done\n}\n\nclass SmallThing {\n i_16_digits int @stream.not_null\n i_8_digits int\n}\n\nfunction MakeSemanticContainer() -> SemanticContainer {\n client GPT35\n prompt #\"\n {{ ctx.output_format }}\n \"#\n}", + "test-files/strategies/fallback-shorthand.baml": "\nclient FallbackToShorthand {\n provider fallback\n options {\n strategy [\n \"openai/does-not-exist\",\n \"openai/gpt-4o-mini\"\n ]\n }\n}\n\n\nfunction TestFallbackToShorthand(input: string) -> string {\n client FallbackToShorthand\n // TODO make it return the client name instead\n prompt #\"\n Say a haiku about {{input}}.\n \"#\n}\n\ntest TestProvider_FallbackToShorthand {\n functions [\n TestFallbackToShorthand\n ]\n args {\n input \"Donkey kong and peanut butter\"\n }\n}\n", + "test-files/strategies/fallback.baml": "// Happy path fallbacks.\nclient FaultyClient {\n provider openai\n options {\n model unknown-model\n api_key env.OPENAI_API_KEY\n }\n}\n\n\nclient FallbackClient {\n provider fallback\n options {\n // first 2 clients are expected to fail.\n strategy [\n FaultyClient,\n RetryClientConstant,\n GPT35\n Gemini\n\n ]\n }\n}\n\nfunction TestFallbackClient() -> string {\n client FallbackClient\n // TODO make it return the client name instead\n prompt #\"\n Say a haiku about mexico.\n \"#\n}\n\n// Fallbacks should fail gracefully.\nclient FaultyAzureClient {\n provider azure-openai\n options {\n model unknown-model\n resource_name \"unknown-resource-id\"\n deployment_id \"unknown-deployment-id\"\n }\n}\n\nclient SingleFallbackClient {\n provider fallback\n options {\n // first 2 clients are expected to fail.\n strategy [\n FaultyAzureClient\n ]\n }\n}\n\nfunction TestSingleFallbackClient() -> string {\n client SingleFallbackClient\n // TODO make it return the client name instead\n prompt #\"\n Say a haiku about mexico.\n \"#\n}\n", + "test-files/strategies/retry.baml": "\nretry_policy Exponential {\n max_retries 3\n strategy {\n type exponential_backoff\n }\n}\n\nretry_policy Constant {\n max_retries 3\n strategy {\n type constant_delay\n delay_ms 100\n }\n}\n\nclient RetryClientConstant {\n provider openai\n retry_policy Constant\n options {\n model \"gpt-3.5-turbo\"\n api_key \"blah\"\n }\n}\n\nclient RetryClientExponential {\n provider openai\n retry_policy Exponential\n options {\n model \"gpt-3.5-turbo\"\n api_key \"blahh\"\n }\n}\n\nfunction TestRetryConstant() -> string {\n client RetryClientConstant\n prompt #\"\n Say a haiku\n \"#\n}\n\nfunction TestRetryExponential() -> string {\n client RetryClientExponential\n prompt #\"\n Say a haiku\n \"#\n}\n", + "test-files/strategies/roundrobin.baml": "", + "test-files/template_string/template_string.baml": "\nfunction Completion(prefix: string, suffix: string, language: string) -> string {\n client \"openai/gpt-4o\"\n prompt ##\"\n {{ _.role(\"system\", cache_control={\"type\": \"ephemeral\"}) }}\n\n You are a programmer that suggests code completions in the %INSERT-HERE% part below with {{ language }} code. Only output the code that replaces %INSERT-HERE% part, NOT THE SUFFIX OR PREFIX. Respond only with code, and with no markdown formatting.\n\n Try to complete a whole section inside curlies when you can.\n\n {% if language == \"baml\" %}\n {{ BAMLBackground2()}}\n\n Examples:\n INPUT:\n ---\n class MyObject {{\"{\"}}%INSERT-HERE%\n }\n ---\n OUTPUT:\n ---\n property string\n ---\n In this example, we just inserted one line, with tabs for a fake property to aid the user.\n\n INPUT:\n ---\n function foo(input: string) -> string {{\"{\"}} %INSERT-HERE%\n prompt #\"\n {{ \"{{ input }}\" }}\n \"#\n }\n ---\n OUTPUT:\n ---\n client \"openai/gpt-4o\"\n ---\n In this example, no need to add the prompt because it was part of the suffix after INSERT-HERE\n\n INPUT:\n OUTPUT: N/A\n In this example there was nothing to complete, so we returned N/A.\n\n Ignore the \"---\" in your outputs.\n {% endif %}\n\n\n {{ _.role(\"user\") }}\n INPUT:\n ---\n {{ prefix }}%INSERT-HERE%{{ suffix }}\n ---\n \"##\n}\n\ntest CompletionTest3 {\n functions [Completion]\n args {\n prefix ##\"function foo(input: string) -> string {\n client \"openai/gpt-4o\"\n prompt #\"\n \"##\n suffix \"\"\n language \"baml\"\n }\n}\n\ntest CompletionTest2 {\n functions [Completion]\n args {\n prefix \"function foo(input: string) -> string {\\n\"\n suffix \"\\n prompt #\\n\\\"\"\n language \"baml\"\n }\n}\n \ntemplate_string Hi(\n hello: string,\n world: string,\n) ##\"\n {{ hello }} {{ world }}\n\"##\n\ntemplate_string Hi3(\n hello: string,\n world: string,\n) #\"\n {{ hello }} {{ world }}\n\"#\n\ntemplate_string BAMLBackground2() ##\"\n \n BAML is a domain-specific language for building LLM prompts as functions.\n client \"openai/gpt-4o\"\n // prompt with jinja syntax inside here. with double curly braces for variables.\n // make sure to include: {{ \"{{ ctx.output_format }}\"}} in the prompt, which prints the output schema instructions so the LLM returns the output in the correct format (json or string, etc.). DO NOT write the output schema manually.\n prompt #\"\n \n \"#\n }\n\n 3. You do not need to specify to \"answer in JSON format\". Only write in the prompt brief instruction, and any other task-specific things to keep in mind for the task.\n 4. Write a {{ \"{{ _.role(\\\"user\\\") }}\" }} tag to indicate where the user's inputs start. So if there's a convo you can write\n #\"{{ \"{{ _.role(\\\"user\\\") }}\" }} {{ \"{{ some-variable }}\" }}#\n \n \n\n The @asserts only go in the \"output\" types. Don't use them in inputs.\n Do NOT use numbers as confidence intervals if you need to use them. Prefer an enum with descriptions or literals like \"high\", \"medium\", \"low\".\n\n Dedent all declarations.\n\"##\n\ntemplate_string BamlTests() ##\"\n // For image inputs:\n test ImageTest {\n functions [MyFunction]\n args {\n imageArg {\n file \"../images/test.png\"\n // Optional: media_type \"image/png\"\n }\n // Or using URL:\n // imageArg {\n // url \"https://example.com/image.png\"\n // }\n }\n }\n\n // For array/object inputs:\n test ComplexTest {\n functions [MyFunction]\n args {\n input {\n name \"Complex Object\"\n tags [\n \"tag1\",\n #\"\n Multi-line\n tag here\n \"#\n ]\n status PENDING\n type \"error\"\n count 100\n enabled false\n score 7.8\n }\n }\n }\n\"##\n", + "test-files/test-asserts-checks/asserts.baml": "\nfunction AssertFn(a: int) -> int {\n client GPT35\n prompt #\"\n Return the integer after {{ a }}\n\n {{ ctx.output_format }}\n \"#\n}\n\n\ntest AssertFn {\n functions [AssertFn]\n args {\n a 1\n }\n // test syntax highlighting\n @@assert(test_name, {{ this[0].datetime == \"hi, thereerwc[]{}[]\"}})\n @@assert({{\"let me know if ,er\"}})\n @@assert(test_name, {{ this[0].datetime == \"Wed, 06 nov (PST)\"}})\n}\n", + "test-files/testing_pipeline/output-format.baml": "class Recipe {\n ingredients map\n recipe_type \"breakfast\" | \"dinner\"\n}\n\nclass Quantity {\n amount int | float\n unit string?\n}\n\nfunction AaaSamOutputFormat(recipe: string) -> Recipe {\n client GPT35\n prompt #\"\n Return this value back to me: {{recipe}}\n\n {{ctx.output_format(map_style='angle')}}\n \"#\n}\n\ntest MyOutput {\n functions [AaaSamOutputFormat]\n args {\n recipe #\"\n Here's a simple recipe for beef stew:\nIngredients:\n\n2 lbs beef chuck, cut into 1-inch cubes\n2 tbsp vegetable oil\n1 onion, diced\n3 carrots, sliced\n2 celery stalks, chopped\n2 potatoes, cubed\n3 cloves garlic, minced\n4 cups beef broth\n1 can (14.5 oz) diced tomatoes\n1 tbsp Worcestershire sauce\n1 tsp dried thyme\n1 bay leaf\nSalt and pepper to taste\n\nInstructions:\n\nSeason beef with salt and pepper. Heat oil in a large pot over medium-high heat. Brown the beef in batches, then set aside.\nIn the same pot, sauté onion, carrots, and celery until softened, about 5 minutes.\nAdd garlic and cook for another minute.\nReturn beef to the pot. Add broth, tomatoes, Worcestershire sauce, thyme, and bay leaf.\nBring to a boil, then reduce heat and simmer covered for 1 hour.\nAdd potatoes and continue simmering for 30-45 minutes, until beef and potatoes are tender.\nRemove bay leaf, adjust seasoning if needed, and serve hot.\n\nWould you like any additional information or variations on this recipe?\n \"#\n }\n}\n", + "test-files/testing_pipeline/resume.baml": "class Resume {\n name string\n email string\n phone string\n experience Education[]\n education string[]\n skills string[]\n}\n\nclass Education {\n institution string\n location string\n degree string\n major string[]\n graduation_date string?\n}\n\ntemplate_string AddRole(foo: string) #\"\n {{ _.role('system')}}\n You are a {{ foo }}. be nice\n\n {{ _.role('user') }}\n\"#\n\nclient TestClient {\n provider fallback\n retry_policy Constant\n options {\n strategy [\n Claude\n GPT35\n AwsBedrock\n ]\n }\n}\n\nclient Claude2 {\n provider anthropic\n options {\n model claude-3-haiku-20240307\n api_key env.FOOBAR3\n max_tokens 1000\n }\n}\n\nfunction ExtractResume(resume: string, img: image?) -> Resume {\n client Claude2\n prompt #\"\n {{ AddRole(\"Software Engineer\") }}\n\n Extract data:\n \n\n <<<<\n {{ resume }}\n <<<<\n\n {% if img %}\n {{img}}\n {% endif %}\n\n {{ ctx.output_format }}\n \"#\n}\n\ntest sam_resume {\n functions [ExtractResume]\n args {\n img {\n url \"https://avatars.githubusercontent.com/u/1016595?v=4\"\n }\n resume #\"\n Sam Lijin\n he/him | jobs@sxlijin.com | sxlijin.github.io | 111-222-3333 | sxlijin | sxlijin\n\n Experience\n Trunk\n | July 2021 - current\n Trunk Check | Senior Software Engineer | Services TL, Mar 2023 - current | IC, July 2021 - Feb 2023\n Proposed, designed, and led a team of 3 to build a web experience for Check (both a web-only onboarding flow and SaaS offerings)\n Proposed and built vulnerability scanning into Check, enabling it to compete with security products such as Snyk\n Helped grow Check from <1K users to 90K+ users by focusing on product-led growth\n Google | Sept 2017 - June 2021\n User Identity SRE | Senior Software Engineer | IC, Mar 2021 - June 2021\n Designed an incremental key rotation system to limit the global outage risk to Google SSO\n Discovered and severed an undocumented Gmail serving dependency on Identity-internal systems\n Cloud Firestore | Senior Software Engineer | EngProd TL, Aug 2019 - Feb 2021 | IC, Sept 2017 - July 2019\n Metadata TTL system: backlog of XX trillion records, sustained 1M ops/sec, peaking at 3M ops/sec\n\n Designed and implemented a logging system with novel observability and privacy requirements\n Designed and implemented Jepsen-style testing to validate correctness guarantees\n Datastore Migration: zero downtime, xM RPS and xxPB of data over xM customers and 36 datacenters\n\n Designed composite index migration, queue processing migration, progressive rollout, fast rollback, and disk stockout mitigations; implemented transaction log replay, state transitions, and dark launch process\n Designed and implemented end-to-end correctness and performance testing\n Velocity improvements for 60-eng org\n\n Proposed and implemented automated rollbacks: got us out of a 3-month release freeze and prevented 5 outages over the next 6 months\n Proposed and implemented new development and release environments spanning 30+ microservices\n Incident response for API proxy rollback affecting every Google Cloud service\n\n Google App Engine Memcache | Software Engineer | EngProd TL, Apr 2019 - July 2019\n Proposed and led execution of test coverage improvement strategy for a new control plane: reduced rollbacks and ensured strong consistency of a distributed cache serving xxM QPS\n Designed and implemented automated performance regression testing for two critical serving paths\n Used to validate Google-wide rollout of AMD CPUs, by proving a 50p latency delta of <10µs\n Implemented on shared Borg (i.e. vulnerable to noisy neighbors) with <12% variance\n Miscellaneous | Sept 2017 - June 2021\n Redesigned the Noogler training on Google-internal storage technologies & trained 2500+ Nooglers\n Landed multiple google3-wide refactorings, each spanning xxK files (e.g. SWIG to CLIF)\n Education\n Vanderbilt University (Nashville, TN) | May 2017 | B.S. in Computer Science, Mathematics, and Political Science\n\n Stuyvesant HS (New York, NY) | 2013\n\n Skills\n C++, Java, Typescript, Javascript, Python, Bash; light experience with Rust, Golang, Scheme\n gRPC, Bazel, React, Linux\n Hobbies: climbing, skiing, photography\n \"#\n }\n}\n\ntest vaibhav_resume {\n functions [ExtractResume]\n args {\n resume #\"\n Vaibhav Gupta\n linkedin/vaigup\n (972) 400-5279\n vaibhavtheory@gmail.com\n EXPERIENCE\n Google,\n Software Engineer\n Dec 2018-Present\n Seattle, WA\n •\n Augmented Reality,\n Depth Team\n •\n Technical Lead for on-device optimizations\n •\n Optimized and designed front\n facing depth algorithm\n on Pixel 4\n •\n Focus: C++ and SIMD on custom silicon\n \n \n EDUCATION\n University of Texas at Austin\n Aug 2012-May 2015\n Bachelors of Engineering, Integrated Circuits\n Bachelors of Computer Science\n \"#\n }\n}", +} +export const getBamlFiles = () => { + return fileMap; +} \ No newline at end of file diff --git a/integ-tests/react/baml_client/partial_types.ts b/integ-tests/react/baml_client/partial_types.ts new file mode 100644 index 000000000..cd6e87263 --- /dev/null +++ b/integ-tests/react/baml_client/partial_types.ts @@ -0,0 +1,523 @@ +/************************************************************************************************* + +Welcome to Baml! To use this generated code, please run one of the following: + +$ npm install @boundaryml/baml +$ yarn add @boundaryml/baml +$ pnpm add @boundaryml/baml + +*************************************************************************************************/ + +// This file was generated by BAML: do not edit it. Instead, edit the BAML +// files and re-generate this code. +// +/* eslint-disable */ +// tslint:disable +// @ts-nocheck +// biome-ignore format: autogenerated code +import { Image } from "@boundaryml/baml" + +import * as types from "./types" + +/****************************************************************************** +* +* These types are used for streaming, for when an instance of a type +* is still being built up and any of its fields is not yet fully available. +* +******************************************************************************/ + +export interface StreamState { + value: T + state: "Pending" | "Incomplete" | "Complete" +} + + +export interface AnotherObject { + id?: (string | null) + thingy2?: (string | null) + thingy3?: (string | null) +} + +export interface BigNumbers { + a?: (number | null) + b?: (number | null) +} + +export interface BinaryNode { + data?: (number | null) + left: (partial_types.BinaryNode | null | null) + right: (partial_types.BinaryNode | null | null) +} + +export interface Blah { + prop4: ((string | null) | null) +} + +export interface BlockConstraint { + foo?: (number | null) + bar?: (string | null) +} + +export interface BlockConstraintForParam { + bcfp?: (number | null) + bcfp2?: (string | null) +} + +export interface BookOrder { + orderId?: (string | null) + title?: (string | null) + quantity?: (number | null) + price?: (number | null) +} + +export interface ClassForNullLiteral { + a: "hi" +} + +export interface ClassOptionalOutput { + prop1?: (string | null) + prop2?: (string | null) +} + +export interface ClassOptionalOutput2 { + prop1: ((string | null) | null) + prop2: ((string | null) | null) + prop3: (partial_types.Blah | null | null) +} + +export interface ClassToRecAlias { + list?: partial_types.LinkedListAliasNode | null +} + +export interface ClassWithBlockDone { + i_16_digits?: (number | null) + s_20_words?: (string | null) +} + +export interface ClassWithImage { + myImage?: (Image | null) + param2?: (string | null) + fake_image?: partial_types.FakeImage | null +} + +export interface ClassWithoutDone { + i_16_digits?: (number | null) + s_20_words?: StreamState<(string | null)> +} + +export interface ComplexMemoryObject { + id?: (string | null) + name?: (string | null) + description?: (string | null) + metadata?: ((string | null) | (number | null) | (number | null) | null)[] +} + +export interface CompoundBigNumbers { + big?: partial_types.BigNumbers | null + big_nums?: partial_types.BigNumbers | null[] + another?: partial_types.BigNumbers | null +} + +export interface ContactInfo { + primary?: (partial_types.PhoneNumber | null | partial_types.EmailAddress | null | null) + secondary?: (partial_types.PhoneNumber | null | partial_types.EmailAddress | null | (null | null) | null) +} + +export interface CustomTaskResult { + bookOrder?: (partial_types.BookOrder | null | ((null | null) | null) | null) + flightConfirmation?: (partial_types.FlightConfirmation | null | ((null | null) | null) | null) + groceryReceipt?: (partial_types.GroceryReceipt | null | ((null | null) | null) | null) +} + +export interface DummyOutput { + nonce?: (string | null) + nonce2?: (string | null) + [key: string]: any; +} + +export interface DynInputOutput { + testKey?: (string | null) + [key: string]: any; +} + +export interface DynamicClassOne { + [key: string]: any; +} + +export interface DynamicClassTwo { + hi?: (string | null) + some_class?: partial_types.SomeClassNestedDynamic | null + status?: (string | DynEnumOne | null) + [key: string]: any; +} + +export interface DynamicOutput { + [key: string]: any; +} + +export interface Earthling { + age?: Checked<(number | null),"earth_aged" | "no_infants"> +} + +export interface Education { + institution?: (string | null) + location?: (string | null) + degree?: (string | null) + major?: (string | null)[] + graduation_date: ((string | null) | null) +} + +export interface Email { + subject?: (string | null) + body?: (string | null) + from_address?: (string | null) +} + +export interface EmailAddress { + value?: (string | null) +} + +export interface Event { + title?: (string | null) + date?: (string | null) + location?: (string | null) + description?: (string | null) +} + +export interface FakeImage { + url?: (string | null) +} + +export interface FlightConfirmation { + confirmationNumber?: (string | null) + flightNumber?: (string | null) + departureTime?: (string | null) + arrivalTime?: (string | null) + seatNumber?: (string | null) +} + +export interface FooAny { + planetary_age?: (partial_types.Martian | null | partial_types.Earthling | null | null) + certainty?: Checked<(number | null),"unreasonably_certain"> + species?: Checked<(string | null),"regex_bad" | "regex_good" | "trivial"> +} + +export interface Forest { + trees?: partial_types.Tree | null[] +} + +export interface FormatterTest0 { + lorem?: (string | null) + ipsum?: (string | null) +} + +export interface FormatterTest1 { + lorem?: (string | null) + ipsum?: (string | null) +} + +export interface FormatterTest2 { + lorem?: (string | null) + ipsum?: (string | null) +} + +export interface FormatterTest3 { + lorem?: (string | null) + ipsum?: (string | null) +} + +export interface GroceryReceipt { + receiptId?: (string | null) + storeName?: (string | null) + items?: ((string | null) | (number | null) | (number | null) | null)[] + totalAmount?: (number | null) +} + +export interface InnerClass { + prop1?: (string | null) + prop2?: (string | null) + inner?: partial_types.InnerClass2 | null +} + +export interface InnerClass2 { + prop2?: (number | null) + prop3?: (number | null) +} + +export interface InputClass { + key?: (string | null) + key2?: (string | null) +} + +export interface InputClassNested { + key?: (string | null) + nested?: partial_types.InputClass | null +} + +export interface LinkedList { + head: (partial_types.Node | null | null) + len?: (number | null) +} + +export interface LinkedListAliasNode { + value?: (number | null) + next: (partial_types.LinkedListAliasNode | null | null) +} + +export interface LiteralClassHello { + prop: "hello" +} + +export interface LiteralClassOne { + prop: "one" +} + +export interface LiteralClassTwo { + prop: "two" +} + +export interface MalformedConstraints { + foo?: Checked<(number | null),"foo_check"> +} + +export interface MalformedConstraints2 { + foo?: (number | null) +} + +/** + * A Martian organism with an age. + * Such a nice type. + */ +export interface Martian { + /** + * The age of the Martian in Mars years. + * So many Mars years. + */ + age?: Checked<(number | null),"young_enough"> +} + +export interface MemoryObject { + id?: (string | null) + name?: (string | null) + description?: (string | null) +} + +export interface MergeAttrs { + amount?: Checked<(number | null),"gt_ten"> +} + +export interface NamedArgsSingleClass { + key?: (string | null) + key_two?: (boolean | null) + key_three?: (number | null) +} + +export interface Nested { + prop3?: ((string | null) | ((null | null) | null) | null) + prop4?: ((string | null) | ((null | null) | null) | null) + prop20?: partial_types.Nested2 | null +} + +export interface Nested2 { + prop11?: ((string | null) | ((null | null) | null) | null) + prop12?: ((string | null) | ((null | null) | null) | null) +} + +export interface NestedBlockConstraint { + nbc?: Checked +} + +export interface NestedBlockConstraintForParam { + nbcfp?: partial_types.BlockConstraintForParam | null +} + +export interface Node { + data?: (number | null) + next: (partial_types.Node | null | null) +} + +export interface NodeWithAliasIndirection { + value?: (number | null) + next: (partial_types.NodeWithAliasIndirection | null | null) +} + +export interface OptionalListAndMap { + p: ((string | null)[] | null) + q: ((Record | null) | null) +} + +export interface OptionalTest_Prop1 { + omega_a?: (string | null) + omega_b?: (number | null) +} + +export interface OptionalTest_ReturnType { + omega_1: (partial_types.OptionalTest_Prop1 | null | null) + omega_2: ((string | null) | null) + omega_3?: ((OptionalTest_CategoryType | null) | null)[] +} + +export interface OrderInfo { + order_status?: (OrderStatus | null) + tracking_number: ((string | null) | null) + estimated_arrival_date: ((string | null) | null) +} + +export interface OriginalA { + value?: (number | null) +} + +export interface OriginalB { + value?: (number | null) + [key: string]: any; +} + +export interface Person { + name: ((string | null) | null) + hair_color: ((string | Color | null) | null) + [key: string]: any; +} + +export interface PhoneNumber { + value?: (string | null) +} + +export interface Quantity { + amount?: ((number | null) | (number | null) | null) + unit: ((string | null) | null) +} + +export interface RaysData { + dataType?: (DataType | null) + value?: (partial_types.Resume | null | partial_types.Event | null | null) +} + +export interface ReceiptInfo { + items?: partial_types.ReceiptItem | null[] + total_cost: ((number | null) | null) + venue?: ("barisa" | "ox_burger" | null) +} + +export interface ReceiptItem { + name?: (string | null) + description: ((string | null) | null) + quantity?: (number | null) + price?: (number | null) +} + +export interface Recipe { + ingredients?: (Record | null) + recipe_type?: ("breakfast" | "dinner" | null) +} + +export interface Resume { + name?: (string | null) + email?: (string | null) + phone?: (string | null) + experience?: partial_types.Education | null[] + education?: (string | null)[] + skills?: (string | null)[] +} + +export interface Schema { + prop1?: ((string | null) | ((null | null) | null) | null) + prop2?: (partial_types.Nested | null | (string | null) | null) + prop5?: ((string | null) | ((null | null) | null) | null)[] + prop6?: ((string | null) | partial_types.Nested | null[] | null) + nested_attrs?: ((string | null) | ((null | null) | null) | partial_types.Nested | null | null)[] + parens?: ((string | null) | ((null | null) | null) | null) + other_group?: ((string | null) | ((number | null) | (string | null) | null) | null) +} + +export interface SearchParams { + dateRange: ((number | null) | null) + location?: (string | null)[] + jobTitle: (partial_types.WithReasoning | null | null) + company: (partial_types.WithReasoning | null | null) + description?: partial_types.WithReasoning | null[] + tags?: ((Tag | null) | (string | null) | null)[] +} + +export interface SemanticContainer { + sixteen_digit_number?: (number | null) + string_with_twenty_words: string + class_1?: partial_types.ClassWithoutDone | null + class_2: types.ClassWithBlockDone + class_done_needed: types.ClassWithBlockDone + class_needed: partial_types.ClassWithoutDone + three_small_things?: partial_types.SmallThing | null[] + final_string?: (string | null) +} + +export interface SmallThing { + i_16_digits: number + i_8_digits?: (number | null) +} + +export interface SomeClassNestedDynamic { + hi?: (string | null) + [key: string]: any; +} + +export interface StringToClassEntry { + word?: (string | null) +} + +export interface TestClassAlias { + key?: (string | null) + key2?: (string | null) + key3?: (string | null) + key4?: (string | null) + key5?: (string | null) +} + +export interface TestClassNested { + prop1?: (string | null) + prop2?: partial_types.InnerClass | null +} + +export interface TestClassWithEnum { + prop1?: (string | null) + prop2?: (EnumInClass | null) +} + +export interface TestMemoryOutput { + items?: (partial_types.MemoryObject | null | partial_types.ComplexMemoryObject | null | partial_types.AnotherObject | null | null)[] + more_items?: (partial_types.MemoryObject | null | partial_types.ComplexMemoryObject | null | partial_types.AnotherObject | null | null)[] +} + +export interface TestOutputClass { + prop1?: (string | null) + prop2?: (number | null) +} + +export interface Tree { + data?: (number | null) + children?: partial_types.Forest | null +} + +export interface TwoStoriesOneTitle { + title?: (string | null) + story_a?: (string | null) + story_b?: (string | null) +} + +export interface UnionTest_ReturnType { + prop1?: ((string | null) | (boolean | null) | null) + prop2?: ((number | null) | (boolean | null) | null)[] + prop3?: ((boolean | null)[] | (number | null)[] | null) +} + +export interface UniverseQuestion { + question?: (string | null) + answer?: (string | null) +} + +export interface UniverseQuestionInput { + question?: (string | null) +} + +export interface WithReasoning { + value?: (string | null) + reasoning?: (string | null) +} diff --git a/integ-tests/react/baml_client/react/client.tsx b/integ-tests/react/baml_client/react/client.tsx new file mode 100644 index 000000000..29f513bf7 --- /dev/null +++ b/integ-tests/react/baml_client/react/client.tsx @@ -0,0 +1,19536 @@ +/************************************************************************************************* + +Welcome to Baml! To use this generated code, please run one of the following: + +$ npm install @boundaryml/baml +$ yarn add @boundaryml/baml +$ pnpm add @boundaryml/baml + +*************************************************************************************************/ + +// This file was generated by BAML: do not edit it. Instead, edit the BAML +// files and re-generate this code. +// +/* eslint-disable */ +// tslint:disable +// @ts-nocheck +// biome-ignore format: autogenerated code +'use client' + +import { useCallback, useMemo, useReducer, useTransition } from 'react'; +import type { + PartialResponse, + FinalResponse, + StreamingProps, + NonStreamingProps, + StreamingHookResult, + NonStreamingHookResult, + HookProps, + HookResult +} from './types'; +import type { RecursivePartialNull, Check, Checked } from '../types'; +import type { Image, Audio } from "@boundaryml/baml" +import { BamlValidationError, BamlClientFinishReasonError } from "@boundaryml/baml/errors" +import * as ServerActions from './server'; + +import type {AnotherObject, BigNumbers, BinaryNode, Blah, BlockConstraint, BlockConstraintForParam, BookOrder, ClassForNullLiteral, ClassOptionalOutput, ClassOptionalOutput2, ClassToRecAlias, ClassWithBlockDone, ClassWithImage, ClassWithoutDone, ComplexMemoryObject, CompoundBigNumbers, ContactInfo, CustomTaskResult, DummyOutput, DynInputOutput, DynamicClassOne, DynamicClassTwo, DynamicOutput, Earthling, Education, Email, EmailAddress, Event, FakeImage, FlightConfirmation, FooAny, Forest, FormatterTest0, FormatterTest1, FormatterTest2, FormatterTest3, GroceryReceipt, InnerClass, InnerClass2, InputClass, InputClassNested, LinkedList, LinkedListAliasNode, LiteralClassHello, LiteralClassOne, LiteralClassTwo, MalformedConstraints, MalformedConstraints2, Martian, MemoryObject, MergeAttrs, NamedArgsSingleClass, Nested, Nested2, NestedBlockConstraint, NestedBlockConstraintForParam, Node, NodeWithAliasIndirection, OptionalListAndMap, OptionalTest_Prop1, OptionalTest_ReturnType, OrderInfo, OriginalA, OriginalB, Person, PhoneNumber, Quantity, RaysData, ReceiptInfo, ReceiptItem, Recipe, Resume, Schema, SearchParams, SemanticContainer, SmallThing, SomeClassNestedDynamic, StringToClassEntry, TestClassAlias, TestClassNested, TestClassWithEnum, TestMemoryOutput, TestOutputClass, Tree, TwoStoriesOneTitle, UnionTest_ReturnType, UniverseQuestion, UniverseQuestionInput, WithReasoning, AliasedEnum, Category, Category2, Category3, Color, DataType, DynEnumOne, DynEnumTwo, EnumInClass, EnumOutput, Hobby, MapKey, NamedArgsSingleEnum, NamedArgsSingleEnumList, OptionalTest_CategoryType, OrderStatus, Tag, TestEnum} from "../types" + +/** + * Type guard to check if props are for streaming mode + */ +function isStreamingProps( + props: HookProps +): props is StreamingProps { + return props.stream === true; +} + +interface HookState { + isSuccess: boolean; + error: Error | BamlValidationError | BamlClientFinishReasonError | null; + data: TFinal | null; + partialData: TPartial | null; +} + +type HookStateAction = + | { type: 'START_REQUEST' } + | { type: 'SET_ERROR'; payload: Error | BamlValidationError | BamlClientFinishReasonError } + | { type: 'SET_PARTIAL'; payload: TPartial } + | { type: 'SET_FINAL'; payload: TFinal } + | { type: 'RESET' }; + +function hookReducer( + state: HookState, + action: HookStateAction +): HookState { + switch (action.type) { + case 'START_REQUEST': + return { + ...state, + isSuccess: false, + error: null, + data: null, + partialData: null, + }; + case 'SET_ERROR': + return { + ...state, + isSuccess: false, + error: action.payload, + data: null, + partialData: null, + }; + case 'SET_PARTIAL': + return { + ...state, + partialData: action.payload, + }; + case 'SET_FINAL': + return { + ...state, + isSuccess: true, + data: action.payload, + partialData: null, + }; + case 'RESET': + return { + isSuccess: false, + error: null, + data: null, + partialData: null, + }; + default: + return state; + } +} + +/** + * Base hook for making BAML function calls with support for both streaming and non-streaming modes. + * Provides a unified interface for handling loading states, errors, and data updates. + * + * This hook can be used directly with any BAML server action, or through the specialized hooks + * generated for each BAML function. + * + * Features: + * 1. Streaming Support + * - Real-time partial updates via `partialData` + * - Progress indicators and incremental UI updates + * - Automatic stream cleanup and error handling + * + * 2. State Management + * - Loading state via `isPending` + * - Success/error states + * - Final result in `data` + * - Partial results in `partialData` (streaming mode) + * + * 3. Error Handling + * - Type-safe error handling with three possible error types: + * 1. BamlValidationError: Thrown when BAML fails to parse LLM output + * - Access error.prompt for the original prompt + * - Access error.raw_output for the LLM's raw response + * - Access error.message for parsing error details + * 2. BamlClientFinishReasonError: Thrown when LLM terminates with disallowed finish reason + * - Access error.prompt for the original prompt + * - Access error.raw_output for the LLM's raw response + * - Access error.message for error details + * - Access error.finish_reason for the specific termination reason + * 3. Error: Standard JavaScript errors for other cases + * - Example error handling: + * ```typescript + * try { + * await mutate(params); + * } catch (e) { + * if (e instanceof BamlValidationError) { + * console.error('Failed to parse LLM output:', e.raw_output); + * console.error('Original prompt:', e.prompt); + * } else if (e instanceof BamlClientFinishReasonError) { + * console.error('LLM terminated early:', e.finish_reason); + * console.error('Partial output:', e.raw_output); + * } else { + * console.error('Other error:', e); + * } + * } + * ``` + * - Network error detection + * - Stream interruption handling + * + * 4. Type Safety + * - Full TypeScript support + * - Inferred types from server actions + * - Proper typing for streaming/non-streaming modes + * + * @template Action The type of the server action + * @param serverAction The server action function to execute + * @param props Configuration props for the hook + * @returns An object containing the current state and controls + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useBamlAction(myServerAction); + * + * // 2. Streaming with Progress + * const { + * data, // Final result (Action's return type | null) + * partialData, // Latest partial update (RecursivePartialNull | null) + * isPending, // Whether a request is in progress + * isSuccess, // Whether the last request succeeded + * isError, // Whether the last request failed + * error, // Error object if failed + * status, // 'idle' | 'pending' | 'success' | 'error' + * mutate // Function to trigger the action + * } = useBamlAction(myServerAction, { + * stream: true, + * + * // Called on each partial update + * onPartial: (partial) => { + * console.log('Partial update:', partial); + * }, + * + * // Called when streaming completes successfully + * onFinal: (final) => { + * console.log('Final result:', final); + * }, + * + * // Called on any error + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making Requests + * const handleClick = async () => { + * try { + * const result = await mutate({ + * // your action's parameters + * param1: 'value1', + * param2: 'value2' + * }); + * + * if (result) { + * // Handle success + * } + * } catch (e) { + * // Handle errors + * } + * }; + * + * // 4. Using with React Effects + * useEffect(() => { + * if (data) { + * // Handle final data + * } + * }, [data]); + * + * useEffect(() => { + * if (partialData) { + * // Handle streaming updates + * } + * }, [partialData]); + * + * // 5. Error Handling + * useEffect(() => { + * if (error) { + * console.error('Request failed:', error); + * } + * }, [error]); + * + * // 6. Conditional Rendering + * if (isPending) return ; + * if (error) return ; + * if (data) return ; + * + * // 7. Streaming Progress + * return ( + *
+ * {isPending && } + * {partialData && } + * {data && } + * + * + *
+ * ); + * ``` + */ +export function useBamlAction( + action: Action, + props: StreamingProps +): StreamingHookResult; + +export function useBamlAction( + action: Action, + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useBamlAction( + serverAction: Action, + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + const { onFinal, onError, onPartial } = props; + const isStreaming = isStreamingProps(props); + const [isPending, startTransition] = useTransition(); + + const [state, dispatch] = useReducer(hookReducer>>, Awaited>>, { + isSuccess: false, + error: null, + data: null, + partialData: null, + }); + + const mutate = useCallback( + async (...input: Parameters) => { + dispatch({ type: 'START_REQUEST' }); + + try { + let response: Awaited>; + await startTransition(async () => { + response = await serverAction(...input); + + if (isStreaming && response instanceof ReadableStream) { + const reader = response.getReader(); + const decoder = new TextDecoder(); + + try { + while (true) { + const { value, done } = await reader.read(); + + if (done) break; + + if (value) { + const chunk = decoder.decode(value, { stream: true }).trim(); + try { + const parsed: BamlStreamResponse>> = JSON.parse(chunk); + + if (parsed.error) { + // Create appropriate error type + let error: Error | BamlValidationError | BamlClientFinishReasonError; + if (parsed.error.type === "BamlValidationError") { + error = new BamlValidationError( + parsed.error.prompt, + parsed.error.raw_output, + parsed.error.message + ); + } else if (parsed.error.type === "BamlClientFinishReasonError") { + error = new BamlClientFinishReasonError( + parsed.error.prompt, + parsed.error.raw_output, + parsed.error.message + ); + } else { + error = new Error(parsed.error.message); + } + throw error; + } + + if (parsed.partial !== undefined) { + dispatch({ type: 'SET_PARTIAL', payload: parsed.partial }); + onPartial?.(parsed.partial); + } + + if (parsed.final !== undefined) { + dispatch({ type: 'SET_FINAL', payload: parsed.final }); + onFinal?.(parsed.final); + return parsed.final; + } + } catch (err) { + dispatch({ type: "SET_ERROR", payload: err }); + onError?.(err); + break; + } + } + } + } finally { + reader.releaseLock(); + } + return response; + } + + // Non-streaming case + dispatch({ type: 'SET_FINAL', payload: response }); + onFinal?.(response); + }); + return response; + } catch (error_) { + dispatch({ type: 'SET_ERROR', payload: error_ }); + onError?.(error_); + throw error_; + } + }, + [serverAction, isStreaming, onPartial, onFinal, onError], + ); + + const status = useMemo<"idle" | "pending" | "success" | "error">(() => { + if (isPending) return "pending"; + if (state.error) return "error"; + if (state.isSuccess) return "success"; + return "idle"; + }, [isPending, state.error, state.isSuccess]); + + const result = { + data: state.data, + error: state.error, + isError: state.error !== null, + isSuccess: state.isSuccess, + isPending, + mutate, + status, + }; + + return { + ...result, + partialData: isStreaming ? state.partialData : undefined, + }; +} +/** + * A specialized hook for the AaaSamOutputFormat BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - recipe: string + * + * + * Return Type: + * - Non-streaming: Recipe + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: Recipe + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useAaaSamOutputFormat(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to Recipe + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: Recipe | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useAaaSamOutputFormat({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * recipe: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * recipe: firstValue as string, + * }), + * mutate({ + * recipe: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useAaaSamOutputFormat( + props: StreamingProps +): StreamingHookResult; + +export function useAaaSamOutputFormat( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useAaaSamOutputFormat( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.AaaSamOutputFormatStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.AaaSamOutputFormatAction, + props + ); +} + +/** + * A specialized hook for the AliasThatPointsToRecursiveType BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - list: LinkedListAliasNode + * + * + * Return Type: + * - Non-streaming: LinkedListAliasNode + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: LinkedListAliasNode + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useAliasThatPointsToRecursiveType(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to LinkedListAliasNode + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: LinkedListAliasNode | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useAliasThatPointsToRecursiveType({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * list: someValue as LinkedListAliasNode, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * list: firstValue as LinkedListAliasNode, + * }), + * mutate({ + * list: secondValue as LinkedListAliasNode, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useAliasThatPointsToRecursiveType( + props: StreamingProps +): StreamingHookResult; + +export function useAliasThatPointsToRecursiveType( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useAliasThatPointsToRecursiveType( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.AliasThatPointsToRecursiveTypeStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.AliasThatPointsToRecursiveTypeAction, + props + ); +} + +/** + * A specialized hook for the AliasWithMultipleAttrs BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - money: Checked + * + * + * Return Type: + * - Non-streaming: Checked + * - Streaming Partial: RecursivePartialNull> + * - Streaming Final: Checked + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useAliasWithMultipleAttrs(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to Checked + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: Checked | null + * partialData, // Type: RecursivePartialNull> | null + * isPending, + * error, + * mutate + * } = useAliasWithMultipleAttrs({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * money: someValue as Checked, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * money: firstValue as Checked, + * }), + * mutate({ + * money: secondValue as Checked, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useAliasWithMultipleAttrs( + props: StreamingProps +): StreamingHookResult; + +export function useAliasWithMultipleAttrs( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useAliasWithMultipleAttrs( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.AliasWithMultipleAttrsStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.AliasWithMultipleAttrsAction, + props + ); +} + +/** + * A specialized hook for the AliasedInputClass BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: InputClass + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useAliasedInputClass(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useAliasedInputClass({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as InputClass, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as InputClass, + * }), + * mutate({ + * input: secondValue as InputClass, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useAliasedInputClass( + props: StreamingProps +): StreamingHookResult; + +export function useAliasedInputClass( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useAliasedInputClass( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.AliasedInputClassStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.AliasedInputClassAction, + props + ); +} + +/** + * A specialized hook for the AliasedInputClass2 BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: InputClass + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useAliasedInputClass2(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useAliasedInputClass2({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as InputClass, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as InputClass, + * }), + * mutate({ + * input: secondValue as InputClass, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useAliasedInputClass2( + props: StreamingProps +): StreamingHookResult; + +export function useAliasedInputClass2( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useAliasedInputClass2( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.AliasedInputClass2StreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.AliasedInputClass2Action, + props + ); +} + +/** + * A specialized hook for the AliasedInputClassNested BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: InputClassNested + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useAliasedInputClassNested(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useAliasedInputClassNested({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as InputClassNested, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as InputClassNested, + * }), + * mutate({ + * input: secondValue as InputClassNested, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useAliasedInputClassNested( + props: StreamingProps +): StreamingHookResult; + +export function useAliasedInputClassNested( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useAliasedInputClassNested( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.AliasedInputClassNestedStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.AliasedInputClassNestedAction, + props + ); +} + +/** + * A specialized hook for the AliasedInputEnum BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: AliasedEnum + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useAliasedInputEnum(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useAliasedInputEnum({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as AliasedEnum, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as AliasedEnum, + * }), + * mutate({ + * input: secondValue as AliasedEnum, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useAliasedInputEnum( + props: StreamingProps +): StreamingHookResult; + +export function useAliasedInputEnum( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useAliasedInputEnum( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.AliasedInputEnumStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.AliasedInputEnumAction, + props + ); +} + +/** + * A specialized hook for the AliasedInputList BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: AliasedEnum[] + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useAliasedInputList(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useAliasedInputList({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as AliasedEnum[], // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as AliasedEnum[], + * }), + * mutate({ + * input: secondValue as AliasedEnum[], + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useAliasedInputList( + props: StreamingProps +): StreamingHookResult; + +export function useAliasedInputList( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useAliasedInputList( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.AliasedInputListStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.AliasedInputListAction, + props + ); +} + +/** + * A specialized hook for the AllowedOptionals BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - optionals: OptionalListAndMap + * + * + * Return Type: + * - Non-streaming: OptionalListAndMap + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: OptionalListAndMap + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useAllowedOptionals(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to OptionalListAndMap + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: OptionalListAndMap | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useAllowedOptionals({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * optionals: someValue as OptionalListAndMap, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * optionals: firstValue as OptionalListAndMap, + * }), + * mutate({ + * optionals: secondValue as OptionalListAndMap, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useAllowedOptionals( + props: StreamingProps +): StreamingHookResult; + +export function useAllowedOptionals( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useAllowedOptionals( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.AllowedOptionalsStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.AllowedOptionalsAction, + props + ); +} + +/** + * A specialized hook for the AssertFn BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - a: number + * + * + * Return Type: + * - Non-streaming: number + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: number + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useAssertFn(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to number + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: number | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useAssertFn({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * a: someValue as number, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * a: firstValue as number, + * }), + * mutate({ + * a: secondValue as number, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useAssertFn( + props: StreamingProps +): StreamingHookResult; + +export function useAssertFn( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useAssertFn( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.AssertFnStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.AssertFnAction, + props + ); +} + +/** + * A specialized hook for the AudioInput BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - aud: Audio + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useAudioInput(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useAudioInput({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * aud: someValue as Audio, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * aud: firstValue as Audio, + * }), + * mutate({ + * aud: secondValue as Audio, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useAudioInput( + props: StreamingProps +): StreamingHookResult; + +export function useAudioInput( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useAudioInput( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.AudioInputStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.AudioInputAction, + props + ); +} + +/** + * A specialized hook for the BuildLinkedList BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: number[] + * + * + * Return Type: + * - Non-streaming: LinkedList + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: LinkedList + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useBuildLinkedList(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to LinkedList + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: LinkedList | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useBuildLinkedList({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as number[], // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as number[], + * }), + * mutate({ + * input: secondValue as number[], + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useBuildLinkedList( + props: StreamingProps +): StreamingHookResult; + +export function useBuildLinkedList( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useBuildLinkedList( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.BuildLinkedListStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.BuildLinkedListAction, + props + ); +} + +/** + * A specialized hook for the BuildTree BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: BinaryNode + * + * + * Return Type: + * - Non-streaming: Tree + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: Tree + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useBuildTree(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to Tree + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: Tree | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useBuildTree({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as BinaryNode, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as BinaryNode, + * }), + * mutate({ + * input: secondValue as BinaryNode, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useBuildTree( + props: StreamingProps +): StreamingHookResult; + +export function useBuildTree( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useBuildTree( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.BuildTreeStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.BuildTreeAction, + props + ); +} + +/** + * A specialized hook for the ClassThatPointsToRecursiveClassThroughAlias BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - cls: ClassToRecAlias + * + * + * Return Type: + * - Non-streaming: ClassToRecAlias + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: ClassToRecAlias + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useClassThatPointsToRecursiveClassThroughAlias(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to ClassToRecAlias + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: ClassToRecAlias | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useClassThatPointsToRecursiveClassThroughAlias({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * cls: someValue as ClassToRecAlias, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * cls: firstValue as ClassToRecAlias, + * }), + * mutate({ + * cls: secondValue as ClassToRecAlias, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useClassThatPointsToRecursiveClassThroughAlias( + props: StreamingProps +): StreamingHookResult; + +export function useClassThatPointsToRecursiveClassThroughAlias( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useClassThatPointsToRecursiveClassThroughAlias( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.ClassThatPointsToRecursiveClassThroughAliasStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.ClassThatPointsToRecursiveClassThroughAliasAction, + props + ); +} + +/** + * A specialized hook for the ClassifyDynEnumTwo BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: (string | DynEnumTwo) + * - Streaming Partial: RecursivePartialNull<(string | DynEnumTwo)> + * - Streaming Final: (string | DynEnumTwo) + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useClassifyDynEnumTwo(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to (string | DynEnumTwo) + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: (string | DynEnumTwo) | null + * partialData, // Type: RecursivePartialNull<(string | DynEnumTwo)> | null + * isPending, + * error, + * mutate + * } = useClassifyDynEnumTwo({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useClassifyDynEnumTwo( + props: StreamingProps +): StreamingHookResult; + +export function useClassifyDynEnumTwo( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useClassifyDynEnumTwo( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.ClassifyDynEnumTwoStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.ClassifyDynEnumTwoAction, + props + ); +} + +/** + * A specialized hook for the ClassifyMessage BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: Category + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: Category + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useClassifyMessage(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to Category + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: Category | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useClassifyMessage({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useClassifyMessage( + props: StreamingProps +): StreamingHookResult; + +export function useClassifyMessage( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useClassifyMessage( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.ClassifyMessageStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.ClassifyMessageAction, + props + ); +} + +/** + * A specialized hook for the ClassifyMessage2 BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: Category + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: Category + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useClassifyMessage2(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to Category + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: Category | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useClassifyMessage2({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useClassifyMessage2( + props: StreamingProps +): StreamingHookResult; + +export function useClassifyMessage2( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useClassifyMessage2( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.ClassifyMessage2StreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.ClassifyMessage2Action, + props + ); +} + +/** + * A specialized hook for the ClassifyMessage3 BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: Category + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: Category + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useClassifyMessage3(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to Category + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: Category | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useClassifyMessage3({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useClassifyMessage3( + props: StreamingProps +): StreamingHookResult; + +export function useClassifyMessage3( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useClassifyMessage3( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.ClassifyMessage3StreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.ClassifyMessage3Action, + props + ); +} + +/** + * A specialized hook for the Completion BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - prefix: string + * + * - suffix: string + * + * - language: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useCompletion(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useCompletion({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * prefix: someValue as string, // Replace someValue with your data + * suffix: someValue as string, // Replace someValue with your data + * language: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * prefix: firstValue as string, + * suffix: firstValue as string, + * language: firstValue as string, + * }), + * mutate({ + * prefix: secondValue as string, + * suffix: secondValue as string, + * language: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useCompletion( + props: StreamingProps +): StreamingHookResult; + +export function useCompletion( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useCompletion( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.CompletionStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.CompletionAction, + props + ); +} + +/** + * A specialized hook for the CustomTask BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: BookOrder | FlightConfirmation | GroceryReceipt + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: BookOrder | FlightConfirmation | GroceryReceipt + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useCustomTask(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to BookOrder | FlightConfirmation | GroceryReceipt + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: BookOrder | FlightConfirmation | GroceryReceipt | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useCustomTask({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useCustomTask( + props: StreamingProps +): StreamingHookResult; + +export function useCustomTask( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useCustomTask( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.CustomTaskStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.CustomTaskAction, + props + ); +} + +/** + * A specialized hook for the DescribeImage BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - img: Image + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useDescribeImage(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useDescribeImage({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * img: someValue as Image, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * img: firstValue as Image, + * }), + * mutate({ + * img: secondValue as Image, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useDescribeImage( + props: StreamingProps +): StreamingHookResult; + +export function useDescribeImage( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useDescribeImage( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.DescribeImageStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.DescribeImageAction, + props + ); +} + +/** + * A specialized hook for the DescribeImage2 BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - classWithImage: ClassWithImage + * + * - img2: Image + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useDescribeImage2(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useDescribeImage2({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * classWithImage: someValue as ClassWithImage, // Replace someValue with your data + * img2: someValue as Image, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * classWithImage: firstValue as ClassWithImage, + * img2: firstValue as Image, + * }), + * mutate({ + * classWithImage: secondValue as ClassWithImage, + * img2: secondValue as Image, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useDescribeImage2( + props: StreamingProps +): StreamingHookResult; + +export function useDescribeImage2( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useDescribeImage2( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.DescribeImage2StreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.DescribeImage2Action, + props + ); +} + +/** + * A specialized hook for the DescribeImage3 BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - classWithImage: ClassWithImage + * + * - img2: Image + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useDescribeImage3(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useDescribeImage3({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * classWithImage: someValue as ClassWithImage, // Replace someValue with your data + * img2: someValue as Image, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * classWithImage: firstValue as ClassWithImage, + * img2: firstValue as Image, + * }), + * mutate({ + * classWithImage: secondValue as ClassWithImage, + * img2: secondValue as Image, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useDescribeImage3( + props: StreamingProps +): StreamingHookResult; + +export function useDescribeImage3( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useDescribeImage3( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.DescribeImage3StreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.DescribeImage3Action, + props + ); +} + +/** + * A specialized hook for the DescribeImage4 BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - classWithImage: ClassWithImage + * + * - img2: Image + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useDescribeImage4(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useDescribeImage4({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * classWithImage: someValue as ClassWithImage, // Replace someValue with your data + * img2: someValue as Image, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * classWithImage: firstValue as ClassWithImage, + * img2: firstValue as Image, + * }), + * mutate({ + * classWithImage: secondValue as ClassWithImage, + * img2: secondValue as Image, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useDescribeImage4( + props: StreamingProps +): StreamingHookResult; + +export function useDescribeImage4( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useDescribeImage4( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.DescribeImage4StreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.DescribeImage4Action, + props + ); +} + +/** + * A specialized hook for the DifferentiateUnions BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * + * Return Type: + * - Non-streaming: OriginalA | OriginalB + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: OriginalA | OriginalB + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useDifferentiateUnions(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to OriginalA | OriginalB + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: OriginalA | OriginalB | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useDifferentiateUnions({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * }), + * mutate({ + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useDifferentiateUnions( + props: StreamingProps +): StreamingHookResult; + +export function useDifferentiateUnions( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useDifferentiateUnions( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.DifferentiateUnionsStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.DifferentiateUnionsAction, + props + ); +} + +/** + * A specialized hook for the DummyOutputFunction BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: DummyOutput + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: DummyOutput + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useDummyOutputFunction(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to DummyOutput + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: DummyOutput | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useDummyOutputFunction({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useDummyOutputFunction( + props: StreamingProps +): StreamingHookResult; + +export function useDummyOutputFunction( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useDummyOutputFunction( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.DummyOutputFunctionStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.DummyOutputFunctionAction, + props + ); +} + +/** + * A specialized hook for the DynamicFunc BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: DynamicClassOne + * + * + * Return Type: + * - Non-streaming: DynamicClassTwo + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: DynamicClassTwo + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useDynamicFunc(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to DynamicClassTwo + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: DynamicClassTwo | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useDynamicFunc({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as DynamicClassOne, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as DynamicClassOne, + * }), + * mutate({ + * input: secondValue as DynamicClassOne, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useDynamicFunc( + props: StreamingProps +): StreamingHookResult; + +export function useDynamicFunc( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useDynamicFunc( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.DynamicFuncStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.DynamicFuncAction, + props + ); +} + +/** + * A specialized hook for the DynamicInputOutput BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: DynInputOutput + * + * + * Return Type: + * - Non-streaming: DynInputOutput + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: DynInputOutput + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useDynamicInputOutput(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to DynInputOutput + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: DynInputOutput | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useDynamicInputOutput({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as DynInputOutput, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as DynInputOutput, + * }), + * mutate({ + * input: secondValue as DynInputOutput, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useDynamicInputOutput( + props: StreamingProps +): StreamingHookResult; + +export function useDynamicInputOutput( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useDynamicInputOutput( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.DynamicInputOutputStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.DynamicInputOutputAction, + props + ); +} + +/** + * A specialized hook for the DynamicListInputOutput BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: DynInputOutput[] + * + * + * Return Type: + * - Non-streaming: DynInputOutput[] + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: DynInputOutput[] + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useDynamicListInputOutput(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to DynInputOutput[] + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: DynInputOutput[] | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useDynamicListInputOutput({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as DynInputOutput[], // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as DynInputOutput[], + * }), + * mutate({ + * input: secondValue as DynInputOutput[], + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useDynamicListInputOutput( + props: StreamingProps +): StreamingHookResult; + +export function useDynamicListInputOutput( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useDynamicListInputOutput( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.DynamicListInputOutputStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.DynamicListInputOutputAction, + props + ); +} + +/** + * A specialized hook for the ExpectFailure BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useExpectFailure(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useExpectFailure({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * }), + * mutate({ + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useExpectFailure( + props: StreamingProps +): StreamingHookResult; + +export function useExpectFailure( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useExpectFailure( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.ExpectFailureStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.ExpectFailureAction, + props + ); +} + +/** + * A specialized hook for the ExtractContactInfo BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - document: string + * + * + * Return Type: + * - Non-streaming: ContactInfo + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: ContactInfo + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useExtractContactInfo(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to ContactInfo + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: ContactInfo | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useExtractContactInfo({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * document: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * document: firstValue as string, + * }), + * mutate({ + * document: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useExtractContactInfo( + props: StreamingProps +): StreamingHookResult; + +export function useExtractContactInfo( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useExtractContactInfo( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.ExtractContactInfoStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.ExtractContactInfoAction, + props + ); +} + +/** + * A specialized hook for the ExtractHobby BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - text: string + * + * + * Return Type: + * - Non-streaming: (string | Hobby)[] + * - Streaming Partial: RecursivePartialNull<(string | Hobby)[]> + * - Streaming Final: (string | Hobby)[] + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useExtractHobby(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to (string | Hobby)[] + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: (string | Hobby)[] | null + * partialData, // Type: RecursivePartialNull<(string | Hobby)[]> | null + * isPending, + * error, + * mutate + * } = useExtractHobby({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * text: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * text: firstValue as string, + * }), + * mutate({ + * text: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useExtractHobby( + props: StreamingProps +): StreamingHookResult; + +export function useExtractHobby( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useExtractHobby( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.ExtractHobbyStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.ExtractHobbyAction, + props + ); +} + +/** + * A specialized hook for the ExtractNames BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string[] + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string[] + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useExtractNames(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string[] + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string[] | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useExtractNames({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useExtractNames( + props: StreamingProps +): StreamingHookResult; + +export function useExtractNames( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useExtractNames( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.ExtractNamesStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.ExtractNamesAction, + props + ); +} + +/** + * A specialized hook for the ExtractPeople BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - text: string + * + * + * Return Type: + * - Non-streaming: Person[] + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: Person[] + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useExtractPeople(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to Person[] + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: Person[] | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useExtractPeople({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * text: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * text: firstValue as string, + * }), + * mutate({ + * text: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useExtractPeople( + props: StreamingProps +): StreamingHookResult; + +export function useExtractPeople( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useExtractPeople( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.ExtractPeopleStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.ExtractPeopleAction, + props + ); +} + +/** + * A specialized hook for the ExtractReceiptInfo BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - email: string + * + * - reason: "curiosity" | "personal_finance" + * + * + * Return Type: + * - Non-streaming: ReceiptInfo + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: ReceiptInfo + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useExtractReceiptInfo(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to ReceiptInfo + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: ReceiptInfo | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useExtractReceiptInfo({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * email: someValue as string, // Replace someValue with your data + * reason: someValue as "curiosity" | "personal_finance", // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * email: firstValue as string, + * reason: firstValue as "curiosity" | "personal_finance", + * }), + * mutate({ + * email: secondValue as string, + * reason: secondValue as "curiosity" | "personal_finance", + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useExtractReceiptInfo( + props: StreamingProps +): StreamingHookResult; + +export function useExtractReceiptInfo( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useExtractReceiptInfo( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.ExtractReceiptInfoStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.ExtractReceiptInfoAction, + props + ); +} + +/** + * A specialized hook for the ExtractResume BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - resume: string + * + * - img (optional): Image | null + * + * + * Return Type: + * - Non-streaming: Resume + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: Resume + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useExtractResume(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to Resume + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: Resume | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useExtractResume({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * resume: someValue as string, // Replace someValue with your data + * img: someValue as Image | null, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * resume: firstValue as string, + * img: firstValue as Image | null, + * }), + * mutate({ + * resume: secondValue as string, + * img: secondValue as Image | null, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useExtractResume( + props: StreamingProps +): StreamingHookResult; + +export function useExtractResume( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useExtractResume( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.ExtractResumeStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.ExtractResumeAction, + props + ); +} + +/** + * A specialized hook for the ExtractResume2 BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - resume: string + * + * + * Return Type: + * - Non-streaming: Resume + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: Resume + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useExtractResume2(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to Resume + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: Resume | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useExtractResume2({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * resume: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * resume: firstValue as string, + * }), + * mutate({ + * resume: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useExtractResume2( + props: StreamingProps +): StreamingHookResult; + +export function useExtractResume2( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useExtractResume2( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.ExtractResume2StreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.ExtractResume2Action, + props + ); +} + +/** + * A specialized hook for the FnClassOptionalOutput BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: ClassOptionalOutput | null + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: ClassOptionalOutput | null + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useFnClassOptionalOutput(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to ClassOptionalOutput | null + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: ClassOptionalOutput | null | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useFnClassOptionalOutput({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useFnClassOptionalOutput( + props: StreamingProps +): StreamingHookResult; + +export function useFnClassOptionalOutput( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useFnClassOptionalOutput( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.FnClassOptionalOutputStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.FnClassOptionalOutputAction, + props + ); +} + +/** + * A specialized hook for the FnClassOptionalOutput2 BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: ClassOptionalOutput2 | null + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: ClassOptionalOutput2 | null + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useFnClassOptionalOutput2(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to ClassOptionalOutput2 | null + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: ClassOptionalOutput2 | null | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useFnClassOptionalOutput2({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useFnClassOptionalOutput2( + props: StreamingProps +): StreamingHookResult; + +export function useFnClassOptionalOutput2( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useFnClassOptionalOutput2( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.FnClassOptionalOutput2StreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.FnClassOptionalOutput2Action, + props + ); +} + +/** + * A specialized hook for the FnEnumListOutput BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: EnumOutput[] + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: EnumOutput[] + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useFnEnumListOutput(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to EnumOutput[] + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: EnumOutput[] | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useFnEnumListOutput({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useFnEnumListOutput( + props: StreamingProps +): StreamingHookResult; + +export function useFnEnumListOutput( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useFnEnumListOutput( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.FnEnumListOutputStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.FnEnumListOutputAction, + props + ); +} + +/** + * A specialized hook for the FnEnumOutput BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: EnumOutput + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: EnumOutput + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useFnEnumOutput(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to EnumOutput + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: EnumOutput | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useFnEnumOutput({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useFnEnumOutput( + props: StreamingProps +): StreamingHookResult; + +export function useFnEnumOutput( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useFnEnumOutput( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.FnEnumOutputStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.FnEnumOutputAction, + props + ); +} + +/** + * A specialized hook for the FnLiteralClassInputOutput BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: LiteralClassHello + * + * + * Return Type: + * - Non-streaming: LiteralClassHello + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: LiteralClassHello + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useFnLiteralClassInputOutput(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to LiteralClassHello + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: LiteralClassHello | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useFnLiteralClassInputOutput({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as LiteralClassHello, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as LiteralClassHello, + * }), + * mutate({ + * input: secondValue as LiteralClassHello, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useFnLiteralClassInputOutput( + props: StreamingProps +): StreamingHookResult; + +export function useFnLiteralClassInputOutput( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useFnLiteralClassInputOutput( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.FnLiteralClassInputOutputStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.FnLiteralClassInputOutputAction, + props + ); +} + +/** + * A specialized hook for the FnLiteralUnionClassInputOutput BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: LiteralClassOne | LiteralClassTwo + * + * + * Return Type: + * - Non-streaming: LiteralClassOne | LiteralClassTwo + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: LiteralClassOne | LiteralClassTwo + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useFnLiteralUnionClassInputOutput(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to LiteralClassOne | LiteralClassTwo + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: LiteralClassOne | LiteralClassTwo | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useFnLiteralUnionClassInputOutput({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as LiteralClassOne | LiteralClassTwo, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as LiteralClassOne | LiteralClassTwo, + * }), + * mutate({ + * input: secondValue as LiteralClassOne | LiteralClassTwo, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useFnLiteralUnionClassInputOutput( + props: StreamingProps +): StreamingHookResult; + +export function useFnLiteralUnionClassInputOutput( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useFnLiteralUnionClassInputOutput( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.FnLiteralUnionClassInputOutputStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.FnLiteralUnionClassInputOutputAction, + props + ); +} + +/** + * A specialized hook for the FnNamedArgsSingleStringOptional BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - myString (optional): string | null + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useFnNamedArgsSingleStringOptional(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useFnNamedArgsSingleStringOptional({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * myString: someValue as string | null, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * myString: firstValue as string | null, + * }), + * mutate({ + * myString: secondValue as string | null, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useFnNamedArgsSingleStringOptional( + props: StreamingProps +): StreamingHookResult; + +export function useFnNamedArgsSingleStringOptional( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useFnNamedArgsSingleStringOptional( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.FnNamedArgsSingleStringOptionalStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.FnNamedArgsSingleStringOptionalAction, + props + ); +} + +/** + * A specialized hook for the FnOutputBool BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: boolean + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: boolean + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useFnOutputBool(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to boolean + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: boolean | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useFnOutputBool({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useFnOutputBool( + props: StreamingProps +): StreamingHookResult; + +export function useFnOutputBool( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useFnOutputBool( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.FnOutputBoolStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.FnOutputBoolAction, + props + ); +} + +/** + * A specialized hook for the FnOutputClass BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: TestOutputClass + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: TestOutputClass + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useFnOutputClass(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to TestOutputClass + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: TestOutputClass | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useFnOutputClass({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useFnOutputClass( + props: StreamingProps +): StreamingHookResult; + +export function useFnOutputClass( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useFnOutputClass( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.FnOutputClassStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.FnOutputClassAction, + props + ); +} + +/** + * A specialized hook for the FnOutputClassList BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: TestOutputClass[] + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: TestOutputClass[] + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useFnOutputClassList(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to TestOutputClass[] + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: TestOutputClass[] | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useFnOutputClassList({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useFnOutputClassList( + props: StreamingProps +): StreamingHookResult; + +export function useFnOutputClassList( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useFnOutputClassList( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.FnOutputClassListStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.FnOutputClassListAction, + props + ); +} + +/** + * A specialized hook for the FnOutputClassNested BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: TestClassNested + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: TestClassNested + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useFnOutputClassNested(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to TestClassNested + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: TestClassNested | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useFnOutputClassNested({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useFnOutputClassNested( + props: StreamingProps +): StreamingHookResult; + +export function useFnOutputClassNested( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useFnOutputClassNested( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.FnOutputClassNestedStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.FnOutputClassNestedAction, + props + ); +} + +/** + * A specialized hook for the FnOutputClassWithEnum BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: TestClassWithEnum + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: TestClassWithEnum + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useFnOutputClassWithEnum(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to TestClassWithEnum + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: TestClassWithEnum | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useFnOutputClassWithEnum({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useFnOutputClassWithEnum( + props: StreamingProps +): StreamingHookResult; + +export function useFnOutputClassWithEnum( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useFnOutputClassWithEnum( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.FnOutputClassWithEnumStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.FnOutputClassWithEnumAction, + props + ); +} + +/** + * A specialized hook for the FnOutputInt BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: number + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: number + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useFnOutputInt(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to number + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: number | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useFnOutputInt({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useFnOutputInt( + props: StreamingProps +): StreamingHookResult; + +export function useFnOutputInt( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useFnOutputInt( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.FnOutputIntStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.FnOutputIntAction, + props + ); +} + +/** + * A specialized hook for the FnOutputLiteralBool BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: false + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: false + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useFnOutputLiteralBool(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to false + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: false | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useFnOutputLiteralBool({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useFnOutputLiteralBool( + props: StreamingProps +): StreamingHookResult; + +export function useFnOutputLiteralBool( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useFnOutputLiteralBool( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.FnOutputLiteralBoolStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.FnOutputLiteralBoolAction, + props + ); +} + +/** + * A specialized hook for the FnOutputLiteralInt BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: 5 + * - Streaming Partial: RecursivePartialNull<5> + * - Streaming Final: 5 + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useFnOutputLiteralInt(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to 5 + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: 5 | null + * partialData, // Type: RecursivePartialNull<5> | null + * isPending, + * error, + * mutate + * } = useFnOutputLiteralInt({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useFnOutputLiteralInt( + props: StreamingProps +): StreamingHookResult; + +export function useFnOutputLiteralInt( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useFnOutputLiteralInt( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.FnOutputLiteralIntStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.FnOutputLiteralIntAction, + props + ); +} + +/** + * A specialized hook for the FnOutputLiteralString BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: "example output" + * - Streaming Partial: RecursivePartialNull<"example output"> + * - Streaming Final: "example output" + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useFnOutputLiteralString(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to "example output" + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: "example output" | null + * partialData, // Type: RecursivePartialNull<"example output"> | null + * isPending, + * error, + * mutate + * } = useFnOutputLiteralString({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useFnOutputLiteralString( + props: StreamingProps +): StreamingHookResult; + +export function useFnOutputLiteralString( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useFnOutputLiteralString( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.FnOutputLiteralStringStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.FnOutputLiteralStringAction, + props + ); +} + +/** + * A specialized hook for the FnOutputStringList BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string[] + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string[] + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useFnOutputStringList(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string[] + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string[] | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useFnOutputStringList({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useFnOutputStringList( + props: StreamingProps +): StreamingHookResult; + +export function useFnOutputStringList( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useFnOutputStringList( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.FnOutputStringListStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.FnOutputStringListAction, + props + ); +} + +/** + * A specialized hook for the FnTestAliasedEnumOutput BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: TestEnum + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: TestEnum + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useFnTestAliasedEnumOutput(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to TestEnum + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: TestEnum | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useFnTestAliasedEnumOutput({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useFnTestAliasedEnumOutput( + props: StreamingProps +): StreamingHookResult; + +export function useFnTestAliasedEnumOutput( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useFnTestAliasedEnumOutput( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.FnTestAliasedEnumOutputStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.FnTestAliasedEnumOutputAction, + props + ); +} + +/** + * A specialized hook for the FnTestClassAlias BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: TestClassAlias + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: TestClassAlias + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useFnTestClassAlias(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to TestClassAlias + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: TestClassAlias | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useFnTestClassAlias({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useFnTestClassAlias( + props: StreamingProps +): StreamingHookResult; + +export function useFnTestClassAlias( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useFnTestClassAlias( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.FnTestClassAliasStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.FnTestClassAliasAction, + props + ); +} + +/** + * A specialized hook for the FnTestNamedArgsSingleEnum BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - myArg: NamedArgsSingleEnum + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useFnTestNamedArgsSingleEnum(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useFnTestNamedArgsSingleEnum({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * myArg: someValue as NamedArgsSingleEnum, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * myArg: firstValue as NamedArgsSingleEnum, + * }), + * mutate({ + * myArg: secondValue as NamedArgsSingleEnum, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useFnTestNamedArgsSingleEnum( + props: StreamingProps +): StreamingHookResult; + +export function useFnTestNamedArgsSingleEnum( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useFnTestNamedArgsSingleEnum( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.FnTestNamedArgsSingleEnumStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.FnTestNamedArgsSingleEnumAction, + props + ); +} + +/** + * A specialized hook for the GetDataType BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - text: string + * + * + * Return Type: + * - Non-streaming: RaysData + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: RaysData + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useGetDataType(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to RaysData + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: RaysData | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useGetDataType({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * text: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * text: firstValue as string, + * }), + * mutate({ + * text: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useGetDataType( + props: StreamingProps +): StreamingHookResult; + +export function useGetDataType( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useGetDataType( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.GetDataTypeStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.GetDataTypeAction, + props + ); +} + +/** + * A specialized hook for the GetOrderInfo BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - email: Email + * + * + * Return Type: + * - Non-streaming: OrderInfo + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: OrderInfo + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useGetOrderInfo(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to OrderInfo + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: OrderInfo | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useGetOrderInfo({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * email: someValue as Email, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * email: firstValue as Email, + * }), + * mutate({ + * email: secondValue as Email, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useGetOrderInfo( + props: StreamingProps +): StreamingHookResult; + +export function useGetOrderInfo( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useGetOrderInfo( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.GetOrderInfoStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.GetOrderInfoAction, + props + ); +} + +/** + * A specialized hook for the GetQuery BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - query: string + * + * + * Return Type: + * - Non-streaming: SearchParams + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: SearchParams + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useGetQuery(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to SearchParams + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: SearchParams | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useGetQuery({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * query: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * query: firstValue as string, + * }), + * mutate({ + * query: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useGetQuery( + props: StreamingProps +): StreamingHookResult; + +export function useGetQuery( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useGetQuery( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.GetQueryStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.GetQueryAction, + props + ); +} + +/** + * A specialized hook for the InOutEnumMapKey BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - i1: Partial> + * + * - i2: Partial> + * + * + * Return Type: + * - Non-streaming: Partial> + * - Streaming Partial: RecursivePartialNull>> + * - Streaming Final: Partial> + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useInOutEnumMapKey(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to Partial> + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: Partial> | null + * partialData, // Type: RecursivePartialNull>> | null + * isPending, + * error, + * mutate + * } = useInOutEnumMapKey({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * i1: someValue as Partial>, // Replace someValue with your data + * i2: someValue as Partial>, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * i1: firstValue as Partial>, + * i2: firstValue as Partial>, + * }), + * mutate({ + * i1: secondValue as Partial>, + * i2: secondValue as Partial>, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useInOutEnumMapKey( + props: StreamingProps +): StreamingHookResult; + +export function useInOutEnumMapKey( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useInOutEnumMapKey( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.InOutEnumMapKeyStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.InOutEnumMapKeyAction, + props + ); +} + +/** + * A specialized hook for the InOutLiteralStringUnionMapKey BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - i1: Partial> + * + * - i2: Partial> + * + * + * Return Type: + * - Non-streaming: Partial> + * - Streaming Partial: RecursivePartialNull>> + * - Streaming Final: Partial> + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useInOutLiteralStringUnionMapKey(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to Partial> + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: Partial> | null + * partialData, // Type: RecursivePartialNull>> | null + * isPending, + * error, + * mutate + * } = useInOutLiteralStringUnionMapKey({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * i1: someValue as Partial>, // Replace someValue with your data + * i2: someValue as Partial>, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * i1: firstValue as Partial>, + * i2: firstValue as Partial>, + * }), + * mutate({ + * i1: secondValue as Partial>, + * i2: secondValue as Partial>, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useInOutLiteralStringUnionMapKey( + props: StreamingProps +): StreamingHookResult; + +export function useInOutLiteralStringUnionMapKey( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useInOutLiteralStringUnionMapKey( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.InOutLiteralStringUnionMapKeyStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.InOutLiteralStringUnionMapKeyAction, + props + ); +} + +/** + * A specialized hook for the InOutSingleLiteralStringMapKey BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - m: Partial> + * + * + * Return Type: + * - Non-streaming: Partial> + * - Streaming Partial: RecursivePartialNull>> + * - Streaming Final: Partial> + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useInOutSingleLiteralStringMapKey(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to Partial> + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: Partial> | null + * partialData, // Type: RecursivePartialNull>> | null + * isPending, + * error, + * mutate + * } = useInOutSingleLiteralStringMapKey({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * m: someValue as Partial>, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * m: firstValue as Partial>, + * }), + * mutate({ + * m: secondValue as Partial>, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useInOutSingleLiteralStringMapKey( + props: StreamingProps +): StreamingHookResult; + +export function useInOutSingleLiteralStringMapKey( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useInOutSingleLiteralStringMapKey( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.InOutSingleLiteralStringMapKeyStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.InOutSingleLiteralStringMapKeyAction, + props + ); +} + +/** + * A specialized hook for the JsonTypeAliasCycle BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: JsonValue + * + * + * Return Type: + * - Non-streaming: JsonValue + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: JsonValue + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useJsonTypeAliasCycle(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to JsonValue + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: JsonValue | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useJsonTypeAliasCycle({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as JsonValue, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as JsonValue, + * }), + * mutate({ + * input: secondValue as JsonValue, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useJsonTypeAliasCycle( + props: StreamingProps +): StreamingHookResult; + +export function useJsonTypeAliasCycle( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useJsonTypeAliasCycle( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.JsonTypeAliasCycleStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.JsonTypeAliasCycleAction, + props + ); +} + +/** + * A specialized hook for the LiteralUnionsTest BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: 1 | true | "string output" + * - Streaming Partial: RecursivePartialNull<1 | true | "string output"> + * - Streaming Final: 1 | true | "string output" + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useLiteralUnionsTest(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to 1 | true | "string output" + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: 1 | true | "string output" | null + * partialData, // Type: RecursivePartialNull<1 | true | "string output"> | null + * isPending, + * error, + * mutate + * } = useLiteralUnionsTest({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useLiteralUnionsTest( + props: StreamingProps +): StreamingHookResult; + +export function useLiteralUnionsTest( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useLiteralUnionsTest( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.LiteralUnionsTestStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.LiteralUnionsTestAction, + props + ); +} + +/** + * A specialized hook for the MakeBlockConstraint BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * + * Return Type: + * - Non-streaming: Checked + * - Streaming Partial: RecursivePartialNull> + * - Streaming Final: Checked + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useMakeBlockConstraint(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to Checked + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: Checked | null + * partialData, // Type: RecursivePartialNull> | null + * isPending, + * error, + * mutate + * } = useMakeBlockConstraint({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * }), + * mutate({ + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useMakeBlockConstraint( + props: StreamingProps +): StreamingHookResult; + +export function useMakeBlockConstraint( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useMakeBlockConstraint( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.MakeBlockConstraintStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.MakeBlockConstraintAction, + props + ); +} + +/** + * A specialized hook for the MakeNestedBlockConstraint BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * + * Return Type: + * - Non-streaming: NestedBlockConstraint + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: NestedBlockConstraint + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useMakeNestedBlockConstraint(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to NestedBlockConstraint + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: NestedBlockConstraint | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useMakeNestedBlockConstraint({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * }), + * mutate({ + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useMakeNestedBlockConstraint( + props: StreamingProps +): StreamingHookResult; + +export function useMakeNestedBlockConstraint( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useMakeNestedBlockConstraint( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.MakeNestedBlockConstraintStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.MakeNestedBlockConstraintAction, + props + ); +} + +/** + * A specialized hook for the MakeSemanticContainer BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * + * Return Type: + * - Non-streaming: SemanticContainer + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: SemanticContainer + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useMakeSemanticContainer(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to SemanticContainer + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: SemanticContainer | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useMakeSemanticContainer({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * }), + * mutate({ + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useMakeSemanticContainer( + props: StreamingProps +): StreamingHookResult; + +export function useMakeSemanticContainer( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useMakeSemanticContainer( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.MakeSemanticContainerStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.MakeSemanticContainerAction, + props + ); +} + +/** + * A specialized hook for the MapAlias BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - m: Record + * + * + * Return Type: + * - Non-streaming: Record + * - Streaming Partial: RecursivePartialNull> + * - Streaming Final: Record + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useMapAlias(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to Record + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: Record | null + * partialData, // Type: RecursivePartialNull> | null + * isPending, + * error, + * mutate + * } = useMapAlias({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * m: someValue as Record, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * m: firstValue as Record, + * }), + * mutate({ + * m: secondValue as Record, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useMapAlias( + props: StreamingProps +): StreamingHookResult; + +export function useMapAlias( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useMapAlias( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.MapAliasStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.MapAliasAction, + props + ); +} + +/** + * A specialized hook for the MergeAliasAttributes BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - money: number + * + * + * Return Type: + * - Non-streaming: MergeAttrs + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: MergeAttrs + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useMergeAliasAttributes(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to MergeAttrs + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: MergeAttrs | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useMergeAliasAttributes({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * money: someValue as number, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * money: firstValue as number, + * }), + * mutate({ + * money: secondValue as number, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useMergeAliasAttributes( + props: StreamingProps +): StreamingHookResult; + +export function useMergeAliasAttributes( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useMergeAliasAttributes( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.MergeAliasAttributesStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.MergeAliasAttributesAction, + props + ); +} + +/** + * A specialized hook for the MyFunc BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: DynamicOutput + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: DynamicOutput + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useMyFunc(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to DynamicOutput + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: DynamicOutput | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useMyFunc({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useMyFunc( + props: StreamingProps +): StreamingHookResult; + +export function useMyFunc( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useMyFunc( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.MyFuncStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.MyFuncAction, + props + ); +} + +/** + * A specialized hook for the NestedAlias BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - c: number | string | boolean | number | string[] | Record + * + * + * Return Type: + * - Non-streaming: number | string | boolean | number | string[] | Record + * - Streaming Partial: RecursivePartialNull> + * - Streaming Final: number | string | boolean | number | string[] | Record + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useNestedAlias(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to number | string | boolean | number | string[] | Record + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: number | string | boolean | number | string[] | Record | null + * partialData, // Type: RecursivePartialNull> | null + * isPending, + * error, + * mutate + * } = useNestedAlias({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * c: someValue as number | string | boolean | number | string[] | Record, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * c: firstValue as number | string | boolean | number | string[] | Record, + * }), + * mutate({ + * c: secondValue as number | string | boolean | number | string[] | Record, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useNestedAlias( + props: StreamingProps +): StreamingHookResult; + +export function useNestedAlias( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useNestedAlias( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.NestedAliasStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.NestedAliasAction, + props + ); +} + +/** + * A specialized hook for the NullLiteralClassHello BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - s: string + * + * + * Return Type: + * - Non-streaming: ClassForNullLiteral + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: ClassForNullLiteral + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useNullLiteralClassHello(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to ClassForNullLiteral + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: ClassForNullLiteral | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useNullLiteralClassHello({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * s: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * s: firstValue as string, + * }), + * mutate({ + * s: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useNullLiteralClassHello( + props: StreamingProps +): StreamingHookResult; + +export function useNullLiteralClassHello( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useNullLiteralClassHello( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.NullLiteralClassHelloStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.NullLiteralClassHelloAction, + props + ); +} + +/** + * A specialized hook for the OptionalTest_Function BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: (OptionalTest_ReturnType | null)[] + * - Streaming Partial: RecursivePartialNull<(OptionalTest_ReturnType | null)[]> + * - Streaming Final: (OptionalTest_ReturnType | null)[] + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useOptionalTest_Function(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to (OptionalTest_ReturnType | null)[] + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: (OptionalTest_ReturnType | null)[] | null + * partialData, // Type: RecursivePartialNull<(OptionalTest_ReturnType | null)[]> | null + * isPending, + * error, + * mutate + * } = useOptionalTest_Function({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useOptionalTest_Function( + props: StreamingProps +): StreamingHookResult; + +export function useOptionalTest_Function( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useOptionalTest_Function( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.OptionalTest_FunctionStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.OptionalTest_FunctionAction, + props + ); +} + +/** + * A specialized hook for the PredictAge BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - name: string + * + * + * Return Type: + * - Non-streaming: FooAny + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: FooAny + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = usePredictAge(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to FooAny + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: FooAny | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = usePredictAge({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * name: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * name: firstValue as string, + * }), + * mutate({ + * name: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function usePredictAge( + props: StreamingProps +): StreamingHookResult; + +export function usePredictAge( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function usePredictAge( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.PredictAgeStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.PredictAgeAction, + props + ); +} + +/** + * A specialized hook for the PredictAgeBare BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - inp: string + * + * + * Return Type: + * - Non-streaming: Checked + * - Streaming Partial: RecursivePartialNull> + * - Streaming Final: Checked + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = usePredictAgeBare(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to Checked + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: Checked | null + * partialData, // Type: RecursivePartialNull> | null + * isPending, + * error, + * mutate + * } = usePredictAgeBare({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * inp: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * inp: firstValue as string, + * }), + * mutate({ + * inp: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function usePredictAgeBare( + props: StreamingProps +): StreamingHookResult; + +export function usePredictAgeBare( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function usePredictAgeBare( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.PredictAgeBareStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.PredictAgeBareAction, + props + ); +} + +/** + * A specialized hook for the PrimitiveAlias BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - p: number | string | boolean | number + * + * + * Return Type: + * - Non-streaming: number | string | boolean | number + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: number | string | boolean | number + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = usePrimitiveAlias(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to number | string | boolean | number + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: number | string | boolean | number | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = usePrimitiveAlias({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * p: someValue as number | string | boolean | number, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * p: firstValue as number | string | boolean | number, + * }), + * mutate({ + * p: secondValue as number | string | boolean | number, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function usePrimitiveAlias( + props: StreamingProps +): StreamingHookResult; + +export function usePrimitiveAlias( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function usePrimitiveAlias( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.PrimitiveAliasStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.PrimitiveAliasAction, + props + ); +} + +/** + * A specialized hook for the PromptTestClaude BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = usePromptTestClaude(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = usePromptTestClaude({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function usePromptTestClaude( + props: StreamingProps +): StreamingHookResult; + +export function usePromptTestClaude( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function usePromptTestClaude( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.PromptTestClaudeStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.PromptTestClaudeAction, + props + ); +} + +/** + * A specialized hook for the PromptTestClaudeChat BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = usePromptTestClaudeChat(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = usePromptTestClaudeChat({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function usePromptTestClaudeChat( + props: StreamingProps +): StreamingHookResult; + +export function usePromptTestClaudeChat( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function usePromptTestClaudeChat( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.PromptTestClaudeChatStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.PromptTestClaudeChatAction, + props + ); +} + +/** + * A specialized hook for the PromptTestClaudeChatNoSystem BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = usePromptTestClaudeChatNoSystem(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = usePromptTestClaudeChatNoSystem({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function usePromptTestClaudeChatNoSystem( + props: StreamingProps +): StreamingHookResult; + +export function usePromptTestClaudeChatNoSystem( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function usePromptTestClaudeChatNoSystem( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.PromptTestClaudeChatNoSystemStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.PromptTestClaudeChatNoSystemAction, + props + ); +} + +/** + * A specialized hook for the PromptTestOpenAI BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = usePromptTestOpenAI(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = usePromptTestOpenAI({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function usePromptTestOpenAI( + props: StreamingProps +): StreamingHookResult; + +export function usePromptTestOpenAI( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function usePromptTestOpenAI( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.PromptTestOpenAIStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.PromptTestOpenAIAction, + props + ); +} + +/** + * A specialized hook for the PromptTestOpenAIChat BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = usePromptTestOpenAIChat(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = usePromptTestOpenAIChat({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function usePromptTestOpenAIChat( + props: StreamingProps +): StreamingHookResult; + +export function usePromptTestOpenAIChat( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function usePromptTestOpenAIChat( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.PromptTestOpenAIChatStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.PromptTestOpenAIChatAction, + props + ); +} + +/** + * A specialized hook for the PromptTestOpenAIChatNoSystem BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = usePromptTestOpenAIChatNoSystem(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = usePromptTestOpenAIChatNoSystem({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function usePromptTestOpenAIChatNoSystem( + props: StreamingProps +): StreamingHookResult; + +export function usePromptTestOpenAIChatNoSystem( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function usePromptTestOpenAIChatNoSystem( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.PromptTestOpenAIChatNoSystemStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.PromptTestOpenAIChatNoSystemAction, + props + ); +} + +/** + * A specialized hook for the PromptTestStreaming BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = usePromptTestStreaming(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = usePromptTestStreaming({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function usePromptTestStreaming( + props: StreamingProps +): StreamingHookResult; + +export function usePromptTestStreaming( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function usePromptTestStreaming( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.PromptTestStreamingStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.PromptTestStreamingAction, + props + ); +} + +/** + * A specialized hook for the RecursiveAliasCycle BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: RecAliasOne + * + * + * Return Type: + * - Non-streaming: RecAliasOne + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: RecAliasOne + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useRecursiveAliasCycle(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to RecAliasOne + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: RecAliasOne | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useRecursiveAliasCycle({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as RecAliasOne, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as RecAliasOne, + * }), + * mutate({ + * input: secondValue as RecAliasOne, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useRecursiveAliasCycle( + props: StreamingProps +): StreamingHookResult; + +export function useRecursiveAliasCycle( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useRecursiveAliasCycle( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.RecursiveAliasCycleStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.RecursiveAliasCycleAction, + props + ); +} + +/** + * A specialized hook for the RecursiveClassWithAliasIndirection BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - cls: NodeWithAliasIndirection + * + * + * Return Type: + * - Non-streaming: NodeWithAliasIndirection + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: NodeWithAliasIndirection + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useRecursiveClassWithAliasIndirection(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to NodeWithAliasIndirection + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: NodeWithAliasIndirection | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useRecursiveClassWithAliasIndirection({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * cls: someValue as NodeWithAliasIndirection, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * cls: firstValue as NodeWithAliasIndirection, + * }), + * mutate({ + * cls: secondValue as NodeWithAliasIndirection, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useRecursiveClassWithAliasIndirection( + props: StreamingProps +): StreamingHookResult; + +export function useRecursiveClassWithAliasIndirection( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useRecursiveClassWithAliasIndirection( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.RecursiveClassWithAliasIndirectionStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.RecursiveClassWithAliasIndirectionAction, + props + ); +} + +/** + * A specialized hook for the ReturnAliasWithMergedAttributes BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - money: Checked + * + * + * Return Type: + * - Non-streaming: Checked + * - Streaming Partial: RecursivePartialNull> + * - Streaming Final: Checked + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useReturnAliasWithMergedAttributes(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to Checked + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: Checked | null + * partialData, // Type: RecursivePartialNull> | null + * isPending, + * error, + * mutate + * } = useReturnAliasWithMergedAttributes({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * money: someValue as Checked, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * money: firstValue as Checked, + * }), + * mutate({ + * money: secondValue as Checked, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useReturnAliasWithMergedAttributes( + props: StreamingProps +): StreamingHookResult; + +export function useReturnAliasWithMergedAttributes( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useReturnAliasWithMergedAttributes( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.ReturnAliasWithMergedAttributesStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.ReturnAliasWithMergedAttributesAction, + props + ); +} + +/** + * A specialized hook for the ReturnFailingAssert BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - inp: number + * + * + * Return Type: + * - Non-streaming: number + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: number + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useReturnFailingAssert(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to number + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: number | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useReturnFailingAssert({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * inp: someValue as number, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * inp: firstValue as number, + * }), + * mutate({ + * inp: secondValue as number, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useReturnFailingAssert( + props: StreamingProps +): StreamingHookResult; + +export function useReturnFailingAssert( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useReturnFailingAssert( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.ReturnFailingAssertStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.ReturnFailingAssertAction, + props + ); +} + +/** + * A specialized hook for the ReturnMalformedConstraints BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - a: number + * + * + * Return Type: + * - Non-streaming: MalformedConstraints + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: MalformedConstraints + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useReturnMalformedConstraints(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to MalformedConstraints + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: MalformedConstraints | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useReturnMalformedConstraints({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * a: someValue as number, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * a: firstValue as number, + * }), + * mutate({ + * a: secondValue as number, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useReturnMalformedConstraints( + props: StreamingProps +): StreamingHookResult; + +export function useReturnMalformedConstraints( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useReturnMalformedConstraints( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.ReturnMalformedConstraintsStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.ReturnMalformedConstraintsAction, + props + ); +} + +/** + * A specialized hook for the SchemaDescriptions BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: Schema + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: Schema + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useSchemaDescriptions(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to Schema + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: Schema | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useSchemaDescriptions({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useSchemaDescriptions( + props: StreamingProps +): StreamingHookResult; + +export function useSchemaDescriptions( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useSchemaDescriptions( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.SchemaDescriptionsStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.SchemaDescriptionsAction, + props + ); +} + +/** + * A specialized hook for the SimpleRecursiveListAlias BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: RecursiveListAlias + * + * + * Return Type: + * - Non-streaming: RecursiveListAlias + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: RecursiveListAlias + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useSimpleRecursiveListAlias(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to RecursiveListAlias + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: RecursiveListAlias | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useSimpleRecursiveListAlias({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as RecursiveListAlias, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as RecursiveListAlias, + * }), + * mutate({ + * input: secondValue as RecursiveListAlias, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useSimpleRecursiveListAlias( + props: StreamingProps +): StreamingHookResult; + +export function useSimpleRecursiveListAlias( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useSimpleRecursiveListAlias( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.SimpleRecursiveListAliasStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.SimpleRecursiveListAliasAction, + props + ); +} + +/** + * A specialized hook for the SimpleRecursiveMapAlias BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: RecursiveMapAlias + * + * + * Return Type: + * - Non-streaming: RecursiveMapAlias + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: RecursiveMapAlias + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useSimpleRecursiveMapAlias(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to RecursiveMapAlias + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: RecursiveMapAlias | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useSimpleRecursiveMapAlias({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as RecursiveMapAlias, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as RecursiveMapAlias, + * }), + * mutate({ + * input: secondValue as RecursiveMapAlias, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useSimpleRecursiveMapAlias( + props: StreamingProps +): StreamingHookResult; + +export function useSimpleRecursiveMapAlias( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useSimpleRecursiveMapAlias( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.SimpleRecursiveMapAliasStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.SimpleRecursiveMapAliasAction, + props + ); +} + +/** + * A specialized hook for the StreamBigNumbers BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - digits: number + * + * + * Return Type: + * - Non-streaming: BigNumbers + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: BigNumbers + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useStreamBigNumbers(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to BigNumbers + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: BigNumbers | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useStreamBigNumbers({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * digits: someValue as number, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * digits: firstValue as number, + * }), + * mutate({ + * digits: secondValue as number, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useStreamBigNumbers( + props: StreamingProps +): StreamingHookResult; + +export function useStreamBigNumbers( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useStreamBigNumbers( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.StreamBigNumbersStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.StreamBigNumbersAction, + props + ); +} + +/** + * A specialized hook for the StreamFailingAssertion BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - theme: string + * + * - length: number + * + * + * Return Type: + * - Non-streaming: TwoStoriesOneTitle + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: TwoStoriesOneTitle + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useStreamFailingAssertion(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to TwoStoriesOneTitle + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: TwoStoriesOneTitle | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useStreamFailingAssertion({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * theme: someValue as string, // Replace someValue with your data + * length: someValue as number, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * theme: firstValue as string, + * length: firstValue as number, + * }), + * mutate({ + * theme: secondValue as string, + * length: secondValue as number, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useStreamFailingAssertion( + props: StreamingProps +): StreamingHookResult; + +export function useStreamFailingAssertion( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useStreamFailingAssertion( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.StreamFailingAssertionStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.StreamFailingAssertionAction, + props + ); +} + +/** + * A specialized hook for the StreamOneBigNumber BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - digits: number + * + * + * Return Type: + * - Non-streaming: number + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: number + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useStreamOneBigNumber(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to number + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: number | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useStreamOneBigNumber({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * digits: someValue as number, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * digits: firstValue as number, + * }), + * mutate({ + * digits: secondValue as number, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useStreamOneBigNumber( + props: StreamingProps +): StreamingHookResult; + +export function useStreamOneBigNumber( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useStreamOneBigNumber( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.StreamOneBigNumberStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.StreamOneBigNumberAction, + props + ); +} + +/** + * A specialized hook for the StreamUnionIntegers BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - digits: number + * + * + * Return Type: + * - Non-streaming: (number | string)[] + * - Streaming Partial: RecursivePartialNull<(number | string)[]> + * - Streaming Final: (number | string)[] + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useStreamUnionIntegers(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to (number | string)[] + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: (number | string)[] | null + * partialData, // Type: RecursivePartialNull<(number | string)[]> | null + * isPending, + * error, + * mutate + * } = useStreamUnionIntegers({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * digits: someValue as number, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * digits: firstValue as number, + * }), + * mutate({ + * digits: secondValue as number, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useStreamUnionIntegers( + props: StreamingProps +): StreamingHookResult; + +export function useStreamUnionIntegers( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useStreamUnionIntegers( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.StreamUnionIntegersStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.StreamUnionIntegersAction, + props + ); +} + +/** + * A specialized hook for the StreamingCompoundNumbers BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - digits: number + * + * - yapping: boolean + * + * + * Return Type: + * - Non-streaming: CompoundBigNumbers + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: CompoundBigNumbers + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useStreamingCompoundNumbers(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to CompoundBigNumbers + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: CompoundBigNumbers | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useStreamingCompoundNumbers({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * digits: someValue as number, // Replace someValue with your data + * yapping: someValue as boolean, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * digits: firstValue as number, + * yapping: firstValue as boolean, + * }), + * mutate({ + * digits: secondValue as number, + * yapping: secondValue as boolean, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useStreamingCompoundNumbers( + props: StreamingProps +): StreamingHookResult; + +export function useStreamingCompoundNumbers( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useStreamingCompoundNumbers( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.StreamingCompoundNumbersStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.StreamingCompoundNumbersAction, + props + ); +} + +/** + * A specialized hook for the TestAnthropic BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestAnthropic(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestAnthropic({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestAnthropic( + props: StreamingProps +): StreamingHookResult; + +export function useTestAnthropic( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestAnthropic( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestAnthropicStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestAnthropicAction, + props + ); +} + +/** + * A specialized hook for the TestAnthropicShorthand BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestAnthropicShorthand(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestAnthropicShorthand({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestAnthropicShorthand( + props: StreamingProps +): StreamingHookResult; + +export function useTestAnthropicShorthand( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestAnthropicShorthand( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestAnthropicShorthandStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestAnthropicShorthandAction, + props + ); +} + +/** + * A specialized hook for the TestAws BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestAws(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestAws({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestAws( + props: StreamingProps +): StreamingHookResult; + +export function useTestAws( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestAws( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestAwsStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestAwsAction, + props + ); +} + +/** + * A specialized hook for the TestAwsInvalidAccessKey BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestAwsInvalidAccessKey(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestAwsInvalidAccessKey({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestAwsInvalidAccessKey( + props: StreamingProps +): StreamingHookResult; + +export function useTestAwsInvalidAccessKey( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestAwsInvalidAccessKey( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestAwsInvalidAccessKeyStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestAwsInvalidAccessKeyAction, + props + ); +} + +/** + * A specialized hook for the TestAwsInvalidProfile BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestAwsInvalidProfile(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestAwsInvalidProfile({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestAwsInvalidProfile( + props: StreamingProps +): StreamingHookResult; + +export function useTestAwsInvalidProfile( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestAwsInvalidProfile( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestAwsInvalidProfileStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestAwsInvalidProfileAction, + props + ); +} + +/** + * A specialized hook for the TestAwsInvalidRegion BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestAwsInvalidRegion(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestAwsInvalidRegion({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestAwsInvalidRegion( + props: StreamingProps +): StreamingHookResult; + +export function useTestAwsInvalidRegion( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestAwsInvalidRegion( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestAwsInvalidRegionStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestAwsInvalidRegionAction, + props + ); +} + +/** + * A specialized hook for the TestAwsInvalidSessionToken BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestAwsInvalidSessionToken(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestAwsInvalidSessionToken({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestAwsInvalidSessionToken( + props: StreamingProps +): StreamingHookResult; + +export function useTestAwsInvalidSessionToken( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestAwsInvalidSessionToken( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestAwsInvalidSessionTokenStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestAwsInvalidSessionTokenAction, + props + ); +} + +/** + * A specialized hook for the TestAzure BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestAzure(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestAzure({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestAzure( + props: StreamingProps +): StreamingHookResult; + +export function useTestAzure( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestAzure( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestAzureStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestAzureAction, + props + ); +} + +/** + * A specialized hook for the TestAzureFailure BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestAzureFailure(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestAzureFailure({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestAzureFailure( + props: StreamingProps +): StreamingHookResult; + +export function useTestAzureFailure( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestAzureFailure( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestAzureFailureStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestAzureFailureAction, + props + ); +} + +/** + * A specialized hook for the TestCaching BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * - not_cached: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestCaching(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestCaching({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * not_cached: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * not_cached: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * not_cached: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestCaching( + props: StreamingProps +): StreamingHookResult; + +export function useTestCaching( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestCaching( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestCachingStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestCachingAction, + props + ); +} + +/** + * A specialized hook for the TestFallbackClient BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestFallbackClient(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestFallbackClient({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * }), + * mutate({ + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestFallbackClient( + props: StreamingProps +): StreamingHookResult; + +export function useTestFallbackClient( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestFallbackClient( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestFallbackClientStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestFallbackClientAction, + props + ); +} + +/** + * A specialized hook for the TestFallbackToShorthand BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestFallbackToShorthand(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestFallbackToShorthand({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestFallbackToShorthand( + props: StreamingProps +): StreamingHookResult; + +export function useTestFallbackToShorthand( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestFallbackToShorthand( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestFallbackToShorthandStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestFallbackToShorthandAction, + props + ); +} + +/** + * A specialized hook for the TestFnNamedArgsSingleBool BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - myBool: boolean + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestFnNamedArgsSingleBool(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestFnNamedArgsSingleBool({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * myBool: someValue as boolean, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * myBool: firstValue as boolean, + * }), + * mutate({ + * myBool: secondValue as boolean, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestFnNamedArgsSingleBool( + props: StreamingProps +): StreamingHookResult; + +export function useTestFnNamedArgsSingleBool( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestFnNamedArgsSingleBool( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestFnNamedArgsSingleBoolStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestFnNamedArgsSingleBoolAction, + props + ); +} + +/** + * A specialized hook for the TestFnNamedArgsSingleClass BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - myArg: NamedArgsSingleClass + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestFnNamedArgsSingleClass(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestFnNamedArgsSingleClass({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * myArg: someValue as NamedArgsSingleClass, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * myArg: firstValue as NamedArgsSingleClass, + * }), + * mutate({ + * myArg: secondValue as NamedArgsSingleClass, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestFnNamedArgsSingleClass( + props: StreamingProps +): StreamingHookResult; + +export function useTestFnNamedArgsSingleClass( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestFnNamedArgsSingleClass( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestFnNamedArgsSingleClassStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestFnNamedArgsSingleClassAction, + props + ); +} + +/** + * A specialized hook for the TestFnNamedArgsSingleEnumList BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - myArg: NamedArgsSingleEnumList[] + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestFnNamedArgsSingleEnumList(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestFnNamedArgsSingleEnumList({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * myArg: someValue as NamedArgsSingleEnumList[], // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * myArg: firstValue as NamedArgsSingleEnumList[], + * }), + * mutate({ + * myArg: secondValue as NamedArgsSingleEnumList[], + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestFnNamedArgsSingleEnumList( + props: StreamingProps +): StreamingHookResult; + +export function useTestFnNamedArgsSingleEnumList( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestFnNamedArgsSingleEnumList( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestFnNamedArgsSingleEnumListStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestFnNamedArgsSingleEnumListAction, + props + ); +} + +/** + * A specialized hook for the TestFnNamedArgsSingleFloat BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - myFloat: number + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestFnNamedArgsSingleFloat(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestFnNamedArgsSingleFloat({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * myFloat: someValue as number, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * myFloat: firstValue as number, + * }), + * mutate({ + * myFloat: secondValue as number, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestFnNamedArgsSingleFloat( + props: StreamingProps +): StreamingHookResult; + +export function useTestFnNamedArgsSingleFloat( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestFnNamedArgsSingleFloat( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestFnNamedArgsSingleFloatStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestFnNamedArgsSingleFloatAction, + props + ); +} + +/** + * A specialized hook for the TestFnNamedArgsSingleInt BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - myInt: number + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestFnNamedArgsSingleInt(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestFnNamedArgsSingleInt({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * myInt: someValue as number, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * myInt: firstValue as number, + * }), + * mutate({ + * myInt: secondValue as number, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestFnNamedArgsSingleInt( + props: StreamingProps +): StreamingHookResult; + +export function useTestFnNamedArgsSingleInt( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestFnNamedArgsSingleInt( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestFnNamedArgsSingleIntStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestFnNamedArgsSingleIntAction, + props + ); +} + +/** + * A specialized hook for the TestFnNamedArgsSingleMapStringToClass BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - myMap: Record + * + * + * Return Type: + * - Non-streaming: Record + * - Streaming Partial: RecursivePartialNull> + * - Streaming Final: Record + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestFnNamedArgsSingleMapStringToClass(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to Record + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: Record | null + * partialData, // Type: RecursivePartialNull> | null + * isPending, + * error, + * mutate + * } = useTestFnNamedArgsSingleMapStringToClass({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * myMap: someValue as Record, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * myMap: firstValue as Record, + * }), + * mutate({ + * myMap: secondValue as Record, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestFnNamedArgsSingleMapStringToClass( + props: StreamingProps +): StreamingHookResult; + +export function useTestFnNamedArgsSingleMapStringToClass( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestFnNamedArgsSingleMapStringToClass( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestFnNamedArgsSingleMapStringToClassStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestFnNamedArgsSingleMapStringToClassAction, + props + ); +} + +/** + * A specialized hook for the TestFnNamedArgsSingleMapStringToMap BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - myMap: Record> + * + * + * Return Type: + * - Non-streaming: Record> + * - Streaming Partial: RecursivePartialNull>> + * - Streaming Final: Record> + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestFnNamedArgsSingleMapStringToMap(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to Record> + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: Record> | null + * partialData, // Type: RecursivePartialNull>> | null + * isPending, + * error, + * mutate + * } = useTestFnNamedArgsSingleMapStringToMap({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * myMap: someValue as Record>, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * myMap: firstValue as Record>, + * }), + * mutate({ + * myMap: secondValue as Record>, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestFnNamedArgsSingleMapStringToMap( + props: StreamingProps +): StreamingHookResult; + +export function useTestFnNamedArgsSingleMapStringToMap( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestFnNamedArgsSingleMapStringToMap( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestFnNamedArgsSingleMapStringToMapStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestFnNamedArgsSingleMapStringToMapAction, + props + ); +} + +/** + * A specialized hook for the TestFnNamedArgsSingleMapStringToString BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - myMap: Record + * + * + * Return Type: + * - Non-streaming: Record + * - Streaming Partial: RecursivePartialNull> + * - Streaming Final: Record + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestFnNamedArgsSingleMapStringToString(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to Record + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: Record | null + * partialData, // Type: RecursivePartialNull> | null + * isPending, + * error, + * mutate + * } = useTestFnNamedArgsSingleMapStringToString({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * myMap: someValue as Record, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * myMap: firstValue as Record, + * }), + * mutate({ + * myMap: secondValue as Record, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestFnNamedArgsSingleMapStringToString( + props: StreamingProps +): StreamingHookResult; + +export function useTestFnNamedArgsSingleMapStringToString( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestFnNamedArgsSingleMapStringToString( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestFnNamedArgsSingleMapStringToStringStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestFnNamedArgsSingleMapStringToStringAction, + props + ); +} + +/** + * A specialized hook for the TestFnNamedArgsSingleString BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - myString: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestFnNamedArgsSingleString(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestFnNamedArgsSingleString({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * myString: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * myString: firstValue as string, + * }), + * mutate({ + * myString: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestFnNamedArgsSingleString( + props: StreamingProps +): StreamingHookResult; + +export function useTestFnNamedArgsSingleString( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestFnNamedArgsSingleString( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestFnNamedArgsSingleStringStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestFnNamedArgsSingleStringAction, + props + ); +} + +/** + * A specialized hook for the TestFnNamedArgsSingleStringArray BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - myStringArray: string[] + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestFnNamedArgsSingleStringArray(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestFnNamedArgsSingleStringArray({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * myStringArray: someValue as string[], // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * myStringArray: firstValue as string[], + * }), + * mutate({ + * myStringArray: secondValue as string[], + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestFnNamedArgsSingleStringArray( + props: StreamingProps +): StreamingHookResult; + +export function useTestFnNamedArgsSingleStringArray( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestFnNamedArgsSingleStringArray( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestFnNamedArgsSingleStringArrayStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestFnNamedArgsSingleStringArrayAction, + props + ); +} + +/** + * A specialized hook for the TestFnNamedArgsSingleStringList BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - myArg: string[] + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestFnNamedArgsSingleStringList(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestFnNamedArgsSingleStringList({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * myArg: someValue as string[], // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * myArg: firstValue as string[], + * }), + * mutate({ + * myArg: secondValue as string[], + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestFnNamedArgsSingleStringList( + props: StreamingProps +): StreamingHookResult; + +export function useTestFnNamedArgsSingleStringList( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestFnNamedArgsSingleStringList( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestFnNamedArgsSingleStringListStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestFnNamedArgsSingleStringListAction, + props + ); +} + +/** + * A specialized hook for the TestGemini BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestGemini(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestGemini({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestGemini( + props: StreamingProps +): StreamingHookResult; + +export function useTestGemini( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestGemini( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestGeminiStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestGeminiAction, + props + ); +} + +/** + * A specialized hook for the TestGeminiOpenAiGeneric BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestGeminiOpenAiGeneric(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestGeminiOpenAiGeneric({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * }), + * mutate({ + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestGeminiOpenAiGeneric( + props: StreamingProps +): StreamingHookResult; + +export function useTestGeminiOpenAiGeneric( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestGeminiOpenAiGeneric( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestGeminiOpenAiGenericStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestGeminiOpenAiGenericAction, + props + ); +} + +/** + * A specialized hook for the TestGeminiSystem BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestGeminiSystem(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestGeminiSystem({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestGeminiSystem( + props: StreamingProps +): StreamingHookResult; + +export function useTestGeminiSystem( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestGeminiSystem( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestGeminiSystemStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestGeminiSystemAction, + props + ); +} + +/** + * A specialized hook for the TestGeminiSystemAsChat BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestGeminiSystemAsChat(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestGeminiSystemAsChat({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestGeminiSystemAsChat( + props: StreamingProps +): StreamingHookResult; + +export function useTestGeminiSystemAsChat( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestGeminiSystemAsChat( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestGeminiSystemAsChatStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestGeminiSystemAsChatAction, + props + ); +} + +/** + * A specialized hook for the TestImageInput BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - img: Image + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestImageInput(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestImageInput({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * img: someValue as Image, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * img: firstValue as Image, + * }), + * mutate({ + * img: secondValue as Image, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestImageInput( + props: StreamingProps +): StreamingHookResult; + +export function useTestImageInput( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestImageInput( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestImageInputStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestImageInputAction, + props + ); +} + +/** + * A specialized hook for the TestImageInputAnthropic BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - img: Image + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestImageInputAnthropic(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestImageInputAnthropic({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * img: someValue as Image, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * img: firstValue as Image, + * }), + * mutate({ + * img: secondValue as Image, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestImageInputAnthropic( + props: StreamingProps +): StreamingHookResult; + +export function useTestImageInputAnthropic( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestImageInputAnthropic( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestImageInputAnthropicStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestImageInputAnthropicAction, + props + ); +} + +/** + * A specialized hook for the TestImageListInput BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - imgs: Image[] + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestImageListInput(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestImageListInput({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * imgs: someValue as Image[], // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * imgs: firstValue as Image[], + * }), + * mutate({ + * imgs: secondValue as Image[], + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestImageListInput( + props: StreamingProps +): StreamingHookResult; + +export function useTestImageListInput( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestImageListInput( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestImageListInputStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestImageListInputAction, + props + ); +} + +/** + * A specialized hook for the TestMemory BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: TestMemoryOutput + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: TestMemoryOutput + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestMemory(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to TestMemoryOutput + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: TestMemoryOutput | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestMemory({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestMemory( + props: StreamingProps +): StreamingHookResult; + +export function useTestMemory( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestMemory( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestMemoryStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestMemoryAction, + props + ); +} + +/** + * A specialized hook for the TestMulticlassNamedArgs BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - myArg: NamedArgsSingleClass + * + * - myArg2: NamedArgsSingleClass + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestMulticlassNamedArgs(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestMulticlassNamedArgs({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * myArg: someValue as NamedArgsSingleClass, // Replace someValue with your data + * myArg2: someValue as NamedArgsSingleClass, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * myArg: firstValue as NamedArgsSingleClass, + * myArg2: firstValue as NamedArgsSingleClass, + * }), + * mutate({ + * myArg: secondValue as NamedArgsSingleClass, + * myArg2: secondValue as NamedArgsSingleClass, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestMulticlassNamedArgs( + props: StreamingProps +): StreamingHookResult; + +export function useTestMulticlassNamedArgs( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestMulticlassNamedArgs( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestMulticlassNamedArgsStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestMulticlassNamedArgsAction, + props + ); +} + +/** + * A specialized hook for the TestNamedArgsLiteralBool BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - myBool: true + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestNamedArgsLiteralBool(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestNamedArgsLiteralBool({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * myBool: someValue as true, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * myBool: firstValue as true, + * }), + * mutate({ + * myBool: secondValue as true, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestNamedArgsLiteralBool( + props: StreamingProps +): StreamingHookResult; + +export function useTestNamedArgsLiteralBool( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestNamedArgsLiteralBool( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestNamedArgsLiteralBoolStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestNamedArgsLiteralBoolAction, + props + ); +} + +/** + * A specialized hook for the TestNamedArgsLiteralInt BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - myInt: 1 + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestNamedArgsLiteralInt(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestNamedArgsLiteralInt({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * myInt: someValue as 1, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * myInt: firstValue as 1, + * }), + * mutate({ + * myInt: secondValue as 1, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestNamedArgsLiteralInt( + props: StreamingProps +): StreamingHookResult; + +export function useTestNamedArgsLiteralInt( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestNamedArgsLiteralInt( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestNamedArgsLiteralIntStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestNamedArgsLiteralIntAction, + props + ); +} + +/** + * A specialized hook for the TestNamedArgsLiteralString BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - myString: "My String" + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestNamedArgsLiteralString(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestNamedArgsLiteralString({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * myString: someValue as "My String", // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * myString: firstValue as "My String", + * }), + * mutate({ + * myString: secondValue as "My String", + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestNamedArgsLiteralString( + props: StreamingProps +): StreamingHookResult; + +export function useTestNamedArgsLiteralString( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestNamedArgsLiteralString( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestNamedArgsLiteralStringStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestNamedArgsLiteralStringAction, + props + ); +} + +/** + * A specialized hook for the TestOllama BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestOllama(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestOllama({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestOllama( + props: StreamingProps +): StreamingHookResult; + +export function useTestOllama( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestOllama( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestOllamaStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestOllamaAction, + props + ); +} + +/** + * A specialized hook for the TestOpenAILegacyProvider BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestOpenAILegacyProvider(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestOpenAILegacyProvider({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestOpenAILegacyProvider( + props: StreamingProps +): StreamingHookResult; + +export function useTestOpenAILegacyProvider( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestOpenAILegacyProvider( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestOpenAILegacyProviderStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestOpenAILegacyProviderAction, + props + ); +} + +/** + * A specialized hook for the TestOpenAIShorthand BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestOpenAIShorthand(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestOpenAIShorthand({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestOpenAIShorthand( + props: StreamingProps +): StreamingHookResult; + +export function useTestOpenAIShorthand( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestOpenAIShorthand( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestOpenAIShorthandStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestOpenAIShorthandAction, + props + ); +} + +/** + * A specialized hook for the TestRetryConstant BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestRetryConstant(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestRetryConstant({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * }), + * mutate({ + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestRetryConstant( + props: StreamingProps +): StreamingHookResult; + +export function useTestRetryConstant( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestRetryConstant( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestRetryConstantStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestRetryConstantAction, + props + ); +} + +/** + * A specialized hook for the TestRetryExponential BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestRetryExponential(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestRetryExponential({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * }), + * mutate({ + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestRetryExponential( + props: StreamingProps +): StreamingHookResult; + +export function useTestRetryExponential( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestRetryExponential( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestRetryExponentialStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestRetryExponentialAction, + props + ); +} + +/** + * A specialized hook for the TestSingleFallbackClient BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestSingleFallbackClient(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestSingleFallbackClient({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * }), + * mutate({ + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestSingleFallbackClient( + props: StreamingProps +): StreamingHookResult; + +export function useTestSingleFallbackClient( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestSingleFallbackClient( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestSingleFallbackClientStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestSingleFallbackClientAction, + props + ); +} + +/** + * A specialized hook for the TestUniverseQuestion BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - question: UniverseQuestionInput + * + * + * Return Type: + * - Non-streaming: UniverseQuestion + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: UniverseQuestion + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestUniverseQuestion(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to UniverseQuestion + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: UniverseQuestion | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestUniverseQuestion({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * question: someValue as UniverseQuestionInput, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * question: firstValue as UniverseQuestionInput, + * }), + * mutate({ + * question: secondValue as UniverseQuestionInput, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestUniverseQuestion( + props: StreamingProps +): StreamingHookResult; + +export function useTestUniverseQuestion( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestUniverseQuestion( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestUniverseQuestionStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestUniverseQuestionAction, + props + ); +} + +/** + * A specialized hook for the TestVertex BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestVertex(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestVertex({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string, + * }), + * mutate({ + * input: secondValue as string, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestVertex( + props: StreamingProps +): StreamingHookResult; + +export function useTestVertex( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestVertex( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestVertexStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestVertexAction, + props + ); +} + +/** + * A specialized hook for the TestVertexWithSystemInstructions BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * + * Return Type: + * - Non-streaming: string + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: string + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useTestVertexWithSystemInstructions(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to string + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: string | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useTestVertexWithSystemInstructions({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * }), + * mutate({ + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useTestVertexWithSystemInstructions( + props: StreamingProps +): StreamingHookResult; + +export function useTestVertexWithSystemInstructions( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useTestVertexWithSystemInstructions( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.TestVertexWithSystemInstructionsStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.TestVertexWithSystemInstructionsAction, + props + ); +} + +/** + * A specialized hook for the UnionTest_Function BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - input: string | boolean + * + * + * Return Type: + * - Non-streaming: UnionTest_ReturnType + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: UnionTest_ReturnType + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useUnionTest_Function(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to UnionTest_ReturnType + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: UnionTest_ReturnType | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useUnionTest_Function({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * input: someValue as string | boolean, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * input: firstValue as string | boolean, + * }), + * mutate({ + * input: secondValue as string | boolean, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useUnionTest_Function( + props: StreamingProps +): StreamingHookResult; + +export function useUnionTest_Function( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useUnionTest_Function( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.UnionTest_FunctionStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.UnionTest_FunctionAction, + props + ); +} + +/** + * A specialized hook for the UseBlockConstraint BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - inp: BlockConstraintForParam + * + * + * Return Type: + * - Non-streaming: number + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: number + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useUseBlockConstraint(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to number + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: number | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useUseBlockConstraint({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * inp: someValue as BlockConstraintForParam, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * inp: firstValue as BlockConstraintForParam, + * }), + * mutate({ + * inp: secondValue as BlockConstraintForParam, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useUseBlockConstraint( + props: StreamingProps +): StreamingHookResult; + +export function useUseBlockConstraint( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useUseBlockConstraint( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.UseBlockConstraintStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.UseBlockConstraintAction, + props + ); +} + +/** + * A specialized hook for the UseMalformedConstraints BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - a: MalformedConstraints2 + * + * + * Return Type: + * - Non-streaming: number + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: number + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useUseMalformedConstraints(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to number + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: number | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useUseMalformedConstraints({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * a: someValue as MalformedConstraints2, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * a: firstValue as MalformedConstraints2, + * }), + * mutate({ + * a: secondValue as MalformedConstraints2, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useUseMalformedConstraints( + props: StreamingProps +): StreamingHookResult; + +export function useUseMalformedConstraints( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useUseMalformedConstraints( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.UseMalformedConstraintsStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.UseMalformedConstraintsAction, + props + ); +} + +/** + * A specialized hook for the UseNestedBlockConstraint BAML function that handles both streaming and non-streaming responses. + * + * Input Types: + * + * - inp: NestedBlockConstraintForParam + * + * + * Return Type: + * - Non-streaming: number + * - Streaming Partial: RecursivePartialNull + * - Streaming Final: number + * + * Common Usage Patterns: + * 1. Non-streaming (Default) + * - Best for: Quick responses, simple UI updates + * - Avoid when: Response takes >5s or UI needs progressive updates + * + * 2. Streaming + * - Best for: Long-running operations, real-time UI feedback + * - Required when: Using features like chat interfaces or progress indicators + * + * Edge Cases & Gotchas: + * 1. Error Handling + * - Network failures won't trigger onPartial/onFinal + * - Always implement onError for graceful degradation + * - Check error.message for specific failure reasons + * + * 2. Streaming Mode + * - partialData may be null even after updates (handle this case!) + * - Stream can end without final data (connection loss) + * - Partial results may be incomplete/invalid + * + * 3. State Management + * - data persists after completion (clear if needed) + * - isPending stays true until final/error + * - Multiple rapid calls can race (latest wins) + * + * @example + * ```tsx + * // 1. Basic Usage (Non-streaming) + * const { data, error, isPending, mutate } = useUseNestedBlockConstraint(); + * + * // Handle the response + * useEffect(() => { + * if (data) { + * // Type-safe access to number + * console.log('Success:', data); + * } + * }, [data]); + * + * // 2. Streaming with Progress + * const { + * data, // Type: number | null + * partialData, // Type: RecursivePartialNull | null + * isPending, + * error, + * mutate + * } = useUseNestedBlockConstraint({ + * stream: true, + * + * // Handle partial updates (may be incomplete!) + * onPartial: (partial) => { + * console.log('Partial:', partial); + * }, + * + * // Handle successful completion + * onFinal: (final) => { + * console.log('Final:', final); + * }, + * + * // Robust error handling + * onError: (error) => { + * console.error('Request failed:', error); + * } + * }); + * + * // 3. Making the Request + * const handleSubmit = async () => { + * try { + * const result = await mutate({ + * // Type-safe parameters: + * inp: someValue as NestedBlockConstraintForParam, // Replace someValue with your data + * }); + * + * if (result) { + * // Success case + * } + * } catch (e) { + * // Handle any synchronous errors + * } + * }; + * + * // 4. Race Condition Handling + * const handleMultipleCalls = async () => { + * // Only the latest call's results will be reflected in the UI + * const results = await Promise.all([ + * mutate({ + * inp: firstValue as NestedBlockConstraintForParam, + * }), + * mutate({ + * inp: secondValue as NestedBlockConstraintForParam, + * }) + * ]); + * // Check results[1] for the final state + * }; + * ``` + */ +export function useUseNestedBlockConstraint( + props: StreamingProps +): StreamingHookResult; + +export function useUseNestedBlockConstraint( + props?: NonStreamingProps +): NonStreamingHookResult; + +export function useUseNestedBlockConstraint( + props: HookProps = {}, +): StreamingHookResult | NonStreamingHookResult { + if (props.stream) { + return useBamlAction( + ServerActions.UseNestedBlockConstraintStreamingAction, + props + ); + } + + return useBamlAction( + ServerActions.UseNestedBlockConstraintAction, + props + ); +} diff --git a/integ-tests/react/baml_client/react/server.ts b/integ-tests/react/baml_client/react/server.ts new file mode 100644 index 000000000..8570301bf --- /dev/null +++ b/integ-tests/react/baml_client/react/server.ts @@ -0,0 +1,4240 @@ +/************************************************************************************************* + +Welcome to Baml! To use this generated code, please run one of the following: + +$ npm install @boundaryml/baml +$ yarn add @boundaryml/baml +$ pnpm add @boundaryml/baml + +*************************************************************************************************/ + +// This file was generated by BAML: do not edit it. Instead, edit the BAML +// files and re-generate this code. +// +/* eslint-disable */ +// tslint:disable +// @ts-nocheck +// biome-ignore format: autogenerated code +'use server' + +import { b } from '../index'; +import type { Check, Checked } from "../types" +import type { ServerAction } from "./types" +import type { Image, Audio } from "@boundaryml/baml" +import type {AnotherObject, BigNumbers, BinaryNode, Blah, BlockConstraint, BlockConstraintForParam, BookOrder, ClassForNullLiteral, ClassOptionalOutput, ClassOptionalOutput2, ClassToRecAlias, ClassWithBlockDone, ClassWithImage, ClassWithoutDone, ComplexMemoryObject, CompoundBigNumbers, ContactInfo, CustomTaskResult, DummyOutput, DynInputOutput, DynamicClassOne, DynamicClassTwo, DynamicOutput, Earthling, Education, Email, EmailAddress, Event, FakeImage, FlightConfirmation, FooAny, Forest, FormatterTest0, FormatterTest1, FormatterTest2, FormatterTest3, GroceryReceipt, InnerClass, InnerClass2, InputClass, InputClassNested, LinkedList, LinkedListAliasNode, LiteralClassHello, LiteralClassOne, LiteralClassTwo, MalformedConstraints, MalformedConstraints2, Martian, MemoryObject, MergeAttrs, NamedArgsSingleClass, Nested, Nested2, NestedBlockConstraint, NestedBlockConstraintForParam, Node, NodeWithAliasIndirection, OptionalListAndMap, OptionalTest_Prop1, OptionalTest_ReturnType, OrderInfo, OriginalA, OriginalB, Person, PhoneNumber, Quantity, RaysData, ReceiptInfo, ReceiptItem, Recipe, Resume, Schema, SearchParams, SemanticContainer, SmallThing, SomeClassNestedDynamic, StringToClassEntry, TestClassAlias, TestClassNested, TestClassWithEnum, TestMemoryOutput, TestOutputClass, Tree, TwoStoriesOneTitle, UnionTest_ReturnType, UniverseQuestion, UniverseQuestionInput, WithReasoning, AliasedEnum, Category, Category2, Category3, Color, DataType, DynEnumOne, DynEnumTwo, EnumInClass, EnumOutput, Hobby, MapKey, NamedArgsSingleEnum, NamedArgsSingleEnumList, OptionalTest_CategoryType, OrderStatus, Tag, TestEnum} from "../types" +/** + * Server action for the AaaSamOutputFormat BAML function. + * + * Input Types: + * + * - recipe: string + * + * + * Return Type: + * - Non-streaming: Recipe + * - Streaming: ReadableStream + */ +export const AaaSamOutputFormatAction = async ( + recipe: string, +): Promise => { + return b.AaaSamOutputFormat( + recipe, + ); +}; + +export const AaaSamOutputFormatStreamingAction = async ( + recipe: string, +): Promise> => { + const stream = b.stream.AaaSamOutputFormat( + recipe, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the AliasThatPointsToRecursiveType BAML function. + * + * Input Types: + * + * - list: LinkedListAliasNode + * + * + * Return Type: + * - Non-streaming: LinkedListAliasNode + * - Streaming: ReadableStream + */ +export const AliasThatPointsToRecursiveTypeAction = async ( + list: LinkedListAliasNode, +): Promise => { + return b.AliasThatPointsToRecursiveType( + list, + ); +}; + +export const AliasThatPointsToRecursiveTypeStreamingAction = async ( + list: LinkedListAliasNode, +): Promise> => { + const stream = b.stream.AliasThatPointsToRecursiveType( + list, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the AliasWithMultipleAttrs BAML function. + * + * Input Types: + * + * - money: Checked + * + * + * Return Type: + * - Non-streaming: Checked + * - Streaming: ReadableStream + */ +export const AliasWithMultipleAttrsAction = async ( + money: Checked, +): Promise> => { + return b.AliasWithMultipleAttrs( + money, + ); +}; + +export const AliasWithMultipleAttrsStreamingAction = async ( + money: Checked, +): Promise> => { + const stream = b.stream.AliasWithMultipleAttrs( + money, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the AliasedInputClass BAML function. + * + * Input Types: + * + * - input: InputClass + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const AliasedInputClassAction = async ( + input: InputClass, +): Promise => { + return b.AliasedInputClass( + input, + ); +}; + +export const AliasedInputClassStreamingAction = async ( + input: InputClass, +): Promise> => { + const stream = b.stream.AliasedInputClass( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the AliasedInputClass2 BAML function. + * + * Input Types: + * + * - input: InputClass + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const AliasedInputClass2Action = async ( + input: InputClass, +): Promise => { + return b.AliasedInputClass2( + input, + ); +}; + +export const AliasedInputClass2StreamingAction = async ( + input: InputClass, +): Promise> => { + const stream = b.stream.AliasedInputClass2( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the AliasedInputClassNested BAML function. + * + * Input Types: + * + * - input: InputClassNested + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const AliasedInputClassNestedAction = async ( + input: InputClassNested, +): Promise => { + return b.AliasedInputClassNested( + input, + ); +}; + +export const AliasedInputClassNestedStreamingAction = async ( + input: InputClassNested, +): Promise> => { + const stream = b.stream.AliasedInputClassNested( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the AliasedInputEnum BAML function. + * + * Input Types: + * + * - input: AliasedEnum + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const AliasedInputEnumAction = async ( + input: AliasedEnum, +): Promise => { + return b.AliasedInputEnum( + input, + ); +}; + +export const AliasedInputEnumStreamingAction = async ( + input: AliasedEnum, +): Promise> => { + const stream = b.stream.AliasedInputEnum( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the AliasedInputList BAML function. + * + * Input Types: + * + * - input: AliasedEnum[] + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const AliasedInputListAction = async ( + input: AliasedEnum[], +): Promise => { + return b.AliasedInputList( + input, + ); +}; + +export const AliasedInputListStreamingAction = async ( + input: AliasedEnum[], +): Promise> => { + const stream = b.stream.AliasedInputList( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the AllowedOptionals BAML function. + * + * Input Types: + * + * - optionals: OptionalListAndMap + * + * + * Return Type: + * - Non-streaming: OptionalListAndMap + * - Streaming: ReadableStream + */ +export const AllowedOptionalsAction = async ( + optionals: OptionalListAndMap, +): Promise => { + return b.AllowedOptionals( + optionals, + ); +}; + +export const AllowedOptionalsStreamingAction = async ( + optionals: OptionalListAndMap, +): Promise> => { + const stream = b.stream.AllowedOptionals( + optionals, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the AssertFn BAML function. + * + * Input Types: + * + * - a: number + * + * + * Return Type: + * - Non-streaming: number + * - Streaming: ReadableStream + */ +export const AssertFnAction = async ( + a: number, +): Promise => { + return b.AssertFn( + a, + ); +}; + +export const AssertFnStreamingAction = async ( + a: number, +): Promise> => { + const stream = b.stream.AssertFn( + a, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the AudioInput BAML function. + * + * Input Types: + * + * - aud: Audio + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const AudioInputAction = async ( + aud: Audio, +): Promise => { + return b.AudioInput( + aud, + ); +}; + +export const AudioInputStreamingAction = async ( + aud: Audio, +): Promise> => { + const stream = b.stream.AudioInput( + aud, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the BuildLinkedList BAML function. + * + * Input Types: + * + * - input: number[] + * + * + * Return Type: + * - Non-streaming: LinkedList + * - Streaming: ReadableStream + */ +export const BuildLinkedListAction = async ( + input: number[], +): Promise => { + return b.BuildLinkedList( + input, + ); +}; + +export const BuildLinkedListStreamingAction = async ( + input: number[], +): Promise> => { + const stream = b.stream.BuildLinkedList( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the BuildTree BAML function. + * + * Input Types: + * + * - input: BinaryNode + * + * + * Return Type: + * - Non-streaming: Tree + * - Streaming: ReadableStream + */ +export const BuildTreeAction = async ( + input: BinaryNode, +): Promise => { + return b.BuildTree( + input, + ); +}; + +export const BuildTreeStreamingAction = async ( + input: BinaryNode, +): Promise> => { + const stream = b.stream.BuildTree( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the ClassThatPointsToRecursiveClassThroughAlias BAML function. + * + * Input Types: + * + * - cls: ClassToRecAlias + * + * + * Return Type: + * - Non-streaming: ClassToRecAlias + * - Streaming: ReadableStream + */ +export const ClassThatPointsToRecursiveClassThroughAliasAction = async ( + cls: ClassToRecAlias, +): Promise => { + return b.ClassThatPointsToRecursiveClassThroughAlias( + cls, + ); +}; + +export const ClassThatPointsToRecursiveClassThroughAliasStreamingAction = async ( + cls: ClassToRecAlias, +): Promise> => { + const stream = b.stream.ClassThatPointsToRecursiveClassThroughAlias( + cls, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the ClassifyDynEnumTwo BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: (string | DynEnumTwo) + * - Streaming: ReadableStream + */ +export const ClassifyDynEnumTwoAction = async ( + input: string, +): Promise<(string | DynEnumTwo)> => { + return b.ClassifyDynEnumTwo( + input, + ); +}; + +export const ClassifyDynEnumTwoStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.ClassifyDynEnumTwo( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the ClassifyMessage BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: Category + * - Streaming: ReadableStream + */ +export const ClassifyMessageAction = async ( + input: string, +): Promise => { + return b.ClassifyMessage( + input, + ); +}; + +export const ClassifyMessageStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.ClassifyMessage( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the ClassifyMessage2 BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: Category + * - Streaming: ReadableStream + */ +export const ClassifyMessage2Action = async ( + input: string, +): Promise => { + return b.ClassifyMessage2( + input, + ); +}; + +export const ClassifyMessage2StreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.ClassifyMessage2( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the ClassifyMessage3 BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: Category + * - Streaming: ReadableStream + */ +export const ClassifyMessage3Action = async ( + input: string, +): Promise => { + return b.ClassifyMessage3( + input, + ); +}; + +export const ClassifyMessage3StreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.ClassifyMessage3( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the Completion BAML function. + * + * Input Types: + * + * - prefix: string + * + * - suffix: string + * + * - language: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const CompletionAction = async ( + prefix: string, + suffix: string, + language: string, +): Promise => { + return b.Completion( + prefix, + suffix, + language, + ); +}; + +export const CompletionStreamingAction = async ( + prefix: string, + suffix: string, + language: string, +): Promise> => { + const stream = b.stream.Completion( + prefix, + suffix, + language, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the CustomTask BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: BookOrder | FlightConfirmation | GroceryReceipt + * - Streaming: ReadableStream + */ +export const CustomTaskAction = async ( + input: string, +): Promise => { + return b.CustomTask( + input, + ); +}; + +export const CustomTaskStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.CustomTask( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the DescribeImage BAML function. + * + * Input Types: + * + * - img: Image + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const DescribeImageAction = async ( + img: Image, +): Promise => { + return b.DescribeImage( + img, + ); +}; + +export const DescribeImageStreamingAction = async ( + img: Image, +): Promise> => { + const stream = b.stream.DescribeImage( + img, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the DescribeImage2 BAML function. + * + * Input Types: + * + * - classWithImage: ClassWithImage + * + * - img2: Image + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const DescribeImage2Action = async ( + classWithImage: ClassWithImage, + img2: Image, +): Promise => { + return b.DescribeImage2( + classWithImage, + img2, + ); +}; + +export const DescribeImage2StreamingAction = async ( + classWithImage: ClassWithImage, + img2: Image, +): Promise> => { + const stream = b.stream.DescribeImage2( + classWithImage, + img2, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the DescribeImage3 BAML function. + * + * Input Types: + * + * - classWithImage: ClassWithImage + * + * - img2: Image + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const DescribeImage3Action = async ( + classWithImage: ClassWithImage, + img2: Image, +): Promise => { + return b.DescribeImage3( + classWithImage, + img2, + ); +}; + +export const DescribeImage3StreamingAction = async ( + classWithImage: ClassWithImage, + img2: Image, +): Promise> => { + const stream = b.stream.DescribeImage3( + classWithImage, + img2, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the DescribeImage4 BAML function. + * + * Input Types: + * + * - classWithImage: ClassWithImage + * + * - img2: Image + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const DescribeImage4Action = async ( + classWithImage: ClassWithImage, + img2: Image, +): Promise => { + return b.DescribeImage4( + classWithImage, + img2, + ); +}; + +export const DescribeImage4StreamingAction = async ( + classWithImage: ClassWithImage, + img2: Image, +): Promise> => { + const stream = b.stream.DescribeImage4( + classWithImage, + img2, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the DifferentiateUnions BAML function. + * + * Input Types: + * + * + * Return Type: + * - Non-streaming: OriginalA | OriginalB + * - Streaming: ReadableStream + */ +export const DifferentiateUnionsAction = async ( +): Promise => { + return b.DifferentiateUnions( + ); +}; + +export const DifferentiateUnionsStreamingAction = async ( +): Promise> => { + const stream = b.stream.DifferentiateUnions( + ); + return stream.toStreamable(); +}; + +/** + * Server action for the DummyOutputFunction BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: DummyOutput + * - Streaming: ReadableStream + */ +export const DummyOutputFunctionAction = async ( + input: string, +): Promise => { + return b.DummyOutputFunction( + input, + ); +}; + +export const DummyOutputFunctionStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.DummyOutputFunction( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the DynamicFunc BAML function. + * + * Input Types: + * + * - input: DynamicClassOne + * + * + * Return Type: + * - Non-streaming: DynamicClassTwo + * - Streaming: ReadableStream + */ +export const DynamicFuncAction = async ( + input: DynamicClassOne, +): Promise => { + return b.DynamicFunc( + input, + ); +}; + +export const DynamicFuncStreamingAction = async ( + input: DynamicClassOne, +): Promise> => { + const stream = b.stream.DynamicFunc( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the DynamicInputOutput BAML function. + * + * Input Types: + * + * - input: DynInputOutput + * + * + * Return Type: + * - Non-streaming: DynInputOutput + * - Streaming: ReadableStream + */ +export const DynamicInputOutputAction = async ( + input: DynInputOutput, +): Promise => { + return b.DynamicInputOutput( + input, + ); +}; + +export const DynamicInputOutputStreamingAction = async ( + input: DynInputOutput, +): Promise> => { + const stream = b.stream.DynamicInputOutput( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the DynamicListInputOutput BAML function. + * + * Input Types: + * + * - input: DynInputOutput[] + * + * + * Return Type: + * - Non-streaming: DynInputOutput[] + * - Streaming: ReadableStream + */ +export const DynamicListInputOutputAction = async ( + input: DynInputOutput[], +): Promise => { + return b.DynamicListInputOutput( + input, + ); +}; + +export const DynamicListInputOutputStreamingAction = async ( + input: DynInputOutput[], +): Promise> => { + const stream = b.stream.DynamicListInputOutput( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the ExpectFailure BAML function. + * + * Input Types: + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const ExpectFailureAction = async ( +): Promise => { + return b.ExpectFailure( + ); +}; + +export const ExpectFailureStreamingAction = async ( +): Promise> => { + const stream = b.stream.ExpectFailure( + ); + return stream.toStreamable(); +}; + +/** + * Server action for the ExtractContactInfo BAML function. + * + * Input Types: + * + * - document: string + * + * + * Return Type: + * - Non-streaming: ContactInfo + * - Streaming: ReadableStream + */ +export const ExtractContactInfoAction = async ( + document: string, +): Promise => { + return b.ExtractContactInfo( + document, + ); +}; + +export const ExtractContactInfoStreamingAction = async ( + document: string, +): Promise> => { + const stream = b.stream.ExtractContactInfo( + document, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the ExtractHobby BAML function. + * + * Input Types: + * + * - text: string + * + * + * Return Type: + * - Non-streaming: (string | Hobby)[] + * - Streaming: ReadableStream + */ +export const ExtractHobbyAction = async ( + text: string, +): Promise<(string | Hobby)[]> => { + return b.ExtractHobby( + text, + ); +}; + +export const ExtractHobbyStreamingAction = async ( + text: string, +): Promise> => { + const stream = b.stream.ExtractHobby( + text, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the ExtractNames BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string[] + * - Streaming: ReadableStream + */ +export const ExtractNamesAction = async ( + input: string, +): Promise => { + return b.ExtractNames( + input, + ); +}; + +export const ExtractNamesStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.ExtractNames( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the ExtractPeople BAML function. + * + * Input Types: + * + * - text: string + * + * + * Return Type: + * - Non-streaming: Person[] + * - Streaming: ReadableStream + */ +export const ExtractPeopleAction = async ( + text: string, +): Promise => { + return b.ExtractPeople( + text, + ); +}; + +export const ExtractPeopleStreamingAction = async ( + text: string, +): Promise> => { + const stream = b.stream.ExtractPeople( + text, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the ExtractReceiptInfo BAML function. + * + * Input Types: + * + * - email: string + * + * - reason: "curiosity" | "personal_finance" + * + * + * Return Type: + * - Non-streaming: ReceiptInfo + * - Streaming: ReadableStream + */ +export const ExtractReceiptInfoAction = async ( + email: string, + reason: "curiosity" | "personal_finance", +): Promise => { + return b.ExtractReceiptInfo( + email, + reason, + ); +}; + +export const ExtractReceiptInfoStreamingAction = async ( + email: string, + reason: "curiosity" | "personal_finance", +): Promise> => { + const stream = b.stream.ExtractReceiptInfo( + email, + reason, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the ExtractResume BAML function. + * + * Input Types: + * + * - resume: string + * + * - img (optional): Image | null + * + * + * Return Type: + * - Non-streaming: Resume + * - Streaming: ReadableStream + */ +export const ExtractResumeAction = async ( + resume: string, + img?: Image | null, +): Promise => { + return b.ExtractResume( + resume, + img, + ); +}; + +export const ExtractResumeStreamingAction = async ( + resume: string, + img?: Image | null, +): Promise> => { + const stream = b.stream.ExtractResume( + resume, + img, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the ExtractResume2 BAML function. + * + * Input Types: + * + * - resume: string + * + * + * Return Type: + * - Non-streaming: Resume + * - Streaming: ReadableStream + */ +export const ExtractResume2Action = async ( + resume: string, +): Promise => { + return b.ExtractResume2( + resume, + ); +}; + +export const ExtractResume2StreamingAction = async ( + resume: string, +): Promise> => { + const stream = b.stream.ExtractResume2( + resume, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the FnClassOptionalOutput BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: ClassOptionalOutput | null + * - Streaming: ReadableStream + */ +export const FnClassOptionalOutputAction = async ( + input: string, +): Promise => { + return b.FnClassOptionalOutput( + input, + ); +}; + +export const FnClassOptionalOutputStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.FnClassOptionalOutput( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the FnClassOptionalOutput2 BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: ClassOptionalOutput2 | null + * - Streaming: ReadableStream + */ +export const FnClassOptionalOutput2Action = async ( + input: string, +): Promise => { + return b.FnClassOptionalOutput2( + input, + ); +}; + +export const FnClassOptionalOutput2StreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.FnClassOptionalOutput2( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the FnEnumListOutput BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: EnumOutput[] + * - Streaming: ReadableStream + */ +export const FnEnumListOutputAction = async ( + input: string, +): Promise => { + return b.FnEnumListOutput( + input, + ); +}; + +export const FnEnumListOutputStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.FnEnumListOutput( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the FnEnumOutput BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: EnumOutput + * - Streaming: ReadableStream + */ +export const FnEnumOutputAction = async ( + input: string, +): Promise => { + return b.FnEnumOutput( + input, + ); +}; + +export const FnEnumOutputStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.FnEnumOutput( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the FnLiteralClassInputOutput BAML function. + * + * Input Types: + * + * - input: LiteralClassHello + * + * + * Return Type: + * - Non-streaming: LiteralClassHello + * - Streaming: ReadableStream + */ +export const FnLiteralClassInputOutputAction = async ( + input: LiteralClassHello, +): Promise => { + return b.FnLiteralClassInputOutput( + input, + ); +}; + +export const FnLiteralClassInputOutputStreamingAction = async ( + input: LiteralClassHello, +): Promise> => { + const stream = b.stream.FnLiteralClassInputOutput( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the FnLiteralUnionClassInputOutput BAML function. + * + * Input Types: + * + * - input: LiteralClassOne | LiteralClassTwo + * + * + * Return Type: + * - Non-streaming: LiteralClassOne | LiteralClassTwo + * - Streaming: ReadableStream + */ +export const FnLiteralUnionClassInputOutputAction = async ( + input: LiteralClassOne | LiteralClassTwo, +): Promise => { + return b.FnLiteralUnionClassInputOutput( + input, + ); +}; + +export const FnLiteralUnionClassInputOutputStreamingAction = async ( + input: LiteralClassOne | LiteralClassTwo, +): Promise> => { + const stream = b.stream.FnLiteralUnionClassInputOutput( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the FnNamedArgsSingleStringOptional BAML function. + * + * Input Types: + * + * - myString (optional): string | null + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const FnNamedArgsSingleStringOptionalAction = async ( + myString?: string | null, +): Promise => { + return b.FnNamedArgsSingleStringOptional( + myString, + ); +}; + +export const FnNamedArgsSingleStringOptionalStreamingAction = async ( + myString?: string | null, +): Promise> => { + const stream = b.stream.FnNamedArgsSingleStringOptional( + myString, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the FnOutputBool BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: boolean + * - Streaming: ReadableStream + */ +export const FnOutputBoolAction = async ( + input: string, +): Promise => { + return b.FnOutputBool( + input, + ); +}; + +export const FnOutputBoolStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.FnOutputBool( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the FnOutputClass BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: TestOutputClass + * - Streaming: ReadableStream + */ +export const FnOutputClassAction = async ( + input: string, +): Promise => { + return b.FnOutputClass( + input, + ); +}; + +export const FnOutputClassStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.FnOutputClass( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the FnOutputClassList BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: TestOutputClass[] + * - Streaming: ReadableStream + */ +export const FnOutputClassListAction = async ( + input: string, +): Promise => { + return b.FnOutputClassList( + input, + ); +}; + +export const FnOutputClassListStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.FnOutputClassList( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the FnOutputClassNested BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: TestClassNested + * - Streaming: ReadableStream + */ +export const FnOutputClassNestedAction = async ( + input: string, +): Promise => { + return b.FnOutputClassNested( + input, + ); +}; + +export const FnOutputClassNestedStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.FnOutputClassNested( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the FnOutputClassWithEnum BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: TestClassWithEnum + * - Streaming: ReadableStream + */ +export const FnOutputClassWithEnumAction = async ( + input: string, +): Promise => { + return b.FnOutputClassWithEnum( + input, + ); +}; + +export const FnOutputClassWithEnumStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.FnOutputClassWithEnum( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the FnOutputInt BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: number + * - Streaming: ReadableStream + */ +export const FnOutputIntAction = async ( + input: string, +): Promise => { + return b.FnOutputInt( + input, + ); +}; + +export const FnOutputIntStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.FnOutputInt( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the FnOutputLiteralBool BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: false + * - Streaming: ReadableStream + */ +export const FnOutputLiteralBoolAction = async ( + input: string, +): Promise => { + return b.FnOutputLiteralBool( + input, + ); +}; + +export const FnOutputLiteralBoolStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.FnOutputLiteralBool( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the FnOutputLiteralInt BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: 5 + * - Streaming: ReadableStream + */ +export const FnOutputLiteralIntAction = async ( + input: string, +): Promise<5> => { + return b.FnOutputLiteralInt( + input, + ); +}; + +export const FnOutputLiteralIntStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.FnOutputLiteralInt( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the FnOutputLiteralString BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: "example output" + * - Streaming: ReadableStream + */ +export const FnOutputLiteralStringAction = async ( + input: string, +): Promise<"example output"> => { + return b.FnOutputLiteralString( + input, + ); +}; + +export const FnOutputLiteralStringStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.FnOutputLiteralString( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the FnOutputStringList BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string[] + * - Streaming: ReadableStream + */ +export const FnOutputStringListAction = async ( + input: string, +): Promise => { + return b.FnOutputStringList( + input, + ); +}; + +export const FnOutputStringListStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.FnOutputStringList( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the FnTestAliasedEnumOutput BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: TestEnum + * - Streaming: ReadableStream + */ +export const FnTestAliasedEnumOutputAction = async ( + input: string, +): Promise => { + return b.FnTestAliasedEnumOutput( + input, + ); +}; + +export const FnTestAliasedEnumOutputStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.FnTestAliasedEnumOutput( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the FnTestClassAlias BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: TestClassAlias + * - Streaming: ReadableStream + */ +export const FnTestClassAliasAction = async ( + input: string, +): Promise => { + return b.FnTestClassAlias( + input, + ); +}; + +export const FnTestClassAliasStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.FnTestClassAlias( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the FnTestNamedArgsSingleEnum BAML function. + * + * Input Types: + * + * - myArg: NamedArgsSingleEnum + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const FnTestNamedArgsSingleEnumAction = async ( + myArg: NamedArgsSingleEnum, +): Promise => { + return b.FnTestNamedArgsSingleEnum( + myArg, + ); +}; + +export const FnTestNamedArgsSingleEnumStreamingAction = async ( + myArg: NamedArgsSingleEnum, +): Promise> => { + const stream = b.stream.FnTestNamedArgsSingleEnum( + myArg, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the GetDataType BAML function. + * + * Input Types: + * + * - text: string + * + * + * Return Type: + * - Non-streaming: RaysData + * - Streaming: ReadableStream + */ +export const GetDataTypeAction = async ( + text: string, +): Promise => { + return b.GetDataType( + text, + ); +}; + +export const GetDataTypeStreamingAction = async ( + text: string, +): Promise> => { + const stream = b.stream.GetDataType( + text, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the GetOrderInfo BAML function. + * + * Input Types: + * + * - email: Email + * + * + * Return Type: + * - Non-streaming: OrderInfo + * - Streaming: ReadableStream + */ +export const GetOrderInfoAction = async ( + email: Email, +): Promise => { + return b.GetOrderInfo( + email, + ); +}; + +export const GetOrderInfoStreamingAction = async ( + email: Email, +): Promise> => { + const stream = b.stream.GetOrderInfo( + email, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the GetQuery BAML function. + * + * Input Types: + * + * - query: string + * + * + * Return Type: + * - Non-streaming: SearchParams + * - Streaming: ReadableStream + */ +export const GetQueryAction = async ( + query: string, +): Promise => { + return b.GetQuery( + query, + ); +}; + +export const GetQueryStreamingAction = async ( + query: string, +): Promise> => { + const stream = b.stream.GetQuery( + query, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the InOutEnumMapKey BAML function. + * + * Input Types: + * + * - i1: Partial> + * + * - i2: Partial> + * + * + * Return Type: + * - Non-streaming: Partial> + * - Streaming: ReadableStream + */ +export const InOutEnumMapKeyAction = async ( + i1: Partial>, + i2: Partial>, +): Promise>> => { + return b.InOutEnumMapKey( + i1, + i2, + ); +}; + +export const InOutEnumMapKeyStreamingAction = async ( + i1: Partial>, + i2: Partial>, +): Promise> => { + const stream = b.stream.InOutEnumMapKey( + i1, + i2, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the InOutLiteralStringUnionMapKey BAML function. + * + * Input Types: + * + * - i1: Partial> + * + * - i2: Partial> + * + * + * Return Type: + * - Non-streaming: Partial> + * - Streaming: ReadableStream + */ +export const InOutLiteralStringUnionMapKeyAction = async ( + i1: Partial>, + i2: Partial>, +): Promise>> => { + return b.InOutLiteralStringUnionMapKey( + i1, + i2, + ); +}; + +export const InOutLiteralStringUnionMapKeyStreamingAction = async ( + i1: Partial>, + i2: Partial>, +): Promise> => { + const stream = b.stream.InOutLiteralStringUnionMapKey( + i1, + i2, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the InOutSingleLiteralStringMapKey BAML function. + * + * Input Types: + * + * - m: Partial> + * + * + * Return Type: + * - Non-streaming: Partial> + * - Streaming: ReadableStream + */ +export const InOutSingleLiteralStringMapKeyAction = async ( + m: Partial>, +): Promise>> => { + return b.InOutSingleLiteralStringMapKey( + m, + ); +}; + +export const InOutSingleLiteralStringMapKeyStreamingAction = async ( + m: Partial>, +): Promise> => { + const stream = b.stream.InOutSingleLiteralStringMapKey( + m, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the JsonTypeAliasCycle BAML function. + * + * Input Types: + * + * - input: JsonValue + * + * + * Return Type: + * - Non-streaming: JsonValue + * - Streaming: ReadableStream + */ +export const JsonTypeAliasCycleAction = async ( + input: JsonValue, +): Promise => { + return b.JsonTypeAliasCycle( + input, + ); +}; + +export const JsonTypeAliasCycleStreamingAction = async ( + input: JsonValue, +): Promise> => { + const stream = b.stream.JsonTypeAliasCycle( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the LiteralUnionsTest BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: 1 | true | "string output" + * - Streaming: ReadableStream + */ +export const LiteralUnionsTestAction = async ( + input: string, +): Promise<1 | true | "string output"> => { + return b.LiteralUnionsTest( + input, + ); +}; + +export const LiteralUnionsTestStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.LiteralUnionsTest( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the MakeBlockConstraint BAML function. + * + * Input Types: + * + * + * Return Type: + * - Non-streaming: Checked + * - Streaming: ReadableStream + */ +export const MakeBlockConstraintAction = async ( +): Promise> => { + return b.MakeBlockConstraint( + ); +}; + +export const MakeBlockConstraintStreamingAction = async ( +): Promise> => { + const stream = b.stream.MakeBlockConstraint( + ); + return stream.toStreamable(); +}; + +/** + * Server action for the MakeNestedBlockConstraint BAML function. + * + * Input Types: + * + * + * Return Type: + * - Non-streaming: NestedBlockConstraint + * - Streaming: ReadableStream + */ +export const MakeNestedBlockConstraintAction = async ( +): Promise => { + return b.MakeNestedBlockConstraint( + ); +}; + +export const MakeNestedBlockConstraintStreamingAction = async ( +): Promise> => { + const stream = b.stream.MakeNestedBlockConstraint( + ); + return stream.toStreamable(); +}; + +/** + * Server action for the MakeSemanticContainer BAML function. + * + * Input Types: + * + * + * Return Type: + * - Non-streaming: SemanticContainer + * - Streaming: ReadableStream + */ +export const MakeSemanticContainerAction = async ( +): Promise => { + return b.MakeSemanticContainer( + ); +}; + +export const MakeSemanticContainerStreamingAction = async ( +): Promise> => { + const stream = b.stream.MakeSemanticContainer( + ); + return stream.toStreamable(); +}; + +/** + * Server action for the MapAlias BAML function. + * + * Input Types: + * + * - m: Record + * + * + * Return Type: + * - Non-streaming: Record + * - Streaming: ReadableStream + */ +export const MapAliasAction = async ( + m: Record, +): Promise> => { + return b.MapAlias( + m, + ); +}; + +export const MapAliasStreamingAction = async ( + m: Record, +): Promise> => { + const stream = b.stream.MapAlias( + m, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the MergeAliasAttributes BAML function. + * + * Input Types: + * + * - money: number + * + * + * Return Type: + * - Non-streaming: MergeAttrs + * - Streaming: ReadableStream + */ +export const MergeAliasAttributesAction = async ( + money: number, +): Promise => { + return b.MergeAliasAttributes( + money, + ); +}; + +export const MergeAliasAttributesStreamingAction = async ( + money: number, +): Promise> => { + const stream = b.stream.MergeAliasAttributes( + money, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the MyFunc BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: DynamicOutput + * - Streaming: ReadableStream + */ +export const MyFuncAction = async ( + input: string, +): Promise => { + return b.MyFunc( + input, + ); +}; + +export const MyFuncStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.MyFunc( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the NestedAlias BAML function. + * + * Input Types: + * + * - c: number | string | boolean | number | string[] | Record + * + * + * Return Type: + * - Non-streaming: number | string | boolean | number | string[] | Record + * - Streaming: ReadableStream + */ +export const NestedAliasAction = async ( + c: number | string | boolean | number | string[] | Record, +): Promise> => { + return b.NestedAlias( + c, + ); +}; + +export const NestedAliasStreamingAction = async ( + c: number | string | boolean | number | string[] | Record, +): Promise> => { + const stream = b.stream.NestedAlias( + c, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the NullLiteralClassHello BAML function. + * + * Input Types: + * + * - s: string + * + * + * Return Type: + * - Non-streaming: ClassForNullLiteral + * - Streaming: ReadableStream + */ +export const NullLiteralClassHelloAction = async ( + s: string, +): Promise => { + return b.NullLiteralClassHello( + s, + ); +}; + +export const NullLiteralClassHelloStreamingAction = async ( + s: string, +): Promise> => { + const stream = b.stream.NullLiteralClassHello( + s, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the OptionalTest_Function BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: (OptionalTest_ReturnType | null)[] + * - Streaming: ReadableStream + */ +export const OptionalTest_FunctionAction = async ( + input: string, +): Promise<(OptionalTest_ReturnType | null)[]> => { + return b.OptionalTest_Function( + input, + ); +}; + +export const OptionalTest_FunctionStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.OptionalTest_Function( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the PredictAge BAML function. + * + * Input Types: + * + * - name: string + * + * + * Return Type: + * - Non-streaming: FooAny + * - Streaming: ReadableStream + */ +export const PredictAgeAction = async ( + name: string, +): Promise => { + return b.PredictAge( + name, + ); +}; + +export const PredictAgeStreamingAction = async ( + name: string, +): Promise> => { + const stream = b.stream.PredictAge( + name, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the PredictAgeBare BAML function. + * + * Input Types: + * + * - inp: string + * + * + * Return Type: + * - Non-streaming: Checked + * - Streaming: ReadableStream + */ +export const PredictAgeBareAction = async ( + inp: string, +): Promise> => { + return b.PredictAgeBare( + inp, + ); +}; + +export const PredictAgeBareStreamingAction = async ( + inp: string, +): Promise> => { + const stream = b.stream.PredictAgeBare( + inp, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the PrimitiveAlias BAML function. + * + * Input Types: + * + * - p: number | string | boolean | number + * + * + * Return Type: + * - Non-streaming: number | string | boolean | number + * - Streaming: ReadableStream + */ +export const PrimitiveAliasAction = async ( + p: number | string | boolean | number, +): Promise => { + return b.PrimitiveAlias( + p, + ); +}; + +export const PrimitiveAliasStreamingAction = async ( + p: number | string | boolean | number, +): Promise> => { + const stream = b.stream.PrimitiveAlias( + p, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the PromptTestClaude BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const PromptTestClaudeAction = async ( + input: string, +): Promise => { + return b.PromptTestClaude( + input, + ); +}; + +export const PromptTestClaudeStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.PromptTestClaude( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the PromptTestClaudeChat BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const PromptTestClaudeChatAction = async ( + input: string, +): Promise => { + return b.PromptTestClaudeChat( + input, + ); +}; + +export const PromptTestClaudeChatStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.PromptTestClaudeChat( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the PromptTestClaudeChatNoSystem BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const PromptTestClaudeChatNoSystemAction = async ( + input: string, +): Promise => { + return b.PromptTestClaudeChatNoSystem( + input, + ); +}; + +export const PromptTestClaudeChatNoSystemStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.PromptTestClaudeChatNoSystem( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the PromptTestOpenAI BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const PromptTestOpenAIAction = async ( + input: string, +): Promise => { + return b.PromptTestOpenAI( + input, + ); +}; + +export const PromptTestOpenAIStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.PromptTestOpenAI( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the PromptTestOpenAIChat BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const PromptTestOpenAIChatAction = async ( + input: string, +): Promise => { + return b.PromptTestOpenAIChat( + input, + ); +}; + +export const PromptTestOpenAIChatStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.PromptTestOpenAIChat( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the PromptTestOpenAIChatNoSystem BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const PromptTestOpenAIChatNoSystemAction = async ( + input: string, +): Promise => { + return b.PromptTestOpenAIChatNoSystem( + input, + ); +}; + +export const PromptTestOpenAIChatNoSystemStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.PromptTestOpenAIChatNoSystem( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the PromptTestStreaming BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const PromptTestStreamingAction = async ( + input: string, +): Promise => { + return b.PromptTestStreaming( + input, + ); +}; + +export const PromptTestStreamingStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.PromptTestStreaming( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the RecursiveAliasCycle BAML function. + * + * Input Types: + * + * - input: RecAliasOne + * + * + * Return Type: + * - Non-streaming: RecAliasOne + * - Streaming: ReadableStream + */ +export const RecursiveAliasCycleAction = async ( + input: RecAliasOne, +): Promise => { + return b.RecursiveAliasCycle( + input, + ); +}; + +export const RecursiveAliasCycleStreamingAction = async ( + input: RecAliasOne, +): Promise> => { + const stream = b.stream.RecursiveAliasCycle( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the RecursiveClassWithAliasIndirection BAML function. + * + * Input Types: + * + * - cls: NodeWithAliasIndirection + * + * + * Return Type: + * - Non-streaming: NodeWithAliasIndirection + * - Streaming: ReadableStream + */ +export const RecursiveClassWithAliasIndirectionAction = async ( + cls: NodeWithAliasIndirection, +): Promise => { + return b.RecursiveClassWithAliasIndirection( + cls, + ); +}; + +export const RecursiveClassWithAliasIndirectionStreamingAction = async ( + cls: NodeWithAliasIndirection, +): Promise> => { + const stream = b.stream.RecursiveClassWithAliasIndirection( + cls, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the ReturnAliasWithMergedAttributes BAML function. + * + * Input Types: + * + * - money: Checked + * + * + * Return Type: + * - Non-streaming: Checked + * - Streaming: ReadableStream + */ +export const ReturnAliasWithMergedAttributesAction = async ( + money: Checked, +): Promise> => { + return b.ReturnAliasWithMergedAttributes( + money, + ); +}; + +export const ReturnAliasWithMergedAttributesStreamingAction = async ( + money: Checked, +): Promise> => { + const stream = b.stream.ReturnAliasWithMergedAttributes( + money, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the ReturnFailingAssert BAML function. + * + * Input Types: + * + * - inp: number + * + * + * Return Type: + * - Non-streaming: number + * - Streaming: ReadableStream + */ +export const ReturnFailingAssertAction = async ( + inp: number, +): Promise => { + return b.ReturnFailingAssert( + inp, + ); +}; + +export const ReturnFailingAssertStreamingAction = async ( + inp: number, +): Promise> => { + const stream = b.stream.ReturnFailingAssert( + inp, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the ReturnMalformedConstraints BAML function. + * + * Input Types: + * + * - a: number + * + * + * Return Type: + * - Non-streaming: MalformedConstraints + * - Streaming: ReadableStream + */ +export const ReturnMalformedConstraintsAction = async ( + a: number, +): Promise => { + return b.ReturnMalformedConstraints( + a, + ); +}; + +export const ReturnMalformedConstraintsStreamingAction = async ( + a: number, +): Promise> => { + const stream = b.stream.ReturnMalformedConstraints( + a, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the SchemaDescriptions BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: Schema + * - Streaming: ReadableStream + */ +export const SchemaDescriptionsAction = async ( + input: string, +): Promise => { + return b.SchemaDescriptions( + input, + ); +}; + +export const SchemaDescriptionsStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.SchemaDescriptions( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the SimpleRecursiveListAlias BAML function. + * + * Input Types: + * + * - input: RecursiveListAlias + * + * + * Return Type: + * - Non-streaming: RecursiveListAlias + * - Streaming: ReadableStream + */ +export const SimpleRecursiveListAliasAction = async ( + input: RecursiveListAlias, +): Promise => { + return b.SimpleRecursiveListAlias( + input, + ); +}; + +export const SimpleRecursiveListAliasStreamingAction = async ( + input: RecursiveListAlias, +): Promise> => { + const stream = b.stream.SimpleRecursiveListAlias( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the SimpleRecursiveMapAlias BAML function. + * + * Input Types: + * + * - input: RecursiveMapAlias + * + * + * Return Type: + * - Non-streaming: RecursiveMapAlias + * - Streaming: ReadableStream + */ +export const SimpleRecursiveMapAliasAction = async ( + input: RecursiveMapAlias, +): Promise => { + return b.SimpleRecursiveMapAlias( + input, + ); +}; + +export const SimpleRecursiveMapAliasStreamingAction = async ( + input: RecursiveMapAlias, +): Promise> => { + const stream = b.stream.SimpleRecursiveMapAlias( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the StreamBigNumbers BAML function. + * + * Input Types: + * + * - digits: number + * + * + * Return Type: + * - Non-streaming: BigNumbers + * - Streaming: ReadableStream + */ +export const StreamBigNumbersAction = async ( + digits: number, +): Promise => { + return b.StreamBigNumbers( + digits, + ); +}; + +export const StreamBigNumbersStreamingAction = async ( + digits: number, +): Promise> => { + const stream = b.stream.StreamBigNumbers( + digits, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the StreamFailingAssertion BAML function. + * + * Input Types: + * + * - theme: string + * + * - length: number + * + * + * Return Type: + * - Non-streaming: TwoStoriesOneTitle + * - Streaming: ReadableStream + */ +export const StreamFailingAssertionAction = async ( + theme: string, + length: number, +): Promise => { + return b.StreamFailingAssertion( + theme, + length, + ); +}; + +export const StreamFailingAssertionStreamingAction = async ( + theme: string, + length: number, +): Promise> => { + const stream = b.stream.StreamFailingAssertion( + theme, + length, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the StreamOneBigNumber BAML function. + * + * Input Types: + * + * - digits: number + * + * + * Return Type: + * - Non-streaming: number + * - Streaming: ReadableStream + */ +export const StreamOneBigNumberAction = async ( + digits: number, +): Promise => { + return b.StreamOneBigNumber( + digits, + ); +}; + +export const StreamOneBigNumberStreamingAction = async ( + digits: number, +): Promise> => { + const stream = b.stream.StreamOneBigNumber( + digits, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the StreamUnionIntegers BAML function. + * + * Input Types: + * + * - digits: number + * + * + * Return Type: + * - Non-streaming: (number | string)[] + * - Streaming: ReadableStream + */ +export const StreamUnionIntegersAction = async ( + digits: number, +): Promise<(number | string)[]> => { + return b.StreamUnionIntegers( + digits, + ); +}; + +export const StreamUnionIntegersStreamingAction = async ( + digits: number, +): Promise> => { + const stream = b.stream.StreamUnionIntegers( + digits, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the StreamingCompoundNumbers BAML function. + * + * Input Types: + * + * - digits: number + * + * - yapping: boolean + * + * + * Return Type: + * - Non-streaming: CompoundBigNumbers + * - Streaming: ReadableStream + */ +export const StreamingCompoundNumbersAction = async ( + digits: number, + yapping: boolean, +): Promise => { + return b.StreamingCompoundNumbers( + digits, + yapping, + ); +}; + +export const StreamingCompoundNumbersStreamingAction = async ( + digits: number, + yapping: boolean, +): Promise> => { + const stream = b.stream.StreamingCompoundNumbers( + digits, + yapping, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestAnthropic BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestAnthropicAction = async ( + input: string, +): Promise => { + return b.TestAnthropic( + input, + ); +}; + +export const TestAnthropicStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.TestAnthropic( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestAnthropicShorthand BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestAnthropicShorthandAction = async ( + input: string, +): Promise => { + return b.TestAnthropicShorthand( + input, + ); +}; + +export const TestAnthropicShorthandStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.TestAnthropicShorthand( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestAws BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestAwsAction = async ( + input: string, +): Promise => { + return b.TestAws( + input, + ); +}; + +export const TestAwsStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.TestAws( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestAwsInvalidAccessKey BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestAwsInvalidAccessKeyAction = async ( + input: string, +): Promise => { + return b.TestAwsInvalidAccessKey( + input, + ); +}; + +export const TestAwsInvalidAccessKeyStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.TestAwsInvalidAccessKey( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestAwsInvalidProfile BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestAwsInvalidProfileAction = async ( + input: string, +): Promise => { + return b.TestAwsInvalidProfile( + input, + ); +}; + +export const TestAwsInvalidProfileStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.TestAwsInvalidProfile( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestAwsInvalidRegion BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestAwsInvalidRegionAction = async ( + input: string, +): Promise => { + return b.TestAwsInvalidRegion( + input, + ); +}; + +export const TestAwsInvalidRegionStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.TestAwsInvalidRegion( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestAwsInvalidSessionToken BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestAwsInvalidSessionTokenAction = async ( + input: string, +): Promise => { + return b.TestAwsInvalidSessionToken( + input, + ); +}; + +export const TestAwsInvalidSessionTokenStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.TestAwsInvalidSessionToken( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestAzure BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestAzureAction = async ( + input: string, +): Promise => { + return b.TestAzure( + input, + ); +}; + +export const TestAzureStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.TestAzure( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestAzureFailure BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestAzureFailureAction = async ( + input: string, +): Promise => { + return b.TestAzureFailure( + input, + ); +}; + +export const TestAzureFailureStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.TestAzureFailure( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestCaching BAML function. + * + * Input Types: + * + * - input: string + * + * - not_cached: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestCachingAction = async ( + input: string, + not_cached: string, +): Promise => { + return b.TestCaching( + input, + not_cached, + ); +}; + +export const TestCachingStreamingAction = async ( + input: string, + not_cached: string, +): Promise> => { + const stream = b.stream.TestCaching( + input, + not_cached, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestFallbackClient BAML function. + * + * Input Types: + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestFallbackClientAction = async ( +): Promise => { + return b.TestFallbackClient( + ); +}; + +export const TestFallbackClientStreamingAction = async ( +): Promise> => { + const stream = b.stream.TestFallbackClient( + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestFallbackToShorthand BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestFallbackToShorthandAction = async ( + input: string, +): Promise => { + return b.TestFallbackToShorthand( + input, + ); +}; + +export const TestFallbackToShorthandStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.TestFallbackToShorthand( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestFnNamedArgsSingleBool BAML function. + * + * Input Types: + * + * - myBool: boolean + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestFnNamedArgsSingleBoolAction = async ( + myBool: boolean, +): Promise => { + return b.TestFnNamedArgsSingleBool( + myBool, + ); +}; + +export const TestFnNamedArgsSingleBoolStreamingAction = async ( + myBool: boolean, +): Promise> => { + const stream = b.stream.TestFnNamedArgsSingleBool( + myBool, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestFnNamedArgsSingleClass BAML function. + * + * Input Types: + * + * - myArg: NamedArgsSingleClass + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestFnNamedArgsSingleClassAction = async ( + myArg: NamedArgsSingleClass, +): Promise => { + return b.TestFnNamedArgsSingleClass( + myArg, + ); +}; + +export const TestFnNamedArgsSingleClassStreamingAction = async ( + myArg: NamedArgsSingleClass, +): Promise> => { + const stream = b.stream.TestFnNamedArgsSingleClass( + myArg, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestFnNamedArgsSingleEnumList BAML function. + * + * Input Types: + * + * - myArg: NamedArgsSingleEnumList[] + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestFnNamedArgsSingleEnumListAction = async ( + myArg: NamedArgsSingleEnumList[], +): Promise => { + return b.TestFnNamedArgsSingleEnumList( + myArg, + ); +}; + +export const TestFnNamedArgsSingleEnumListStreamingAction = async ( + myArg: NamedArgsSingleEnumList[], +): Promise> => { + const stream = b.stream.TestFnNamedArgsSingleEnumList( + myArg, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestFnNamedArgsSingleFloat BAML function. + * + * Input Types: + * + * - myFloat: number + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestFnNamedArgsSingleFloatAction = async ( + myFloat: number, +): Promise => { + return b.TestFnNamedArgsSingleFloat( + myFloat, + ); +}; + +export const TestFnNamedArgsSingleFloatStreamingAction = async ( + myFloat: number, +): Promise> => { + const stream = b.stream.TestFnNamedArgsSingleFloat( + myFloat, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestFnNamedArgsSingleInt BAML function. + * + * Input Types: + * + * - myInt: number + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestFnNamedArgsSingleIntAction = async ( + myInt: number, +): Promise => { + return b.TestFnNamedArgsSingleInt( + myInt, + ); +}; + +export const TestFnNamedArgsSingleIntStreamingAction = async ( + myInt: number, +): Promise> => { + const stream = b.stream.TestFnNamedArgsSingleInt( + myInt, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestFnNamedArgsSingleMapStringToClass BAML function. + * + * Input Types: + * + * - myMap: Record + * + * + * Return Type: + * - Non-streaming: Record + * - Streaming: ReadableStream + */ +export const TestFnNamedArgsSingleMapStringToClassAction = async ( + myMap: Record, +): Promise> => { + return b.TestFnNamedArgsSingleMapStringToClass( + myMap, + ); +}; + +export const TestFnNamedArgsSingleMapStringToClassStreamingAction = async ( + myMap: Record, +): Promise> => { + const stream = b.stream.TestFnNamedArgsSingleMapStringToClass( + myMap, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestFnNamedArgsSingleMapStringToMap BAML function. + * + * Input Types: + * + * - myMap: Record> + * + * + * Return Type: + * - Non-streaming: Record> + * - Streaming: ReadableStream + */ +export const TestFnNamedArgsSingleMapStringToMapAction = async ( + myMap: Record>, +): Promise>> => { + return b.TestFnNamedArgsSingleMapStringToMap( + myMap, + ); +}; + +export const TestFnNamedArgsSingleMapStringToMapStreamingAction = async ( + myMap: Record>, +): Promise> => { + const stream = b.stream.TestFnNamedArgsSingleMapStringToMap( + myMap, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestFnNamedArgsSingleMapStringToString BAML function. + * + * Input Types: + * + * - myMap: Record + * + * + * Return Type: + * - Non-streaming: Record + * - Streaming: ReadableStream + */ +export const TestFnNamedArgsSingleMapStringToStringAction = async ( + myMap: Record, +): Promise> => { + return b.TestFnNamedArgsSingleMapStringToString( + myMap, + ); +}; + +export const TestFnNamedArgsSingleMapStringToStringStreamingAction = async ( + myMap: Record, +): Promise> => { + const stream = b.stream.TestFnNamedArgsSingleMapStringToString( + myMap, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestFnNamedArgsSingleString BAML function. + * + * Input Types: + * + * - myString: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestFnNamedArgsSingleStringAction = async ( + myString: string, +): Promise => { + return b.TestFnNamedArgsSingleString( + myString, + ); +}; + +export const TestFnNamedArgsSingleStringStreamingAction = async ( + myString: string, +): Promise> => { + const stream = b.stream.TestFnNamedArgsSingleString( + myString, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestFnNamedArgsSingleStringArray BAML function. + * + * Input Types: + * + * - myStringArray: string[] + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestFnNamedArgsSingleStringArrayAction = async ( + myStringArray: string[], +): Promise => { + return b.TestFnNamedArgsSingleStringArray( + myStringArray, + ); +}; + +export const TestFnNamedArgsSingleStringArrayStreamingAction = async ( + myStringArray: string[], +): Promise> => { + const stream = b.stream.TestFnNamedArgsSingleStringArray( + myStringArray, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestFnNamedArgsSingleStringList BAML function. + * + * Input Types: + * + * - myArg: string[] + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestFnNamedArgsSingleStringListAction = async ( + myArg: string[], +): Promise => { + return b.TestFnNamedArgsSingleStringList( + myArg, + ); +}; + +export const TestFnNamedArgsSingleStringListStreamingAction = async ( + myArg: string[], +): Promise> => { + const stream = b.stream.TestFnNamedArgsSingleStringList( + myArg, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestGemini BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestGeminiAction = async ( + input: string, +): Promise => { + return b.TestGemini( + input, + ); +}; + +export const TestGeminiStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.TestGemini( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestGeminiOpenAiGeneric BAML function. + * + * Input Types: + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestGeminiOpenAiGenericAction = async ( +): Promise => { + return b.TestGeminiOpenAiGeneric( + ); +}; + +export const TestGeminiOpenAiGenericStreamingAction = async ( +): Promise> => { + const stream = b.stream.TestGeminiOpenAiGeneric( + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestGeminiSystem BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestGeminiSystemAction = async ( + input: string, +): Promise => { + return b.TestGeminiSystem( + input, + ); +}; + +export const TestGeminiSystemStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.TestGeminiSystem( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestGeminiSystemAsChat BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestGeminiSystemAsChatAction = async ( + input: string, +): Promise => { + return b.TestGeminiSystemAsChat( + input, + ); +}; + +export const TestGeminiSystemAsChatStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.TestGeminiSystemAsChat( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestImageInput BAML function. + * + * Input Types: + * + * - img: Image + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestImageInputAction = async ( + img: Image, +): Promise => { + return b.TestImageInput( + img, + ); +}; + +export const TestImageInputStreamingAction = async ( + img: Image, +): Promise> => { + const stream = b.stream.TestImageInput( + img, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestImageInputAnthropic BAML function. + * + * Input Types: + * + * - img: Image + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestImageInputAnthropicAction = async ( + img: Image, +): Promise => { + return b.TestImageInputAnthropic( + img, + ); +}; + +export const TestImageInputAnthropicStreamingAction = async ( + img: Image, +): Promise> => { + const stream = b.stream.TestImageInputAnthropic( + img, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestImageListInput BAML function. + * + * Input Types: + * + * - imgs: Image[] + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestImageListInputAction = async ( + imgs: Image[], +): Promise => { + return b.TestImageListInput( + imgs, + ); +}; + +export const TestImageListInputStreamingAction = async ( + imgs: Image[], +): Promise> => { + const stream = b.stream.TestImageListInput( + imgs, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestMemory BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: TestMemoryOutput + * - Streaming: ReadableStream + */ +export const TestMemoryAction = async ( + input: string, +): Promise => { + return b.TestMemory( + input, + ); +}; + +export const TestMemoryStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.TestMemory( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestMulticlassNamedArgs BAML function. + * + * Input Types: + * + * - myArg: NamedArgsSingleClass + * + * - myArg2: NamedArgsSingleClass + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestMulticlassNamedArgsAction = async ( + myArg: NamedArgsSingleClass, + myArg2: NamedArgsSingleClass, +): Promise => { + return b.TestMulticlassNamedArgs( + myArg, + myArg2, + ); +}; + +export const TestMulticlassNamedArgsStreamingAction = async ( + myArg: NamedArgsSingleClass, + myArg2: NamedArgsSingleClass, +): Promise> => { + const stream = b.stream.TestMulticlassNamedArgs( + myArg, + myArg2, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestNamedArgsLiteralBool BAML function. + * + * Input Types: + * + * - myBool: true + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestNamedArgsLiteralBoolAction = async ( + myBool: true, +): Promise => { + return b.TestNamedArgsLiteralBool( + myBool, + ); +}; + +export const TestNamedArgsLiteralBoolStreamingAction = async ( + myBool: true, +): Promise> => { + const stream = b.stream.TestNamedArgsLiteralBool( + myBool, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestNamedArgsLiteralInt BAML function. + * + * Input Types: + * + * - myInt: 1 + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestNamedArgsLiteralIntAction = async ( + myInt: 1, +): Promise => { + return b.TestNamedArgsLiteralInt( + myInt, + ); +}; + +export const TestNamedArgsLiteralIntStreamingAction = async ( + myInt: 1, +): Promise> => { + const stream = b.stream.TestNamedArgsLiteralInt( + myInt, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestNamedArgsLiteralString BAML function. + * + * Input Types: + * + * - myString: "My String" + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestNamedArgsLiteralStringAction = async ( + myString: "My String", +): Promise => { + return b.TestNamedArgsLiteralString( + myString, + ); +}; + +export const TestNamedArgsLiteralStringStreamingAction = async ( + myString: "My String", +): Promise> => { + const stream = b.stream.TestNamedArgsLiteralString( + myString, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestOllama BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestOllamaAction = async ( + input: string, +): Promise => { + return b.TestOllama( + input, + ); +}; + +export const TestOllamaStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.TestOllama( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestOpenAILegacyProvider BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestOpenAILegacyProviderAction = async ( + input: string, +): Promise => { + return b.TestOpenAILegacyProvider( + input, + ); +}; + +export const TestOpenAILegacyProviderStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.TestOpenAILegacyProvider( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestOpenAIShorthand BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestOpenAIShorthandAction = async ( + input: string, +): Promise => { + return b.TestOpenAIShorthand( + input, + ); +}; + +export const TestOpenAIShorthandStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.TestOpenAIShorthand( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestRetryConstant BAML function. + * + * Input Types: + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestRetryConstantAction = async ( +): Promise => { + return b.TestRetryConstant( + ); +}; + +export const TestRetryConstantStreamingAction = async ( +): Promise> => { + const stream = b.stream.TestRetryConstant( + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestRetryExponential BAML function. + * + * Input Types: + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestRetryExponentialAction = async ( +): Promise => { + return b.TestRetryExponential( + ); +}; + +export const TestRetryExponentialStreamingAction = async ( +): Promise> => { + const stream = b.stream.TestRetryExponential( + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestSingleFallbackClient BAML function. + * + * Input Types: + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestSingleFallbackClientAction = async ( +): Promise => { + return b.TestSingleFallbackClient( + ); +}; + +export const TestSingleFallbackClientStreamingAction = async ( +): Promise> => { + const stream = b.stream.TestSingleFallbackClient( + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestUniverseQuestion BAML function. + * + * Input Types: + * + * - question: UniverseQuestionInput + * + * + * Return Type: + * - Non-streaming: UniverseQuestion + * - Streaming: ReadableStream + */ +export const TestUniverseQuestionAction = async ( + question: UniverseQuestionInput, +): Promise => { + return b.TestUniverseQuestion( + question, + ); +}; + +export const TestUniverseQuestionStreamingAction = async ( + question: UniverseQuestionInput, +): Promise> => { + const stream = b.stream.TestUniverseQuestion( + question, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestVertex BAML function. + * + * Input Types: + * + * - input: string + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestVertexAction = async ( + input: string, +): Promise => { + return b.TestVertex( + input, + ); +}; + +export const TestVertexStreamingAction = async ( + input: string, +): Promise> => { + const stream = b.stream.TestVertex( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the TestVertexWithSystemInstructions BAML function. + * + * Input Types: + * + * + * Return Type: + * - Non-streaming: string + * - Streaming: ReadableStream + */ +export const TestVertexWithSystemInstructionsAction = async ( +): Promise => { + return b.TestVertexWithSystemInstructions( + ); +}; + +export const TestVertexWithSystemInstructionsStreamingAction = async ( +): Promise> => { + const stream = b.stream.TestVertexWithSystemInstructions( + ); + return stream.toStreamable(); +}; + +/** + * Server action for the UnionTest_Function BAML function. + * + * Input Types: + * + * - input: string | boolean + * + * + * Return Type: + * - Non-streaming: UnionTest_ReturnType + * - Streaming: ReadableStream + */ +export const UnionTest_FunctionAction = async ( + input: string | boolean, +): Promise => { + return b.UnionTest_Function( + input, + ); +}; + +export const UnionTest_FunctionStreamingAction = async ( + input: string | boolean, +): Promise> => { + const stream = b.stream.UnionTest_Function( + input, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the UseBlockConstraint BAML function. + * + * Input Types: + * + * - inp: BlockConstraintForParam + * + * + * Return Type: + * - Non-streaming: number + * - Streaming: ReadableStream + */ +export const UseBlockConstraintAction = async ( + inp: BlockConstraintForParam, +): Promise => { + return b.UseBlockConstraint( + inp, + ); +}; + +export const UseBlockConstraintStreamingAction = async ( + inp: BlockConstraintForParam, +): Promise> => { + const stream = b.stream.UseBlockConstraint( + inp, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the UseMalformedConstraints BAML function. + * + * Input Types: + * + * - a: MalformedConstraints2 + * + * + * Return Type: + * - Non-streaming: number + * - Streaming: ReadableStream + */ +export const UseMalformedConstraintsAction = async ( + a: MalformedConstraints2, +): Promise => { + return b.UseMalformedConstraints( + a, + ); +}; + +export const UseMalformedConstraintsStreamingAction = async ( + a: MalformedConstraints2, +): Promise> => { + const stream = b.stream.UseMalformedConstraints( + a, + ); + return stream.toStreamable(); +}; + +/** + * Server action for the UseNestedBlockConstraint BAML function. + * + * Input Types: + * + * - inp: NestedBlockConstraintForParam + * + * + * Return Type: + * - Non-streaming: number + * - Streaming: ReadableStream + */ +export const UseNestedBlockConstraintAction = async ( + inp: NestedBlockConstraintForParam, +): Promise => { + return b.UseNestedBlockConstraint( + inp, + ); +}; + +export const UseNestedBlockConstraintStreamingAction = async ( + inp: NestedBlockConstraintForParam, +): Promise> => { + const stream = b.stream.UseNestedBlockConstraint( + inp, + ); + return stream.toStreamable(); +}; diff --git a/integ-tests/react/baml_client/react/types.ts b/integ-tests/react/baml_client/react/types.ts new file mode 100644 index 000000000..19a223133 --- /dev/null +++ b/integ-tests/react/baml_client/react/types.ts @@ -0,0 +1,172 @@ +/************************************************************************************************* + +Welcome to Baml! To use this generated code, please run one of the following: + +$ npm install @boundaryml/baml +$ yarn add @boundaryml/baml +$ pnpm add @boundaryml/baml + +*************************************************************************************************/ + +// This file was generated by BAML: do not edit it. Instead, edit the BAML +// files and re-generate this code. +// +/* eslint-disable */ +// tslint:disable +// @ts-nocheck +// biome-ignore format: autogenerated code +import type { BamlStream } from '@boundaryml/baml'; +import type { RecursivePartialNull } from '../types'; +import type { BamlValidationError, BamlClientFinishReasonError } from '@boundaryml/baml/errors'; +/** + * Type for representing a partial response with type safety + * @template Output The type of the partial response data + */ +export type PartialResponse = { + partial?: RecursivePartialNull | null + final?: never +} + +/** + * Type for representing a final response with type safety + * @template Output The type of the final response data + */ +export type FinalResponse = { + partial?: never + final: Output +} + +export type ServerAction = (...args: Input extends any[] ? Input : [Input]) => Promise | Output>; + + +/** + * Props for streaming mode, which provides incremental updates. + * Use this when you want to show partial results as they become available. + * + * @template Action The server action type + */ +export type StreamingProps = { + stream: true + onPartial?: (response?: RecursivePartialNull>>) => void + onFinal?: (response?: Awaited>) => void + /** Called if the operation fails */ + onError?: (error: Error | BamlValidationError | BamlClientFinishReasonError) => void +} + +/** + * Props for non-streaming mode. + * @template Action The server action type + */ +export type NonStreamingProps = { + stream?: false + onPartial?: never + onFinal?: (response?: Awaited>) => void + /** Called if the operation fails */ + onError?: (error: Error | BamlValidationError | BamlClientFinishReasonError) => void +} + +/** + * Union type of all possible props for a BAML hook. + * @template Action The server action type + */ +export type HookProps = StreamingProps | NonStreamingProps + +/** + * Base return type for all BAML hooks + */ +export type BaseHookResult = { + /** + * The complete, final result of the operation. + * Only available after successful completion (when isSuccess is true). + * Null during loading or if an error occurred. + */ + data?: Awaited>; + /** + * Error details if the operation failed. + * Check this when isError is true to handle the failure. + */ + error: Error | BamlValidationError | BamlClientFinishReasonError | null; + /** + * True if the operation failed. + * Use this to conditionally render error states or retry options. + */ + isError: boolean; + /** + * True while the operation is in progress. + * Use this to show loading states, spinners, or disable controls. + */ + isPending: boolean; + /** + * True if the operation completed successfully. + * Check this before accessing the final data. + */ + isSuccess: boolean; + /** + * The current phase of the operation: + * - idle: Initial state, ready to start + * - loading: Operation in progress + * - success: Completed successfully + * - error: Failed with an error + */ + status: "idle" | "pending" | "success" | "error"; +} + +/** + * Return type for streaming mode BAML hooks + */ +export type StreamingHookResult = BaseHookResult & { + /** + * The most recent partial result from the stream. + * Updates continuously while streaming, showing interim progress. + * Use this to implement real-time UI updates, typing effects, + * or progress indicators. + */ + partialData?: RecursivePartialNull>>; + + /** + * Call this function to start the operation. + * Returns a promise that resolves with the final result or null if it failed. + */ + mutate: (...input: Parameters) => Promise>; +}; + +/** + * Return type for non-streaming mode BAML hooks + */ +export type NonStreamingHookResult = BaseHookResult & { + /** Not available in non-streaming mode */ + partialData?: never; + /** + * Call this function to start the operation. + * Returns a promise that resolves with the final result or null if it failed. + */ + mutate: (...input: Parameters) => Promise>>; +}; + +/** + * Conditional return type for BAML hooks based on the provided props + */ +export type HookResult< + Action extends ServerAction = ServerAction, + Props extends HookProps = HookProps +> = Props extends { stream: true } + ? StreamingHookResult + : NonStreamingHookResult; + +/** + * Helper type to extract the non-null partial data type from a BAML hook result. + * This is useful when you want to work with the type of the partial streaming data + * without dealing with undefined or null values. + * + * @template T The server action type that defines the input/output types + */ +export type HookResultPartialData = NonNullable['partialData']>; + +/** + * Helper type to extract the non-null final data type from a BAML hook result. + * This is useful when you want to work with the type of the final response data + * without dealing with undefined or null values. + * + * @template T The server action type that defines the input/output types + */ +export type HookResultData = NonNullable['data']>; \ No newline at end of file diff --git a/integ-tests/react/baml_client/sync_client.ts b/integ-tests/react/baml_client/sync_client.ts new file mode 100644 index 000000000..7ef08587f --- /dev/null +++ b/integ-tests/react/baml_client/sync_client.ts @@ -0,0 +1,3676 @@ +/************************************************************************************************* + +Welcome to Baml! To use this generated code, please run one of the following: + +$ npm install @boundaryml/baml +$ yarn add @boundaryml/baml +$ pnpm add @boundaryml/baml + +*************************************************************************************************/ + +// This file was generated by BAML: do not edit it. Instead, edit the BAML +// files and re-generate this code. +// +/* eslint-disable */ +// tslint:disable +// @ts-nocheck +// biome-ignore format: autogenerated code +import { BamlRuntime, FunctionResult, BamlCtxManager, BamlSyncStream, Image, ClientRegistry, createBamlValidationError, BamlValidationError } from "@boundaryml/baml" +import { Checked, Check, RecursivePartialNull } from "./types" +import {AnotherObject, BigNumbers, BinaryNode, Blah, BlockConstraint, BlockConstraintForParam, BookOrder, ClassForNullLiteral, ClassOptionalOutput, ClassOptionalOutput2, ClassToRecAlias, ClassWithBlockDone, ClassWithImage, ClassWithoutDone, ComplexMemoryObject, CompoundBigNumbers, ContactInfo, CustomTaskResult, DummyOutput, DynInputOutput, DynamicClassOne, DynamicClassTwo, DynamicOutput, Earthling, Education, Email, EmailAddress, Event, FakeImage, FlightConfirmation, FooAny, Forest, FormatterTest0, FormatterTest1, FormatterTest2, FormatterTest3, GroceryReceipt, InnerClass, InnerClass2, InputClass, InputClassNested, LinkedList, LinkedListAliasNode, LiteralClassHello, LiteralClassOne, LiteralClassTwo, MalformedConstraints, MalformedConstraints2, Martian, MemoryObject, MergeAttrs, NamedArgsSingleClass, Nested, Nested2, NestedBlockConstraint, NestedBlockConstraintForParam, Node, NodeWithAliasIndirection, OptionalListAndMap, OptionalTest_Prop1, OptionalTest_ReturnType, OrderInfo, OriginalA, OriginalB, Person, PhoneNumber, Quantity, RaysData, ReceiptInfo, ReceiptItem, Recipe, Resume, Schema, SearchParams, SemanticContainer, SmallThing, SomeClassNestedDynamic, StringToClassEntry, TestClassAlias, TestClassNested, TestClassWithEnum, TestMemoryOutput, TestOutputClass, Tree, TwoStoriesOneTitle, UnionTest_ReturnType, UniverseQuestion, UniverseQuestionInput, WithReasoning, AliasedEnum, Category, Category2, Category3, Color, DataType, DynEnumOne, DynEnumTwo, EnumInClass, EnumOutput, Hobby, MapKey, NamedArgsSingleEnum, NamedArgsSingleEnumList, OptionalTest_CategoryType, OrderStatus, Tag, TestEnum} from "./types" +import TypeBuilder from "./type_builder" +import { DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX, DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_RUNTIME } from "./globals" + +/** + * @deprecated Use RecursivePartialNull from 'baml_client/types' instead. + */ +export type RecursivePartialNull = T extends object + ? { + [P in keyof T]?: RecursivePartialNull; + } + : T | null; + +export class BamlSyncClient { + private runtime: BamlRuntime + private ctx_manager: BamlCtxManager + + constructor(private runtime: BamlRuntime, private ctx_manager: BamlCtxManager) {} + + /* + * @deprecated NOT IMPLEMENTED as streaming must by async. We + * are not providing an async version as we want to reserve the + * right to provide a sync version in the future. + */ + get stream() { + throw new Error("stream is not available in BamlSyncClient. Use `import { b } from 'baml_client/async_client") + } + + + AaaSamOutputFormat( + recipe: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Recipe { + try { + const raw = this.runtime.callFunctionSync( + "AaaSamOutputFormat", + { + "recipe": recipe + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Recipe + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + AliasThatPointsToRecursiveType( + list: LinkedListAliasNode, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): LinkedListAliasNode { + try { + const raw = this.runtime.callFunctionSync( + "AliasThatPointsToRecursiveType", + { + "list": list + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as LinkedListAliasNode + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + AliasWithMultipleAttrs( + money: Checked, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Checked { + try { + const raw = this.runtime.callFunctionSync( + "AliasWithMultipleAttrs", + { + "money": money + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Checked + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + AliasedInputClass( + input: InputClass, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "AliasedInputClass", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + AliasedInputClass2( + input: InputClass, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "AliasedInputClass2", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + AliasedInputClassNested( + input: InputClassNested, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "AliasedInputClassNested", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + AliasedInputEnum( + input: AliasedEnum, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "AliasedInputEnum", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + AliasedInputList( + input: AliasedEnum[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "AliasedInputList", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + AllowedOptionals( + optionals: OptionalListAndMap, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): OptionalListAndMap { + try { + const raw = this.runtime.callFunctionSync( + "AllowedOptionals", + { + "optionals": optionals + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as OptionalListAndMap + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + AssertFn( + a: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): number { + try { + const raw = this.runtime.callFunctionSync( + "AssertFn", + { + "a": a + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as number + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + AudioInput( + aud: Audio, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "AudioInput", + { + "aud": aud + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + BuildLinkedList( + input: number[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): LinkedList { + try { + const raw = this.runtime.callFunctionSync( + "BuildLinkedList", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as LinkedList + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + BuildTree( + input: BinaryNode, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Tree { + try { + const raw = this.runtime.callFunctionSync( + "BuildTree", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Tree + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + ClassThatPointsToRecursiveClassThroughAlias( + cls: ClassToRecAlias, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): ClassToRecAlias { + try { + const raw = this.runtime.callFunctionSync( + "ClassThatPointsToRecursiveClassThroughAlias", + { + "cls": cls + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as ClassToRecAlias + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + ClassifyDynEnumTwo( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): (string | DynEnumTwo) { + try { + const raw = this.runtime.callFunctionSync( + "ClassifyDynEnumTwo", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as (string | DynEnumTwo) + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + ClassifyMessage( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Category { + try { + const raw = this.runtime.callFunctionSync( + "ClassifyMessage", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Category + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + ClassifyMessage2( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Category { + try { + const raw = this.runtime.callFunctionSync( + "ClassifyMessage2", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Category + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + ClassifyMessage3( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Category { + try { + const raw = this.runtime.callFunctionSync( + "ClassifyMessage3", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Category + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + Completion( + prefix: string,suffix: string,language: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "Completion", + { + "prefix": prefix,"suffix": suffix,"language": language + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + CustomTask( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BookOrder | FlightConfirmation | GroceryReceipt { + try { + const raw = this.runtime.callFunctionSync( + "CustomTask", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as BookOrder | FlightConfirmation | GroceryReceipt + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + DescribeImage( + img: Image, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "DescribeImage", + { + "img": img + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + DescribeImage2( + classWithImage: ClassWithImage,img2: Image, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "DescribeImage2", + { + "classWithImage": classWithImage,"img2": img2 + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + DescribeImage3( + classWithImage: ClassWithImage,img2: Image, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "DescribeImage3", + { + "classWithImage": classWithImage,"img2": img2 + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + DescribeImage4( + classWithImage: ClassWithImage,img2: Image, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "DescribeImage4", + { + "classWithImage": classWithImage,"img2": img2 + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + DifferentiateUnions( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): OriginalA | OriginalB { + try { + const raw = this.runtime.callFunctionSync( + "DifferentiateUnions", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as OriginalA | OriginalB + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + DummyOutputFunction( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): DummyOutput { + try { + const raw = this.runtime.callFunctionSync( + "DummyOutputFunction", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as DummyOutput + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + DynamicFunc( + input: DynamicClassOne, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): DynamicClassTwo { + try { + const raw = this.runtime.callFunctionSync( + "DynamicFunc", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as DynamicClassTwo + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + DynamicInputOutput( + input: DynInputOutput, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): DynInputOutput { + try { + const raw = this.runtime.callFunctionSync( + "DynamicInputOutput", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as DynInputOutput + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + DynamicListInputOutput( + input: DynInputOutput[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): DynInputOutput[] { + try { + const raw = this.runtime.callFunctionSync( + "DynamicListInputOutput", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as DynInputOutput[] + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + ExpectFailure( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "ExpectFailure", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + ExtractContactInfo( + document: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): ContactInfo { + try { + const raw = this.runtime.callFunctionSync( + "ExtractContactInfo", + { + "document": document + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as ContactInfo + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + ExtractHobby( + text: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): (string | Hobby)[] { + try { + const raw = this.runtime.callFunctionSync( + "ExtractHobby", + { + "text": text + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as (string | Hobby)[] + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + ExtractNames( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string[] { + try { + const raw = this.runtime.callFunctionSync( + "ExtractNames", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string[] + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + ExtractPeople( + text: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Person[] { + try { + const raw = this.runtime.callFunctionSync( + "ExtractPeople", + { + "text": text + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Person[] + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + ExtractReceiptInfo( + email: string,reason: "curiosity" | "personal_finance", + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): ReceiptInfo { + try { + const raw = this.runtime.callFunctionSync( + "ExtractReceiptInfo", + { + "email": email,"reason": reason + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as ReceiptInfo + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + ExtractResume( + resume: string,img?: Image | null, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Resume { + try { + const raw = this.runtime.callFunctionSync( + "ExtractResume", + { + "resume": resume,"img": img?? null + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Resume + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + ExtractResume2( + resume: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Resume { + try { + const raw = this.runtime.callFunctionSync( + "ExtractResume2", + { + "resume": resume + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Resume + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + FnClassOptionalOutput( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): ClassOptionalOutput | null { + try { + const raw = this.runtime.callFunctionSync( + "FnClassOptionalOutput", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as ClassOptionalOutput | null + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + FnClassOptionalOutput2( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): ClassOptionalOutput2 | null { + try { + const raw = this.runtime.callFunctionSync( + "FnClassOptionalOutput2", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as ClassOptionalOutput2 | null + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + FnEnumListOutput( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): EnumOutput[] { + try { + const raw = this.runtime.callFunctionSync( + "FnEnumListOutput", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as EnumOutput[] + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + FnEnumOutput( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): EnumOutput { + try { + const raw = this.runtime.callFunctionSync( + "FnEnumOutput", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as EnumOutput + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + FnLiteralClassInputOutput( + input: LiteralClassHello, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): LiteralClassHello { + try { + const raw = this.runtime.callFunctionSync( + "FnLiteralClassInputOutput", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as LiteralClassHello + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + FnLiteralUnionClassInputOutput( + input: LiteralClassOne | LiteralClassTwo, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): LiteralClassOne | LiteralClassTwo { + try { + const raw = this.runtime.callFunctionSync( + "FnLiteralUnionClassInputOutput", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as LiteralClassOne | LiteralClassTwo + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + FnNamedArgsSingleStringOptional( + myString?: string | null, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "FnNamedArgsSingleStringOptional", + { + "myString": myString?? null + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + FnOutputBool( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): boolean { + try { + const raw = this.runtime.callFunctionSync( + "FnOutputBool", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as boolean + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + FnOutputClass( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): TestOutputClass { + try { + const raw = this.runtime.callFunctionSync( + "FnOutputClass", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as TestOutputClass + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + FnOutputClassList( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): TestOutputClass[] { + try { + const raw = this.runtime.callFunctionSync( + "FnOutputClassList", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as TestOutputClass[] + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + FnOutputClassNested( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): TestClassNested { + try { + const raw = this.runtime.callFunctionSync( + "FnOutputClassNested", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as TestClassNested + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + FnOutputClassWithEnum( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): TestClassWithEnum { + try { + const raw = this.runtime.callFunctionSync( + "FnOutputClassWithEnum", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as TestClassWithEnum + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + FnOutputInt( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): number { + try { + const raw = this.runtime.callFunctionSync( + "FnOutputInt", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as number + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + FnOutputLiteralBool( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): false { + try { + const raw = this.runtime.callFunctionSync( + "FnOutputLiteralBool", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as false + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + FnOutputLiteralInt( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): 5 { + try { + const raw = this.runtime.callFunctionSync( + "FnOutputLiteralInt", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as 5 + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + FnOutputLiteralString( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): "example output" { + try { + const raw = this.runtime.callFunctionSync( + "FnOutputLiteralString", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as "example output" + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + FnOutputStringList( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string[] { + try { + const raw = this.runtime.callFunctionSync( + "FnOutputStringList", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string[] + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + FnTestAliasedEnumOutput( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): TestEnum { + try { + const raw = this.runtime.callFunctionSync( + "FnTestAliasedEnumOutput", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as TestEnum + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + FnTestClassAlias( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): TestClassAlias { + try { + const raw = this.runtime.callFunctionSync( + "FnTestClassAlias", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as TestClassAlias + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + FnTestNamedArgsSingleEnum( + myArg: NamedArgsSingleEnum, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "FnTestNamedArgsSingleEnum", + { + "myArg": myArg + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + GetDataType( + text: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): RaysData { + try { + const raw = this.runtime.callFunctionSync( + "GetDataType", + { + "text": text + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as RaysData + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + GetOrderInfo( + email: Email, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): OrderInfo { + try { + const raw = this.runtime.callFunctionSync( + "GetOrderInfo", + { + "email": email + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as OrderInfo + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + GetQuery( + query: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): SearchParams { + try { + const raw = this.runtime.callFunctionSync( + "GetQuery", + { + "query": query + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as SearchParams + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + InOutEnumMapKey( + i1: Partial>,i2: Partial>, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Partial> { + try { + const raw = this.runtime.callFunctionSync( + "InOutEnumMapKey", + { + "i1": i1,"i2": i2 + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Partial> + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + InOutLiteralStringUnionMapKey( + i1: Partial>,i2: Partial>, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Partial> { + try { + const raw = this.runtime.callFunctionSync( + "InOutLiteralStringUnionMapKey", + { + "i1": i1,"i2": i2 + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Partial> + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + InOutSingleLiteralStringMapKey( + m: Partial>, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Partial> { + try { + const raw = this.runtime.callFunctionSync( + "InOutSingleLiteralStringMapKey", + { + "m": m + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Partial> + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + JsonTypeAliasCycle( + input: JsonValue, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): JsonValue { + try { + const raw = this.runtime.callFunctionSync( + "JsonTypeAliasCycle", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as JsonValue + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + LiteralUnionsTest( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): 1 | true | "string output" { + try { + const raw = this.runtime.callFunctionSync( + "LiteralUnionsTest", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as 1 | true | "string output" + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + MakeBlockConstraint( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Checked { + try { + const raw = this.runtime.callFunctionSync( + "MakeBlockConstraint", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Checked + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + MakeNestedBlockConstraint( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): NestedBlockConstraint { + try { + const raw = this.runtime.callFunctionSync( + "MakeNestedBlockConstraint", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as NestedBlockConstraint + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + MakeSemanticContainer( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): SemanticContainer { + try { + const raw = this.runtime.callFunctionSync( + "MakeSemanticContainer", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as SemanticContainer + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + MapAlias( + m: Record, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Record { + try { + const raw = this.runtime.callFunctionSync( + "MapAlias", + { + "m": m + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Record + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + MergeAliasAttributes( + money: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): MergeAttrs { + try { + const raw = this.runtime.callFunctionSync( + "MergeAliasAttributes", + { + "money": money + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as MergeAttrs + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + MyFunc( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): DynamicOutput { + try { + const raw = this.runtime.callFunctionSync( + "MyFunc", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as DynamicOutput + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + NestedAlias( + c: number | string | boolean | number | string[] | Record, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): number | string | boolean | number | string[] | Record { + try { + const raw = this.runtime.callFunctionSync( + "NestedAlias", + { + "c": c + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as number | string | boolean | number | string[] | Record + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + NullLiteralClassHello( + s: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): ClassForNullLiteral { + try { + const raw = this.runtime.callFunctionSync( + "NullLiteralClassHello", + { + "s": s + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as ClassForNullLiteral + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + OptionalTest_Function( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): (OptionalTest_ReturnType | null)[] { + try { + const raw = this.runtime.callFunctionSync( + "OptionalTest_Function", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as (OptionalTest_ReturnType | null)[] + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + PredictAge( + name: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): FooAny { + try { + const raw = this.runtime.callFunctionSync( + "PredictAge", + { + "name": name + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as FooAny + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + PredictAgeBare( + inp: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Checked { + try { + const raw = this.runtime.callFunctionSync( + "PredictAgeBare", + { + "inp": inp + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Checked + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + PrimitiveAlias( + p: number | string | boolean | number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): number | string | boolean | number { + try { + const raw = this.runtime.callFunctionSync( + "PrimitiveAlias", + { + "p": p + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as number | string | boolean | number + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + PromptTestClaude( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "PromptTestClaude", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + PromptTestClaudeChat( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "PromptTestClaudeChat", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + PromptTestClaudeChatNoSystem( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "PromptTestClaudeChatNoSystem", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + PromptTestOpenAI( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "PromptTestOpenAI", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + PromptTestOpenAIChat( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "PromptTestOpenAIChat", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + PromptTestOpenAIChatNoSystem( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "PromptTestOpenAIChatNoSystem", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + PromptTestStreaming( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "PromptTestStreaming", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + RecursiveAliasCycle( + input: RecAliasOne, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): RecAliasOne { + try { + const raw = this.runtime.callFunctionSync( + "RecursiveAliasCycle", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as RecAliasOne + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + RecursiveClassWithAliasIndirection( + cls: NodeWithAliasIndirection, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): NodeWithAliasIndirection { + try { + const raw = this.runtime.callFunctionSync( + "RecursiveClassWithAliasIndirection", + { + "cls": cls + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as NodeWithAliasIndirection + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + ReturnAliasWithMergedAttributes( + money: Checked, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Checked { + try { + const raw = this.runtime.callFunctionSync( + "ReturnAliasWithMergedAttributes", + { + "money": money + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Checked + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + ReturnFailingAssert( + inp: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): number { + try { + const raw = this.runtime.callFunctionSync( + "ReturnFailingAssert", + { + "inp": inp + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as number + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + ReturnMalformedConstraints( + a: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): MalformedConstraints { + try { + const raw = this.runtime.callFunctionSync( + "ReturnMalformedConstraints", + { + "a": a + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as MalformedConstraints + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + SchemaDescriptions( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Schema { + try { + const raw = this.runtime.callFunctionSync( + "SchemaDescriptions", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Schema + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + SimpleRecursiveListAlias( + input: RecursiveListAlias, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): RecursiveListAlias { + try { + const raw = this.runtime.callFunctionSync( + "SimpleRecursiveListAlias", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as RecursiveListAlias + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + SimpleRecursiveMapAlias( + input: RecursiveMapAlias, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): RecursiveMapAlias { + try { + const raw = this.runtime.callFunctionSync( + "SimpleRecursiveMapAlias", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as RecursiveMapAlias + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + StreamBigNumbers( + digits: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BigNumbers { + try { + const raw = this.runtime.callFunctionSync( + "StreamBigNumbers", + { + "digits": digits + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as BigNumbers + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + StreamFailingAssertion( + theme: string,length: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): TwoStoriesOneTitle { + try { + const raw = this.runtime.callFunctionSync( + "StreamFailingAssertion", + { + "theme": theme,"length": length + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as TwoStoriesOneTitle + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + StreamOneBigNumber( + digits: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): number { + try { + const raw = this.runtime.callFunctionSync( + "StreamOneBigNumber", + { + "digits": digits + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as number + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + StreamUnionIntegers( + digits: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): (number | string)[] { + try { + const raw = this.runtime.callFunctionSync( + "StreamUnionIntegers", + { + "digits": digits + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as (number | string)[] + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + StreamingCompoundNumbers( + digits: number,yapping: boolean, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): CompoundBigNumbers { + try { + const raw = this.runtime.callFunctionSync( + "StreamingCompoundNumbers", + { + "digits": digits,"yapping": yapping + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as CompoundBigNumbers + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestAnthropic( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestAnthropic", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestAnthropicShorthand( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestAnthropicShorthand", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestAws( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestAws", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestAwsInvalidAccessKey( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestAwsInvalidAccessKey", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestAwsInvalidProfile( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestAwsInvalidProfile", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestAwsInvalidRegion( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestAwsInvalidRegion", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestAwsInvalidSessionToken( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestAwsInvalidSessionToken", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestAzure( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestAzure", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestAzureFailure( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestAzureFailure", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestCaching( + input: string,not_cached: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestCaching", + { + "input": input,"not_cached": not_cached + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestFallbackClient( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestFallbackClient", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestFallbackToShorthand( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestFallbackToShorthand", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestFnNamedArgsSingleBool( + myBool: boolean, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestFnNamedArgsSingleBool", + { + "myBool": myBool + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestFnNamedArgsSingleClass( + myArg: NamedArgsSingleClass, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestFnNamedArgsSingleClass", + { + "myArg": myArg + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestFnNamedArgsSingleEnumList( + myArg: NamedArgsSingleEnumList[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestFnNamedArgsSingleEnumList", + { + "myArg": myArg + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestFnNamedArgsSingleFloat( + myFloat: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestFnNamedArgsSingleFloat", + { + "myFloat": myFloat + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestFnNamedArgsSingleInt( + myInt: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestFnNamedArgsSingleInt", + { + "myInt": myInt + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestFnNamedArgsSingleMapStringToClass( + myMap: Record, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Record { + try { + const raw = this.runtime.callFunctionSync( + "TestFnNamedArgsSingleMapStringToClass", + { + "myMap": myMap + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Record + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestFnNamedArgsSingleMapStringToMap( + myMap: Record>, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Record> { + try { + const raw = this.runtime.callFunctionSync( + "TestFnNamedArgsSingleMapStringToMap", + { + "myMap": myMap + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Record> + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestFnNamedArgsSingleMapStringToString( + myMap: Record, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Record { + try { + const raw = this.runtime.callFunctionSync( + "TestFnNamedArgsSingleMapStringToString", + { + "myMap": myMap + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Record + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestFnNamedArgsSingleString( + myString: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestFnNamedArgsSingleString", + { + "myString": myString + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestFnNamedArgsSingleStringArray( + myStringArray: string[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestFnNamedArgsSingleStringArray", + { + "myStringArray": myStringArray + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestFnNamedArgsSingleStringList( + myArg: string[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestFnNamedArgsSingleStringList", + { + "myArg": myArg + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestGemini( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestGemini", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestGeminiOpenAiGeneric( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestGeminiOpenAiGeneric", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestGeminiSystem( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestGeminiSystem", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestGeminiSystemAsChat( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestGeminiSystemAsChat", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestImageInput( + img: Image, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestImageInput", + { + "img": img + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestImageInputAnthropic( + img: Image, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestImageInputAnthropic", + { + "img": img + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestImageListInput( + imgs: Image[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestImageListInput", + { + "imgs": imgs + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestMemory( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): TestMemoryOutput { + try { + const raw = this.runtime.callFunctionSync( + "TestMemory", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as TestMemoryOutput + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestMulticlassNamedArgs( + myArg: NamedArgsSingleClass,myArg2: NamedArgsSingleClass, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestMulticlassNamedArgs", + { + "myArg": myArg,"myArg2": myArg2 + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestNamedArgsLiteralBool( + myBool: true, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestNamedArgsLiteralBool", + { + "myBool": myBool + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestNamedArgsLiteralInt( + myInt: 1, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestNamedArgsLiteralInt", + { + "myInt": myInt + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestNamedArgsLiteralString( + myString: "My String", + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestNamedArgsLiteralString", + { + "myString": myString + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestOllama( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestOllama", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestOpenAILegacyProvider( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestOpenAILegacyProvider", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestOpenAIShorthand( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestOpenAIShorthand", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestRetryConstant( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestRetryConstant", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestRetryExponential( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestRetryExponential", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestSingleFallbackClient( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestSingleFallbackClient", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestUniverseQuestion( + question: UniverseQuestionInput, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): UniverseQuestion { + try { + const raw = this.runtime.callFunctionSync( + "TestUniverseQuestion", + { + "question": question + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as UniverseQuestion + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestVertex( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestVertex", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + TestVertexWithSystemInstructions( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestVertexWithSystemInstructions", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + UnionTest_Function( + input: string | boolean, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): UnionTest_ReturnType { + try { + const raw = this.runtime.callFunctionSync( + "UnionTest_Function", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as UnionTest_ReturnType + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + UseBlockConstraint( + inp: BlockConstraintForParam, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): number { + try { + const raw = this.runtime.callFunctionSync( + "UseBlockConstraint", + { + "inp": inp + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as number + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + UseMalformedConstraints( + a: MalformedConstraints2, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): number { + try { + const raw = this.runtime.callFunctionSync( + "UseMalformedConstraints", + { + "a": a + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as number + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + + UseNestedBlockConstraint( + inp: NestedBlockConstraintForParam, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): number { + try { + const raw = this.runtime.callFunctionSync( + "UseNestedBlockConstraint", + { + "inp": inp + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as number + } catch (error: any) { + const bamlError = createBamlValidationError(error); + if (bamlError instanceof BamlValidationError) { + throw bamlError; + } else { + throw error; + } + } + } + +} + +export const b = new BamlSyncClient(DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_RUNTIME, DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX) \ No newline at end of file diff --git a/integ-tests/react/baml_client/tracing.ts b/integ-tests/react/baml_client/tracing.ts new file mode 100644 index 000000000..f39dc83a0 --- /dev/null +++ b/integ-tests/react/baml_client/tracing.ts @@ -0,0 +1,33 @@ +/************************************************************************************************* + +Welcome to Baml! To use this generated code, please run one of the following: + +$ npm install @boundaryml/baml +$ yarn add @boundaryml/baml +$ pnpm add @boundaryml/baml + +*************************************************************************************************/ + +// This file was generated by BAML: do not edit it. Instead, edit the BAML +// files and re-generate this code. +// +/* eslint-disable */ +// tslint:disable +// @ts-nocheck +// biome-ignore format: autogenerated code +import { BamlLogEvent } from '@boundaryml/baml'; +import { DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX } from './globals'; + +const traceAsync = +DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX.traceFnAsync.bind(DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX) +const traceSync = +DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX.traceFnSync.bind(DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX) +const setTags = +DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX.upsertTags.bind(DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX) +const flush = () => { + DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX.flush.bind(DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX)() +} +const onLogEvent = (callback: undefined | ((event: BamlLogEvent) => void)) => +DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX.onLogEvent(callback) + +export { traceAsync, traceSync, setTags, flush, onLogEvent } \ No newline at end of file diff --git a/integ-tests/react/baml_client/type_builder.ts b/integ-tests/react/baml_client/type_builder.ts new file mode 100644 index 000000000..27a96b750 --- /dev/null +++ b/integ-tests/react/baml_client/type_builder.ts @@ -0,0 +1,167 @@ +/************************************************************************************************* + +Welcome to Baml! To use this generated code, please run one of the following: + +$ npm install @boundaryml/baml +$ yarn add @boundaryml/baml +$ pnpm add @boundaryml/baml + +*************************************************************************************************/ + +// This file was generated by BAML: do not edit it. Instead, edit the BAML +// files and re-generate this code. +// +/* eslint-disable */ +// tslint:disable +// @ts-nocheck +// biome-ignore format: autogenerated code +import type { FieldType } from '@boundaryml/baml/native' +import { TypeBuilder as _TypeBuilder } from '@boundaryml/baml/type_builder' +import type { EnumBuilder, ClassBuilder } from '@boundaryml/baml/type_builder' + +export default class TypeBuilder { + private tb: _TypeBuilder; + + DummyOutput: ClassBuilder<'DummyOutput', "nonce" | "nonce2">; + + DynInputOutput: ClassBuilder<'DynInputOutput', "testKey">; + + DynamicClassOne: ClassBuilder<'DynamicClassOne'>; + + DynamicClassTwo: ClassBuilder<'DynamicClassTwo', "hi" | "some_class" | "status">; + + DynamicOutput: ClassBuilder<'DynamicOutput'>; + + OriginalB: ClassBuilder<'OriginalB', "value">; + + Person: ClassBuilder<'Person', "name" | "hair_color">; + + SomeClassNestedDynamic: ClassBuilder<'SomeClassNestedDynamic', "hi">; + + + Color: EnumBuilder<'Color', "RED" | "BLUE" | "GREEN" | "YELLOW" | "BLACK" | "WHITE">; + + DynEnumOne: EnumBuilder<'DynEnumOne'>; + + DynEnumTwo: EnumBuilder<'DynEnumTwo'>; + + Hobby: EnumBuilder<'Hobby', "SPORTS" | "MUSIC" | "READING">; + + + constructor() { + this.tb = new _TypeBuilder({ + classes: new Set([ + "AnotherObject","BigNumbers","BinaryNode","Blah","BlockConstraint","BlockConstraintForParam","BookOrder","ClassForNullLiteral","ClassOptionalOutput","ClassOptionalOutput2","ClassToRecAlias","ClassWithBlockDone","ClassWithImage","ClassWithoutDone","ComplexMemoryObject","CompoundBigNumbers","ContactInfo","CustomTaskResult","DummyOutput","DynInputOutput","DynamicClassOne","DynamicClassTwo","DynamicOutput","Earthling","Education","Email","EmailAddress","Event","FakeImage","FlightConfirmation","FooAny","Forest","FormatterTest0","FormatterTest1","FormatterTest2","FormatterTest3","GroceryReceipt","InnerClass","InnerClass2","InputClass","InputClassNested","LinkedList","LinkedListAliasNode","LiteralClassHello","LiteralClassOne","LiteralClassTwo","MalformedConstraints","MalformedConstraints2","Martian","MemoryObject","MergeAttrs","NamedArgsSingleClass","Nested","Nested2","NestedBlockConstraint","NestedBlockConstraintForParam","Node","NodeWithAliasIndirection","OptionalListAndMap","OptionalTest_Prop1","OptionalTest_ReturnType","OrderInfo","OriginalA","OriginalB","Person","PhoneNumber","Quantity","RaysData","ReceiptInfo","ReceiptItem","Recipe","Resume","Schema","SearchParams","SemanticContainer","SmallThing","SomeClassNestedDynamic","StringToClassEntry","TestClassAlias","TestClassNested","TestClassWithEnum","TestMemoryOutput","TestOutputClass","Tree","TwoStoriesOneTitle","UnionTest_ReturnType","UniverseQuestion","UniverseQuestionInput","WithReasoning", + ]), + enums: new Set([ + "AliasedEnum","Category","Category2","Category3","Color","DataType","DynEnumOne","DynEnumTwo","EnumInClass","EnumOutput","Hobby","MapKey","NamedArgsSingleEnum","NamedArgsSingleEnumList","OptionalTest_CategoryType","OrderStatus","Tag","TestEnum", + ]) + }); + + this.DummyOutput = this.tb.classBuilder("DummyOutput", [ + "nonce","nonce2", + ]); + + this.DynInputOutput = this.tb.classBuilder("DynInputOutput", [ + "testKey", + ]); + + this.DynamicClassOne = this.tb.classBuilder("DynamicClassOne", [ + + ]); + + this.DynamicClassTwo = this.tb.classBuilder("DynamicClassTwo", [ + "hi","some_class","status", + ]); + + this.DynamicOutput = this.tb.classBuilder("DynamicOutput", [ + + ]); + + this.OriginalB = this.tb.classBuilder("OriginalB", [ + "value", + ]); + + this.Person = this.tb.classBuilder("Person", [ + "name","hair_color", + ]); + + this.SomeClassNestedDynamic = this.tb.classBuilder("SomeClassNestedDynamic", [ + "hi", + ]); + + + this.Color = this.tb.enumBuilder("Color", [ + "RED","BLUE","GREEN","YELLOW","BLACK","WHITE", + ]); + + this.DynEnumOne = this.tb.enumBuilder("DynEnumOne", [ + + ]); + + this.DynEnumTwo = this.tb.enumBuilder("DynEnumTwo", [ + + ]); + + this.Hobby = this.tb.enumBuilder("Hobby", [ + "SPORTS","MUSIC","READING", + ]); + + } + + __tb() { + return this.tb._tb(); + } + + string(): FieldType { + return this.tb.string() + } + + literalString(value: string): FieldType { + return this.tb.literalString(value) + } + + literalInt(value: number): FieldType { + return this.tb.literalInt(value) + } + + literalBool(value: boolean): FieldType { + return this.tb.literalBool(value) + } + + int(): FieldType { + return this.tb.int() + } + + float(): FieldType { + return this.tb.float() + } + + bool(): FieldType { + return this.tb.bool() + } + + list(type: FieldType): FieldType { + return this.tb.list(type) + } + + null(): FieldType { + return this.tb.null() + } + + map(key: FieldType, value: FieldType): FieldType { + return this.tb.map(key, value) + } + + union(types: FieldType[]): FieldType { + return this.tb.union(types) + } + + addClass(name: Name): ClassBuilder { + return this.tb.addClass(name); + } + + addEnum(name: Name): EnumBuilder { + return this.tb.addEnum(name); + } +} \ No newline at end of file diff --git a/integ-tests/react/baml_client/types.ts b/integ-tests/react/baml_client/types.ts new file mode 100644 index 000000000..aa806d41c --- /dev/null +++ b/integ-tests/react/baml_client/types.ts @@ -0,0 +1,758 @@ +/************************************************************************************************* + +Welcome to Baml! To use this generated code, please run one of the following: + +$ npm install @boundaryml/baml +$ yarn add @boundaryml/baml +$ pnpm add @boundaryml/baml + +*************************************************************************************************/ + +// This file was generated by BAML: do not edit it. Instead, edit the BAML +// files and re-generate this code. +// +/* eslint-disable */ +// tslint:disable +// @ts-nocheck +// biome-ignore format: autogenerated code +import { Image } from "@boundaryml/baml" + +export type RecursivePartialNull = T extends object + ? { + [P in keyof T]?: RecursivePartialNull; + } + : T | null; + +export interface Checked { + value: T, + checks: Record, +} + +export interface Check { + name: string, + expr: string + status: "succeeded" | "failed" +} + +export function all_succeeded(checks: Record): boolean { + return get_checks(checks).every(check => check.status === "succeeded") +} + +export function get_checks(checks: Record): Check[] { + return Object.values(checks) +} +export enum AliasedEnum { + KEY_ONE = "KEY_ONE", + KEY_TWO = "KEY_TWO", +} + +export enum Category { + Refund = "Refund", + CancelOrder = "CancelOrder", + TechnicalSupport = "TechnicalSupport", + AccountIssue = "AccountIssue", + Question = "Question", +} + +export enum Category2 { + Refund = "Refund", + CancelOrder = "CancelOrder", + TechnicalSupport = "TechnicalSupport", + AccountIssue = "AccountIssue", + Question = "Question", +} + +export enum Category3 { + Refund = "Refund", + CancelOrder = "CancelOrder", + TechnicalSupport = "TechnicalSupport", + AccountIssue = "AccountIssue", + Question = "Question", +} + +export enum Color { + RED = "RED", + BLUE = "BLUE", + GREEN = "GREEN", + YELLOW = "YELLOW", + BLACK = "BLACK", + WHITE = "WHITE", +} + +export enum DataType { + Resume = "Resume", + Event = "Event", +} + +export enum DynEnumOne { +} + +export enum DynEnumTwo { +} + +export enum EnumInClass { + ONE = "ONE", + TWO = "TWO", +} + +/** + * An enum with three values, + * ONE, TWO and THREE. + */ +export enum EnumOutput { + /** + * The first enum. + */ + ONE = "ONE", + /** + * The second enum. + */ + TWO = "TWO", + THREE = "THREE", +} + +export enum Hobby { + SPORTS = "SPORTS", + MUSIC = "MUSIC", + READING = "READING", +} + +export enum MapKey { + A = "A", + B = "B", + C = "C", +} + +export enum NamedArgsSingleEnum { + ONE = "ONE", + TWO = "TWO", +} + +export enum NamedArgsSingleEnumList { + ONE = "ONE", + TWO = "TWO", +} + +export enum OptionalTest_CategoryType { + Aleph = "Aleph", + Beta = "Beta", + Gamma = "Gamma", +} + +export enum OrderStatus { + ORDERED = "ORDERED", + SHIPPED = "SHIPPED", + DELIVERED = "DELIVERED", + CANCELLED = "CANCELLED", +} + +export enum Tag { + Security = "Security", + AI = "AI", + Blockchain = "Blockchain", +} + +export enum TestEnum { + A = "A", + B = "B", + C = "C", + D = "D", + E = "E", + F = "F", + G = "G", +} + +export interface AnotherObject { + id: string + thingy2: string + thingy3: string + +} + +export interface BigNumbers { + a: number + b: number + +} + +export interface BinaryNode { + data: number + left?: BinaryNode | null + right?: BinaryNode | null + +} + +export interface Blah { + prop4?: string | null + +} + +export interface BlockConstraint { + foo: number + bar: string + +} + +export interface BlockConstraintForParam { + bcfp: number + bcfp2: string + +} + +export interface BookOrder { + orderId: string + title: string + quantity: number + price: number + +} + +export interface ClassForNullLiteral { + a: "hi" + +} + +export interface ClassOptionalOutput { + prop1: string + prop2: string + +} + +export interface ClassOptionalOutput2 { + prop1?: string | null + prop2?: string | null + prop3?: Blah | null + +} + +export interface ClassToRecAlias { + list: LinkedListAliasNode + +} + +export interface ClassWithBlockDone { + i_16_digits: number + s_20_words: string + +} + +export interface ClassWithImage { + myImage: Image + param2: string + fake_image: FakeImage + +} + +export interface ClassWithoutDone { + i_16_digits: number + s_20_words: string + +} + +export interface ComplexMemoryObject { + id: string + name: string + description: string + metadata: (string | number | number)[] + +} + +export interface CompoundBigNumbers { + big: BigNumbers + big_nums: BigNumbers[] + another: BigNumbers + +} + +export interface ContactInfo { + primary: PhoneNumber | EmailAddress + secondary?: PhoneNumber | EmailAddress | null + +} + +export interface CustomTaskResult { + bookOrder?: BookOrder | null | null + flightConfirmation?: FlightConfirmation | null | null + groceryReceipt?: GroceryReceipt | null | null + +} + +export interface DummyOutput { + nonce: string + nonce2: string + + [key: string]: any; +} + +export interface DynInputOutput { + testKey: string + + [key: string]: any; +} + +export interface DynamicClassOne { + + [key: string]: any; +} + +export interface DynamicClassTwo { + hi: string + some_class: SomeClassNestedDynamic + status: (string | DynEnumOne) + + [key: string]: any; +} + +export interface DynamicOutput { + + [key: string]: any; +} + +export interface Earthling { + age: Checked + +} + +export interface Education { + institution: string + location: string + degree: string + major: string[] + graduation_date?: string | null + +} + +export interface Email { + subject: string + body: string + from_address: string + +} + +export interface EmailAddress { + value: string + +} + +export interface Event { + title: string + date: string + location: string + description: string + +} + +export interface FakeImage { + url: string + +} + +export interface FlightConfirmation { + confirmationNumber: string + flightNumber: string + departureTime: string + arrivalTime: string + seatNumber: string + +} + +export interface FooAny { + planetary_age: Martian | Earthling + certainty: Checked + species: Checked + +} + +export interface Forest { + trees: Tree[] + +} + +export interface FormatterTest0 { + lorem: string + ipsum: string + +} + +export interface FormatterTest1 { + lorem: string + ipsum: string + +} + +export interface FormatterTest2 { + lorem: string + ipsum: string + +} + +export interface FormatterTest3 { + lorem: string + ipsum: string + +} + +export interface GroceryReceipt { + receiptId: string + storeName: string + items: (string | number | number)[] + totalAmount: number + +} + +export interface InnerClass { + prop1: string + prop2: string + inner: InnerClass2 + +} + +export interface InnerClass2 { + prop2: number + prop3: number + +} + +export interface InputClass { + key: string + key2: string + +} + +export interface InputClassNested { + key: string + nested: InputClass + +} + +export interface LinkedList { + head?: Node | null + len: number + +} + +export interface LinkedListAliasNode { + value: number + next?: LinkedListAliasNode | null + +} + +export interface LiteralClassHello { + prop: "hello" + +} + +export interface LiteralClassOne { + prop: "one" + +} + +export interface LiteralClassTwo { + prop: "two" + +} + +export interface MalformedConstraints { + foo: Checked + +} + +export interface MalformedConstraints2 { + foo: number + +} + +/** + * A Martian organism with an age. + * Such a nice type. + */ +export interface Martian { + /** + * The age of the Martian in Mars years. + * So many Mars years. + */ + age: Checked + +} + +export interface MemoryObject { + id: string + name: string + description: string + +} + +export interface MergeAttrs { + amount: Checked + +} + +export interface NamedArgsSingleClass { + key: string + key_two: boolean + key_three: number + +} + +export interface Nested { + prop3?: string | null | null + prop4?: string | null | null + prop20: Nested2 + +} + +export interface Nested2 { + prop11?: string | null | null + prop12?: string | null | null + +} + +export interface NestedBlockConstraint { + nbc: Checked + +} + +export interface NestedBlockConstraintForParam { + nbcfp: BlockConstraintForParam + +} + +export interface Node { + data: number + next?: Node | null + +} + +export interface NodeWithAliasIndirection { + value: number + next?: NodeWithAliasIndirection | null + +} + +export interface OptionalListAndMap { + p?: string[] | null + q?: Record | null + +} + +export interface OptionalTest_Prop1 { + omega_a: string + omega_b: number + +} + +export interface OptionalTest_ReturnType { + omega_1?: OptionalTest_Prop1 | null + omega_2?: string | null + omega_3: (OptionalTest_CategoryType | null)[] + +} + +export interface OrderInfo { + order_status: OrderStatus + tracking_number?: string | null + estimated_arrival_date?: string | null + +} + +export interface OriginalA { + value: number + +} + +export interface OriginalB { + value: number + + [key: string]: any; +} + +export interface Person { + name?: string | null + hair_color?: (string | Color) | null + + [key: string]: any; +} + +export interface PhoneNumber { + value: string + +} + +export interface Quantity { + amount: number | number + unit?: string | null + +} + +export interface RaysData { + dataType: DataType + value: Resume | Event + +} + +export interface ReceiptInfo { + items: ReceiptItem[] + total_cost?: number | null + venue: "barisa" | "ox_burger" + +} + +export interface ReceiptItem { + name: string + description?: string | null + quantity: number + price: number + +} + +export interface Recipe { + ingredients: Record + recipe_type: "breakfast" | "dinner" + +} + +export interface Resume { + name: string + email: string + phone: string + experience: Education[] + education: string[] + skills: string[] + +} + +export interface Schema { + prop1?: string | null | null + prop2: Nested | string + prop5: (string | null | null)[] + prop6: string | Nested[] + nested_attrs: (string | null | null | Nested)[] + parens?: string | null | null + other_group: string | number | string + +} + +export interface SearchParams { + dateRange?: number | null + location: string[] + jobTitle?: WithReasoning | null + company?: WithReasoning | null + description: WithReasoning[] + tags: (Tag | string)[] + +} + +export interface SemanticContainer { + sixteen_digit_number: number + string_with_twenty_words: string + class_1: ClassWithoutDone + class_2: ClassWithBlockDone + class_done_needed: ClassWithBlockDone + class_needed: ClassWithoutDone + three_small_things: SmallThing[] + final_string: string + +} + +export interface SmallThing { + i_16_digits: number + i_8_digits: number + +} + +export interface SomeClassNestedDynamic { + hi: string + + [key: string]: any; +} + +export interface StringToClassEntry { + word: string + +} + +export interface TestClassAlias { + key: string + key2: string + key3: string + key4: string + key5: string + +} + +export interface TestClassNested { + prop1: string + prop2: InnerClass + +} + +export interface TestClassWithEnum { + prop1: string + prop2: EnumInClass + +} + +export interface TestMemoryOutput { + items: (MemoryObject | ComplexMemoryObject | AnotherObject)[] + more_items: (MemoryObject | ComplexMemoryObject | AnotherObject)[] + +} + +export interface TestOutputClass { + prop1: string + prop2: number + +} + +export interface Tree { + data: number + children: Forest + +} + +export interface TwoStoriesOneTitle { + title: string + story_a: string + story_b: string + +} + +export interface UnionTest_ReturnType { + prop1: string | boolean + prop2: (number | boolean)[] + prop3: boolean[] | number[] + +} + +export interface UniverseQuestion { + question: string + answer: string + +} + +export interface UniverseQuestionInput { + question: string + +} + +export interface WithReasoning { + value: string + reasoning: string + +} + +type RecursiveMapAlias = Record + +type RecursiveListAlias = RecursiveListAlias[] + +type RecAliasOne = RecAliasTwo + +type RecAliasTwo = RecAliasThree + +type RecAliasThree = RecAliasOne[] + +type JsonValue = number | string | boolean | number | JsonObject | JsonArray + +type JsonObject = Record + +type JsonArray = JsonValue[] diff --git a/integ-tests/react/components.json b/integ-tests/react/components.json new file mode 100644 index 000000000..d710b4962 --- /dev/null +++ b/integ-tests/react/components.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "default", + "rsc": true, + "tsx": true, + "tailwind": { + "config": "tailwind.config.ts", + "css": "src/app/globals.css", + "baseColor": "neutral", + "cssVariables": true, + "prefix": "" + }, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + }, + "iconLibrary": "lucide" +} \ No newline at end of file diff --git a/integ-tests/react/eslint.config.mjs b/integ-tests/react/eslint.config.mjs new file mode 100644 index 000000000..c85fb67c4 --- /dev/null +++ b/integ-tests/react/eslint.config.mjs @@ -0,0 +1,16 @@ +import { dirname } from "path"; +import { fileURLToPath } from "url"; +import { FlatCompat } from "@eslint/eslintrc"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +const compat = new FlatCompat({ + baseDirectory: __dirname, +}); + +const eslintConfig = [ + ...compat.extends("next/core-web-vitals", "next/typescript"), +]; + +export default eslintConfig; diff --git a/integ-tests/react/jest.config.js b/integ-tests/react/jest.config.js new file mode 100644 index 000000000..8290ed9e9 --- /dev/null +++ b/integ-tests/react/jest.config.js @@ -0,0 +1,12 @@ +module.exports = { + preset: 'ts-jest', + testEnvironment: 'jsdom', + roots: ['/tests'], + testMatch: ['**/*.test.ts', '**/*.test.tsx'], + moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], + setupFilesAfterEnv: ['/tests/test-setup.ts'], + testTimeout: 600000, + moduleNameMapper: { + '^@/(.*)$': '/$1', + }, +} diff --git a/integ-tests/react/next.config.ts b/integ-tests/react/next.config.ts new file mode 100644 index 000000000..c3fb76d82 --- /dev/null +++ b/integ-tests/react/next.config.ts @@ -0,0 +1,7 @@ +import { withBaml } from "@boundaryml/baml-nextjs-plugin"; +import type { NextConfig } from "next"; + +const nextConfig: NextConfig = { +}; + +export default withBaml()(nextConfig); diff --git a/integ-tests/react/package.json b/integ-tests/react/package.json new file mode 100644 index 000000000..bab2c4c38 --- /dev/null +++ b/integ-tests/react/package.json @@ -0,0 +1,68 @@ +{ + "name": "cli", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "start": "next start", + "lint": "next lint", + "test": "jest", + "build:debug": "cd ../../engine/language_client_typescript && pnpm run build:debug && cd - && pnpm i", + "build": "cd ../../engine/language_client_typescript && npm run build && cd - && pnpm i", + "integ-tests:ci": "infisical run --env=test -- pnpm test -- --ci --silent false --testTimeout 30000 --verbose=false --reporters=jest-junit", + "integ-tests": "infisical run --env=test -- pnpm test -- --silent false --testTimeout 30000 --bail --reporters=default --reporters=jest-html-reporter --reporters=jest-summary-reporter", + "integ-tests:dotenv": "dotenv -e ../.env -- pnpm test -- --silent false --testTimeout 30000", + "generate": "baml-cli generate --from ../baml_src" + }, + "dependencies": { + "@boundaryml/baml": "workspace:*", + "@boundaryml/baml-darwin-arm64": "workspace:*", + "@boundaryml/baml-nextjs-plugin": "workspace:*", + "@radix-ui/react-dropdown-menu": "^2.1.4", + "@radix-ui/react-label": "^2.1.1", + "@radix-ui/react-progress": "^1.1.1", + "@radix-ui/react-slot": "^1.1.1", + "@radix-ui/react-switch": "^1.1.2", + "@radix-ui/react-tabs": "^1.1.2", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "lucide-react": "^0.471.1", + "next": "^15.1.4", + "next-themes": "^0.4.4", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "sonner": "^1.7.1", + "zsa": "0.6.0", + "zsa-react": "0.2.3", + "tailwind-merge": "^2.6.0", + "zod": "3.24.1", + "tailwindcss-animate": "^1.0.7" + }, + "devDependencies": { + "@eslint/eslintrc": "^3", + "@swc/core": "^1.5.7", + "@swc/jest": "^0.2.36", + "@testing-library/jest-dom": "^6.6.3", + "@testing-library/react": "^16.2.0", + "@testing-library/react-hooks": "^8.0.1", + "@types/jest": "^29.5.12", + "@types/node": "^22.10.6", + "@types/react": "^19.0.6", + "@types/react-dom": "^19.0.3", + "dotenv": "^16.4.5", + "dotenv-cli": "^7.4.2", + "eslint": "^9", + "eslint-config-next": "^15.1.4", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", + "jest-html-reporter": "^3.10.2", + "jest-junit": "^16.0.0", + "jest-summary-reporter": "^0.0.2", + "postcss": "^8", + "tailwindcss": "^3.4.1", + "ts-jest": "^29.1.2", + "ts-node": "^10.9.2", + "ts-node-dev": "^2.0.0", + "typescript": "^5" + } +} \ No newline at end of file diff --git a/integ-tests/react/pnpm-lock.yaml b/integ-tests/react/pnpm-lock.yaml new file mode 100644 index 000000000..6ddff3790 --- /dev/null +++ b/integ-tests/react/pnpm-lock.yaml @@ -0,0 +1,9415 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@boundaryml/baml': + specifier: workspace:* + version: link:../../engine/language_client_typescript + '@boundaryml/baml-darwin-arm64': + specifier: workspace:* + version: link:../../engine/language_client_typescript/npm/darwin-arm64 + '@boundaryml/baml-nextjs-plugin': + specifier: workspace:* + version: link:../../typescript/nextjs-plugin + '@radix-ui/react-dropdown-menu': + specifier: ^2.1.4 + version: 2.1.4(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-label': + specifier: ^2.1.1 + version: 2.1.1(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-progress': + specifier: ^1.1.1 + version: 1.1.1(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-slot': + specifier: ^1.1.1 + version: 1.1.1(@types/react@19.0.7)(react@19.0.0) + '@radix-ui/react-switch': + specifier: ^1.1.2 + version: 1.1.2(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-tabs': + specifier: ^1.1.2 + version: 1.1.2(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + class-variance-authority: + specifier: ^0.7.1 + version: 0.7.1 + clsx: + specifier: ^2.1.1 + version: 2.1.1 + lucide-react: + specifier: ^0.471.1 + version: 0.471.1(react@19.0.0) + next: + specifier: ^15.1.4 + version: 15.1.4(@babel/core@7.26.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + next-themes: + specifier: ^0.4.4 + version: 0.4.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react: + specifier: ^19.0.0 + version: 19.0.0 + react-dom: + specifier: ^19.0.0 + version: 19.0.0(react@19.0.0) + sonner: + specifier: ^1.7.1 + version: 1.7.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + tailwind-merge: + specifier: ^2.6.0 + version: 2.6.0 + tailwindcss-animate: + specifier: ^1.0.7 + version: 1.0.7(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.10.9(@swc/helpers@0.5.15))(@types/node@22.10.6)(typescript@5.7.3))) + zod: + specifier: 3.24.1 + version: 3.24.1 + zsa: + specifier: 0.6.0 + version: 0.6.0(zod@3.24.1) + zsa-react: + specifier: 0.2.3 + version: 0.2.3(react@19.0.0)(zod@3.24.1) + devDependencies: + '@eslint/eslintrc': + specifier: ^3 + version: 3.2.0 + '@swc/core': + specifier: ^1.5.7 + version: 1.10.9(@swc/helpers@0.5.15) + '@swc/jest': + specifier: ^0.2.36 + version: 0.2.37(@swc/core@1.10.9(@swc/helpers@0.5.15)) + '@testing-library/jest-dom': + specifier: ^6.6.3 + version: 6.6.3 + '@testing-library/react': + specifier: ^16.2.0 + version: 16.2.0(@testing-library/dom@10.4.0)(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@testing-library/react-hooks': + specifier: ^8.0.1 + version: 8.0.1(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@types/jest': + specifier: ^29.5.12 + version: 29.5.14 + '@types/node': + specifier: ^22.10.6 + version: 22.10.6 + '@types/react': + specifier: ^19.0.6 + version: 19.0.7 + '@types/react-dom': + specifier: ^19.0.3 + version: 19.0.3(@types/react@19.0.7) + dotenv: + specifier: ^16.4.5 + version: 16.4.7 + dotenv-cli: + specifier: ^7.4.2 + version: 7.4.4 + eslint: + specifier: ^9 + version: 9.18.0(jiti@1.21.7) + eslint-config-next: + specifier: ^15.1.4 + version: 15.1.4(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3) + jest: + specifier: ^29.7.0 + version: 29.7.0(@types/node@22.10.6)(ts-node@10.9.2(@swc/core@1.10.9(@swc/helpers@0.5.15))(@types/node@22.10.6)(typescript@5.7.3)) + jest-environment-jsdom: + specifier: ^29.7.0 + version: 29.7.0 + jest-html-reporter: + specifier: ^3.10.2 + version: 3.10.2(jest@29.7.0(@types/node@22.10.6)(ts-node@10.9.2(@swc/core@1.10.9(@swc/helpers@0.5.15))(@types/node@22.10.6)(typescript@5.7.3)))(typescript@5.7.3) + jest-junit: + specifier: ^16.0.0 + version: 16.0.0 + jest-summary-reporter: + specifier: ^0.0.2 + version: 0.0.2 + postcss: + specifier: ^8 + version: 8.5.1 + tailwindcss: + specifier: ^3.4.1 + version: 3.4.17(ts-node@10.9.2(@swc/core@1.10.9(@swc/helpers@0.5.15))(@types/node@22.10.6)(typescript@5.7.3)) + ts-jest: + specifier: ^29.1.2 + version: 29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@22.10.6)(ts-node@10.9.2(@swc/core@1.10.9(@swc/helpers@0.5.15))(@types/node@22.10.6)(typescript@5.7.3)))(typescript@5.7.3) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@swc/core@1.10.9(@swc/helpers@0.5.15))(@types/node@22.10.6)(typescript@5.7.3) + ts-node-dev: + specifier: ^2.0.0 + version: 2.0.0(@swc/core@1.10.9(@swc/helpers@0.5.15))(@types/node@22.10.6)(typescript@5.7.3) + typescript: + specifier: ^5 + version: 5.7.3 + + ../../engine/language_client_typescript: + dependencies: + '@scarf/scarf': + specifier: ^1.3.0 + version: 1.4.0 + devDependencies: + '@biomejs/biome': + specifier: ^1.7.3 + version: 1.9.4 + '@napi-rs/cli': + specifier: 3.0.0-alpha.62 + version: 3.0.0-alpha.62(@emnapi/runtime@1.3.1) + '@types/node': + specifier: ^20.12.11 + version: 20.17.13 + npm-run-all2: + specifier: ^6.1.2 + version: 6.2.6 + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@swc/core@1.10.9(@swc/helpers@0.5.15))(@types/node@20.17.13)(typescript@5.7.3) + typescript: + specifier: ^5.4.5 + version: 5.7.3 + + ../../engine/language_client_typescript/npm/darwin-arm64: {} + + ../../engine/language_client_typescript/npm/darwin-x64: {} + + ../../engine/language_client_typescript/npm/linux-arm64-musl: {} + + ../../engine/language_client_typescript/npm/linux-x64-gnu: {} + + ../../engine/language_client_typescript/npm/linux-x64-musl: {} + + ../../engine/language_client_typescript/npm/win32-x64-msvc: {} + + ../../typescript/nextjs-plugin: + dependencies: + react: + specifier: '*' + version: 19.0.0 + devDependencies: + '@biomejs/biome': + specifier: ^1.9.4 + version: 1.9.4 + '@types/jest': + specifier: ^29.5.14 + version: 29.5.14 + '@types/node': + specifier: ^22.10.6 + version: 22.10.6 + '@types/react': + specifier: ^19.0.6 + version: 19.0.7 + '@types/webpack': + specifier: ^5.28.5 + version: 5.28.5(@swc/core@1.10.9(@swc/helpers@0.5.15)) + jest: + specifier: ^29.7.0 + version: 29.7.0(@types/node@22.10.6)(ts-node@10.9.2(@swc/core@1.10.9(@swc/helpers@0.5.15))(@types/node@22.10.6)(typescript@5.7.3)) + next: + specifier: ^15.1.4 + version: 15.1.4(@babel/core@7.26.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + typescript: + specifier: ^5.7.3 + version: 5.7.3 + webpack: + specifier: ^5.97.1 + version: 5.97.1(@swc/core@1.10.9(@swc/helpers@0.5.15)) + +packages: + + '@adobe/css-tools@4.4.1': + resolution: {integrity: sha512-12WGKBQzjUAI4ayyF4IAtfw2QR/IDoqk6jTddXDhtYTJF9ASmoE1zst7cVtP0aL/F1jUJL5r+JxKXKEgHNbEUQ==} + + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.26.5': + resolution: {integrity: sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.26.0': + resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.26.5': + resolution: {integrity: sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.26.5': + resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.26.5': + resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.26.0': + resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.26.5': + resolution: {integrity: sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-syntax-async-generators@7.8.4': + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-bigint@7.8.3': + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-properties@7.12.13': + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-static-block@7.14.5': + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.26.0': + resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-json-strings@7.8.3': + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.25.9': + resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-numeric-separator@7.10.4': + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-object-rest-spread@7.8.3': + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3': + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-chaining@7.8.3': + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-private-property-in-object@7.14.5': + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-top-level-await@7.14.5': + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.25.9': + resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/runtime@7.26.0': + resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.25.9': + resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.26.5': + resolution: {integrity: sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.26.5': + resolution: {integrity: sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg==} + engines: {node: '>=6.9.0'} + + '@bcoe/v8-coverage@0.2.3': + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + + '@biomejs/biome@1.9.4': + resolution: {integrity: sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==} + engines: {node: '>=14.21.3'} + hasBin: true + + '@biomejs/cli-darwin-arm64@1.9.4': + resolution: {integrity: sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [darwin] + + '@biomejs/cli-darwin-x64@1.9.4': + resolution: {integrity: sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [darwin] + + '@biomejs/cli-linux-arm64-musl@1.9.4': + resolution: {integrity: sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + + '@biomejs/cli-linux-arm64@1.9.4': + resolution: {integrity: sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + + '@biomejs/cli-linux-x64-musl@1.9.4': + resolution: {integrity: sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + + '@biomejs/cli-linux-x64@1.9.4': + resolution: {integrity: sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + + '@biomejs/cli-win32-arm64@1.9.4': + resolution: {integrity: sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [win32] + + '@biomejs/cli-win32-x64@1.9.4': + resolution: {integrity: sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [win32] + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@emnapi/core@1.3.1': + resolution: {integrity: sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog==} + + '@emnapi/runtime@1.3.1': + resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} + + '@emnapi/wasi-threads@1.0.1': + resolution: {integrity: sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==} + + '@eslint-community/eslint-utils@4.4.1': + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.19.1': + resolution: {integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.10.0': + resolution: {integrity: sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.2.0': + resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.18.0': + resolution: {integrity: sha512-fK6L7rxcq6/z+AaQMtiFTkvbHkBLNlwyRxHpKawP0x3u9+NC6MQTnFW+AdpwC6gfHTW0051cokQgtTN2FqlxQA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.5': + resolution: {integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.2.5': + resolution: {integrity: sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@floating-ui/core@1.6.9': + resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==} + + '@floating-ui/dom@1.6.13': + resolution: {integrity: sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==} + + '@floating-ui/react-dom@2.1.2': + resolution: {integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/utils@0.2.9': + resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} + + '@humanwhocodes/retry@0.4.1': + resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} + engines: {node: '>=18.18'} + + '@img/sharp-darwin-arm64@0.33.5': + resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.33.5': + resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.0.4': + resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.0.4': + resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.0.4': + resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linux-arm@1.0.5': + resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} + cpu: [arm] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.0.4': + resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} + cpu: [s390x] + os: [linux] + + '@img/sharp-libvips-linux-x64@1.0.4': + resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} + cpu: [x64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} + cpu: [x64] + os: [linux] + + '@img/sharp-linux-arm64@0.33.5': + resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linux-arm@0.33.5': + resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + + '@img/sharp-linux-s390x@0.33.5': + resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + + '@img/sharp-linux-x64@0.33.5': + resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-linuxmusl-arm64@0.33.5': + resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linuxmusl-x64@0.33.5': + resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-wasm32@0.33.5': + resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-ia32@0.33.5': + resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.33.5': + resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + + '@inquirer/checkbox@2.5.0': + resolution: {integrity: sha512-sMgdETOfi2dUHT8r7TT1BTKOwNvdDGFDXYWtQ2J69SvlYNntk9I/gJe7r5yvMwwsuKnYbuRs3pNhx4tgNck5aA==} + engines: {node: '>=18'} + + '@inquirer/confirm@3.2.0': + resolution: {integrity: sha512-oOIwPs0Dvq5220Z8lGL/6LHRTEr9TgLHmiI99Rj1PJ1p1czTys+olrgBqZk4E2qC0YTzeHprxSQmoHioVdJ7Lw==} + engines: {node: '>=18'} + + '@inquirer/core@9.2.1': + resolution: {integrity: sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==} + engines: {node: '>=18'} + + '@inquirer/editor@2.2.0': + resolution: {integrity: sha512-9KHOpJ+dIL5SZli8lJ6xdaYLPPzB8xB9GZItg39MBybzhxA16vxmszmQFrRwbOA918WA2rvu8xhDEg/p6LXKbw==} + engines: {node: '>=18'} + + '@inquirer/expand@2.3.0': + resolution: {integrity: sha512-qnJsUcOGCSG1e5DTOErmv2BPQqrtT6uzqn1vI/aYGiPKq+FgslGZmtdnXbhuI7IlT7OByDoEEqdnhUnVR2hhLw==} + engines: {node: '>=18'} + + '@inquirer/figures@1.0.9': + resolution: {integrity: sha512-BXvGj0ehzrngHTPTDqUoDT3NXL8U0RxUk2zJm2A66RhCEIWdtU1v6GuUqNAgArW4PQ9CinqIWyHdQgdwOj06zQ==} + engines: {node: '>=18'} + + '@inquirer/input@2.3.0': + resolution: {integrity: sha512-XfnpCStx2xgh1LIRqPXrTNEEByqQWoxsWYzNRSEUxJ5c6EQlhMogJ3vHKu8aXuTacebtaZzMAHwEL0kAflKOBw==} + engines: {node: '>=18'} + + '@inquirer/number@1.1.0': + resolution: {integrity: sha512-ilUnia/GZUtfSZy3YEErXLJ2Sljo/mf9fiKc08n18DdwdmDbOzRcTv65H1jjDvlsAuvdFXf4Sa/aL7iw/NanVA==} + engines: {node: '>=18'} + + '@inquirer/password@2.2.0': + resolution: {integrity: sha512-5otqIpgsPYIshqhgtEwSspBQE40etouR8VIxzpJkv9i0dVHIpyhiivbkH9/dGiMLdyamT54YRdGJLfl8TFnLHg==} + engines: {node: '>=18'} + + '@inquirer/prompts@5.5.0': + resolution: {integrity: sha512-BHDeL0catgHdcHbSFFUddNzvx/imzJMft+tWDPwTm3hfu8/tApk1HrooNngB2Mb4qY+KaRWF+iZqoVUPeslEog==} + engines: {node: '>=18'} + + '@inquirer/rawlist@2.3.0': + resolution: {integrity: sha512-zzfNuINhFF7OLAtGHfhwOW2TlYJyli7lOUoJUXw/uyklcwalV6WRXBXtFIicN8rTRK1XTiPWB4UY+YuW8dsnLQ==} + engines: {node: '>=18'} + + '@inquirer/search@1.1.0': + resolution: {integrity: sha512-h+/5LSj51dx7hp5xOn4QFnUaKeARwUCLs6mIhtkJ0JYPBLmEYjdHSYh7I6GrLg9LwpJ3xeX0FZgAG1q0QdCpVQ==} + engines: {node: '>=18'} + + '@inquirer/select@2.5.0': + resolution: {integrity: sha512-YmDobTItPP3WcEI86GvPo+T2sRHkxxOq/kXmsBjHS5BVXUgvgZ5AfJjkvQvZr03T81NnI3KrrRuMzeuYUQRFOA==} + engines: {node: '>=18'} + + '@inquirer/type@1.5.5': + resolution: {integrity: sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==} + engines: {node: '>=18'} + + '@inquirer/type@2.0.0': + resolution: {integrity: sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==} + engines: {node: '>=18'} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@istanbuljs/load-nyc-config@1.1.0': + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + + '@jest/console@29.7.0': + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/core@29.7.0': + resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/create-cache-key-function@29.7.0': + resolution: {integrity: sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/environment@29.7.0': + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect-utils@29.7.0': + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect@29.7.0': + resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/fake-timers@29.7.0': + resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/globals@29.7.0': + resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/reporters@29.7.0': + resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/schemas@29.6.3': + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/source-map@29.6.3': + resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-result@29.7.0': + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-sequencer@29.7.0': + resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/transform@29.7.0': + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/types@29.6.3': + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/source-map@0.3.6': + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@napi-rs/cli@3.0.0-alpha.62': + resolution: {integrity: sha512-IDUwHAEJZ9ad/s5oyhznrz5ZDcU+SJ6GdP5nb++Wx5MkS4FD9MeS3HfNZdsxkf10pOUPnmvCVFuG4xnLBQYmjw==} + engines: {node: '>= 16'} + hasBin: true + peerDependencies: + '@emnapi/runtime': ^1.1.0 + emnapi: ^1.1.0 + peerDependenciesMeta: + '@emnapi/runtime': + optional: true + emnapi: + optional: true + + '@napi-rs/cross-toolchain@0.0.16': + resolution: {integrity: sha512-jwdjHT5L0m9MH0CmzDwPp0ckn/UO7afHCsPeo7NugHUvYgvlgS7SWhdMVgIgJW2HHqhcW/2nhaLLGpAU1c7QRQ==} + peerDependencies: + '@napi-rs/cross-toolchain-arm64-target-aarch64': ^0.0.16 + '@napi-rs/cross-toolchain-arm64-target-armv7': ^0.0.16 + '@napi-rs/cross-toolchain-arm64-target-x86_64': ^0.0.16 + '@napi-rs/cross-toolchain-x64-target-aarch64': ^0.0.16 + '@napi-rs/cross-toolchain-x64-target-armv7': ^0.0.16 + '@napi-rs/cross-toolchain-x64-target-x86_64': ^0.0.16 + peerDependenciesMeta: + '@napi-rs/cross-toolchain-arm64-target-aarch64': + optional: true + '@napi-rs/cross-toolchain-arm64-target-armv7': + optional: true + '@napi-rs/cross-toolchain-arm64-target-x86_64': + optional: true + '@napi-rs/cross-toolchain-x64-target-aarch64': + optional: true + '@napi-rs/cross-toolchain-x64-target-armv7': + optional: true + '@napi-rs/cross-toolchain-x64-target-x86_64': + optional: true + + '@napi-rs/lzma-android-arm-eabi@1.4.1': + resolution: {integrity: sha512-yenreSpZ9IrqppJOiWDqWMmja7XtSgio9LhtxYwgdILmy/OJTe/mlTYv+FhJBf7hIV9Razu5eBuEa3zKri81IA==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] + + '@napi-rs/lzma-android-arm64@1.4.1': + resolution: {integrity: sha512-piutVBz5B1TNxXeEjub0n/IKI6dMaXPPRbVSXuc4gnZgzcihNDUh68vcLZgYd+IMiACZvBxvx2O3t5nthtph3A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@napi-rs/lzma-darwin-arm64@1.4.1': + resolution: {integrity: sha512-sDfOhQQFqV8lGbpgJN9DqNLBPR7QOfYjcWUv8FOGPaVP1LPJDnrc5uCpRWWEa2zIKmTiO8P9xzIl0TDzrYmghg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@napi-rs/lzma-darwin-x64@1.4.1': + resolution: {integrity: sha512-S5/RbC6EP4QkYy2xhxbfm48ZD9FkysfpWY4Slve0nj5RGGsHvcJBg2Pi69jrTPB/zLKz2SUa0i+RfUt9zvZNaw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@napi-rs/lzma-freebsd-x64@1.4.1': + resolution: {integrity: sha512-4AFnq6aZnclwameSBkDWu5Ftb8y4GwvVXeQXJKbN7hf7O5GG/8QpQB1R1NJw2QORUhpKwjAQUpbkTyhL2GFWWw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@napi-rs/lzma-linux-arm-gnueabihf@1.4.1': + resolution: {integrity: sha512-j5rL1YRIm6rWmmGAvN6DPX6QuRjvFGB93xJ7DTRB47GXW4zHekXae6ivowjJ95vT4Iz4hSWkZbuwAy95eFrWRA==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@napi-rs/lzma-linux-arm64-gnu@1.4.1': + resolution: {integrity: sha512-1XdFGKyTS9m+VrRQYs9uz+ToHf4Jwm0ejHU48k9lT9MPl8jSqzKdVtFzZBPzronHteSynBfKmUq0+HeWmjrsOQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@napi-rs/lzma-linux-arm64-musl@1.4.1': + resolution: {integrity: sha512-9d09tYS0/rBwIk1QTcO2hMZEB/ZpsG2+uFW5am1RHElSWMclObirB1An7b6AMDJcRvcomkOg2GZ9COzrvHKwEA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@napi-rs/lzma-linux-ppc64-gnu@1.4.1': + resolution: {integrity: sha512-UzEkmsgoJ3IOGIRb6kBzNiw+ThUpiighop7dVYfSqlF5juGzwf7YewC57RGn4FoJCvadOCrSm5VikAcgrwVgAw==} + engines: {node: '>= 10'} + cpu: [ppc64] + os: [linux] + + '@napi-rs/lzma-linux-riscv64-gnu@1.4.1': + resolution: {integrity: sha512-9dUKlZ1PdwxTaFF+j3oc+xjlk9nqFwo1NWWOH30uwjl4Rm5Gkv+Fx0pHrzu4kR/iVA+oyQqa9/2uDYnGSTijBA==} + engines: {node: '>= 10'} + cpu: [riscv64] + os: [linux] + + '@napi-rs/lzma-linux-s390x-gnu@1.4.1': + resolution: {integrity: sha512-MOVXUWJSLLCJDCCAlGa39sh7nv9XjvXzCf7QJus7rD8Ciz0mpXNXF9mg0ji7/MZ7pZlKPlXjXDnpVCfFdSEaFQ==} + engines: {node: '>= 10'} + cpu: [s390x] + os: [linux] + + '@napi-rs/lzma-linux-x64-gnu@1.4.1': + resolution: {integrity: sha512-Sxu7aJxU1sDbUTqjqLVDV3DCOAlbsFKvmuCN/S5uXBJd1IF2wJ9jK3NbFzfqTAo5Hudx8Y7kOb6+3K+fYPI1KQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@napi-rs/lzma-linux-x64-musl@1.4.1': + resolution: {integrity: sha512-4I3BeKBQJSE5gF2/VTEv7wCLLjhapeutbCGpZPmDiLHZ74rm9edmNXAlKpdjADQ4YDLJ2GIBzttvwLXkJ9U+cw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@napi-rs/lzma-wasm32-wasi@1.4.1': + resolution: {integrity: sha512-s32HdKqQWbohf6DGWpG9YMODaBdbKJ++JpNr6Ii7821sKf4h/o+p8IRFTOaWdmdJdllEWlRirnd5crA29VivJQ==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@napi-rs/lzma-win32-arm64-msvc@1.4.1': + resolution: {integrity: sha512-ISz+v7ML5mKnjEZ7Kk4Z1BIn411r/fz3tDy9j5yDnwQI0MgTsUQFrIQElGUpULWYs2aYc6EZ9PhECbLBfSjh7A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@napi-rs/lzma-win32-ia32-msvc@1.4.1': + resolution: {integrity: sha512-3WKuCpZBrd7Jrw+h1jSu5XAsRWepMJu0sYuRoA4Y4Cwfu9gI7p5Z5Bc510nfjg7M7xvdpkI4UoW2WY7kBFRYrQ==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + + '@napi-rs/lzma-win32-x64-msvc@1.4.1': + resolution: {integrity: sha512-0ixRo5z1zFXdh62hlrTV+QCTKHK0te5NHKaExOluhtcc6AdpMmpslvM9JhUxNHI+zM46w/DmmcvcOtqsaTmHgg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@napi-rs/lzma@1.4.1': + resolution: {integrity: sha512-5f8K9NHjwHjZKGm3SS+7CFxXQhz8rbg2umBm/9g0xQRXBdYEI31N5z1ACuk9bmBQOusXAq9CArGfs/ZQso2rUA==} + engines: {node: '>= 10'} + + '@napi-rs/tar-android-arm-eabi@0.1.4': + resolution: {integrity: sha512-LMSysWp5AmZj1NOCB2jshc9KCvp4gm7vm0Cra5U2crMvlj/fwGrvv6+EzSw49y8wCkNEcQ8QaGq5NBQKiLogSg==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] + + '@napi-rs/tar-android-arm64@0.1.4': + resolution: {integrity: sha512-A/2rl8xr7F5yOtHVARROoSwjRRDNL1RlXCsg/K+RE5/V9iPBojsJsLpFPilp7InF6bi+z7aYn+yWCD6wSwfF4A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@napi-rs/tar-darwin-arm64@0.1.4': + resolution: {integrity: sha512-mnGBswBRtxDqUwXUZx+f9Uuy2uPssxuvcWFTYgUSZqlS2pg/XIWZdHZhbqWqKGpjpZrYcr+42roytbWlZ+epMA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@napi-rs/tar-darwin-x64@0.1.4': + resolution: {integrity: sha512-I81Fvl/cfnFVBET49xywNd57dXLJPO7jqrjD9Z2bKeXA0v0Zt1cwV1IOOTihFZXJv7kgu6EfNB7oumoLOTqq5A==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@napi-rs/tar-freebsd-x64@0.1.4': + resolution: {integrity: sha512-p5OFr3MqidZHkt9bHV2FgeS6k06g+s0GR2kvj/wm2mIxr7u3/sj3+RTr7GHz5DQq08T7uH85HhsrGYWN3vxmSg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@napi-rs/tar-linux-arm-gnueabihf@0.1.4': + resolution: {integrity: sha512-POp2zb/Yuw6taEmrTlEoQI5S+2HmgfV1VtqGQZgRmCa85NlWLDsR6vbW9euu/6NbLj3ld15cCeJC2oJkv9k/xg==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@napi-rs/tar-linux-arm64-gnu@0.1.4': + resolution: {integrity: sha512-TV+2AppSgJx5U9nk1C9bh1afWcBVnnANJ4SmtqUF6ediHcDS2rLebeI8BGljfnX9F149qbT9gOGN+R8tofpCsg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@napi-rs/tar-linux-arm64-musl@0.1.4': + resolution: {integrity: sha512-UFBvKpYmuQRbgmXuSSPb8mRjq4JRZLYJhqwrWWnlfQP13xK2WB7mL2GhewBgynSH4YKDm6biKhK6U5RrSWEDgw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@napi-rs/tar-linux-ppc64-gnu@0.1.4': + resolution: {integrity: sha512-HT+h6Wv51SKXqks8UBF+KVuNJ09fM1GyO+SvCnDB5MF66tGiI2C6/MSX69zf1ZeqjACds1K/UwKiZCmE76/j9A==} + engines: {node: '>= 10'} + cpu: [ppc64] + os: [linux] + + '@napi-rs/tar-linux-s390x-gnu@0.1.4': + resolution: {integrity: sha512-SJ+HSr281Y6cgJrQ4nkYbXaTHAmTLv/FZm5k9ZRA6Khml//ZoWi7CiT8dnPeD4QxYwCzAFA4aYMUOQJM/mk2/w==} + engines: {node: '>= 10'} + cpu: [s390x] + os: [linux] + + '@napi-rs/tar-linux-x64-gnu@0.1.4': + resolution: {integrity: sha512-LrF0lRFiFOkO40jfgTdF8dRTvYOLV52fdZ/YnJuBodNcxqEl9rChO3v5Uag//sy0me85FjqtobQNRQP8Nd80dA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@napi-rs/tar-linux-x64-musl@0.1.4': + resolution: {integrity: sha512-etGUWbs+Tk1PtzgyWrVzXa2fQrHNKSc/whHm+4x1Num8Oz+wGdjCDTUktYxAVy33PKZhdblVxxE83QXxkgjneQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@napi-rs/tar-wasm32-wasi@0.1.4': + resolution: {integrity: sha512-mANkm93AKy+OspkOBAC5WI64SopXT0VawdTjpeGW1OgyUSJWdUB5rhs3I7B/HW1bi5tsUoZOZQe3rVgYdfzA6g==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@napi-rs/tar-win32-arm64-msvc@0.1.4': + resolution: {integrity: sha512-/5/gp6WR9b36CysJDe8AdyjNeje+NqCniYJz/AZc+UvpKwG8MG9nS6TMpJ9IgrQacJXvc4lWXxYyn6uuPQVvaQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@napi-rs/tar-win32-ia32-msvc@0.1.4': + resolution: {integrity: sha512-HnQi0op9BqJqPekKXhEAI1TWkLtavxKDBDGXNhUSm2//jriMeRykahUcKoUUxr1UGrmtxpc5dx0cThBt13paEw==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + + '@napi-rs/tar-win32-x64-msvc@0.1.4': + resolution: {integrity: sha512-vy2ebEXerblni6XOgi3a27+CnI6PdQ9Phy/ru5HM4bVd/oulAJohmynAmBAB1AmXg1NLbAEWu43nATEDp5O2hA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@napi-rs/tar@0.1.4': + resolution: {integrity: sha512-hDsvmMZY8tl2CcLfjnTeE1o5W1eGTSL+ZIX8YEybtcJwA+Cc8SNHb7l6JqMnGcjOrWBZbHt8tzTN+W7qHS5Wmg==} + engines: {node: '>= 10'} + + '@napi-rs/wasm-runtime@0.2.6': + resolution: {integrity: sha512-z8YVS3XszxFTO73iwvFDNpQIzdMmSDTP/mB3E/ucR37V3Sx57hSExcXyMoNwaucWxnsWf4xfbZv0iZ30jr0M4Q==} + + '@napi-rs/wasm-tools-android-arm-eabi@0.0.2': + resolution: {integrity: sha512-/b+UU3suXjW4P0DzHRNdrnebQtFKcQf/YMeZJH+xUlKgvwli5kbmWjx8Wqqz0VETVkUTuPqJMBDIVLyc+14FGw==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] + + '@napi-rs/wasm-tools-android-arm64@0.0.2': + resolution: {integrity: sha512-j57GbDflwJdZtT8pZj5fOV4JAP+LdKN+wzsUYs+QRUoBqpWbbUANudolqfw63bkS9sD4z7fbCuz8iwtJqzxTVA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@napi-rs/wasm-tools-darwin-arm64@0.0.2': + resolution: {integrity: sha512-P2ChgWgVuv9GwmbxN89R84KzIImoTqXINteEixUvmkdnhyFiR+I8deNs89Yed+5w8QLC6MEfrtRqLP9YI+NoQA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@napi-rs/wasm-tools-darwin-x64@0.0.2': + resolution: {integrity: sha512-T/kQQ0gt8+wau1Z821PKVAD76QhmwVoLs2CT7Z9tTBs2pJvwSCP0C/kQiQAHcJIMi7A2E9Ab/Mez0BERy50EFA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@napi-rs/wasm-tools-freebsd-x64@0.0.2': + resolution: {integrity: sha512-GnnHu+r5sfzuxC/1J5UMF/h3BOZnHb3NQZ5hmbCfZYCKzpzRxrAJhzRunlbRN+v0x8M/49dztVTYR3s7K4ooAw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@napi-rs/wasm-tools-linux-arm64-gnu@0.0.2': + resolution: {integrity: sha512-KnZdLT0OnKb1CG2kdt3/WvM43vr9i+FEwXCvSOVC/6Tsifz7ynhMg7LAVESILd03HubzQJfg9nbRsk0bQ+IOwg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@napi-rs/wasm-tools-linux-arm64-musl@0.0.2': + resolution: {integrity: sha512-HkpZOID2U8P6pWqK3mqZ8bxU5xcuT3iA2fO+jrxn78h006iYgfNmdc5JaVhHnHazMmk32xKhSV4iV0VUh8UWDg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@napi-rs/wasm-tools-linux-x64-gnu@0.0.2': + resolution: {integrity: sha512-YksJWBCyOalB9ogtP9+/dZKP+vR6+h7BmzMXaXMT71WW/GvIsifMVgv+DY/FRSNJQupp5Y+ugjqVAOUOc/G65g==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@napi-rs/wasm-tools-linux-x64-musl@0.0.2': + resolution: {integrity: sha512-sPtRxPMdw05KdTcxgSPMmSXG2+PiK3vJ/l2+g9hvjnnKtvslJN2Hr7j8zgzuoKRAUFPaJVe6+D2xVh5cpdqhww==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@napi-rs/wasm-tools-wasm32-wasi@0.0.2': + resolution: {integrity: sha512-muRvZK7AIuo88G2AxYx3gA59rHMQgoN004saQkBvXnz3K/DVHKfTZ6TtUebss8zI3dURU6xExL8drxFWYxjEbQ==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@napi-rs/wasm-tools-win32-arm64-msvc@0.0.2': + resolution: {integrity: sha512-Cn13WQ+tpFqdVwx0DIWKbsI9auFyzVZV4F5UNOUeDt6GgOL+NndgJul0Pc9bSU6fi03AylMPfF/nTCaDWO2Wgw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@napi-rs/wasm-tools-win32-ia32-msvc@0.0.2': + resolution: {integrity: sha512-xsg5DkIQi82a8rcx6246Y3XC8TIqHamY+/C6sIlPLaZEuHctDkMECAw0AANwRf5vN//D2oo2oljOuoYtB1GOKw==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + + '@napi-rs/wasm-tools-win32-x64-msvc@0.0.2': + resolution: {integrity: sha512-yHigltEt33eq8bappvKsIliz4MxfMPn1M+NWbIFRWN+IS1Z57mhmc1osuk+IRXrSlq0Tom0R6MYN1jpkZKz81Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@napi-rs/wasm-tools@0.0.2': + resolution: {integrity: sha512-kBvDQCP5BLw2TxTENXLp3Of7vVEx0uyIye824JHE4dduzzOHVgSoOFVhVqAT3Fx/hLV445RVWfEqQbXMg4w/Mw==} + engines: {node: '>= 10'} + + '@next/env@15.1.4': + resolution: {integrity: sha512-2fZ5YZjedi5AGaeoaC0B20zGntEHRhi2SdWcu61i48BllODcAmmtj8n7YarSPt4DaTsJaBFdxQAVEVzgmx2Zpw==} + + '@next/eslint-plugin-next@15.1.4': + resolution: {integrity: sha512-HwlEXwCK3sr6zmVGEvWBjW9tBFs1Oe6hTmTLoFQtpm4As5HCdu8jfSE0XJOp7uhfEGLniIx8yrGxEWwNnY0fmQ==} + + '@next/swc-darwin-arm64@15.1.4': + resolution: {integrity: sha512-wBEMBs+np+R5ozN1F8Y8d/Dycns2COhRnkxRc+rvnbXke5uZBHkUGFgWxfTXn5rx7OLijuUhyfB+gC/ap58dDw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@next/swc-darwin-x64@15.1.4': + resolution: {integrity: sha512-7sgf5rM7Z81V9w48F02Zz6DgEJulavC0jadab4ZsJ+K2sxMNK0/BtF8J8J3CxnsJN3DGcIdC260wEKssKTukUw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@next/swc-linux-arm64-gnu@15.1.4': + resolution: {integrity: sha512-JaZlIMNaJenfd55kjaLWMfok+vWBlcRxqnRoZrhFQrhM1uAehP3R0+Aoe+bZOogqlZvAz53nY/k3ZyuKDtT2zQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-arm64-musl@15.1.4': + resolution: {integrity: sha512-7EBBjNoyTO2ipMDgCiORpwwOf5tIueFntKjcN3NK+GAQD7OzFJe84p7a2eQUeWdpzZvhVXuAtIen8QcH71ZCOQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-x64-gnu@15.1.4': + resolution: {integrity: sha512-9TGEgOycqZFuADyFqwmK/9g6S0FYZ3tphR4ebcmCwhL8Y12FW8pIBKJvSwV+UBjMkokstGNH+9F8F031JZKpHw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-linux-x64-musl@15.1.4': + resolution: {integrity: sha512-0578bLRVDJOh+LdIoKvgNDz77+Bd85c5JrFgnlbI1SM3WmEQvsjxTA8ATu9Z9FCiIS/AliVAW2DV/BDwpXbtiQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-win32-arm64-msvc@15.1.4': + resolution: {integrity: sha512-JgFCiV4libQavwII+kncMCl30st0JVxpPOtzWcAI2jtum4HjYaclobKhj+JsRu5tFqMtA5CJIa0MvYyuu9xjjQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@next/swc-win32-x64-msvc@15.1.4': + resolution: {integrity: sha512-xxsJy9wzq7FR5SqPCUqdgSXiNXrMuidgckBa8nH9HtjjxsilgcN6VgXF6tZ3uEWuVEadotQJI8/9EQ6guTC4Yw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@nolyfill/is-core-module@1.0.39': + resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} + engines: {node: '>=12.4.0'} + + '@octokit/auth-token@5.1.1': + resolution: {integrity: sha512-rh3G3wDO8J9wSjfI436JUKzHIxq8NaiL0tVeB2aXmG6p/9859aUOAjA9pmSPNGGZxfwmaJ9ozOJImuNVJdpvbA==} + engines: {node: '>= 18'} + + '@octokit/core@6.1.3': + resolution: {integrity: sha512-z+j7DixNnfpdToYsOutStDgeRzJSMnbj8T1C/oQjB6Aa+kRfNjs/Fn7W6c8bmlt6mfy3FkgeKBRnDjxQow5dow==} + engines: {node: '>= 18'} + + '@octokit/endpoint@10.1.2': + resolution: {integrity: sha512-XybpFv9Ms4hX5OCHMZqyODYqGTZ3H6K6Vva+M9LR7ib/xr1y1ZnlChYv9H680y77Vd/i/k+thXApeRASBQkzhA==} + engines: {node: '>= 18'} + + '@octokit/graphql@8.1.2': + resolution: {integrity: sha512-bdlj/CJVjpaz06NBpfHhp4kGJaRZfz7AzC+6EwUImRtrwIw8dIgJ63Xg0OzV9pRn3rIzrt5c2sa++BL0JJ8GLw==} + engines: {node: '>= 18'} + + '@octokit/openapi-types@23.0.1': + resolution: {integrity: sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g==} + + '@octokit/plugin-paginate-rest@11.4.0': + resolution: {integrity: sha512-ttpGck5AYWkwMkMazNCZMqxKqIq1fJBNxBfsFwwfyYKTf914jKkLF0POMS3YkPBwp5g1c2Y4L79gDz01GhSr1g==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '>=6' + + '@octokit/plugin-request-log@5.3.1': + resolution: {integrity: sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '>=6' + + '@octokit/plugin-rest-endpoint-methods@13.3.0': + resolution: {integrity: sha512-LUm44shlmkp/6VC+qQgHl3W5vzUP99ZM54zH6BuqkJK4DqfFLhegANd+fM4YRLapTvPm4049iG7F3haANKMYvQ==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '>=6' + + '@octokit/request-error@6.1.6': + resolution: {integrity: sha512-pqnVKYo/at0NuOjinrgcQYpEbv4snvP3bKMRqHaD9kIsk9u1LCpb2smHZi8/qJfgeNqLo5hNW4Z7FezNdEo0xg==} + engines: {node: '>= 18'} + + '@octokit/request@9.1.4': + resolution: {integrity: sha512-tMbOwGm6wDII6vygP3wUVqFTw3Aoo0FnVQyhihh8vVq12uO3P+vQZeo2CKMpWtPSogpACD0yyZAlVlQnjW71DA==} + engines: {node: '>= 18'} + + '@octokit/rest@21.1.0': + resolution: {integrity: sha512-93iLxcKDJboUpmnUyeJ6cRIi7z7cqTZT1K7kRK4LobGxwTwpsa+2tQQbRQNGy7IFDEAmrtkf4F4wBj3D5rVlJQ==} + engines: {node: '>= 18'} + + '@octokit/types@13.7.0': + resolution: {integrity: sha512-BXfRP+3P3IN6fd4uF3SniaHKOO4UXWBfkdR3vA8mIvaoO/wLjGN5qivUtW0QRitBHHMcfC41SLhNVYIZZE+wkA==} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@radix-ui/primitive@1.1.1': + resolution: {integrity: sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==} + + '@radix-ui/react-arrow@1.1.1': + resolution: {integrity: sha512-NaVpZfmv8SKeZbn4ijN2V3jlHA9ngBG16VnIIm22nUR0Yk8KUALyBxT3KYEUnNuch9sTE8UTsS3whzBgKOL30w==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-collection@1.1.1': + resolution: {integrity: sha512-LwT3pSho9Dljg+wY2KN2mrrh6y3qELfftINERIzBUO9e0N+t0oMTyn3k9iv+ZqgrwGkRnLpNJrsMv9BZlt2yuA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-compose-refs@1.1.1': + resolution: {integrity: sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-context@1.1.1': + resolution: {integrity: sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-direction@1.1.0': + resolution: {integrity: sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-dismissable-layer@1.1.3': + resolution: {integrity: sha512-onrWn/72lQoEucDmJnr8uczSNTujT0vJnA/X5+3AkChVPowr8n1yvIKIabhWyMQeMvvmdpsvcyDqx3X1LEXCPg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-dropdown-menu@2.1.4': + resolution: {integrity: sha512-iXU1Ab5ecM+yEepGAWK8ZhMyKX4ubFdCNtol4sT9D0OVErG9PNElfx3TQhjw7n7BC5nFVz68/5//clWy+8TXzA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-focus-guards@1.1.1': + resolution: {integrity: sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-focus-scope@1.1.1': + resolution: {integrity: sha512-01omzJAYRxXdG2/he/+xy+c8a8gCydoQ1yOxnWNcRhrrBW5W+RQJ22EK1SaO8tb3WoUsuEw7mJjBozPzihDFjA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-id@1.1.0': + resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-label@2.1.1': + resolution: {integrity: sha512-UUw5E4e/2+4kFMH7+YxORXGWggtY6sM8WIwh5RZchhLuUg2H1hc98Py+pr8HMz6rdaYrK2t296ZEjYLOCO5uUw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-menu@2.1.4': + resolution: {integrity: sha512-BnOgVoL6YYdHAG6DtXONaR29Eq4nvbi8rutrV/xlr3RQCMMb3yqP85Qiw/3NReozrSW+4dfLkK+rc1hb4wPU/A==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-popper@1.2.1': + resolution: {integrity: sha512-3kn5Me69L+jv82EKRuQCXdYyf1DqHwD2U/sxoNgBGCB7K9TRc3bQamQ+5EPM9EvyPdli0W41sROd+ZU1dTCztw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-portal@1.1.3': + resolution: {integrity: sha512-NciRqhXnGojhT93RPyDaMPfLH3ZSl4jjIFbZQ1b/vxvZEdHsBZ49wP9w8L3HzUQwep01LcWtkUvm0OVB5JAHTw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-presence@1.1.2': + resolution: {integrity: sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-primitive@2.0.1': + resolution: {integrity: sha512-sHCWTtxwNn3L3fH8qAfnF3WbUZycW93SM1j3NFDzXBiz8D6F5UTTy8G1+WFEaiCdvCVRJWj6N2R4Xq6HdiHmDg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-progress@1.1.1': + resolution: {integrity: sha512-6diOawA84f/eMxFHcWut0aE1C2kyE9dOyCTQOMRR2C/qPiXz/X0SaiA/RLbapQaXUCmy0/hLMf9meSccD1N0pA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-roving-focus@1.1.1': + resolution: {integrity: sha512-QE1RoxPGJ/Nm8Qmk0PxP8ojmoaS67i0s7hVssS7KuI2FQoc/uzVlZsqKfQvxPE6D8hICCPHJ4D88zNhT3OOmkw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-slot@1.1.1': + resolution: {integrity: sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-switch@1.1.2': + resolution: {integrity: sha512-zGukiWHjEdBCRyXvKR6iXAQG6qXm2esuAD6kDOi9Cn+1X6ev3ASo4+CsYaD6Fov9r/AQFekqnD/7+V0Cs6/98g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-tabs@1.1.2': + resolution: {integrity: sha512-9u/tQJMcC2aGq7KXpGivMm1mgq7oRJKXphDwdypPd/j21j/2znamPU8WkXgnhUaTrSFNIt8XhOyCAupg8/GbwQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-use-callback-ref@1.1.0': + resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-controllable-state@1.1.0': + resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-escape-keydown@1.1.0': + resolution: {integrity: sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-layout-effect@1.1.0': + resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-previous@1.1.0': + resolution: {integrity: sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-rect@1.1.0': + resolution: {integrity: sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-size@1.1.0': + resolution: {integrity: sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/rect@1.1.0': + resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==} + + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + + '@rushstack/eslint-patch@1.10.5': + resolution: {integrity: sha512-kkKUDVlII2DQiKy7UstOR1ErJP8kUKAQ4oa+SQtM0K+lPdmmjj0YnnxBgtTVYH7mUKtbsxeFC9y0AmK7Yb78/A==} + + '@scarf/scarf@1.4.0': + resolution: {integrity: sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==} + + '@sinclair/typebox@0.27.8': + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + + '@sinonjs/commons@3.0.1': + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} + + '@sinonjs/fake-timers@10.3.0': + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + + '@swc/core-darwin-arm64@1.10.9': + resolution: {integrity: sha512-XTHLtijFervv2B+i1ngM993umhSj9K1IeMomvU/Db84Asjur2XmD4KXt9QPnGDRFgv2kLSjZ+DDL25Qk0f4r+w==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + + '@swc/core-darwin-x64@1.10.9': + resolution: {integrity: sha512-bi3el9/FV/la8HIsolSjeDar+tM7m9AmSF1w7X6ZByW2qgc4Z1tmq0A4M4H9aH3TfHesZbfq8hgaNtc2/VtzzQ==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + + '@swc/core-linux-arm-gnueabihf@1.10.9': + resolution: {integrity: sha512-xsLHV02S+RTDuI+UJBkA2muNk/s0ETRpoc1K/gNt0i8BqTurPYkrvGDDALN9+leiUPydHvZi9P1qdExbgUJnXw==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + + '@swc/core-linux-arm64-gnu@1.10.9': + resolution: {integrity: sha512-41hJgPoGhIa12U6Tud+yLF/m64YA3mGut3TmBEkj2R7rdJdE0mljdtR0tf4J2RoQaWZPPi0DBSqGdROiAEx9dg==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-arm64-musl@1.10.9': + resolution: {integrity: sha512-DUMRhl49b9r7bLg9oNzCdW4lLcDJKrRBn87Iq5APPvixsm1auGnsVQycGkQcDDKvVllxIFSbmCYzjagx3l8Hnw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-x64-gnu@1.10.9': + resolution: {integrity: sha512-xW0y88vQvmzYo3Gn7yFnY03TfHMwuca4aFH3ZmhwDNOYHmTOi6fmhAkg/13F/NrwjMYO+GnF5uJTjdjb3B6tdQ==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-linux-x64-musl@1.10.9': + resolution: {integrity: sha512-jYs32BEx+CPVuxN6NdsWEpdehjnmAag25jyJzwjQx+NCGYwHEV3bT5y8TX4eFhaVB1rafmqJOlYQPs4+MSyGCg==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-win32-arm64-msvc@1.10.9': + resolution: {integrity: sha512-Uhh5T3Fq3Nyom96Bm3ACBNASH3iqNc76in7ewZz8PooUqeTIO8aZpsghnncjctRNE9T819/8btpiFIhHo3sKtg==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + + '@swc/core-win32-ia32-msvc@1.10.9': + resolution: {integrity: sha512-bD5BpbojEsDfrAvT+1qjQPf5RCKLg4UL+3Uwm019+ZR02hd8qO538BlOnQdOqRqccu+75DF6aRglQ7AJ24Cs0Q==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + + '@swc/core-win32-x64-msvc@1.10.9': + resolution: {integrity: sha512-NwkuUNeBBQnAaXVvcGw8Zr6RR8kylyjFUnlYZZ3G0QkQZ4rYLXYTafAmiRjrfzgVb0LcMF/sBzJvGOk7SwtIDg==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@swc/core@1.10.9': + resolution: {integrity: sha512-MQ97YSXu2oibzm7wi4GNa7hhndjLuVt/lmO2sq53+P37oZmyg/JQ/IYYtSiC6UGK3+cHoiVAykrK+glxLjJbag==} + engines: {node: '>=10'} + peerDependencies: + '@swc/helpers': '*' + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + + '@swc/jest@0.2.37': + resolution: {integrity: sha512-CR2BHhmXKGxTiFr21DYPRHQunLkX3mNIFGFkxBGji6r9uyIR5zftTOVYj1e0sFNMV2H7mf/+vpaglqaryBtqfQ==} + engines: {npm: '>= 7.0.0'} + peerDependencies: + '@swc/core': '*' + + '@swc/types@0.1.17': + resolution: {integrity: sha512-V5gRru+aD8YVyCOMAjMpWR1Ui577DD5KSJsHP8RAxopAH22jFz6GZd/qxqjO6MJHQhcsjvjOFXyDhyLQUnMveQ==} + + '@testing-library/dom@10.4.0': + resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} + engines: {node: '>=18'} + + '@testing-library/jest-dom@6.6.3': + resolution: {integrity: sha512-IteBhl4XqYNkM54f4ejhLRJiZNqcSCoXUOG2CPK7qbD322KjQozM4kHQOfkG2oln9b9HTYqs+Sae8vBATubxxA==} + engines: {node: '>=14', npm: '>=6', yarn: '>=1'} + + '@testing-library/react-hooks@8.0.1': + resolution: {integrity: sha512-Aqhl2IVmLt8IovEVarNDFuJDVWVvhnr9/GCU6UUnrYXwgDFF9h2L2o2P9KBni1AST5sT6riAyoukFLyjQUgD/g==} + engines: {node: '>=12'} + peerDependencies: + '@types/react': ^16.9.0 || ^17.0.0 + react: ^16.9.0 || ^17.0.0 + react-dom: ^16.9.0 || ^17.0.0 + react-test-renderer: ^16.9.0 || ^17.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + react-dom: + optional: true + react-test-renderer: + optional: true + + '@testing-library/react@16.2.0': + resolution: {integrity: sha512-2cSskAvA1QNtKc8Y9VJQRv0tm3hLVgxRGDB+KYhIaPQJ1I+RHbhIXcM+zClKXzMes/wshsMVzf4B9vS4IZpqDQ==} + engines: {node: '>=18'} + peerDependencies: + '@testing-library/dom': ^10.0.0 + '@types/react': ^18.0.0 || ^19.0.0 + '@types/react-dom': ^18.0.0 || ^19.0.0 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@tootallnate/once@2.0.0': + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} + + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@tybys/wasm-util@0.9.0': + resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} + + '@types/aria-query@5.0.4': + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + + '@types/eslint-scope@3.7.7': + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + + '@types/eslint@9.6.1': + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/graceful-fs@4.1.9': + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + + '@types/istanbul-lib-coverage@2.0.6': + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + + '@types/istanbul-lib-report@3.0.3': + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + + '@types/istanbul-reports@3.0.4': + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + + '@types/jest@29.5.14': + resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} + + '@types/jsdom@20.0.1': + resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/mute-stream@0.0.4': + resolution: {integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==} + + '@types/node@20.17.13': + resolution: {integrity: sha512-RNf+4dEeV69PIvyp++4IKM2vnLXtmp/JovfeQm5P5+qpKb6wHoH7INywLdZ7z+gVX46kgBP/fwJJvZYaHxtdyw==} + + '@types/node@22.10.6': + resolution: {integrity: sha512-qNiuwC4ZDAUNcY47xgaSuS92cjf8JbSUoaKS77bmLG1rU7MlATVSiw/IlrjtIyyskXBZ8KkNfjK/P5na7rgXbQ==} + + '@types/react-dom@19.0.3': + resolution: {integrity: sha512-0Knk+HJiMP/qOZgMyNFamlIjw9OFCsyC2ZbigmEEyXXixgre6IQpm/4V+r3qH4GC1JPvRJKInw+on2rV6YZLeA==} + peerDependencies: + '@types/react': ^19.0.0 + + '@types/react@19.0.7': + resolution: {integrity: sha512-MoFsEJKkAtZCrC1r6CM8U22GzhG7u2Wir8ons/aCKH6MBdD1ibV24zOSSkdZVUKqN5i396zG5VKLYZ3yaUZdLA==} + + '@types/stack-utils@2.0.3': + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + + '@types/strip-bom@3.0.0': + resolution: {integrity: sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ==} + + '@types/strip-json-comments@0.0.30': + resolution: {integrity: sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==} + + '@types/tough-cookie@4.0.5': + resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + + '@types/webpack@5.28.5': + resolution: {integrity: sha512-wR87cgvxj3p6D0Crt1r5avwqffqPXUkNlnQ1mjU93G7gCuFjufZR4I6j8cz5g1F1tTYpfOOFvly+cmIQwL9wvw==} + + '@types/wrap-ansi@3.0.0': + resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==} + + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + + '@types/yargs@17.0.33': + resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} + + '@typescript-eslint/eslint-plugin@8.20.0': + resolution: {integrity: sha512-naduuphVw5StFfqp4Gq4WhIBE2gN1GEmMUExpJYknZJdRnc+2gDzB8Z3+5+/Kv33hPQRDGzQO/0opHE72lZZ6A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/parser@8.20.0': + resolution: {integrity: sha512-gKXG7A5HMyjDIedBi6bUrDcun8GIjnI8qOwVLiY3rx6T/sHP/19XLJOnIq/FgQvWLHja5JN/LSE7eklNBr612g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/scope-manager@8.20.0': + resolution: {integrity: sha512-J7+VkpeGzhOt3FeG1+SzhiMj9NzGD/M6KoGn9f4dbz3YzK9hvbhVTmLj/HiTp9DazIzJ8B4XcM80LrR9Dm1rJw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@8.20.0': + resolution: {integrity: sha512-bPC+j71GGvA7rVNAHAtOjbVXbLN5PkwqMvy1cwGeaxUoRQXVuKCebRoLzm+IPW/NtFFpstn1ummSIasD5t60GA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/types@8.20.0': + resolution: {integrity: sha512-cqaMiY72CkP+2xZRrFt3ExRBu0WmVitN/rYPZErA80mHjHx/Svgp8yfbzkJmDoQ/whcytOPO9/IZXnOc+wigRA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.20.0': + resolution: {integrity: sha512-Y7ncuy78bJqHI35NwzWol8E0X7XkRVS4K4P4TCyzWkOJih5NDvtoRDW4Ba9YJJoB2igm9yXDdYI/+fkiiAxPzA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/utils@8.20.0': + resolution: {integrity: sha512-dq70RUw6UK9ei7vxc4KQtBRk7qkHZv447OUZ6RPQMQl71I3NZxQJX/f32Smr+iqWrB02pHKn2yAdHBb0KNrRMA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/visitor-keys@8.20.0': + resolution: {integrity: sha512-v/BpkeeYAsPkKCkR8BDwcno0llhzWVqPOamQrAEMdpZav2Y9OVjd9dwJyBLJWwf335B5DmlifECIkZRJCaGaHA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@webassemblyjs/ast@1.14.1': + resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} + + '@webassemblyjs/floating-point-hex-parser@1.13.2': + resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} + + '@webassemblyjs/helper-api-error@1.13.2': + resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} + + '@webassemblyjs/helper-buffer@1.14.1': + resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} + + '@webassemblyjs/helper-numbers@1.13.2': + resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} + + '@webassemblyjs/helper-wasm-bytecode@1.13.2': + resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} + + '@webassemblyjs/helper-wasm-section@1.14.1': + resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} + + '@webassemblyjs/ieee754@1.13.2': + resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} + + '@webassemblyjs/leb128@1.13.2': + resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} + + '@webassemblyjs/utf8@1.13.2': + resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} + + '@webassemblyjs/wasm-edit@1.14.1': + resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} + + '@webassemblyjs/wasm-gen@1.14.1': + resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} + + '@webassemblyjs/wasm-opt@1.14.1': + resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} + + '@webassemblyjs/wasm-parser@1.14.1': + resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} + + '@webassemblyjs/wast-printer@1.14.1': + resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} + + '@xtuc/ieee754@1.2.0': + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + + '@xtuc/long@4.2.2': + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + + abab@2.0.6: + resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} + deprecated: Use your platform's native atob() and btoa() methods instead + + acorn-globals@7.0.1: + resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} + + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + ajv-formats@2.1.1: + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-keywords@3.5.2: + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + + ajv-keywords@5.1.0: + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} + peerDependencies: + ajv: ^8.8.2 + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-hidden@1.2.4: + resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==} + engines: {node: '>=10'} + + aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + + array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + engines: {node: '>= 0.4'} + + array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} + + array.prototype.findlastindex@1.2.5: + resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} + engines: {node: '>= 0.4'} + + array.prototype.flat@1.3.3: + resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.3: + resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} + engines: {node: '>= 0.4'} + + array.prototype.tosorted@1.1.4: + resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} + + ast-types-flow@0.0.8: + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + axe-core@4.10.2: + resolution: {integrity: sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==} + engines: {node: '>=4'} + + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + + babel-jest@29.7.0: + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + + babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + + babel-plugin-jest-hoist@29.6.3: + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + babel-preset-current-node-syntax@1.1.0: + resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==} + peerDependencies: + '@babel/core': ^7.0.0 + + babel-preset-jest@29.6.3: + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + before-after-hook@3.0.2: + resolution: {integrity: sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.24.4: + resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bs-logger@0.2.6: + resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} + engines: {node: '>= 6'} + + bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + + call-bind-apply-helpers@1.0.1: + resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.3: + resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + caniuse-lite@1.0.30001692: + resolution: {integrity: sha512-A95VKan0kdtrsnMubMKxEKUKImOPSuCpYgxSQBo036P5YYgVIcOYJEgt/txJWqObiRQeISNCfef9nvlQ0vbV7A==} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@3.0.0: + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chrome-trace-event@1.0.4: + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} + engines: {node: '>=6.0'} + + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + cjs-module-lexer@1.4.1: + resolution: {integrity: sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==} + + class-variance-authority@0.7.1: + resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + + client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + + clipanion@3.2.1: + resolution: {integrity: sha512-dYFdjLb7y1ajfxQopN05mylEpK9ZX0sO1/RfMXdfmwjlIsPkbh4p7A682x++zFPLDCo1x3p82dtljHf5cW2LKA==} + peerDependencies: + typanion: '*' + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + + collect-v8-coverage@1.0.2: + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + create-jest@29.7.0: + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + css.escape@1.5.1: + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + cssom@0.3.8: + resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} + + cssom@0.5.0: + resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} + + cssstyle@2.3.0: + resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} + engines: {node: '>=8'} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + damerau-levenshtein@1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + + data-urls@3.0.2: + resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} + engines: {node: '>=12'} + + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} + + dateformat@3.0.2: + resolution: {integrity: sha512-EelsCzH0gMC2YmXuMeaZ3c6md1sUJQxyb1XXc4xaisi/K6qKukqZhKPrEQyRkdNIncgYyLoDTReq0nNyuKerTg==} + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decimal.js@10.4.3: + resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} + + dedent@1.5.3: + resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + engines: {node: '>=8'} + + detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + + detect-node-es@1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + + didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + + dom-accessibility-api@0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + + dom-accessibility-api@0.6.3: + resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} + + domexception@4.0.0: + resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} + engines: {node: '>=12'} + deprecated: Use your platform's native DOMException instead + + dotenv-cli@7.4.4: + resolution: {integrity: sha512-XkBYCG0tPIes+YZr4SpfFv76SQrV/LeCE8CI7JSEMi3VR9MvTihCGTOtbIexD6i2mXF+6px7trb1imVCXSNMDw==} + hasBin: true + + dotenv-expand@10.0.0: + resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} + engines: {node: '>=12'} + + dotenv@16.4.7: + resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} + engines: {node: '>=12'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + dynamic-dedupe@0.3.0: + resolution: {integrity: sha512-ssuANeD+z97meYOqd50e04Ze5qp4bPqo8cCkI4TRjZkzAUgIDTrXV1R8QCdINpiI+hw14+rYazvTRdQrz0/rFQ==} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + + electron-to-chromium@1.5.82: + resolution: {integrity: sha512-Zq16uk1hfQhyGx5GpwPAYDwddJuSGhtRhgOA2mCxANYaDT79nAeGnaXogMGng4KqLaJUVnOnuL0+TDop9nLOiA==} + + emittery@0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + enhanced-resolve@5.18.0: + resolution: {integrity: sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==} + engines: {node: '>=10.13.0'} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + es-abstract@1.23.9: + resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-iterator-helpers@1.2.1: + resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} + engines: {node: '>= 0.4'} + + es-module-lexer@1.6.0: + resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} + + es-object-atoms@1.1.0: + resolution: {integrity: sha512-Ujz8Al/KfOVR7fkaghAB1WvnLsdYxHDWmfoi2vlA2jZWRg31XhIC1a4B+/I24muD8iSbHxJ1JkrfqmWb65P/Mw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + + es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} + engines: {node: '>= 0.4'} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + + eslint-config-next@15.1.4: + resolution: {integrity: sha512-u9+7lFmfhKNgGjhQ9tBeyCFsPJyq0SvGioMJBngPC7HXUpR0U+ckEwQR48s7TrRNHra1REm6evGL2ie38agALg==} + peerDependencies: + eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true + + eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + + eslint-import-resolver-typescript@3.7.0: + resolution: {integrity: sha512-Vrwyi8HHxY97K5ebydMtffsWAn1SCR9eol49eCd5fJS4O1WV7PaAjbcjmbfJJSMz/t4Mal212Uz/fQZrOB8mow==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + eslint-plugin-import-x: '*' + peerDependenciesMeta: + eslint-plugin-import: + optional: true + eslint-plugin-import-x: + optional: true + + eslint-module-utils@2.12.0: + resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + + eslint-plugin-import@2.31.0: + resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + + eslint-plugin-jsx-a11y@6.10.2: + resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 + + eslint-plugin-react-hooks@5.1.0: + resolution: {integrity: sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + + eslint-plugin-react@7.37.4: + resolution: {integrity: sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + + eslint-scope@8.2.0: + resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.18.0: + resolution: {integrity: sha512-+waTfRWQlSbpt3KWE+CjrPPYnbq9kfZIYUqapc0uBXyjTp8aYXZDsUH16m39Ryq3NjAVP4tjuF7KaukeqoCoaA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + + expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + + fast-content-type-parse@2.0.1: + resolution: {integrity: sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-uri@3.0.5: + resolution: {integrity: sha512-5JnBCWpFlMo0a3ciDy/JckMzzv1U9coZrIhedq+HXxxUfDTAiS0LA8OKVao4G9BxmCVck/jtA5r3KAtRWEyD8Q==} + + fastq@1.18.0: + resolution: {integrity: sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==} + + fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.3.2: + resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + + form-data@4.0.1: + resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} + engines: {node: '>= 6'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-intrinsic@1.2.7: + resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} + engines: {node: '>= 0.4'} + + get-nonce@1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} + + get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} + + get-tsconfig@4.8.1: + resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + html-encoding-sniffer@3.0.0: + resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} + engines: {node: '>=12'} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + http-proxy-agent@5.0.0: + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + import-local@3.2.0: + resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} + engines: {node: '>=8'} + hasBin: true + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + inquirer@10.2.2: + resolution: {integrity: sha512-tyao/4Vo36XnUItZ7DnUXX4f1jVao2mSrleV/5IPtW/XAEA26hRVsbc68nuTEKWcr5vMP/1mVoT2O7u8H4v1Vg==} + engines: {node: '>=18'} + + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} + + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + + is-async-function@2.1.0: + resolution: {integrity: sha512-GExz9MtyhlZyXYLxzlJRj5WUCE661zhDa1Yna52CN57AJsymh+DvXXjyveSioqSRdxvUrdKdvqB1b5cVKsNpWQ==} + engines: {node: '>= 0.4'} + + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-boolean-object@1.2.1: + resolution: {integrity: sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==} + engines: {node: '>= 0.4'} + + is-bun-module@1.3.0: + resolution: {integrity: sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} + + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + + is-generator-function@1.1.0: + resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} + + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.1.0: + resolution: {integrity: sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==} + engines: {node: '>= 0.4'} + + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@6.0.3: + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} + engines: {node: '>=10'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + + istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} + + iterator.prototype@1.1.5: + resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} + engines: {node: '>= 0.4'} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jake@10.9.2: + resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} + engines: {node: '>=10'} + hasBin: true + + jest-changed-files@29.7.0: + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-circus@29.7.0: + resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-cli@29.7.0: + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jest-config@29.7.0: + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + + jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-docblock@29.7.0: + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-each@29.7.0: + resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-environment-jsdom@29.7.0: + resolution: {integrity: sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + + jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-haste-map@29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-html-reporter@3.10.2: + resolution: {integrity: sha512-XRBa5ylHPUQoo8aJXEEdKsTruieTdlPbRktMx9WG9evMTxzJEKGFMaw5x+sQxJuClWdNR72GGwbOaz+6HIlksA==} + engines: {node: '>=4.8.3'} + peerDependencies: + jest: 19.x - 29.x + typescript: ^3.7.x || ^4.3.x || ^5.x + + jest-junit@16.0.0: + resolution: {integrity: sha512-A94mmw6NfJab4Fg/BlvVOUXzXgF0XIH6EmTgJ5NDPp4xoKq0Kr7sErb+4Xs9nZvu58pJojz5RFGpqnZYJTrRfQ==} + engines: {node: '>=10.12.0'} + + jest-leak-detector@29.7.0: + resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-matcher-utils@29.7.0: + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-message-util@29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-mock@29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-pnp-resolver@1.2.3: + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + + jest-regex-util@29.6.3: + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve-dependencies@29.7.0: + resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve@29.7.0: + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runner@29.7.0: + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runtime@29.7.0: + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-snapshot@29.7.0: + resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-summary-reporter@0.0.2: + resolution: {integrity: sha512-rZ3ThO57l+ZJCxF74cXIGQU3cV9I7bSBe1ElBp0taE3x2JghgD69bNCKt0LvpVQX5azTRHG7LmcjIpwriVnTng==} + + jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-validate@29.7.0: + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-watcher@29.7.0: + resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + + jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest@29.7.0: + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jiti@1.21.7: + resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} + hasBin: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsdom@20.0.3: + resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} + engines: {node: '>=14'} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-parse-even-better-errors@3.0.2: + resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + + jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + language-subtag-registry@0.3.23: + resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} + + language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + loader-runner@4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + + lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lucide-react@0.471.1: + resolution: {integrity: sha512-syOxwPhf62gg2YOsz72HRn+CIpeudFy67AeKnSR8Hn/fIIF4ubhNbRF+pQ2CaJrl+X9Os4PL87z2DXQi3DVeDA==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + memorystream@0.3.1: + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} + engines: {node: '>= 0.10.0'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + mute-stream@1.0.0: + resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + nanoid@3.3.8: + resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + next-themes@0.4.4: + resolution: {integrity: sha512-LDQ2qIOJF0VnuVrrMSMLrWGjRMkq+0mpgl6e0juCLqdJ+oo8Q84JRWT6Wh11VDQKkMMe+dVzDKLWs5n87T+PkQ==} + peerDependencies: + react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + + next@15.1.4: + resolution: {integrity: sha512-mTaq9dwaSuwwOrcu3ebjDYObekkxRnXpuVL21zotM8qE2W0HBOdVIdg2Li9QjMEZrj73LN96LcWcz62V19FjAg==} + engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.41.2 + babel-plugin-react-compiler: '*' + react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + babel-plugin-react-compiler: + optional: true + sass: + optional: true + + node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + npm-normalize-package-bin@3.0.1: + resolution: {integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-run-all2@6.2.6: + resolution: {integrity: sha512-tkyb4pc0Zb0oOswCb5tORPk9MvVL6gcDq1cMItQHmsbVk1skk7YF6cH+UU2GxeNLHMuk6wFEOSmEmJ2cnAK1jg==} + engines: {node: ^14.18.0 || ^16.13.0 || >=18.0.0, npm: '>= 8'} + hasBin: true + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + nwsapi@2.2.16: + resolution: {integrity: sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + + object-inspect@1.13.3: + resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} + + object.entries@1.1.8: + resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + + object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} + + object.values@1.2.1: + resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} + engines: {node: '>= 0.4'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse5@7.2.1: + resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + postcss-import@15.1.0: + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + + postcss-js@4.0.1: + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + + postcss-load-config@4.0.2: + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + + postcss@8.5.1: + resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + psl@1.15.0: + resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + + querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + react-dom@19.0.0: + resolution: {integrity: sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==} + peerDependencies: + react: ^19.0.0 + + react-error-boundary@3.1.4: + resolution: {integrity: sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==} + engines: {node: '>=10', npm: '>=6'} + peerDependencies: + react: '>=16.13.1' + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + + react-remove-scroll-bar@2.3.8: + resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-remove-scroll@2.6.2: + resolution: {integrity: sha512-KmONPx5fnlXYJQqC62Q+lwIeAk64ws/cUw6omIumRzMRPqgnYqhSSti99nbj0Ry13bv7dF+BKn7NB+OqkdZGTw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react-style-singleton@2.2.3: + resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react@19.0.0: + resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} + engines: {node: '>=0.10.0'} + + read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + + read-package-json-fast@3.0.2: + resolution: {integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + + resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + resolve.exports@2.0.3: + resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} + engines: {node: '>=10'} + + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} + hasBin: true + + resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rimraf@2.7.1: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + run-async@3.0.0: + resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} + engines: {node: '>=0.12.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + + safe-array-concat@1.1.3: + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} + engines: {node: '>=0.4'} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + saxes@6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} + + scheduler@0.25.0: + resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==} + + schema-utils@3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} + engines: {node: '>= 10.13.0'} + + schema-utils@4.3.0: + resolution: {integrity: sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==} + engines: {node: '>= 10.13.0'} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + + sharp@0.33.5: + resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shell-quote@1.8.2: + resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} + engines: {node: '>= 0.4'} + + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + sonner@1.7.1: + resolution: {integrity: sha512-b6LHBfH32SoVasRFECrdY8p8s7hXPDn3OHUFbZZbiB1ctLS9Gdh6rpX2dVrpQA0kiL5jcRzDDldwwLkSKk3+QQ==} + peerDependencies: + react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc + react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + stable-hash@0.0.4: + resolution: {integrity: sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==} + + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + + streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + + string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string.prototype.includes@2.0.1: + resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} + engines: {node: '>= 0.4'} + + string.prototype.matchall@4.0.12: + resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} + engines: {node: '>= 0.4'} + + string.prototype.repeat@1.0.0: + resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + + string.prototype.trim@1.2.10: + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.9: + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + engines: {node: '>= 0.4'} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + styled-jsx@5.1.6: + resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + + sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + + tailwind-merge@2.6.0: + resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==} + + tailwindcss-animate@1.0.7: + resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders' + + tailwindcss@3.4.17: + resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} + engines: {node: '>=14.0.0'} + hasBin: true + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + terser-webpack-plugin@5.3.11: + resolution: {integrity: sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + + terser@5.37.0: + resolution: {integrity: sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==} + engines: {node: '>=10'} + hasBin: true + + test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + + tough-cookie@4.1.4: + resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} + engines: {node: '>=6'} + + tr46@3.0.0: + resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} + engines: {node: '>=12'} + + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + + ts-api-utils@2.0.0: + resolution: {integrity: sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + ts-jest@29.2.5: + resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==} + engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/transform': ^29.0.0 + '@jest/types': ^29.0.0 + babel-jest: ^29.0.0 + esbuild: '*' + jest: ^29.0.0 + typescript: '>=4.3 <6' + peerDependenciesMeta: + '@babel/core': + optional: true + '@jest/transform': + optional: true + '@jest/types': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + + ts-node-dev@2.0.0: + resolution: {integrity: sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w==} + engines: {node: '>=0.8.0'} + hasBin: true + peerDependencies: + node-notifier: '*' + typescript: '*' + peerDependenciesMeta: + node-notifier: + optional: true + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + tsconfig@7.0.0: + resolution: {integrity: sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + typanion@3.14.0: + resolution: {integrity: sha512-ZW/lVMRabETuYCd9O9ZvMhAh8GslSqaUjxmK/JLPCh6l73CvLBiuXswj/+7LdnWOgYsQ130FqLzFz5aGT4I3Ug==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + engines: {node: '>= 0.4'} + + typescript@5.7.3: + resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} + engines: {node: '>=14.17'} + hasBin: true + + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} + + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + + universal-user-agent@7.0.2: + resolution: {integrity: sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==} + + universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + + update-browserslist-db@1.1.2: + resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + + use-callback-ref@1.3.3: + resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + use-sidecar@1.1.3: + resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + v8-to-istanbul@9.3.0: + resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} + engines: {node: '>=10.12.0'} + + w3c-xmlserializer@4.0.0: + resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} + engines: {node: '>=14'} + + walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + + wasm-sjlj@1.0.6: + resolution: {integrity: sha512-pjaKtLJejlWm6+okPV2X1A6nIsRDD4qeK97eCh8DP8KXi3Nzn/HY01vpHhZHlhDri12eZqipjm8HhdTVw+ATxw==} + + watchpack@2.4.2: + resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} + engines: {node: '>=10.13.0'} + + webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + + webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + + webpack@5.97.1: + resolution: {integrity: sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + + whatwg-encoding@2.0.0: + resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} + engines: {node: '>=12'} + + whatwg-mimetype@3.0.0: + resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} + engines: {node: '>=12'} + + whatwg-url@11.0.0: + resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} + engines: {node: '>=12'} + + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.18: + resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + which@3.0.1: + resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + write-file-atomic@4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xml-name-validator@4.0.0: + resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} + engines: {node: '>=12'} + + xml@1.0.1: + resolution: {integrity: sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==} + + xmlbuilder@15.0.0: + resolution: {integrity: sha512-KLu/G0DoWhkncQ9eHSI6s0/w+T4TM7rQaLhtCaL6tORv8jFlJPlnGumsgTcGfYeS1qZ/IHqrvDG7zJZ4d7e+nw==} + engines: {node: '>=8.0'} + + xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yaml@2.7.0: + resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} + engines: {node: '>= 14'} + hasBin: true + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + yoctocolors-cjs@2.1.2: + resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} + engines: {node: '>=18'} + + zod@3.24.1: + resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} + + zsa-react@0.2.3: + resolution: {integrity: sha512-THCoIIhtEU3jXTrNBM/PBc0PyHCekizSGEc+fg0LGo1NM1J02LFQN7ICR948X25IjtkZdvxUZmT0+M73GG8eEw==} + peerDependencies: + react: ^18.0.0 || ^19.0.0 + zod: ^3.23.5 + + zsa@0.6.0: + resolution: {integrity: sha512-Pq3X4T0dna5s4dIevYOJiRdM3DUHRvEHS2q1AH/bvkPSh640u+9veVj5zmzmbL0A6cpXMYagwKsR4keGOc0jPQ==} + peerDependencies: + zod: ^3.23.5 + +snapshots: + + '@adobe/css-tools@4.4.1': {} + + '@alloc/quick-lru@5.2.0': {} + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.26.5': {} + + '@babel/core@7.26.0': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.5 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helpers': 7.26.0 + '@babel/parser': 7.26.5 + '@babel/template': 7.25.9 + '@babel/traverse': 7.26.5 + '@babel/types': 7.26.5 + convert-source-map: 2.0.0 + debug: 4.4.0 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.26.5': + dependencies: + '@babel/parser': 7.26.5 + '@babel/types': 7.26.5 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + + '@babel/helper-compilation-targets@7.26.5': + dependencies: + '@babel/compat-data': 7.26.5 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.4 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-module-imports@7.25.9': + dependencies: + '@babel/traverse': 7.26.5 + '@babel/types': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/helper-plugin-utils@7.26.5': {} + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helpers@7.26.0': + dependencies: + '@babel/template': 7.25.9 + '@babel/types': 7.26.5 + + '@babel/parser@7.26.5': + dependencies: + '@babel/types': 7.26.5 + + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/runtime@7.26.0': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/template@7.25.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.5 + '@babel/types': 7.26.5 + + '@babel/traverse@7.26.5': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.5 + '@babel/parser': 7.26.5 + '@babel/template': 7.25.9 + '@babel/types': 7.26.5 + debug: 4.4.0 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.26.5': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@bcoe/v8-coverage@0.2.3': {} + + '@biomejs/biome@1.9.4': + optionalDependencies: + '@biomejs/cli-darwin-arm64': 1.9.4 + '@biomejs/cli-darwin-x64': 1.9.4 + '@biomejs/cli-linux-arm64': 1.9.4 + '@biomejs/cli-linux-arm64-musl': 1.9.4 + '@biomejs/cli-linux-x64': 1.9.4 + '@biomejs/cli-linux-x64-musl': 1.9.4 + '@biomejs/cli-win32-arm64': 1.9.4 + '@biomejs/cli-win32-x64': 1.9.4 + + '@biomejs/cli-darwin-arm64@1.9.4': + optional: true + + '@biomejs/cli-darwin-x64@1.9.4': + optional: true + + '@biomejs/cli-linux-arm64-musl@1.9.4': + optional: true + + '@biomejs/cli-linux-arm64@1.9.4': + optional: true + + '@biomejs/cli-linux-x64-musl@1.9.4': + optional: true + + '@biomejs/cli-linux-x64@1.9.4': + optional: true + + '@biomejs/cli-win32-arm64@1.9.4': + optional: true + + '@biomejs/cli-win32-x64@1.9.4': + optional: true + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@emnapi/core@1.3.1': + dependencies: + '@emnapi/wasi-threads': 1.0.1 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.3.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.0.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@eslint-community/eslint-utils@4.4.1(eslint@9.18.0(jiti@1.21.7))': + dependencies: + eslint: 9.18.0(jiti@1.21.7) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/config-array@0.19.1': + dependencies: + '@eslint/object-schema': 2.1.5 + debug: 4.4.0 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/core@0.10.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.2.0': + dependencies: + ajv: 6.12.6 + debug: 4.4.0 + espree: 10.3.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.18.0': {} + + '@eslint/object-schema@2.1.5': {} + + '@eslint/plugin-kit@0.2.5': + dependencies: + '@eslint/core': 0.10.0 + levn: 0.4.1 + + '@floating-ui/core@1.6.9': + dependencies: + '@floating-ui/utils': 0.2.9 + + '@floating-ui/dom@1.6.13': + dependencies: + '@floating-ui/core': 1.6.9 + '@floating-ui/utils': 0.2.9 + + '@floating-ui/react-dom@2.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@floating-ui/dom': 1.6.13 + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + + '@floating-ui/utils@0.2.9': {} + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.6': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.3.1': {} + + '@humanwhocodes/retry@0.4.1': {} + + '@img/sharp-darwin-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.0.4 + optional: true + + '@img/sharp-darwin-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.0.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.0.5': + optional: true + + '@img/sharp-libvips-linux-s390x@1.0.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + optional: true + + '@img/sharp-linux-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.0.4 + optional: true + + '@img/sharp-linux-arm@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.0.5 + optional: true + + '@img/sharp-linux-s390x@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.0.4 + optional: true + + '@img/sharp-linux-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.0.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + optional: true + + '@img/sharp-wasm32@0.33.5': + dependencies: + '@emnapi/runtime': 1.3.1 + optional: true + + '@img/sharp-win32-ia32@0.33.5': + optional: true + + '@img/sharp-win32-x64@0.33.5': + optional: true + + '@inquirer/checkbox@2.5.0': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/figures': 1.0.9 + '@inquirer/type': 1.5.5 + ansi-escapes: 4.3.2 + yoctocolors-cjs: 2.1.2 + + '@inquirer/confirm@3.2.0': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 1.5.5 + + '@inquirer/core@9.2.1': + dependencies: + '@inquirer/figures': 1.0.9 + '@inquirer/type': 2.0.0 + '@types/mute-stream': 0.0.4 + '@types/node': 22.10.6 + '@types/wrap-ansi': 3.0.0 + ansi-escapes: 4.3.2 + cli-width: 4.1.0 + mute-stream: 1.0.0 + signal-exit: 4.1.0 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.2 + + '@inquirer/editor@2.2.0': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 1.5.5 + external-editor: 3.1.0 + + '@inquirer/expand@2.3.0': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 1.5.5 + yoctocolors-cjs: 2.1.2 + + '@inquirer/figures@1.0.9': {} + + '@inquirer/input@2.3.0': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 1.5.5 + + '@inquirer/number@1.1.0': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 1.5.5 + + '@inquirer/password@2.2.0': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 1.5.5 + ansi-escapes: 4.3.2 + + '@inquirer/prompts@5.5.0': + dependencies: + '@inquirer/checkbox': 2.5.0 + '@inquirer/confirm': 3.2.0 + '@inquirer/editor': 2.2.0 + '@inquirer/expand': 2.3.0 + '@inquirer/input': 2.3.0 + '@inquirer/number': 1.1.0 + '@inquirer/password': 2.2.0 + '@inquirer/rawlist': 2.3.0 + '@inquirer/search': 1.1.0 + '@inquirer/select': 2.5.0 + + '@inquirer/rawlist@2.3.0': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 1.5.5 + yoctocolors-cjs: 2.1.2 + + '@inquirer/search@1.1.0': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/figures': 1.0.9 + '@inquirer/type': 1.5.5 + yoctocolors-cjs: 2.1.2 + + '@inquirer/select@2.5.0': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/figures': 1.0.9 + '@inquirer/type': 1.5.5 + ansi-escapes: 4.3.2 + yoctocolors-cjs: 2.1.2 + + '@inquirer/type@1.5.5': + dependencies: + mute-stream: 1.0.0 + + '@inquirer/type@2.0.0': + dependencies: + mute-stream: 1.0.0 + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@istanbuljs/load-nyc-config@1.1.0': + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + + '@istanbuljs/schema@0.1.3': {} + + '@jest/console@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@types/node': 22.10.6 + chalk: 4.1.2 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + + '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.10.9(@swc/helpers@0.5.15))(@types/node@22.10.6)(typescript@5.7.3))': + dependencies: + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.10.6 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@22.10.6)(ts-node@10.9.2(@swc/core@1.10.9(@swc/helpers@0.5.15))(@types/node@22.10.6)(typescript@5.7.3)) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + + '@jest/create-cache-key-function@29.7.0': + dependencies: + '@jest/types': 29.6.3 + + '@jest/environment@29.7.0': + dependencies: + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.10.6 + jest-mock: 29.7.0 + + '@jest/expect-utils@29.7.0': + dependencies: + jest-get-type: 29.6.3 + + '@jest/expect@29.7.0': + dependencies: + expect: 29.7.0 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + + '@jest/fake-timers@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@sinonjs/fake-timers': 10.3.0 + '@types/node': 22.10.6 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + '@jest/globals@29.7.0': + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/types': 29.6.3 + jest-mock: 29.7.0 + transitivePeerDependencies: + - supports-color + + '@jest/reporters@29.7.0': + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 + '@types/node': 22.10.6 + chalk: 4.1.2 + collect-v8-coverage: 1.0.2 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 6.0.3 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.7 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + jest-worker: 29.7.0 + slash: 3.0.0 + string-length: 4.0.2 + strip-ansi: 6.0.1 + v8-to-istanbul: 9.3.0 + transitivePeerDependencies: + - supports-color + + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.8 + + '@jest/source-map@29.6.3': + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + callsites: 3.1.0 + graceful-fs: 4.2.11 + + '@jest/test-result@29.7.0': + dependencies: + '@jest/console': 29.7.0 + '@jest/types': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.2 + + '@jest/test-sequencer@29.7.0': + dependencies: + '@jest/test-result': 29.7.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + slash: 3.0.0 + + '@jest/transform@29.7.0': + dependencies: + '@babel/core': 7.26.0 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + micromatch: 4.0.8 + pirates: 4.0.6 + slash: 3.0.0 + write-file-atomic: 4.0.2 + transitivePeerDependencies: + - supports-color + + '@jest/types@29.6.3': + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 22.10.6 + '@types/yargs': 17.0.33 + chalk: 4.1.2 + + '@jridgewell/gen-mapping@0.3.8': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/source-map@0.3.6': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@napi-rs/cli@3.0.0-alpha.62(@emnapi/runtime@1.3.1)': + dependencies: + '@napi-rs/cross-toolchain': 0.0.16 + '@napi-rs/wasm-tools': 0.0.2 + '@octokit/rest': 21.1.0 + clipanion: 3.2.1(typanion@3.14.0) + colorette: 2.0.20 + debug: 4.4.0 + inquirer: 10.2.2 + js-yaml: 4.1.0 + lodash-es: 4.17.21 + semver: 7.6.3 + toml: 3.0.0 + typanion: 3.14.0 + wasm-sjlj: 1.0.6 + optionalDependencies: + '@emnapi/runtime': 1.3.1 + transitivePeerDependencies: + - '@napi-rs/cross-toolchain-arm64-target-aarch64' + - '@napi-rs/cross-toolchain-arm64-target-armv7' + - '@napi-rs/cross-toolchain-arm64-target-x86_64' + - '@napi-rs/cross-toolchain-x64-target-aarch64' + - '@napi-rs/cross-toolchain-x64-target-armv7' + - '@napi-rs/cross-toolchain-x64-target-x86_64' + - supports-color + + '@napi-rs/cross-toolchain@0.0.16': + dependencies: + '@napi-rs/lzma': 1.4.1 + '@napi-rs/tar': 0.1.4 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + + '@napi-rs/lzma-android-arm-eabi@1.4.1': + optional: true + + '@napi-rs/lzma-android-arm64@1.4.1': + optional: true + + '@napi-rs/lzma-darwin-arm64@1.4.1': + optional: true + + '@napi-rs/lzma-darwin-x64@1.4.1': + optional: true + + '@napi-rs/lzma-freebsd-x64@1.4.1': + optional: true + + '@napi-rs/lzma-linux-arm-gnueabihf@1.4.1': + optional: true + + '@napi-rs/lzma-linux-arm64-gnu@1.4.1': + optional: true + + '@napi-rs/lzma-linux-arm64-musl@1.4.1': + optional: true + + '@napi-rs/lzma-linux-ppc64-gnu@1.4.1': + optional: true + + '@napi-rs/lzma-linux-riscv64-gnu@1.4.1': + optional: true + + '@napi-rs/lzma-linux-s390x-gnu@1.4.1': + optional: true + + '@napi-rs/lzma-linux-x64-gnu@1.4.1': + optional: true + + '@napi-rs/lzma-linux-x64-musl@1.4.1': + optional: true + + '@napi-rs/lzma-wasm32-wasi@1.4.1': + dependencies: + '@napi-rs/wasm-runtime': 0.2.6 + optional: true + + '@napi-rs/lzma-win32-arm64-msvc@1.4.1': + optional: true + + '@napi-rs/lzma-win32-ia32-msvc@1.4.1': + optional: true + + '@napi-rs/lzma-win32-x64-msvc@1.4.1': + optional: true + + '@napi-rs/lzma@1.4.1': + optionalDependencies: + '@napi-rs/lzma-android-arm-eabi': 1.4.1 + '@napi-rs/lzma-android-arm64': 1.4.1 + '@napi-rs/lzma-darwin-arm64': 1.4.1 + '@napi-rs/lzma-darwin-x64': 1.4.1 + '@napi-rs/lzma-freebsd-x64': 1.4.1 + '@napi-rs/lzma-linux-arm-gnueabihf': 1.4.1 + '@napi-rs/lzma-linux-arm64-gnu': 1.4.1 + '@napi-rs/lzma-linux-arm64-musl': 1.4.1 + '@napi-rs/lzma-linux-ppc64-gnu': 1.4.1 + '@napi-rs/lzma-linux-riscv64-gnu': 1.4.1 + '@napi-rs/lzma-linux-s390x-gnu': 1.4.1 + '@napi-rs/lzma-linux-x64-gnu': 1.4.1 + '@napi-rs/lzma-linux-x64-musl': 1.4.1 + '@napi-rs/lzma-wasm32-wasi': 1.4.1 + '@napi-rs/lzma-win32-arm64-msvc': 1.4.1 + '@napi-rs/lzma-win32-ia32-msvc': 1.4.1 + '@napi-rs/lzma-win32-x64-msvc': 1.4.1 + + '@napi-rs/tar-android-arm-eabi@0.1.4': + optional: true + + '@napi-rs/tar-android-arm64@0.1.4': + optional: true + + '@napi-rs/tar-darwin-arm64@0.1.4': + optional: true + + '@napi-rs/tar-darwin-x64@0.1.4': + optional: true + + '@napi-rs/tar-freebsd-x64@0.1.4': + optional: true + + '@napi-rs/tar-linux-arm-gnueabihf@0.1.4': + optional: true + + '@napi-rs/tar-linux-arm64-gnu@0.1.4': + optional: true + + '@napi-rs/tar-linux-arm64-musl@0.1.4': + optional: true + + '@napi-rs/tar-linux-ppc64-gnu@0.1.4': + optional: true + + '@napi-rs/tar-linux-s390x-gnu@0.1.4': + optional: true + + '@napi-rs/tar-linux-x64-gnu@0.1.4': + optional: true + + '@napi-rs/tar-linux-x64-musl@0.1.4': + optional: true + + '@napi-rs/tar-wasm32-wasi@0.1.4': + dependencies: + '@napi-rs/wasm-runtime': 0.2.6 + optional: true + + '@napi-rs/tar-win32-arm64-msvc@0.1.4': + optional: true + + '@napi-rs/tar-win32-ia32-msvc@0.1.4': + optional: true + + '@napi-rs/tar-win32-x64-msvc@0.1.4': + optional: true + + '@napi-rs/tar@0.1.4': + optionalDependencies: + '@napi-rs/tar-android-arm-eabi': 0.1.4 + '@napi-rs/tar-android-arm64': 0.1.4 + '@napi-rs/tar-darwin-arm64': 0.1.4 + '@napi-rs/tar-darwin-x64': 0.1.4 + '@napi-rs/tar-freebsd-x64': 0.1.4 + '@napi-rs/tar-linux-arm-gnueabihf': 0.1.4 + '@napi-rs/tar-linux-arm64-gnu': 0.1.4 + '@napi-rs/tar-linux-arm64-musl': 0.1.4 + '@napi-rs/tar-linux-ppc64-gnu': 0.1.4 + '@napi-rs/tar-linux-s390x-gnu': 0.1.4 + '@napi-rs/tar-linux-x64-gnu': 0.1.4 + '@napi-rs/tar-linux-x64-musl': 0.1.4 + '@napi-rs/tar-wasm32-wasi': 0.1.4 + '@napi-rs/tar-win32-arm64-msvc': 0.1.4 + '@napi-rs/tar-win32-ia32-msvc': 0.1.4 + '@napi-rs/tar-win32-x64-msvc': 0.1.4 + + '@napi-rs/wasm-runtime@0.2.6': + dependencies: + '@emnapi/core': 1.3.1 + '@emnapi/runtime': 1.3.1 + '@tybys/wasm-util': 0.9.0 + optional: true + + '@napi-rs/wasm-tools-android-arm-eabi@0.0.2': + optional: true + + '@napi-rs/wasm-tools-android-arm64@0.0.2': + optional: true + + '@napi-rs/wasm-tools-darwin-arm64@0.0.2': + optional: true + + '@napi-rs/wasm-tools-darwin-x64@0.0.2': + optional: true + + '@napi-rs/wasm-tools-freebsd-x64@0.0.2': + optional: true + + '@napi-rs/wasm-tools-linux-arm64-gnu@0.0.2': + optional: true + + '@napi-rs/wasm-tools-linux-arm64-musl@0.0.2': + optional: true + + '@napi-rs/wasm-tools-linux-x64-gnu@0.0.2': + optional: true + + '@napi-rs/wasm-tools-linux-x64-musl@0.0.2': + optional: true + + '@napi-rs/wasm-tools-wasm32-wasi@0.0.2': + dependencies: + '@napi-rs/wasm-runtime': 0.2.6 + optional: true + + '@napi-rs/wasm-tools-win32-arm64-msvc@0.0.2': + optional: true + + '@napi-rs/wasm-tools-win32-ia32-msvc@0.0.2': + optional: true + + '@napi-rs/wasm-tools-win32-x64-msvc@0.0.2': + optional: true + + '@napi-rs/wasm-tools@0.0.2': + optionalDependencies: + '@napi-rs/wasm-tools-android-arm-eabi': 0.0.2 + '@napi-rs/wasm-tools-android-arm64': 0.0.2 + '@napi-rs/wasm-tools-darwin-arm64': 0.0.2 + '@napi-rs/wasm-tools-darwin-x64': 0.0.2 + '@napi-rs/wasm-tools-freebsd-x64': 0.0.2 + '@napi-rs/wasm-tools-linux-arm64-gnu': 0.0.2 + '@napi-rs/wasm-tools-linux-arm64-musl': 0.0.2 + '@napi-rs/wasm-tools-linux-x64-gnu': 0.0.2 + '@napi-rs/wasm-tools-linux-x64-musl': 0.0.2 + '@napi-rs/wasm-tools-wasm32-wasi': 0.0.2 + '@napi-rs/wasm-tools-win32-arm64-msvc': 0.0.2 + '@napi-rs/wasm-tools-win32-ia32-msvc': 0.0.2 + '@napi-rs/wasm-tools-win32-x64-msvc': 0.0.2 + + '@next/env@15.1.4': {} + + '@next/eslint-plugin-next@15.1.4': + dependencies: + fast-glob: 3.3.1 + + '@next/swc-darwin-arm64@15.1.4': + optional: true + + '@next/swc-darwin-x64@15.1.4': + optional: true + + '@next/swc-linux-arm64-gnu@15.1.4': + optional: true + + '@next/swc-linux-arm64-musl@15.1.4': + optional: true + + '@next/swc-linux-x64-gnu@15.1.4': + optional: true + + '@next/swc-linux-x64-musl@15.1.4': + optional: true + + '@next/swc-win32-arm64-msvc@15.1.4': + optional: true + + '@next/swc-win32-x64-msvc@15.1.4': + optional: true + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.18.0 + + '@nolyfill/is-core-module@1.0.39': {} + + '@octokit/auth-token@5.1.1': {} + + '@octokit/core@6.1.3': + dependencies: + '@octokit/auth-token': 5.1.1 + '@octokit/graphql': 8.1.2 + '@octokit/request': 9.1.4 + '@octokit/request-error': 6.1.6 + '@octokit/types': 13.7.0 + before-after-hook: 3.0.2 + universal-user-agent: 7.0.2 + + '@octokit/endpoint@10.1.2': + dependencies: + '@octokit/types': 13.7.0 + universal-user-agent: 7.0.2 + + '@octokit/graphql@8.1.2': + dependencies: + '@octokit/request': 9.1.4 + '@octokit/types': 13.7.0 + universal-user-agent: 7.0.2 + + '@octokit/openapi-types@23.0.1': {} + + '@octokit/plugin-paginate-rest@11.4.0(@octokit/core@6.1.3)': + dependencies: + '@octokit/core': 6.1.3 + '@octokit/types': 13.7.0 + + '@octokit/plugin-request-log@5.3.1(@octokit/core@6.1.3)': + dependencies: + '@octokit/core': 6.1.3 + + '@octokit/plugin-rest-endpoint-methods@13.3.0(@octokit/core@6.1.3)': + dependencies: + '@octokit/core': 6.1.3 + '@octokit/types': 13.7.0 + + '@octokit/request-error@6.1.6': + dependencies: + '@octokit/types': 13.7.0 + + '@octokit/request@9.1.4': + dependencies: + '@octokit/endpoint': 10.1.2 + '@octokit/request-error': 6.1.6 + '@octokit/types': 13.7.0 + fast-content-type-parse: 2.0.1 + universal-user-agent: 7.0.2 + + '@octokit/rest@21.1.0': + dependencies: + '@octokit/core': 6.1.3 + '@octokit/plugin-paginate-rest': 11.4.0(@octokit/core@6.1.3) + '@octokit/plugin-request-log': 5.3.1(@octokit/core@6.1.3) + '@octokit/plugin-rest-endpoint-methods': 13.3.0(@octokit/core@6.1.3) + + '@octokit/types@13.7.0': + dependencies: + '@octokit/openapi-types': 23.0.1 + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@radix-ui/primitive@1.1.1': {} + + '@radix-ui/react-arrow@1.1.1(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.7 + '@types/react-dom': 19.0.3(@types/react@19.0.7) + + '@radix-ui/react-collection@1.1.1(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.7)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.7)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-slot': 1.1.1(@types/react@19.0.7)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.7 + '@types/react-dom': 19.0.3(@types/react@19.0.7) + + '@radix-ui/react-compose-refs@1.1.1(@types/react@19.0.7)(react@19.0.0)': + dependencies: + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.7 + + '@radix-ui/react-context@1.1.1(@types/react@19.0.7)(react@19.0.0)': + dependencies: + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.7 + + '@radix-ui/react-direction@1.1.0(@types/react@19.0.7)(react@19.0.0)': + dependencies: + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.7 + + '@radix-ui/react-dismissable-layer@1.1.3(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.7)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.7)(react@19.0.0) + '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@19.0.7)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.7 + '@types/react-dom': 19.0.3(@types/react@19.0.7) + + '@radix-ui/react-dropdown-menu@2.1.4(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.7)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.7)(react@19.0.0) + '@radix-ui/react-id': 1.1.0(@types/react@19.0.7)(react@19.0.0) + '@radix-ui/react-menu': 2.1.4(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.7)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.7 + '@types/react-dom': 19.0.3(@types/react@19.0.7) + + '@radix-ui/react-focus-guards@1.1.1(@types/react@19.0.7)(react@19.0.0)': + dependencies: + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.7 + + '@radix-ui/react-focus-scope@1.1.1(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.7)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.7)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.7 + '@types/react-dom': 19.0.3(@types/react@19.0.7) + + '@radix-ui/react-id@1.1.0(@types/react@19.0.7)(react@19.0.0)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.7)(react@19.0.0) + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.7 + + '@radix-ui/react-label@2.1.1(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.7 + '@types/react-dom': 19.0.3(@types/react@19.0.7) + + '@radix-ui/react-menu@2.1.4(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-collection': 1.1.1(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.7)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.7)(react@19.0.0) + '@radix-ui/react-direction': 1.1.0(@types/react@19.0.7)(react@19.0.0) + '@radix-ui/react-dismissable-layer': 1.1.3(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.0.7)(react@19.0.0) + '@radix-ui/react-focus-scope': 1.1.1(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-id': 1.1.0(@types/react@19.0.7)(react@19.0.0) + '@radix-ui/react-popper': 1.2.1(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-portal': 1.1.3(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-roving-focus': 1.1.1(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-slot': 1.1.1(@types/react@19.0.7)(react@19.0.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.7)(react@19.0.0) + aria-hidden: 1.2.4 + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + react-remove-scroll: 2.6.2(@types/react@19.0.7)(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.7 + '@types/react-dom': 19.0.3(@types/react@19.0.7) + + '@radix-ui/react-popper@1.2.1(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@floating-ui/react-dom': 2.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-arrow': 1.1.1(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.7)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.7)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.7)(react@19.0.0) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.7)(react@19.0.0) + '@radix-ui/react-use-rect': 1.1.0(@types/react@19.0.7)(react@19.0.0) + '@radix-ui/react-use-size': 1.1.0(@types/react@19.0.7)(react@19.0.0) + '@radix-ui/rect': 1.1.0 + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.7 + '@types/react-dom': 19.0.3(@types/react@19.0.7) + + '@radix-ui/react-portal@1.1.3(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.7)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.7 + '@types/react-dom': 19.0.3(@types/react@19.0.7) + + '@radix-ui/react-presence@1.1.2(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.7)(react@19.0.0) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.7)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.7 + '@types/react-dom': 19.0.3(@types/react@19.0.7) + + '@radix-ui/react-primitive@2.0.1(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/react-slot': 1.1.1(@types/react@19.0.7)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.7 + '@types/react-dom': 19.0.3(@types/react@19.0.7) + + '@radix-ui/react-progress@1.1.1(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/react-context': 1.1.1(@types/react@19.0.7)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.7 + '@types/react-dom': 19.0.3(@types/react@19.0.7) + + '@radix-ui/react-roving-focus@1.1.1(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-collection': 1.1.1(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.7)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.7)(react@19.0.0) + '@radix-ui/react-direction': 1.1.0(@types/react@19.0.7)(react@19.0.0) + '@radix-ui/react-id': 1.1.0(@types/react@19.0.7)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.7)(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.7)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.7 + '@types/react-dom': 19.0.3(@types/react@19.0.7) + + '@radix-ui/react-slot@1.1.1(@types/react@19.0.7)(react@19.0.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.7)(react@19.0.0) + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.7 + + '@radix-ui/react-switch@1.1.2(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.7)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.7)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.7)(react@19.0.0) + '@radix-ui/react-use-previous': 1.1.0(@types/react@19.0.7)(react@19.0.0) + '@radix-ui/react-use-size': 1.1.0(@types/react@19.0.7)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.7 + '@types/react-dom': 19.0.3(@types/react@19.0.7) + + '@radix-ui/react-tabs@1.1.2(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-context': 1.1.1(@types/react@19.0.7)(react@19.0.0) + '@radix-ui/react-direction': 1.1.0(@types/react@19.0.7)(react@19.0.0) + '@radix-ui/react-id': 1.1.0(@types/react@19.0.7)(react@19.0.0) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-roving-focus': 1.1.1(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.7)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.7 + '@types/react-dom': 19.0.3(@types/react@19.0.7) + + '@radix-ui/react-use-callback-ref@1.1.0(@types/react@19.0.7)(react@19.0.0)': + dependencies: + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.7 + + '@radix-ui/react-use-controllable-state@1.1.0(@types/react@19.0.7)(react@19.0.0)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.7)(react@19.0.0) + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.7 + + '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@19.0.7)(react@19.0.0)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.7)(react@19.0.0) + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.7 + + '@radix-ui/react-use-layout-effect@1.1.0(@types/react@19.0.7)(react@19.0.0)': + dependencies: + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.7 + + '@radix-ui/react-use-previous@1.1.0(@types/react@19.0.7)(react@19.0.0)': + dependencies: + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.7 + + '@radix-ui/react-use-rect@1.1.0(@types/react@19.0.7)(react@19.0.0)': + dependencies: + '@radix-ui/rect': 1.1.0 + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.7 + + '@radix-ui/react-use-size@1.1.0(@types/react@19.0.7)(react@19.0.0)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.7)(react@19.0.0) + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.7 + + '@radix-ui/rect@1.1.0': {} + + '@rtsao/scc@1.1.0': {} + + '@rushstack/eslint-patch@1.10.5': {} + + '@scarf/scarf@1.4.0': {} + + '@sinclair/typebox@0.27.8': {} + + '@sinonjs/commons@3.0.1': + dependencies: + type-detect: 4.0.8 + + '@sinonjs/fake-timers@10.3.0': + dependencies: + '@sinonjs/commons': 3.0.1 + + '@swc/core-darwin-arm64@1.10.9': + optional: true + + '@swc/core-darwin-x64@1.10.9': + optional: true + + '@swc/core-linux-arm-gnueabihf@1.10.9': + optional: true + + '@swc/core-linux-arm64-gnu@1.10.9': + optional: true + + '@swc/core-linux-arm64-musl@1.10.9': + optional: true + + '@swc/core-linux-x64-gnu@1.10.9': + optional: true + + '@swc/core-linux-x64-musl@1.10.9': + optional: true + + '@swc/core-win32-arm64-msvc@1.10.9': + optional: true + + '@swc/core-win32-ia32-msvc@1.10.9': + optional: true + + '@swc/core-win32-x64-msvc@1.10.9': + optional: true + + '@swc/core@1.10.9(@swc/helpers@0.5.15)': + dependencies: + '@swc/counter': 0.1.3 + '@swc/types': 0.1.17 + optionalDependencies: + '@swc/core-darwin-arm64': 1.10.9 + '@swc/core-darwin-x64': 1.10.9 + '@swc/core-linux-arm-gnueabihf': 1.10.9 + '@swc/core-linux-arm64-gnu': 1.10.9 + '@swc/core-linux-arm64-musl': 1.10.9 + '@swc/core-linux-x64-gnu': 1.10.9 + '@swc/core-linux-x64-musl': 1.10.9 + '@swc/core-win32-arm64-msvc': 1.10.9 + '@swc/core-win32-ia32-msvc': 1.10.9 + '@swc/core-win32-x64-msvc': 1.10.9 + '@swc/helpers': 0.5.15 + + '@swc/counter@0.1.3': {} + + '@swc/helpers@0.5.15': + dependencies: + tslib: 2.8.1 + + '@swc/jest@0.2.37(@swc/core@1.10.9(@swc/helpers@0.5.15))': + dependencies: + '@jest/create-cache-key-function': 29.7.0 + '@swc/core': 1.10.9(@swc/helpers@0.5.15) + '@swc/counter': 0.1.3 + jsonc-parser: 3.3.1 + + '@swc/types@0.1.17': + dependencies: + '@swc/counter': 0.1.3 + + '@testing-library/dom@10.4.0': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/runtime': 7.26.0 + '@types/aria-query': 5.0.4 + aria-query: 5.3.0 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + + '@testing-library/jest-dom@6.6.3': + dependencies: + '@adobe/css-tools': 4.4.1 + aria-query: 5.3.2 + chalk: 3.0.0 + css.escape: 1.5.1 + dom-accessibility-api: 0.6.3 + lodash: 4.17.21 + redent: 3.0.0 + + '@testing-library/react-hooks@8.0.1(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.0 + react: 19.0.0 + react-error-boundary: 3.1.4(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.7 + react-dom: 19.0.0(react@19.0.0) + + '@testing-library/react@16.2.0(@testing-library/dom@10.4.0)(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.0 + '@testing-library/dom': 10.4.0 + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.7 + '@types/react-dom': 19.0.3(@types/react@19.0.7) + + '@tootallnate/once@2.0.0': {} + + '@tsconfig/node10@1.0.11': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + + '@tybys/wasm-util@0.9.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@types/aria-query@5.0.4': {} + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.26.5 + '@babel/types': 7.26.5 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 + + '@types/babel__generator@7.6.8': + dependencies: + '@babel/types': 7.26.5 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.26.5 + '@babel/types': 7.26.5 + + '@types/babel__traverse@7.20.6': + dependencies: + '@babel/types': 7.26.5 + + '@types/eslint-scope@3.7.7': + dependencies: + '@types/eslint': 9.6.1 + '@types/estree': 1.0.6 + + '@types/eslint@9.6.1': + dependencies: + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 + + '@types/estree@1.0.6': {} + + '@types/graceful-fs@4.1.9': + dependencies: + '@types/node': 22.10.6 + + '@types/istanbul-lib-coverage@2.0.6': {} + + '@types/istanbul-lib-report@3.0.3': + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + + '@types/istanbul-reports@3.0.4': + dependencies: + '@types/istanbul-lib-report': 3.0.3 + + '@types/jest@29.5.14': + dependencies: + expect: 29.7.0 + pretty-format: 29.7.0 + + '@types/jsdom@20.0.1': + dependencies: + '@types/node': 22.10.6 + '@types/tough-cookie': 4.0.5 + parse5: 7.2.1 + + '@types/json-schema@7.0.15': {} + + '@types/json5@0.0.29': {} + + '@types/mute-stream@0.0.4': + dependencies: + '@types/node': 20.17.13 + + '@types/node@20.17.13': + dependencies: + undici-types: 6.19.8 + + '@types/node@22.10.6': + dependencies: + undici-types: 6.20.0 + + '@types/react-dom@19.0.3(@types/react@19.0.7)': + dependencies: + '@types/react': 19.0.7 + + '@types/react@19.0.7': + dependencies: + csstype: 3.1.3 + + '@types/stack-utils@2.0.3': {} + + '@types/strip-bom@3.0.0': {} + + '@types/strip-json-comments@0.0.30': {} + + '@types/tough-cookie@4.0.5': {} + + '@types/webpack@5.28.5(@swc/core@1.10.9(@swc/helpers@0.5.15))': + dependencies: + '@types/node': 22.10.6 + tapable: 2.2.1 + webpack: 5.97.1(@swc/core@1.10.9(@swc/helpers@0.5.15)) + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + - webpack-cli + + '@types/wrap-ansi@3.0.0': {} + + '@types/yargs-parser@21.0.3': {} + + '@types/yargs@17.0.33': + dependencies: + '@types/yargs-parser': 21.0.3 + + '@typescript-eslint/eslint-plugin@8.20.0(@typescript-eslint/parser@8.20.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.20.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3) + '@typescript-eslint/scope-manager': 8.20.0 + '@typescript-eslint/type-utils': 8.20.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3) + '@typescript-eslint/utils': 8.20.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.20.0 + eslint: 9.18.0(jiti@1.21.7) + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 2.0.0(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.20.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.20.0 + '@typescript-eslint/types': 8.20.0 + '@typescript-eslint/typescript-estree': 8.20.0(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.20.0 + debug: 4.4.0 + eslint: 9.18.0(jiti@1.21.7) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.20.0': + dependencies: + '@typescript-eslint/types': 8.20.0 + '@typescript-eslint/visitor-keys': 8.20.0 + + '@typescript-eslint/type-utils@8.20.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)': + dependencies: + '@typescript-eslint/typescript-estree': 8.20.0(typescript@5.7.3) + '@typescript-eslint/utils': 8.20.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3) + debug: 4.4.0 + eslint: 9.18.0(jiti@1.21.7) + ts-api-utils: 2.0.0(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.20.0': {} + + '@typescript-eslint/typescript-estree@8.20.0(typescript@5.7.3)': + dependencies: + '@typescript-eslint/types': 8.20.0 + '@typescript-eslint/visitor-keys': 8.20.0 + debug: 4.4.0 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 2.0.0(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.20.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)': + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.18.0(jiti@1.21.7)) + '@typescript-eslint/scope-manager': 8.20.0 + '@typescript-eslint/types': 8.20.0 + '@typescript-eslint/typescript-estree': 8.20.0(typescript@5.7.3) + eslint: 9.18.0(jiti@1.21.7) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.20.0': + dependencies: + '@typescript-eslint/types': 8.20.0 + eslint-visitor-keys: 4.2.0 + + '@webassemblyjs/ast@1.14.1': + dependencies: + '@webassemblyjs/helper-numbers': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + + '@webassemblyjs/floating-point-hex-parser@1.13.2': {} + + '@webassemblyjs/helper-api-error@1.13.2': {} + + '@webassemblyjs/helper-buffer@1.14.1': {} + + '@webassemblyjs/helper-numbers@1.13.2': + dependencies: + '@webassemblyjs/floating-point-hex-parser': 1.13.2 + '@webassemblyjs/helper-api-error': 1.13.2 + '@xtuc/long': 4.2.2 + + '@webassemblyjs/helper-wasm-bytecode@1.13.2': {} + + '@webassemblyjs/helper-wasm-section@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/wasm-gen': 1.14.1 + + '@webassemblyjs/ieee754@1.13.2': + dependencies: + '@xtuc/ieee754': 1.2.0 + + '@webassemblyjs/leb128@1.13.2': + dependencies: + '@xtuc/long': 4.2.2 + + '@webassemblyjs/utf8@1.13.2': {} + + '@webassemblyjs/wasm-edit@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/helper-wasm-section': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-opt': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + '@webassemblyjs/wast-printer': 1.14.1 + + '@webassemblyjs/wasm-gen@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 + + '@webassemblyjs/wasm-opt@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + + '@webassemblyjs/wasm-parser@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-api-error': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 + + '@webassemblyjs/wast-printer@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@xtuc/long': 4.2.2 + + '@xtuc/ieee754@1.2.0': {} + + '@xtuc/long@4.2.2': {} + + abab@2.0.6: {} + + acorn-globals@7.0.1: + dependencies: + acorn: 8.14.0 + acorn-walk: 8.3.4 + + acorn-jsx@5.3.2(acorn@8.14.0): + dependencies: + acorn: 8.14.0 + + acorn-walk@8.3.4: + dependencies: + acorn: 8.14.0 + + acorn@8.14.0: {} + + agent-base@6.0.2: + dependencies: + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + + ajv-formats@2.1.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + + ajv-keywords@3.5.2(ajv@6.12.6): + dependencies: + ajv: 6.12.6 + + ajv-keywords@5.1.0(ajv@8.17.1): + dependencies: + ajv: 8.17.1 + fast-deep-equal: 3.1.3 + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.5 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-regex@5.0.1: {} + + ansi-regex@6.1.0: {} + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@5.2.0: {} + + ansi-styles@6.2.1: {} + + any-promise@1.3.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + arg@4.1.3: {} + + arg@5.0.2: {} + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + argparse@2.0.1: {} + + aria-hidden@1.2.4: + dependencies: + tslib: 2.8.1 + + aria-query@5.3.0: + dependencies: + dequal: 2.0.3 + + aria-query@5.3.2: {} + + array-buffer-byte-length@1.0.2: + dependencies: + call-bound: 1.0.3 + is-array-buffer: 3.0.5 + + array-includes@3.1.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-object-atoms: 1.1.0 + get-intrinsic: 1.2.7 + is-string: 1.1.1 + + array.prototype.findlast@1.2.5: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.1.0 + es-shim-unscopables: 1.0.2 + + array.prototype.findlastindex@1.2.5: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.1.0 + es-shim-unscopables: 1.0.2 + + array.prototype.flat@1.3.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-shim-unscopables: 1.0.2 + + array.prototype.flatmap@1.3.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-shim-unscopables: 1.0.2 + + array.prototype.tosorted@1.1.4: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-shim-unscopables: 1.0.2 + + arraybuffer.prototype.slice@1.0.4: + dependencies: + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + is-array-buffer: 3.0.5 + + ast-types-flow@0.0.8: {} + + async@3.2.6: {} + + asynckit@0.4.0: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 + + axe-core@4.10.2: {} + + axobject-query@4.1.0: {} + + babel-jest@29.7.0(@babel/core@7.26.0): + dependencies: + '@babel/core': 7.26.0 + '@jest/transform': 29.7.0 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.6.3(@babel/core@7.26.0) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-istanbul@6.1.1: + dependencies: + '@babel/helper-plugin-utils': 7.26.5 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-jest-hoist@29.6.3: + dependencies: + '@babel/template': 7.25.9 + '@babel/types': 7.26.5 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.6 + + babel-preset-current-node-syntax@1.1.0(@babel/core@7.26.0): + dependencies: + '@babel/core': 7.26.0 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.0) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.0) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.26.0) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.0) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.0) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.0) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.0) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.0) + + babel-preset-jest@29.6.3(@babel/core@7.26.0): + dependencies: + '@babel/core': 7.26.0 + babel-plugin-jest-hoist: 29.6.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.0) + + balanced-match@1.0.2: {} + + before-after-hook@3.0.2: {} + + binary-extensions@2.3.0: {} + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.24.4: + dependencies: + caniuse-lite: 1.0.30001692 + electron-to-chromium: 1.5.82 + node-releases: 2.0.19 + update-browserslist-db: 1.1.2(browserslist@4.24.4) + + bs-logger@0.2.6: + dependencies: + fast-json-stable-stringify: 2.1.0 + + bser@2.1.1: + dependencies: + node-int64: 0.4.0 + + buffer-from@1.1.2: {} + + busboy@1.6.0: + dependencies: + streamsearch: 1.1.0 + + call-bind-apply-helpers@1.0.1: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.1 + es-define-property: 1.0.1 + get-intrinsic: 1.2.7 + set-function-length: 1.2.2 + + call-bound@1.0.3: + dependencies: + call-bind-apply-helpers: 1.0.1 + get-intrinsic: 1.2.7 + + callsites@3.1.0: {} + + camelcase-css@2.0.1: {} + + camelcase@5.3.1: {} + + camelcase@6.3.0: {} + + caniuse-lite@1.0.30001692: {} + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + chalk@3.0.0: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + char-regex@1.0.2: {} + + chardet@0.7.0: {} + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + chrome-trace-event@1.0.4: {} + + ci-info@3.9.0: {} + + cjs-module-lexer@1.4.1: {} + + class-variance-authority@0.7.1: + dependencies: + clsx: 2.1.1 + + cli-width@4.1.0: {} + + client-only@0.0.1: {} + + clipanion@3.2.1(typanion@3.14.0): + dependencies: + typanion: 3.14.0 + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clsx@2.1.1: {} + + co@4.6.0: {} + + collect-v8-coverage@1.0.2: {} + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + optional: true + + color@4.2.3: + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + optional: true + + colorette@2.0.20: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@2.20.3: {} + + commander@4.1.1: {} + + concat-map@0.0.1: {} + + convert-source-map@2.0.0: {} + + create-jest@29.7.0(@types/node@22.10.6)(ts-node@10.9.2(@swc/core@1.10.9(@swc/helpers@0.5.15))(@types/node@22.10.6)(typescript@5.7.3)): + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@22.10.6)(ts-node@10.9.2(@swc/core@1.10.9(@swc/helpers@0.5.15))(@types/node@22.10.6)(typescript@5.7.3)) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + create-require@1.1.1: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + css.escape@1.5.1: {} + + cssesc@3.0.0: {} + + cssom@0.3.8: {} + + cssom@0.5.0: {} + + cssstyle@2.3.0: + dependencies: + cssom: 0.3.8 + + csstype@3.1.3: {} + + damerau-levenshtein@1.0.8: {} + + data-urls@3.0.2: + dependencies: + abab: 2.0.6 + whatwg-mimetype: 3.0.0 + whatwg-url: 11.0.0 + + data-view-buffer@1.0.2: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-length@1.0.2: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-offset@1.0.1: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + dateformat@3.0.2: {} + + debug@3.2.7: + dependencies: + ms: 2.1.3 + + debug@4.4.0: + dependencies: + ms: 2.1.3 + + decimal.js@10.4.3: {} + + dedent@1.5.3: {} + + deep-is@0.1.4: {} + + deepmerge@4.3.1: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + delayed-stream@1.0.0: {} + + dequal@2.0.3: {} + + detect-libc@2.0.3: + optional: true + + detect-newline@3.1.0: {} + + detect-node-es@1.1.0: {} + + didyoumean@1.2.2: {} + + diff-sequences@29.6.3: {} + + diff@4.0.2: {} + + dlv@1.1.3: {} + + doctrine@2.1.0: + dependencies: + esutils: 2.0.3 + + dom-accessibility-api@0.5.16: {} + + dom-accessibility-api@0.6.3: {} + + domexception@4.0.0: + dependencies: + webidl-conversions: 7.0.0 + + dotenv-cli@7.4.4: + dependencies: + cross-spawn: 7.0.6 + dotenv: 16.4.7 + dotenv-expand: 10.0.0 + minimist: 1.2.8 + + dotenv-expand@10.0.0: {} + + dotenv@16.4.7: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + dynamic-dedupe@0.3.0: + dependencies: + xtend: 4.0.2 + + eastasianwidth@0.2.0: {} + + ejs@3.1.10: + dependencies: + jake: 10.9.2 + + electron-to-chromium@1.5.82: {} + + emittery@0.13.1: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + enhanced-resolve@5.18.0: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + + entities@4.5.0: {} + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + es-abstract@1.23.9: + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.3 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.0 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + get-intrinsic: 1.2.7 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 + is-callable: 1.2.7 + is-data-view: 1.0.2 + is-regex: 1.2.1 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.0 + math-intrinsics: 1.1.0 + object-inspect: 1.13.3 + object-keys: 1.1.1 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.3 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.7 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.18 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-iterator-helpers@1.2.1: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-set-tostringtag: 2.1.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.7 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + iterator.prototype: 1.1.5 + safe-array-concat: 1.1.3 + + es-module-lexer@1.6.0: {} + + es-object-atoms@1.1.0: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-shim-unscopables@1.0.2: + dependencies: + hasown: 2.0.2 + + es-to-primitive@1.3.0: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.1.0 + is-symbol: 1.1.1 + + escalade@3.2.0: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@2.0.0: {} + + escape-string-regexp@4.0.0: {} + + escodegen@2.1.0: + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + + eslint-config-next@15.1.4(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3): + dependencies: + '@next/eslint-plugin-next': 15.1.4 + '@rushstack/eslint-patch': 1.10.5 + '@typescript-eslint/eslint-plugin': 8.20.0(@typescript-eslint/parser@8.20.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3) + '@typescript-eslint/parser': 8.20.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3) + eslint: 9.18.0(jiti@1.21.7) + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@9.18.0(jiti@1.21.7)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.20.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.18.0(jiti@1.21.7)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.18.0(jiti@1.21.7)) + eslint-plugin-react: 7.37.4(eslint@9.18.0(jiti@1.21.7)) + eslint-plugin-react-hooks: 5.1.0(eslint@9.18.0(jiti@1.21.7)) + optionalDependencies: + typescript: 5.7.3 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - eslint-plugin-import-x + - supports-color + + eslint-import-resolver-node@0.3.9: + dependencies: + debug: 3.2.7 + is-core-module: 2.16.1 + resolve: 1.22.10 + transitivePeerDependencies: + - supports-color + + eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0)(eslint@9.18.0(jiti@1.21.7)): + dependencies: + '@nolyfill/is-core-module': 1.0.39 + debug: 4.4.0 + enhanced-resolve: 5.18.0 + eslint: 9.18.0(jiti@1.21.7) + fast-glob: 3.3.3 + get-tsconfig: 4.8.1 + is-bun-module: 1.3.0 + is-glob: 4.0.3 + stable-hash: 0.0.4 + optionalDependencies: + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.20.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.18.0(jiti@1.21.7)) + transitivePeerDependencies: + - supports-color + + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.20.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.18.0(jiti@1.21.7)): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 8.20.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3) + eslint: 9.18.0(jiti@1.21.7) + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@9.18.0(jiti@1.21.7)) + transitivePeerDependencies: + - supports-color + + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.20.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.18.0(jiti@1.21.7)): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 9.18.0(jiti@1.21.7) + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.20.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.18.0(jiti@1.21.7)) + hasown: 2.0.2 + is-core-module: 2.16.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.1 + semver: 6.3.1 + string.prototype.trimend: 1.0.9 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 8.20.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + eslint-plugin-jsx-a11y@6.10.2(eslint@9.18.0(jiti@1.21.7)): + dependencies: + aria-query: 5.3.2 + array-includes: 3.1.8 + array.prototype.flatmap: 1.3.3 + ast-types-flow: 0.0.8 + axe-core: 4.10.2 + axobject-query: 4.1.0 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + eslint: 9.18.0(jiti@1.21.7) + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + safe-regex-test: 1.1.0 + string.prototype.includes: 2.0.1 + + eslint-plugin-react-hooks@5.1.0(eslint@9.18.0(jiti@1.21.7)): + dependencies: + eslint: 9.18.0(jiti@1.21.7) + + eslint-plugin-react@7.37.4(eslint@9.18.0(jiti@1.21.7)): + dependencies: + array-includes: 3.1.8 + array.prototype.findlast: 1.2.5 + array.prototype.flatmap: 1.3.3 + array.prototype.tosorted: 1.1.4 + doctrine: 2.1.0 + es-iterator-helpers: 1.2.1 + eslint: 9.18.0(jiti@1.21.7) + estraverse: 5.3.0 + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.8 + object.fromentries: 2.0.8 + object.values: 1.2.1 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.12 + string.prototype.repeat: 1.0.0 + + eslint-scope@5.1.1: + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + + eslint-scope@8.2.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.0: {} + + eslint@9.18.0(jiti@1.21.7): + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.18.0(jiti@1.21.7)) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.19.1 + '@eslint/core': 0.10.0 + '@eslint/eslintrc': 3.2.0 + '@eslint/js': 9.18.0 + '@eslint/plugin-kit': 0.2.5 + '@humanfs/node': 0.16.6 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.1 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.0 + escape-string-regexp: 4.0.0 + eslint-scope: 8.2.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 1.21.7 + transitivePeerDependencies: + - supports-color + + espree@10.3.0: + dependencies: + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 4.2.0 + + esprima@4.0.1: {} + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@4.3.0: {} + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + events@3.3.0: {} + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + exit@0.1.2: {} + + expect@29.7.0: + dependencies: + '@jest/expect-utils': 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + + external-editor@3.1.0: + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + + fast-content-type-parse@2.0.1: {} + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.1: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fast-uri@3.0.5: {} + + fastq@1.18.0: + dependencies: + reusify: 1.0.4 + + fb-watchman@2.0.2: + dependencies: + bser: 2.1.1 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + filelist@1.0.4: + dependencies: + minimatch: 5.1.6 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.2 + keyv: 4.5.4 + + flatted@3.3.2: {} + + for-each@0.3.3: + dependencies: + is-callable: 1.2.7 + + foreground-child@3.3.0: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + form-data@4.0.1: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + function.prototype.name@1.1.8: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + define-properties: 1.2.1 + functions-have-names: 1.2.3 + hasown: 2.0.2 + is-callable: 1.2.7 + + functions-have-names@1.2.3: {} + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + get-intrinsic@1.2.7: + dependencies: + call-bind-apply-helpers: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.0 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-nonce@1.0.1: {} + + get-package-type@0.1.0: {} + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.0 + + get-stream@6.0.1: {} + + get-symbol-description@1.1.0: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + + get-tsconfig@4.8.1: + dependencies: + resolve-pkg-maps: 1.0.0 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob-to-regexp@0.4.1: {} + + glob@10.4.5: + dependencies: + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + globals@11.12.0: {} + + globals@14.0.0: {} + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.2.0 + + gopd@1.2.0: {} + + graceful-fs@4.2.11: {} + + graphemer@1.4.0: {} + + has-bigints@1.1.0: {} + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.1 + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + html-encoding-sniffer@3.0.0: + dependencies: + whatwg-encoding: 2.0.0 + + html-escaper@2.0.2: {} + + http-proxy-agent@5.0.0: + dependencies: + '@tootallnate/once': 2.0.0 + agent-base: 6.0.2 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + + human-signals@2.1.0: {} + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + ignore@5.3.2: {} + + import-fresh@3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + import-local@3.2.0: + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + + imurmurhash@0.1.4: {} + + indent-string@4.0.0: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + inquirer@10.2.2: + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/prompts': 5.5.0 + '@inquirer/type': 1.5.5 + '@types/mute-stream': 0.0.4 + ansi-escapes: 4.3.2 + mute-stream: 1.0.0 + run-async: 3.0.0 + rxjs: 7.8.1 + + internal-slot@1.1.0: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.1.0 + + is-array-buffer@3.0.5: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + get-intrinsic: 1.2.7 + + is-arrayish@0.2.1: {} + + is-arrayish@0.3.2: + optional: true + + is-async-function@2.1.0: + dependencies: + call-bound: 1.0.3 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-bigint@1.1.0: + dependencies: + has-bigints: 1.1.0 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-boolean-object@1.2.1: + dependencies: + call-bound: 1.0.3 + has-tostringtag: 1.0.2 + + is-bun-module@1.3.0: + dependencies: + semver: 7.6.3 + + is-callable@1.2.7: {} + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + is-data-view@1.0.2: + dependencies: + call-bound: 1.0.3 + get-intrinsic: 1.2.7 + is-typed-array: 1.1.15 + + is-date-object@1.1.0: + dependencies: + call-bound: 1.0.3 + has-tostringtag: 1.0.2 + + is-extglob@2.1.1: {} + + is-finalizationregistry@1.1.1: + dependencies: + call-bound: 1.0.3 + + is-fullwidth-code-point@3.0.0: {} + + is-generator-fn@2.1.0: {} + + is-generator-function@1.1.0: + dependencies: + call-bound: 1.0.3 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-map@2.0.3: {} + + is-number-object@1.1.1: + dependencies: + call-bound: 1.0.3 + has-tostringtag: 1.0.2 + + is-number@7.0.0: {} + + is-potential-custom-element-name@1.0.1: {} + + is-regex@1.2.1: + dependencies: + call-bound: 1.0.3 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.4: + dependencies: + call-bound: 1.0.3 + + is-stream@2.0.1: {} + + is-string@1.1.1: + dependencies: + call-bound: 1.0.3 + has-tostringtag: 1.0.2 + + is-symbol@1.1.1: + dependencies: + call-bound: 1.0.3 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 + + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.18 + + is-weakmap@2.0.2: {} + + is-weakref@1.1.0: + dependencies: + call-bound: 1.0.3 + + is-weakset@2.0.4: + dependencies: + call-bound: 1.0.3 + get-intrinsic: 1.2.7 + + isarray@2.0.5: {} + + isexe@2.0.0: {} + + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-instrument@5.2.1: + dependencies: + '@babel/core': 7.26.0 + '@babel/parser': 7.26.5 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + istanbul-lib-instrument@6.0.3: + dependencies: + '@babel/core': 7.26.0 + '@babel/parser': 7.26.5 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + + istanbul-lib-source-maps@4.0.1: + dependencies: + debug: 4.4.0 + istanbul-lib-coverage: 3.2.2 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + + istanbul-reports@3.1.7: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + + iterator.prototype@1.1.5: + dependencies: + define-data-property: 1.1.4 + es-object-atoms: 1.1.0 + get-intrinsic: 1.2.7 + get-proto: 1.0.1 + has-symbols: 1.1.0 + set-function-name: 2.0.2 + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jake@10.9.2: + dependencies: + async: 3.2.6 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + + jest-changed-files@29.7.0: + dependencies: + execa: 5.1.1 + jest-util: 29.7.0 + p-limit: 3.1.0 + + jest-circus@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.10.6 + chalk: 4.1.2 + co: 4.6.0 + dedent: 1.5.3 + is-generator-fn: 2.1.0 + jest-each: 29.7.0 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + p-limit: 3.1.0 + pretty-format: 29.7.0 + pure-rand: 6.1.0 + slash: 3.0.0 + stack-utils: 2.0.6 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-cli@29.7.0(@types/node@22.10.6)(ts-node@10.9.2(@swc/core@1.10.9(@swc/helpers@0.5.15))(@types/node@22.10.6)(typescript@5.7.3)): + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.10.9(@swc/helpers@0.5.15))(@types/node@22.10.6)(typescript@5.7.3)) + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@22.10.6)(ts-node@10.9.2(@swc/core@1.10.9(@swc/helpers@0.5.15))(@types/node@22.10.6)(typescript@5.7.3)) + exit: 0.1.2 + import-local: 3.2.0 + jest-config: 29.7.0(@types/node@22.10.6)(ts-node@10.9.2(@swc/core@1.10.9(@swc/helpers@0.5.15))(@types/node@22.10.6)(typescript@5.7.3)) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jest-config@29.7.0(@types/node@22.10.6)(ts-node@10.9.2(@swc/core@1.10.9(@swc/helpers@0.5.15))(@types/node@22.10.6)(typescript@5.7.3)): + dependencies: + '@babel/core': 7.26.0 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.26.0) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0 + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 22.10.6 + ts-node: 10.9.2(@swc/core@1.10.9(@swc/helpers@0.5.15))(@types/node@22.10.6)(typescript@5.7.3) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-diff@29.7.0: + dependencies: + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-docblock@29.7.0: + dependencies: + detect-newline: 3.1.0 + + jest-each@29.7.0: + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + jest-get-type: 29.6.3 + jest-util: 29.7.0 + pretty-format: 29.7.0 + + jest-environment-jsdom@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/jsdom': 20.0.1 + '@types/node': 22.10.6 + jest-mock: 29.7.0 + jest-util: 29.7.0 + jsdom: 20.0.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + jest-environment-node@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.10.6 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + jest-get-type@29.6.3: {} + + jest-haste-map@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/graceful-fs': 4.1.9 + '@types/node': 22.10.6 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + jest-worker: 29.7.0 + micromatch: 4.0.8 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + + jest-html-reporter@3.10.2(jest@29.7.0(@types/node@22.10.6)(ts-node@10.9.2(@swc/core@1.10.9(@swc/helpers@0.5.15))(@types/node@22.10.6)(typescript@5.7.3)))(typescript@5.7.3): + dependencies: + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + dateformat: 3.0.2 + jest: 29.7.0(@types/node@22.10.6)(ts-node@10.9.2(@swc/core@1.10.9(@swc/helpers@0.5.15))(@types/node@22.10.6)(typescript@5.7.3)) + mkdirp: 1.0.4 + strip-ansi: 6.0.1 + typescript: 5.7.3 + xmlbuilder: 15.0.0 + + jest-junit@16.0.0: + dependencies: + mkdirp: 1.0.4 + strip-ansi: 6.0.1 + uuid: 8.3.2 + xml: 1.0.1 + + jest-leak-detector@29.7.0: + dependencies: + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-matcher-utils@29.7.0: + dependencies: + chalk: 4.1.2 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-message-util@29.7.0: + dependencies: + '@babel/code-frame': 7.26.2 + '@jest/types': 29.6.3 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + stack-utils: 2.0.6 + + jest-mock@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 22.10.6 + jest-util: 29.7.0 + + jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): + optionalDependencies: + jest-resolve: 29.7.0 + + jest-regex-util@29.6.3: {} + + jest-resolve-dependencies@29.7.0: + dependencies: + jest-regex-util: 29.6.3 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + + jest-resolve@29.7.0: + dependencies: + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) + jest-util: 29.7.0 + jest-validate: 29.7.0 + resolve: 1.22.10 + resolve.exports: 2.0.3 + slash: 3.0.0 + + jest-runner@29.7.0: + dependencies: + '@jest/console': 29.7.0 + '@jest/environment': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.10.6 + chalk: 4.1.2 + emittery: 0.13.1 + graceful-fs: 4.2.11 + jest-docblock: 29.7.0 + jest-environment-node: 29.7.0 + jest-haste-map: 29.7.0 + jest-leak-detector: 29.7.0 + jest-message-util: 29.7.0 + jest-resolve: 29.7.0 + jest-runtime: 29.7.0 + jest-util: 29.7.0 + jest-watcher: 29.7.0 + jest-worker: 29.7.0 + p-limit: 3.1.0 + source-map-support: 0.5.13 + transitivePeerDependencies: + - supports-color + + jest-runtime@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/globals': 29.7.0 + '@jest/source-map': 29.6.3 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.10.6 + chalk: 4.1.2 + cjs-module-lexer: 1.4.1 + collect-v8-coverage: 1.0.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color + + jest-snapshot@29.7.0: + dependencies: + '@babel/core': 7.26.0 + '@babel/generator': 7.26.5 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0) + '@babel/types': 7.26.5 + '@jest/expect-utils': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.0) + chalk: 4.1.2 + expect: 29.7.0 + graceful-fs: 4.2.11 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + natural-compare: 1.4.0 + pretty-format: 29.7.0 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + + jest-summary-reporter@0.0.2: + dependencies: + chalk: 2.4.2 + + jest-util@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 22.10.6 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + + jest-validate@29.7.0: + dependencies: + '@jest/types': 29.6.3 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 29.6.3 + leven: 3.1.0 + pretty-format: 29.7.0 + + jest-watcher@29.7.0: + dependencies: + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.10.6 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.13.1 + jest-util: 29.7.0 + string-length: 4.0.2 + + jest-worker@27.5.1: + dependencies: + '@types/node': 22.10.6 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + jest-worker@29.7.0: + dependencies: + '@types/node': 22.10.6 + jest-util: 29.7.0 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + jest@29.7.0(@types/node@22.10.6)(ts-node@10.9.2(@swc/core@1.10.9(@swc/helpers@0.5.15))(@types/node@22.10.6)(typescript@5.7.3)): + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.10.9(@swc/helpers@0.5.15))(@types/node@22.10.6)(typescript@5.7.3)) + '@jest/types': 29.6.3 + import-local: 3.2.0 + jest-cli: 29.7.0(@types/node@22.10.6)(ts-node@10.9.2(@swc/core@1.10.9(@swc/helpers@0.5.15))(@types/node@22.10.6)(typescript@5.7.3)) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jiti@1.21.7: {} + + js-tokens@4.0.0: {} + + js-yaml@3.14.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsdom@20.0.3: + dependencies: + abab: 2.0.6 + acorn: 8.14.0 + acorn-globals: 7.0.1 + cssom: 0.5.0 + cssstyle: 2.3.0 + data-urls: 3.0.2 + decimal.js: 10.4.3 + domexception: 4.0.0 + escodegen: 2.1.0 + form-data: 4.0.1 + html-encoding-sniffer: 3.0.0 + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.16 + parse5: 7.2.1 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 4.1.4 + w3c-xmlserializer: 4.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 2.0.0 + whatwg-mimetype: 3.0.0 + whatwg-url: 11.0.0 + ws: 8.18.0 + xml-name-validator: 4.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + jsesc@3.1.0: {} + + json-buffer@3.0.1: {} + + json-parse-even-better-errors@2.3.1: {} + + json-parse-even-better-errors@3.0.2: {} + + json-schema-traverse@0.4.1: {} + + json-schema-traverse@1.0.0: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@1.0.2: + dependencies: + minimist: 1.2.8 + + json5@2.2.3: {} + + jsonc-parser@3.3.1: {} + + jsx-ast-utils@3.3.5: + dependencies: + array-includes: 3.1.8 + array.prototype.flat: 1.3.3 + object.assign: 4.1.7 + object.values: 1.2.1 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + kleur@3.0.3: {} + + language-subtag-registry@0.3.23: {} + + language-tags@1.0.9: + dependencies: + language-subtag-registry: 0.3.23 + + leven@3.1.0: {} + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lilconfig@3.1.3: {} + + lines-and-columns@1.2.4: {} + + loader-runner@4.3.0: {} + + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash-es@4.17.21: {} + + lodash.memoize@4.1.2: {} + + lodash.merge@4.6.2: {} + + lodash@4.17.21: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lru-cache@10.4.3: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + lucide-react@0.471.1(react@19.0.0): + dependencies: + react: 19.0.0 + + lz-string@1.5.0: {} + + make-dir@4.0.0: + dependencies: + semver: 7.6.3 + + make-error@1.3.6: {} + + makeerror@1.0.12: + dependencies: + tmpl: 1.0.5 + + math-intrinsics@1.1.0: {} + + memorystream@0.3.1: {} + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mimic-fn@2.1.0: {} + + min-indent@1.0.1: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.1 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minimist@1.2.8: {} + + minipass@7.1.2: {} + + mkdirp@1.0.4: {} + + ms@2.1.3: {} + + mute-stream@1.0.0: {} + + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + nanoid@3.3.8: {} + + natural-compare@1.4.0: {} + + neo-async@2.6.2: {} + + next-themes@0.4.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + dependencies: + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + + next@15.1.4(@babel/core@7.26.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + dependencies: + '@next/env': 15.1.4 + '@swc/counter': 0.1.3 + '@swc/helpers': 0.5.15 + busboy: 1.6.0 + caniuse-lite: 1.0.30001692 + postcss: 8.4.31 + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + styled-jsx: 5.1.6(@babel/core@7.26.0)(react@19.0.0) + optionalDependencies: + '@next/swc-darwin-arm64': 15.1.4 + '@next/swc-darwin-x64': 15.1.4 + '@next/swc-linux-arm64-gnu': 15.1.4 + '@next/swc-linux-arm64-musl': 15.1.4 + '@next/swc-linux-x64-gnu': 15.1.4 + '@next/swc-linux-x64-musl': 15.1.4 + '@next/swc-win32-arm64-msvc': 15.1.4 + '@next/swc-win32-x64-msvc': 15.1.4 + sharp: 0.33.5 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + + node-int64@0.4.0: {} + + node-releases@2.0.19: {} + + normalize-path@3.0.0: {} + + npm-normalize-package-bin@3.0.1: {} + + npm-run-all2@6.2.6: + dependencies: + ansi-styles: 6.2.1 + cross-spawn: 7.0.6 + memorystream: 0.3.1 + minimatch: 9.0.5 + pidtree: 0.6.0 + read-package-json-fast: 3.0.2 + shell-quote: 1.8.2 + which: 3.0.1 + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + nwsapi@2.2.16: {} + + object-assign@4.1.1: {} + + object-hash@3.0.0: {} + + object-inspect@1.13.3: {} + + object-keys@1.1.1: {} + + object.assign@4.1.7: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + define-properties: 1.2.1 + es-object-atoms: 1.1.0 + has-symbols: 1.1.0 + object-keys: 1.1.1 + + object.entries@1.1.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-object-atoms: 1.1.0 + + object.fromentries@2.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-object-atoms: 1.1.0 + + object.groupby@1.0.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + + object.values@1.2.1: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + define-properties: 1.2.1 + es-object-atoms: 1.1.0 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + os-tmpdir@1.0.2: {} + + own-keys@1.0.1: + dependencies: + get-intrinsic: 1.2.7 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + p-try@2.2.0: {} + + package-json-from-dist@1.0.1: {} + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.26.2 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parse5@7.2.1: + dependencies: + entities: 4.5.0 + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + pidtree@0.6.0: {} + + pify@2.3.0: {} + + pirates@4.0.6: {} + + pkg-dir@4.2.0: + dependencies: + find-up: 4.1.0 + + possible-typed-array-names@1.0.0: {} + + postcss-import@15.1.0(postcss@8.5.1): + dependencies: + postcss: 8.5.1 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.10 + + postcss-js@4.0.1(postcss@8.5.1): + dependencies: + camelcase-css: 2.0.1 + postcss: 8.5.1 + + postcss-load-config@4.0.2(postcss@8.5.1)(ts-node@10.9.2(@swc/core@1.10.9(@swc/helpers@0.5.15))(@types/node@22.10.6)(typescript@5.7.3)): + dependencies: + lilconfig: 3.1.3 + yaml: 2.7.0 + optionalDependencies: + postcss: 8.5.1 + ts-node: 10.9.2(@swc/core@1.10.9(@swc/helpers@0.5.15))(@types/node@22.10.6)(typescript@5.7.3) + + postcss-nested@6.2.0(postcss@8.5.1): + dependencies: + postcss: 8.5.1 + postcss-selector-parser: 6.1.2 + + postcss-selector-parser@6.1.2: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-value-parser@4.2.0: {} + + postcss@8.4.31: + dependencies: + nanoid: 3.3.8 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + postcss@8.5.1: + dependencies: + nanoid: 3.3.8 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prelude-ls@1.2.1: {} + + pretty-format@27.5.1: + dependencies: + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 + + pretty-format@29.7.0: + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + + psl@1.15.0: + dependencies: + punycode: 2.3.1 + + punycode@2.3.1: {} + + pure-rand@6.1.0: {} + + querystringify@2.2.0: {} + + queue-microtask@1.2.3: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + react-dom@19.0.0(react@19.0.0): + dependencies: + react: 19.0.0 + scheduler: 0.25.0 + + react-error-boundary@3.1.4(react@19.0.0): + dependencies: + '@babel/runtime': 7.26.0 + react: 19.0.0 + + react-is@16.13.1: {} + + react-is@17.0.2: {} + + react-is@18.3.1: {} + + react-remove-scroll-bar@2.3.8(@types/react@19.0.7)(react@19.0.0): + dependencies: + react: 19.0.0 + react-style-singleton: 2.2.3(@types/react@19.0.7)(react@19.0.0) + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.0.7 + + react-remove-scroll@2.6.2(@types/react@19.0.7)(react@19.0.0): + dependencies: + react: 19.0.0 + react-remove-scroll-bar: 2.3.8(@types/react@19.0.7)(react@19.0.0) + react-style-singleton: 2.2.3(@types/react@19.0.7)(react@19.0.0) + tslib: 2.8.1 + use-callback-ref: 1.3.3(@types/react@19.0.7)(react@19.0.0) + use-sidecar: 1.1.3(@types/react@19.0.7)(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.7 + + react-style-singleton@2.2.3(@types/react@19.0.7)(react@19.0.0): + dependencies: + get-nonce: 1.0.1 + react: 19.0.0 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.0.7 + + react@19.0.0: {} + + read-cache@1.0.0: + dependencies: + pify: 2.3.0 + + read-package-json-fast@3.0.2: + dependencies: + json-parse-even-better-errors: 3.0.2 + npm-normalize-package-bin: 3.0.1 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + redent@3.0.0: + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + + reflect.getprototypeof@1.0.10: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.1.0 + get-intrinsic: 1.2.7 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 + + regenerator-runtime@0.14.1: {} + + regexp.prototype.flags@1.5.4: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + requires-port@1.0.0: {} + + resolve-cwd@3.0.0: + dependencies: + resolve-from: 5.0.0 + + resolve-from@4.0.0: {} + + resolve-from@5.0.0: {} + + resolve-pkg-maps@1.0.0: {} + + resolve.exports@2.0.3: {} + + resolve@1.22.10: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + resolve@2.0.0-next.5: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + reusify@1.0.4: {} + + rimraf@2.7.1: + dependencies: + glob: 7.2.3 + + run-async@3.0.0: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + rxjs@7.8.1: + dependencies: + tslib: 2.8.1 + + safe-array-concat@1.1.3: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + get-intrinsic: 1.2.7 + has-symbols: 1.1.0 + isarray: 2.0.5 + + safe-buffer@5.2.1: {} + + safe-push-apply@1.0.0: + dependencies: + es-errors: 1.3.0 + isarray: 2.0.5 + + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + is-regex: 1.2.1 + + safer-buffer@2.1.2: {} + + saxes@6.0.0: + dependencies: + xmlchars: 2.2.0 + + scheduler@0.25.0: {} + + schema-utils@3.3.0: + dependencies: + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + + schema-utils@4.3.0: + dependencies: + '@types/json-schema': 7.0.15 + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) + ajv-keywords: 5.1.0(ajv@8.17.1) + + semver@6.3.1: {} + + semver@7.6.3: {} + + serialize-javascript@6.0.2: + dependencies: + randombytes: 2.1.0 + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.7 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.0 + + sharp@0.33.5: + dependencies: + color: 4.2.3 + detect-libc: 2.0.3 + semver: 7.6.3 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.33.5 + '@img/sharp-darwin-x64': 0.33.5 + '@img/sharp-libvips-darwin-arm64': 1.0.4 + '@img/sharp-libvips-darwin-x64': 1.0.4 + '@img/sharp-libvips-linux-arm': 1.0.5 + '@img/sharp-libvips-linux-arm64': 1.0.4 + '@img/sharp-libvips-linux-s390x': 1.0.4 + '@img/sharp-libvips-linux-x64': 1.0.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + '@img/sharp-linux-arm': 0.33.5 + '@img/sharp-linux-arm64': 0.33.5 + '@img/sharp-linux-s390x': 0.33.5 + '@img/sharp-linux-x64': 0.33.5 + '@img/sharp-linuxmusl-arm64': 0.33.5 + '@img/sharp-linuxmusl-x64': 0.33.5 + '@img/sharp-wasm32': 0.33.5 + '@img/sharp-win32-ia32': 0.33.5 + '@img/sharp-win32-x64': 0.33.5 + optional: true + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + shell-quote@1.8.2: {} + + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.3 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + object-inspect: 1.13.3 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + object-inspect: 1.13.3 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.3 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + simple-swizzle@0.2.2: + dependencies: + is-arrayish: 0.3.2 + optional: true + + sisteransi@1.0.5: {} + + slash@3.0.0: {} + + sonner@1.7.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + dependencies: + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + + source-map-js@1.2.1: {} + + source-map-support@0.5.13: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + sprintf-js@1.0.3: {} + + stable-hash@0.0.4: {} + + stack-utils@2.0.6: + dependencies: + escape-string-regexp: 2.0.0 + + streamsearch@1.1.0: {} + + string-length@4.0.2: + dependencies: + char-regex: 1.0.2 + strip-ansi: 6.0.1 + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + string.prototype.includes@2.0.1: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + + string.prototype.matchall@4.0.12: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.1.0 + get-intrinsic: 1.2.7 + gopd: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + regexp.prototype.flags: 1.5.4 + set-function-name: 2.0.2 + side-channel: 1.1.0 + + string.prototype.repeat@1.0.0: + dependencies: + define-properties: 1.2.1 + es-abstract: 1.23.9 + + string.prototype.trim@1.2.10: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-object-atoms: 1.1.0 + has-property-descriptors: 1.0.2 + + string.prototype.trimend@1.0.9: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + define-properties: 1.2.1 + es-object-atoms: 1.1.0 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-object-atoms: 1.1.0 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + + strip-bom@3.0.0: {} + + strip-bom@4.0.0: {} + + strip-final-newline@2.0.0: {} + + strip-indent@3.0.0: + dependencies: + min-indent: 1.0.1 + + strip-json-comments@2.0.1: {} + + strip-json-comments@3.1.1: {} + + styled-jsx@5.1.6(@babel/core@7.26.0)(react@19.0.0): + dependencies: + client-only: 0.0.1 + react: 19.0.0 + optionalDependencies: + '@babel/core': 7.26.0 + + sucrase@3.35.0: + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + commander: 4.1.1 + glob: 10.4.5 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + symbol-tree@3.2.4: {} + + tailwind-merge@2.6.0: {} + + tailwindcss-animate@1.0.7(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.10.9(@swc/helpers@0.5.15))(@types/node@22.10.6)(typescript@5.7.3))): + dependencies: + tailwindcss: 3.4.17(ts-node@10.9.2(@swc/core@1.10.9(@swc/helpers@0.5.15))(@types/node@22.10.6)(typescript@5.7.3)) + + tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.10.9(@swc/helpers@0.5.15))(@types/node@22.10.6)(typescript@5.7.3)): + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.3 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.7 + lilconfig: 3.1.3 + micromatch: 4.0.8 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.1.1 + postcss: 8.5.1 + postcss-import: 15.1.0(postcss@8.5.1) + postcss-js: 4.0.1(postcss@8.5.1) + postcss-load-config: 4.0.2(postcss@8.5.1)(ts-node@10.9.2(@swc/core@1.10.9(@swc/helpers@0.5.15))(@types/node@22.10.6)(typescript@5.7.3)) + postcss-nested: 6.2.0(postcss@8.5.1) + postcss-selector-parser: 6.1.2 + resolve: 1.22.10 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node + + tapable@2.2.1: {} + + terser-webpack-plugin@5.3.11(@swc/core@1.10.9(@swc/helpers@0.5.15))(webpack@5.97.1(@swc/core@1.10.9(@swc/helpers@0.5.15))): + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + jest-worker: 27.5.1 + schema-utils: 4.3.0 + serialize-javascript: 6.0.2 + terser: 5.37.0 + webpack: 5.97.1(@swc/core@1.10.9(@swc/helpers@0.5.15)) + optionalDependencies: + '@swc/core': 1.10.9(@swc/helpers@0.5.15) + + terser@5.37.0: + dependencies: + '@jridgewell/source-map': 0.3.6 + acorn: 8.14.0 + commander: 2.20.3 + source-map-support: 0.5.21 + + test-exclude@6.0.0: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + + tmp@0.0.33: + dependencies: + os-tmpdir: 1.0.2 + + tmpl@1.0.5: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toml@3.0.0: {} + + tough-cookie@4.1.4: + dependencies: + psl: 1.15.0 + punycode: 2.3.1 + universalify: 0.2.0 + url-parse: 1.5.10 + + tr46@3.0.0: + dependencies: + punycode: 2.3.1 + + tree-kill@1.2.2: {} + + ts-api-utils@2.0.0(typescript@5.7.3): + dependencies: + typescript: 5.7.3 + + ts-interface-checker@0.1.13: {} + + ts-jest@29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@22.10.6)(ts-node@10.9.2(@swc/core@1.10.9(@swc/helpers@0.5.15))(@types/node@22.10.6)(typescript@5.7.3)))(typescript@5.7.3): + dependencies: + bs-logger: 0.2.6 + ejs: 3.1.10 + fast-json-stable-stringify: 2.1.0 + jest: 29.7.0(@types/node@22.10.6)(ts-node@10.9.2(@swc/core@1.10.9(@swc/helpers@0.5.15))(@types/node@22.10.6)(typescript@5.7.3)) + jest-util: 29.7.0 + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.6.3 + typescript: 5.7.3 + yargs-parser: 21.1.1 + optionalDependencies: + '@babel/core': 7.26.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.26.0) + + ts-node-dev@2.0.0(@swc/core@1.10.9(@swc/helpers@0.5.15))(@types/node@22.10.6)(typescript@5.7.3): + dependencies: + chokidar: 3.6.0 + dynamic-dedupe: 0.3.0 + minimist: 1.2.8 + mkdirp: 1.0.4 + resolve: 1.22.10 + rimraf: 2.7.1 + source-map-support: 0.5.21 + tree-kill: 1.2.2 + ts-node: 10.9.2(@swc/core@1.10.9(@swc/helpers@0.5.15))(@types/node@22.10.6)(typescript@5.7.3) + tsconfig: 7.0.0 + typescript: 5.7.3 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + + ts-node@10.9.2(@swc/core@1.10.9(@swc/helpers@0.5.15))(@types/node@20.17.13)(typescript@5.7.3): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.17.13 + acorn: 8.14.0 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.7.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optionalDependencies: + '@swc/core': 1.10.9(@swc/helpers@0.5.15) + + ts-node@10.9.2(@swc/core@1.10.9(@swc/helpers@0.5.15))(@types/node@22.10.6)(typescript@5.7.3): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 22.10.6 + acorn: 8.14.0 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.7.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optionalDependencies: + '@swc/core': 1.10.9(@swc/helpers@0.5.15) + + tsconfig-paths@3.15.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + + tsconfig@7.0.0: + dependencies: + '@types/strip-bom': 3.0.0 + '@types/strip-json-comments': 0.0.30 + strip-bom: 3.0.0 + strip-json-comments: 2.0.1 + + tslib@2.8.1: {} + + typanion@3.14.0: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-detect@4.0.8: {} + + type-fest@0.21.3: {} + + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + + typed-array-byte-length@1.0.3: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.3 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + + typed-array-byte-offset@1.0.4: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + for-each: 0.3.3 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 + + typed-array-length@1.0.7: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.3 + gopd: 1.2.0 + is-typed-array: 1.1.15 + possible-typed-array-names: 1.0.0 + reflect.getprototypeof: 1.0.10 + + typescript@5.7.3: {} + + unbox-primitive@1.1.0: + dependencies: + call-bound: 1.0.3 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 + + undici-types@6.19.8: {} + + undici-types@6.20.0: {} + + universal-user-agent@7.0.2: {} + + universalify@0.2.0: {} + + update-browserslist-db@1.1.2(browserslist@4.24.4): + dependencies: + browserslist: 4.24.4 + escalade: 3.2.0 + picocolors: 1.1.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + url-parse@1.5.10: + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + + use-callback-ref@1.3.3(@types/react@19.0.7)(react@19.0.0): + dependencies: + react: 19.0.0 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.0.7 + + use-sidecar@1.1.3(@types/react@19.0.7)(react@19.0.0): + dependencies: + detect-node-es: 1.1.0 + react: 19.0.0 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.0.7 + + util-deprecate@1.0.2: {} + + uuid@8.3.2: {} + + v8-compile-cache-lib@3.0.1: {} + + v8-to-istanbul@9.3.0: + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 2.0.0 + + w3c-xmlserializer@4.0.0: + dependencies: + xml-name-validator: 4.0.0 + + walker@1.0.8: + dependencies: + makeerror: 1.0.12 + + wasm-sjlj@1.0.6: {} + + watchpack@2.4.2: + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + + webidl-conversions@7.0.0: {} + + webpack-sources@3.2.3: {} + + webpack@5.97.1(@swc/core@1.10.9(@swc/helpers@0.5.15)): + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.6 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.14.0 + browserslist: 4.24.4 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.18.0 + es-module-lexer: 1.6.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.11(@swc/core@1.10.9(@swc/helpers@0.5.15))(webpack@5.97.1(@swc/core@1.10.9(@swc/helpers@0.5.15))) + watchpack: 2.4.2 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + + whatwg-encoding@2.0.0: + dependencies: + iconv-lite: 0.6.3 + + whatwg-mimetype@3.0.0: {} + + whatwg-url@11.0.0: + dependencies: + tr46: 3.0.0 + webidl-conversions: 7.0.0 + + which-boxed-primitive@1.1.1: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.1 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + + which-builtin-type@1.2.1: + dependencies: + call-bound: 1.0.3 + function.prototype.name: 1.1.8 + has-tostringtag: 1.0.2 + is-async-function: 2.1.0 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.0 + is-regex: 1.2.1 + is-weakref: 1.1.0 + isarray: 2.0.5 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.18 + + which-collection@1.0.2: + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.4 + + which-typed-array@1.1.18: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.3 + for-each: 0.3.3 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + which@3.0.1: + dependencies: + isexe: 2.0.0 + + word-wrap@1.2.5: {} + + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + wrappy@1.0.2: {} + + write-file-atomic@4.0.2: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 3.0.7 + + ws@8.18.0: {} + + xml-name-validator@4.0.0: {} + + xml@1.0.1: {} + + xmlbuilder@15.0.0: {} + + xmlchars@2.2.0: {} + + xtend@4.0.2: {} + + y18n@5.0.8: {} + + yallist@3.1.1: {} + + yaml@2.7.0: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yn@3.1.1: {} + + yocto-queue@0.1.0: {} + + yoctocolors-cjs@2.1.2: {} + + zod@3.24.1: {} + + zsa-react@0.2.3(react@19.0.0)(zod@3.24.1): + dependencies: + react: 19.0.0 + zod: 3.24.1 + zsa: 0.6.0(zod@3.24.1) + + zsa@0.6.0(zod@3.24.1): + dependencies: + zod: 3.24.1 diff --git a/integ-tests/react/pnpm-workspace.yaml b/integ-tests/react/pnpm-workspace.yaml new file mode 100644 index 000000000..b1915c5d0 --- /dev/null +++ b/integ-tests/react/pnpm-workspace.yaml @@ -0,0 +1,10 @@ +packages: + - '../../engine/language_client_typescript' + - '../../engine/language_client_typescript/npm/darwin-arm64' + - '../../engine/language_client_typescript/npm/darwin-x64' + - '../../engine/language_client_typescript/npm/linux-arm64-gmu' + - '../../engine/language_client_typescript/npm/linux-arm64-musl' + - '../../engine/language_client_typescript/npm/linux-x64-gnu' + - '../../engine/language_client_typescript/npm/linux-x64-musl' + - '../../engine/language_client_typescript/npm/win32-x64-msvc' + - '../../typescript/nextjs-plugin' diff --git a/integ-tests/react/postcss.config.mjs b/integ-tests/react/postcss.config.mjs new file mode 100644 index 000000000..1a69fd2a4 --- /dev/null +++ b/integ-tests/react/postcss.config.mjs @@ -0,0 +1,8 @@ +/** @type {import('postcss-load-config').Config} */ +const config = { + plugins: { + tailwindcss: {}, + }, +}; + +export default config; diff --git a/integ-tests/react/public/file.svg b/integ-tests/react/public/file.svg new file mode 100644 index 000000000..004145cdd --- /dev/null +++ b/integ-tests/react/public/file.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/integ-tests/react/public/globe.svg b/integ-tests/react/public/globe.svg new file mode 100644 index 000000000..567f17b0d --- /dev/null +++ b/integ-tests/react/public/globe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/integ-tests/react/public/next.svg b/integ-tests/react/public/next.svg new file mode 100644 index 000000000..5174b28c5 --- /dev/null +++ b/integ-tests/react/public/next.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/integ-tests/react/public/vercel.svg b/integ-tests/react/public/vercel.svg new file mode 100644 index 000000000..770539603 --- /dev/null +++ b/integ-tests/react/public/vercel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/integ-tests/react/public/window.svg b/integ-tests/react/public/window.svg new file mode 100644 index 000000000..b2b2a44f6 --- /dev/null +++ b/integ-tests/react/public/window.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/integ-tests/react/src/app/actions.ts b/integ-tests/react/src/app/actions.ts new file mode 100644 index 000000000..271e10c29 --- /dev/null +++ b/integ-tests/react/src/app/actions.ts @@ -0,0 +1,33 @@ + +'use server' + +import { b, UniverseQuestion, UniverseQuestionInput } from '../../baml_client' +import { ServerAction } from '../../baml_client/react/types' + +/** + * Server action for testing AWS functionality + */ +export const CustomTestAwsAction = (async ( + input: string, + options?: { stream?: boolean } +) => { + if (options?.stream) { + const stream = b.stream.TestAws(input); + return stream.toStreamable(); + } + return b.TestAws(input); +}) as ServerAction; + +/** + * Server action for testing universe questions + */ +export const CustomTestUniverseQuestionAction = (async ( + input: UniverseQuestionInput, + options?: { stream?: boolean } +) => { + if (options?.stream) { + const stream = b.stream.TestUniverseQuestion(input); + return stream.toStreamable(); + } + return b.TestUniverseQuestion(input); +}) as ServerAction; diff --git a/integ-tests/react/src/app/api/baml/[baml_function]/route.ts b/integ-tests/react/src/app/api/baml/[baml_function]/route.ts new file mode 100644 index 000000000..679a5e80e --- /dev/null +++ b/integ-tests/react/src/app/api/baml/[baml_function]/route.ts @@ -0,0 +1,88 @@ +import { NextRequest, NextResponse } from 'next/server' +import { b } from '../../../../../baml_client' + +export async function POST( + req: NextRequest, + { params: routeParams }: { params: Promise<{ baml_function: string }> } +) { + try { + const { baml_function } = await routeParams + const functionParams = await req.json() + + console.log('baml_function', baml_function) + + // Type check if the function exists on the BAML client + if (!(baml_function in b.stream)) { + return NextResponse.json( + { error: `Function ${baml_function} not found` }, + { status: 404 } + ) + } + + // Get the function from the BAML client + // const bamlFn = b.stream[baml_function as keyof typeof b.stream] + // if (typeof bamlFn !== 'function') { + // return NextResponse.json( + // { error: `${baml_function} is not a function` }, + // { status: 400 } + // ) + // } + + // Create a TransformStream for streaming the response + const stream = new TransformStream() + const writer = stream.writable.getWriter() + const encoder = new TextEncoder() + + // Start streaming the response + // const bamlStream = bamlFn(functionParams) + + // Process the stream in the background + // ;(async () => { + // try { + // for await (const chunk of bamlStream) { + // // Send partial results + // await writer.write( + // encoder.encode( + // JSON.stringify({ partial: chunk }) + '\n' + // ) + // ) + // } + + // // Send final result + // const finalResponse = await bamlStream.getFinalResponse() + // await writer.write( + // encoder.encode( + // JSON.stringify({ final: finalResponse }) + '\n' + // ) + // ) + // } catch (error) { + // // Send error if something goes wrong + // await writer.write( + // encoder.encode( + // JSON.stringify({ + // error: error instanceof Error ? error.message : 'Unknown error' + // }) + '\n' + // ) + // ) + // } finally { + // await writer.close() + // } + // })() + + // Return the stream response + return new NextResponse(stream.readable, { + headers: { + 'Content-Type': 'application/x-ndjson', + 'Transfer-Encoding': 'chunked', + }, + }) + } catch (error) { + console.error('API Error:', error) + return NextResponse.json( + { + error: error instanceof Error ? error.message : 'Internal server error' + }, + { status: 500 } + ) + } +} diff --git a/integ-tests/react/src/app/favicon.ico b/integ-tests/react/src/app/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..718d6fea4835ec2d246af9800eddb7ffb276240c GIT binary patch literal 25931 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 LrJugUA?W`A8`#=m literal 0 HcmV?d00001 diff --git a/integ-tests/react/src/app/globals.css b/integ-tests/react/src/app/globals.css new file mode 100644 index 000000000..9e332aa3f --- /dev/null +++ b/integ-tests/react/src/app/globals.css @@ -0,0 +1,68 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + :root { + --background: 0 0% 100%; + --foreground: 0 0% 3.9%; + --card: 0 0% 100%; + --card-foreground: 0 0% 3.9%; + --popover: 0 0% 100%; + --popover-foreground: 0 0% 3.9%; + --primary: 0 0% 9%; + --primary-foreground: 0 0% 98%; + --secondary: 0 0% 96.1%; + --secondary-foreground: 0 0% 9%; + --muted: 0 0% 96.1%; + --muted-foreground: 0 0% 45.1%; + --accent: 0 0% 96.1%; + --accent-foreground: 0 0% 9%; + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 0 0% 98%; + --border: 0 0% 89.8%; + --input: 0 0% 89.8%; + --ring: 0 0% 3.9%; + --chart-1: 12 76% 61%; + --chart-2: 173 58% 39%; + --chart-3: 197 37% 24%; + --chart-4: 43 74% 66%; + --chart-5: 27 87% 67%; + --radius: 0.5rem; + } + .dark { + --background: 0 0% 3.9%; + --foreground: 0 0% 98%; + --card: 0 0% 3.9%; + --card-foreground: 0 0% 98%; + --popover: 0 0% 3.9%; + --popover-foreground: 0 0% 98%; + --primary: 0 0% 98%; + --primary-foreground: 0 0% 9%; + --secondary: 0 0% 14.9%; + --secondary-foreground: 0 0% 98%; + --muted: 0 0% 14.9%; + --muted-foreground: 0 0% 63.9%; + --accent: 0 0% 14.9%; + --accent-foreground: 0 0% 98%; + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 0 0% 98%; + --border: 0 0% 14.9%; + --input: 0 0% 14.9%; + --ring: 0 0% 83.1%; + --chart-1: 220 70% 50%; + --chart-2: 160 60% 45%; + --chart-3: 30 80% 55%; + --chart-4: 280 65% 60%; + --chart-5: 340 75% 55%; + } +} + +@layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground; + } +} diff --git a/integ-tests/react/src/app/layout.tsx b/integ-tests/react/src/app/layout.tsx new file mode 100644 index 000000000..4623d80b2 --- /dev/null +++ b/integ-tests/react/src/app/layout.tsx @@ -0,0 +1,49 @@ +import type { Metadata } from "next"; +import { Geist, Geist_Mono } from "next/font/google"; +import "./globals.css"; +import { Toaster } from "sonner"; +import { ThemeProvider } from "@/components/theme-provider"; +import { cn } from "@/lib/utils"; + +const geistSans = Geist({ + variable: "--font-geist-sans", + subsets: ["latin"], +}); + +const geistMono = Geist_Mono({ + variable: "--font-geist-mono", + subsets: ["latin"], +}); + +export const metadata: Metadata = { + title: "BAML Next.js Demo", + description: "BAML + Next.js Integration Demo", +}; + +export default function RootLayout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + return ( + + + + {children} + + + + + ); +} diff --git a/integ-tests/react/src/app/page.tsx b/integ-tests/react/src/app/page.tsx new file mode 100644 index 000000000..ad7a3ff0a --- /dev/null +++ b/integ-tests/react/src/app/page.tsx @@ -0,0 +1,100 @@ +import Image from "next/image"; +import TestClient from "./test-client"; +import { Button } from "@/components/ui/button"; +import { ModeToggle } from "@/components/mode-toggle"; +import { GithubIcon } from "lucide-react"; + +export default function Home() { + return ( +
+
+
+
+ Next.js logo + + + BAML +
+
+ + +
+
+ +
+
+

+ BAML + Next.js Integration +

+

+ Test the integration by entering some text below. +

+
+ +
+ + +
+ + +
+ + +
+
+ ); +} diff --git a/integ-tests/react/src/app/test-client.tsx b/integ-tests/react/src/app/test-client.tsx new file mode 100644 index 000000000..5951a91ae --- /dev/null +++ b/integ-tests/react/src/app/test-client.tsx @@ -0,0 +1,202 @@ +'use client' + +import * as React from 'react' +import { useTestAws } from '../../baml_client/react/client' +// import { useLLM, useTestAws, useTestUniverseQuestion} from '../../baml_client/react/client' +import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from '@/components/ui/card' +import { Button } from '@/components/ui/button' +import { Input } from '@/components/ui/input' +import { Label } from '@/components/ui/label' +// import { TestAwsAction} from '../../baml_client/react/server' +import type { StreamingHookResult } from '../../baml_client/react/types' +import type { TestAwsAction } from '../../baml_client/react/server' +import { Loader2 } from 'lucide-react' +import { Alert, AlertDescription } from '@/components/ui/alert' + +type ResponseCardProps = { + // hookResult: StreamingHookResult | NonStreamingHookResult + hookResult: StreamingHookResult + // hookResult: NonStreamingHookResult + status: StreamingHookResult['status'] +} + +function ResponseCard({ hookResult }: ResponseCardProps) { + const { isPending, error, isError, status, data, partialData } = hookResult + const response = isPending ? partialData : data + + return ( + <> + {isError && ( + + Error: {error?.message} + + )} + + {response && ( +
+ + +
+                {typeof response === 'string' ? response : JSON.stringify(response, null, 2)}
+              
+
+
+
+ )} + {status} + + ) +} + +export default function TestClient() { + const streamingDirectAction = useTestAws({ + stream: true, + onPartial: (response) => { + console.log('Got partial response', response) + }, + onFinal: (response) => { + console.log('Got final response', response) + }, + onError: (error) => { + console.error('Got error', error) + }, + }) + + // // Streaming should not have errors + // streamingDirectAction satisfies StreamingReturnType; + // streamingDirectAction.data satisfies string | undefined; + // streamingDirectAction.partialData satisfies string | null | undefined; + // streamingDirectAction.mutate satisfies (input: string) => Promise>; + + // // Non-Streaming should have errors + // streamingDirectAction satisfies NonStreamingReturnType; + // streamingDirectAction.data satisfies never; + // streamingDirectAction.partialData satisfies never; + // streamingDirectAction.mutate satisfies (input: string) => Promise; + + // const nonStreamingDirectAction = useTestAws({ + // onFinal: (response) => { + // console.log('Got final response', response) + // }, + // onError: (error) => { + // console.error('Got error', error) + // }, + // }) + + // // Streaming should have errors + // nonStreamingDirectAction satisfies StreamingReturnType; + // nonStreamingDirectAction.data satisfies never; + // nonStreamingDirectAction.partialData satisfies string | null; + // nonStreamingDirectAction.mutate satisfies (input: string) => Promise>; + + // // Non-Streaming should not have errors + // nonStreamingDirectAction satisfies NonStreamingReturnType; + // nonStreamingDirectAction.data satisfies string | undefined; + // nonStreamingDirectAction.partialData satisfies never | undefined; + // nonStreamingDirectAction.mutate satisfies (input: string) => Promise; + + // const streamingIndirectAction = useLLM(TestAwsAction, { + // stream: true, + // onPartial: (response) => { + // console.log('Got partial response', response) + // }, + // onFinal: (response) => { + // console.log('Got final response', response) + // }, + // onError: (error) => { + // console.error('Got error', error) + // }, + // }) + + // // Streaming should not have errors + // streamingIndirectAction satisfies StreamingReturnType; + // streamingIndirectAction.data satisfies string | undefined; + // streamingIndirectAction.partialData satisfies string | null | undefined; + // streamingIndirectAction.mutate satisfies (input: string) => Promise>; + + // // Non-Streaming should have errors + // streamingIndirectAction satisfies NonStreamingReturnType; + // streamingIndirectAction.data satisfies never; + // streamingIndirectAction.partialData satisfies never | undefined; + // streamingIndirectAction.mutate satisfies (input: string) => Promise; + + // const nonStreamingIndirectAction = useLLM(TestAwsAction, { + // onFinal: (response) => { + // console.log('Got final response', response) + // }, + // onError: (error) => { + // console.error('Got error', error) + // }, + // }) + + // // Streaming should have errors + // nonStreamingIndirectAction satisfies StreamingReturnType; + // nonStreamingIndirectAction.data satisfies never + // nonStreamingIndirectAction.partialData satisfies never; + // nonStreamingIndirectAction.mutate satisfies (input: string) => Promise>; + + // // Non-Streaming should not have errors + // nonStreamingIndirectAction satisfies NonStreamingReturnType; + // nonStreamingIndirectAction.data satisfies string | undefined; + // nonStreamingIndirectAction.partialData satisfies never | undefined; + // nonStreamingIndirectAction.mutate satisfies (input: string) => Promise; + + // const universeAction = useTestUniverseQuestion({ + // stream: true, + // onPartial: (response) => { + // console.log('Got partial response', response) + // }, + // onFinal: (response) => { + // console.log('Got final response', response) + // }, + // onError: (error) => { + // console.error('Got error', error) + // }, + // }) + + const { isPending, error, isError, isSuccess, mutate, status, data, partialData } = streamingDirectAction + + const response = isPending ? partialData : data + const [prompt, setPrompt] = React.useState('') + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault() + if (!prompt.trim()) return + + // await mutate({ question: prompt }) + await mutate(prompt) + setPrompt('') + } + + return ( + + + BAML AWS Test + Test the BAML AWS integration by entering some text below. + + + +
+
+ + ) => setPrompt(e.target.value)} + placeholder='Type something...' + disabled={isPending} + /> +
+ + +
+ + +
+
+ ) +} diff --git a/integ-tests/react/src/components/mode-toggle.tsx b/integ-tests/react/src/components/mode-toggle.tsx new file mode 100644 index 000000000..bf1470451 --- /dev/null +++ b/integ-tests/react/src/components/mode-toggle.tsx @@ -0,0 +1,40 @@ +"use client" + +import * as React from "react" +import { MoonIcon, SunIcon } from "lucide-react" +import { useTheme } from "next-themes" + +import { Button } from "@/components/ui/button" +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu" + +export function ModeToggle() { + const { setTheme } = useTheme() + + return ( + + + + + + setTheme("light")}> + Light + + setTheme("dark")}> + Dark + + setTheme("system")}> + System + + + + ) +} \ No newline at end of file diff --git a/integ-tests/react/src/components/theme-provider.tsx b/integ-tests/react/src/components/theme-provider.tsx new file mode 100644 index 000000000..22379ddf2 --- /dev/null +++ b/integ-tests/react/src/components/theme-provider.tsx @@ -0,0 +1,9 @@ +"use client" + +import * as React from "react" +import { ThemeProvider as NextThemesProvider } from "next-themes" +import { type ThemeProviderProps } from "next-themes" + +export function ThemeProvider({ children, ...props }: ThemeProviderProps) { + return {children} +} \ No newline at end of file diff --git a/integ-tests/react/src/components/ui/alert.tsx b/integ-tests/react/src/components/ui/alert.tsx new file mode 100644 index 000000000..41fa7e056 --- /dev/null +++ b/integ-tests/react/src/components/ui/alert.tsx @@ -0,0 +1,59 @@ +import * as React from "react" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const alertVariants = cva( + "relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground", + { + variants: { + variant: { + default: "bg-background text-foreground", + destructive: + "border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive", + }, + }, + defaultVariants: { + variant: "default", + }, + } +) + +const Alert = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes & VariantProps +>(({ className, variant, ...props }, ref) => ( +
+)) +Alert.displayName = "Alert" + +const AlertTitle = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +AlertTitle.displayName = "AlertTitle" + +const AlertDescription = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +AlertDescription.displayName = "AlertDescription" + +export { Alert, AlertTitle, AlertDescription } diff --git a/integ-tests/react/src/components/ui/badge.tsx b/integ-tests/react/src/components/ui/badge.tsx new file mode 100644 index 000000000..f000e3ef5 --- /dev/null +++ b/integ-tests/react/src/components/ui/badge.tsx @@ -0,0 +1,36 @@ +import * as React from "react" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const badgeVariants = cva( + "inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2", + { + variants: { + variant: { + default: + "border-transparent bg-primary text-primary-foreground hover:bg-primary/80", + secondary: + "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80", + destructive: + "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80", + outline: "text-foreground", + }, + }, + defaultVariants: { + variant: "default", + }, + } +) + +export interface BadgeProps + extends React.HTMLAttributes, + VariantProps {} + +function Badge({ className, variant, ...props }: BadgeProps) { + return ( +
+ ) +} + +export { Badge, badgeVariants } diff --git a/integ-tests/react/src/components/ui/button.tsx b/integ-tests/react/src/components/ui/button.tsx new file mode 100644 index 000000000..36496a287 --- /dev/null +++ b/integ-tests/react/src/components/ui/button.tsx @@ -0,0 +1,56 @@ +import * as React from "react" +import { Slot } from "@radix-ui/react-slot" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const buttonVariants = cva( + "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0", + { + variants: { + variant: { + default: "bg-primary text-primary-foreground hover:bg-primary/90", + destructive: + "bg-destructive text-destructive-foreground hover:bg-destructive/90", + outline: + "border border-input bg-background hover:bg-accent hover:text-accent-foreground", + secondary: + "bg-secondary text-secondary-foreground hover:bg-secondary/80", + ghost: "hover:bg-accent hover:text-accent-foreground", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: "h-10 px-4 py-2", + sm: "h-9 rounded-md px-3", + lg: "h-11 rounded-md px-8", + icon: "h-10 w-10", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + } +) + +export interface ButtonProps + extends React.ButtonHTMLAttributes, + VariantProps { + asChild?: boolean +} + +const Button = React.forwardRef( + ({ className, variant, size, asChild = false, ...props }, ref) => { + const Comp = asChild ? Slot : "button" + return ( + + ) + } +) +Button.displayName = "Button" + +export { Button, buttonVariants } diff --git a/integ-tests/react/src/components/ui/card.tsx b/integ-tests/react/src/components/ui/card.tsx new file mode 100644 index 000000000..f62edea57 --- /dev/null +++ b/integ-tests/react/src/components/ui/card.tsx @@ -0,0 +1,79 @@ +import * as React from "react" + +import { cn } from "@/lib/utils" + +const Card = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +Card.displayName = "Card" + +const CardHeader = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardHeader.displayName = "CardHeader" + +const CardTitle = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardTitle.displayName = "CardTitle" + +const CardDescription = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardDescription.displayName = "CardDescription" + +const CardContent = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardContent.displayName = "CardContent" + +const CardFooter = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardFooter.displayName = "CardFooter" + +export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent } diff --git a/integ-tests/react/src/components/ui/dropdown-menu.tsx b/integ-tests/react/src/components/ui/dropdown-menu.tsx new file mode 100644 index 000000000..0fc4c0e07 --- /dev/null +++ b/integ-tests/react/src/components/ui/dropdown-menu.tsx @@ -0,0 +1,200 @@ +"use client" + +import * as React from "react" +import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu" +import { Check, ChevronRight, Circle } from "lucide-react" + +import { cn } from "@/lib/utils" + +const DropdownMenu = DropdownMenuPrimitive.Root + +const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger + +const DropdownMenuGroup = DropdownMenuPrimitive.Group + +const DropdownMenuPortal = DropdownMenuPrimitive.Portal + +const DropdownMenuSub = DropdownMenuPrimitive.Sub + +const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup + +const DropdownMenuSubTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } +>(({ className, inset, children, ...props }, ref) => ( + + {children} + + +)) +DropdownMenuSubTrigger.displayName = + DropdownMenuPrimitive.SubTrigger.displayName + +const DropdownMenuSubContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DropdownMenuSubContent.displayName = + DropdownMenuPrimitive.SubContent.displayName + +const DropdownMenuContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, sideOffset = 4, ...props }, ref) => ( + + + +)) +DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName + +const DropdownMenuItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } +>(({ className, inset, ...props }, ref) => ( + +)) +DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName + +const DropdownMenuCheckboxItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, checked, ...props }, ref) => ( + + + + + + + {children} + +)) +DropdownMenuCheckboxItem.displayName = + DropdownMenuPrimitive.CheckboxItem.displayName + +const DropdownMenuRadioItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + + + + + {children} + +)) +DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName + +const DropdownMenuLabel = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } +>(({ className, inset, ...props }, ref) => ( + +)) +DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName + +const DropdownMenuSeparator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName + +const DropdownMenuShortcut = ({ + className, + ...props +}: React.HTMLAttributes) => { + return ( + + ) +} +DropdownMenuShortcut.displayName = "DropdownMenuShortcut" + +export { + DropdownMenu, + DropdownMenuTrigger, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuCheckboxItem, + DropdownMenuRadioItem, + DropdownMenuLabel, + DropdownMenuSeparator, + DropdownMenuShortcut, + DropdownMenuGroup, + DropdownMenuPortal, + DropdownMenuSub, + DropdownMenuSubContent, + DropdownMenuSubTrigger, + DropdownMenuRadioGroup, +} diff --git a/integ-tests/react/src/components/ui/input.tsx b/integ-tests/react/src/components/ui/input.tsx new file mode 100644 index 000000000..68551b927 --- /dev/null +++ b/integ-tests/react/src/components/ui/input.tsx @@ -0,0 +1,22 @@ +import * as React from "react" + +import { cn } from "@/lib/utils" + +const Input = React.forwardRef>( + ({ className, type, ...props }, ref) => { + return ( + + ) + } +) +Input.displayName = "Input" + +export { Input } diff --git a/integ-tests/react/src/components/ui/label.tsx b/integ-tests/react/src/components/ui/label.tsx new file mode 100644 index 000000000..534182176 --- /dev/null +++ b/integ-tests/react/src/components/ui/label.tsx @@ -0,0 +1,26 @@ +"use client" + +import * as React from "react" +import * as LabelPrimitive from "@radix-ui/react-label" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const labelVariants = cva( + "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70" +) + +const Label = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & + VariantProps +>(({ className, ...props }, ref) => ( + +)) +Label.displayName = LabelPrimitive.Root.displayName + +export { Label } diff --git a/integ-tests/react/src/components/ui/progress.tsx b/integ-tests/react/src/components/ui/progress.tsx new file mode 100644 index 000000000..5c87ea486 --- /dev/null +++ b/integ-tests/react/src/components/ui/progress.tsx @@ -0,0 +1,28 @@ +"use client" + +import * as React from "react" +import * as ProgressPrimitive from "@radix-ui/react-progress" + +import { cn } from "@/lib/utils" + +const Progress = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, value, ...props }, ref) => ( + + + +)) +Progress.displayName = ProgressPrimitive.Root.displayName + +export { Progress } diff --git a/integ-tests/react/src/components/ui/skeleton.tsx b/integ-tests/react/src/components/ui/skeleton.tsx new file mode 100644 index 000000000..01b8b6d4f --- /dev/null +++ b/integ-tests/react/src/components/ui/skeleton.tsx @@ -0,0 +1,15 @@ +import { cn } from "@/lib/utils" + +function Skeleton({ + className, + ...props +}: React.HTMLAttributes) { + return ( +
+ ) +} + +export { Skeleton } diff --git a/integ-tests/react/src/components/ui/sonner.tsx b/integ-tests/react/src/components/ui/sonner.tsx new file mode 100644 index 000000000..452f4d9f0 --- /dev/null +++ b/integ-tests/react/src/components/ui/sonner.tsx @@ -0,0 +1,31 @@ +"use client" + +import { useTheme } from "next-themes" +import { Toaster as Sonner } from "sonner" + +type ToasterProps = React.ComponentProps + +const Toaster = ({ ...props }: ToasterProps) => { + const { theme = "system" } = useTheme() + + return ( + + ) +} + +export { Toaster } diff --git a/integ-tests/react/src/components/ui/switch.tsx b/integ-tests/react/src/components/ui/switch.tsx new file mode 100644 index 000000000..bc69cf2db --- /dev/null +++ b/integ-tests/react/src/components/ui/switch.tsx @@ -0,0 +1,29 @@ +"use client" + +import * as React from "react" +import * as SwitchPrimitives from "@radix-ui/react-switch" + +import { cn } from "@/lib/utils" + +const Switch = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + +)) +Switch.displayName = SwitchPrimitives.Root.displayName + +export { Switch } diff --git a/integ-tests/react/src/components/ui/table.tsx b/integ-tests/react/src/components/ui/table.tsx new file mode 100644 index 000000000..7f3502f8b --- /dev/null +++ b/integ-tests/react/src/components/ui/table.tsx @@ -0,0 +1,117 @@ +import * as React from "react" + +import { cn } from "@/lib/utils" + +const Table = React.forwardRef< + HTMLTableElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+ + +)) +Table.displayName = "Table" + +const TableHeader = React.forwardRef< + HTMLTableSectionElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( + +)) +TableHeader.displayName = "TableHeader" + +const TableBody = React.forwardRef< + HTMLTableSectionElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( + +)) +TableBody.displayName = "TableBody" + +const TableFooter = React.forwardRef< + HTMLTableSectionElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( + tr]:last:border-b-0", + className + )} + {...props} + /> +)) +TableFooter.displayName = "TableFooter" + +const TableRow = React.forwardRef< + HTMLTableRowElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( + +)) +TableRow.displayName = "TableRow" + +const TableHead = React.forwardRef< + HTMLTableCellElement, + React.ThHTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +TableHead.displayName = "TableHead" + +const TableCell = React.forwardRef< + HTMLTableCellElement, + React.TdHTMLAttributes +>(({ className, ...props }, ref) => ( + +)) +TableCell.displayName = "TableCell" + +const TableCaption = React.forwardRef< + HTMLTableCaptionElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +TableCaption.displayName = "TableCaption" + +export { + Table, + TableHeader, + TableBody, + TableFooter, + TableHead, + TableRow, + TableCell, + TableCaption, +} diff --git a/integ-tests/react/src/components/ui/tabs.tsx b/integ-tests/react/src/components/ui/tabs.tsx new file mode 100644 index 000000000..26eb10912 --- /dev/null +++ b/integ-tests/react/src/components/ui/tabs.tsx @@ -0,0 +1,55 @@ +"use client" + +import * as React from "react" +import * as TabsPrimitive from "@radix-ui/react-tabs" + +import { cn } from "@/lib/utils" + +const Tabs = TabsPrimitive.Root + +const TabsList = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +TabsList.displayName = TabsPrimitive.List.displayName + +const TabsTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +TabsTrigger.displayName = TabsPrimitive.Trigger.displayName + +const TabsContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +TabsContent.displayName = TabsPrimitive.Content.displayName + +export { Tabs, TabsList, TabsTrigger, TabsContent } diff --git a/integ-tests/react/src/components/ui/textarea.tsx b/integ-tests/react/src/components/ui/textarea.tsx new file mode 100644 index 000000000..4d858bb6b --- /dev/null +++ b/integ-tests/react/src/components/ui/textarea.tsx @@ -0,0 +1,22 @@ +import * as React from "react" + +import { cn } from "@/lib/utils" + +const Textarea = React.forwardRef< + HTMLTextAreaElement, + React.ComponentProps<"textarea"> +>(({ className, ...props }, ref) => { + return ( +