From 45b91d34373202ed7f3be17270e35379ee96b406 Mon Sep 17 00:00:00 2001 From: hellovai Date: Wed, 23 Oct 2024 13:16:34 -0700 Subject: [PATCH] chore: Bump version to 0.63.0 (#1090) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bump version to 0.63.0\n\n❌ Typescript integ tests\n❌ Python integ tests\n\nGenerated by bump-version script. ---- > [!IMPORTANT] > Bump version from 0.62.0 to 0.63.0 in `Cargo.lock`, `Cargo.toml`, and `baml.gemspec` without running integration tests. > > - **Version Bump**: > - Update version from 0.62.0 to 0.63.0 in `Cargo.lock`, `Cargo.toml`, and `baml.gemspec`. > - **Testing**: > - TypeScript and Python integration tests not executed. > > This description was created by [Ellipsis](https://www.ellipsis.dev?ref=BoundaryML%2Fbaml&utm_source=github&utm_medium=referral) for ce43602143479af11f790aa9f1999f971b241af1. It will automatically update as commits are pushed. --- CHANGELOG.md | 9 + engine/Cargo.lock | 26 +- engine/Cargo.toml | 2 +- engine/language_client_python/pyproject.toml | 2 +- engine/language_client_ruby/baml.gemspec | 2 +- .../language_client_typescript/package.json | 2 +- integ-tests/baml_src/generators.baml | 8 +- integ-tests/python/baml_client/inlinedbaml.py | 2 +- integ-tests/python/report.html | 1626 ++++---- integ-tests/ruby/baml_client/inlined.rb | 2 +- .../typescript/baml_client/inlinedbaml.ts | 2 +- integ-tests/typescript/pnpm-lock.yaml | 3285 ++++++++--------- integ-tests/typescript/test-report.html | 1517 ++++++-- tools/versions/engine.cfg | 2 +- tools/versions/integ-tests.cfg | 2 +- tools/versions/python.cfg | 2 +- tools/versions/ruby.cfg | 2 +- tools/versions/typescript.cfg | 2 +- tools/versions/vscode.cfg | 2 +- typescript/vscode-ext/packages/package.json | 2 +- 20 files changed, 3377 insertions(+), 3122 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d9e6498ae..831d3a724 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,15 @@ All notable changes to this project will be documented in this file. See [conventional commits](https://www.conventionalcommits.org/) for commit guidelines. +## [0.63.0](https://github.com/boundaryml/baml/compare/0.62.0..0.63.0) - 2024-10-23 + +### Bug Fixes +- Fix dynamic enums which already are defined in BAML (#1080) - ([22d0f1c](https://github.com/boundaryml/baml/commit/22d0f1cff3428c2cd58ea78c50c4fc7ea39c8d0c)) - hellovai + +### Features +- Updated clients.baml to use the latest sonnet model (#1081) - ([71df0b7](https://github.com/boundaryml/baml/commit/71df0b7b627ba218d581d2c21be01fea4e4993c1)) - aaronvg +- Improved clients.baml generated via baml init (#1089) - ([682dd66](https://github.com/boundaryml/baml/commit/682dd66f4adab8c4fad13bfe32a3fc0268d8b511)) - hellovai + ## [0.62.0](https://github.com/boundaryml/baml/compare/0.61.1..0.62.0) - 2024-10-21 ### Features diff --git a/engine/Cargo.lock b/engine/Cargo.lock index 26bf5e9e1..01370dfb2 100644 --- a/engine/Cargo.lock +++ b/engine/Cargo.lock @@ -773,7 +773,7 @@ dependencies = [ [[package]] name = "baml-lib" -version = "0.62.0" +version = "0.63.0" dependencies = [ "base64 0.13.1", "dissimilar", @@ -810,7 +810,7 @@ dependencies = [ [[package]] name = "baml-runtime" -version = "0.62.0" +version = "0.63.0" dependencies = [ "ambassador", "anyhow", @@ -900,7 +900,7 @@ dependencies = [ [[package]] name = "baml-schema-build" -version = "0.62.0" +version = "0.63.0" dependencies = [ "anyhow", "baml-runtime", @@ -935,7 +935,7 @@ dependencies = [ [[package]] name = "baml-types" -version = "0.62.0" +version = "0.63.0" dependencies = [ "anyhow", "clap", @@ -2332,7 +2332,7 @@ dependencies = [ [[package]] name = "internal-baml-codegen" -version = "0.62.0" +version = "0.63.0" dependencies = [ "anyhow", "askama", @@ -2356,7 +2356,7 @@ dependencies = [ [[package]] name = "internal-baml-core" -version = "0.62.0" +version = "0.63.0" dependencies = [ "anyhow", "baml-types", @@ -2389,7 +2389,7 @@ dependencies = [ [[package]] name = "internal-baml-diagnostics" -version = "0.62.0" +version = "0.63.0" dependencies = [ "anyhow", "colored", @@ -2402,7 +2402,7 @@ dependencies = [ [[package]] name = "internal-baml-jinja" -version = "0.62.0" +version = "0.63.0" dependencies = [ "anyhow", "askama", @@ -2423,7 +2423,7 @@ dependencies = [ [[package]] name = "internal-baml-jinja-types" -version = "0.62.0" +version = "0.63.0" dependencies = [ "anyhow", "askama", @@ -2441,7 +2441,7 @@ dependencies = [ [[package]] name = "internal-baml-parser-database" -version = "0.62.0" +version = "0.63.0" dependencies = [ "anyhow", "baml-types", @@ -2463,7 +2463,7 @@ dependencies = [ [[package]] name = "internal-baml-prompt-parser" -version = "0.62.0" +version = "0.63.0" dependencies = [ "internal-baml-diagnostics", "internal-baml-schema-ast", @@ -2475,7 +2475,7 @@ dependencies = [ [[package]] name = "internal-baml-schema-ast" -version = "0.62.0" +version = "0.63.0" dependencies = [ "baml-types", "either", @@ -2552,7 +2552,7 @@ checksum = "9dbbfed4e59ba9750e15ba154fdfd9329cee16ff3df539c2666b70f58cc32105" [[package]] name = "jsonish" -version = "0.62.0" +version = "0.63.0" dependencies = [ "anyhow", "assert-json-diff", diff --git a/engine/Cargo.toml b/engine/Cargo.toml index 150f3022f..68707bbc5 100644 --- a/engine/Cargo.toml +++ b/engine/Cargo.toml @@ -62,7 +62,7 @@ internal-baml-jinja = { path = "baml-lib/jinja" } internal-baml-schema-ast = { path = "baml-lib/schema-ast" } [workspace.package] -version = "0.62.0" +version = "0.63.0" authors = ["Boundary "] description = "BAML Toolchain" diff --git a/engine/language_client_python/pyproject.toml b/engine/language_client_python/pyproject.toml index f71d9150a..3bceced52 100644 --- a/engine/language_client_python/pyproject.toml +++ b/engine/language_client_python/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "baml-py" -version = "0.62.0" +version = "0.63.0" description = "BAML python bindings (pyproject.toml)" readme = "README.md" authors = [["Boundary", "contact@boundaryml.com"]] diff --git a/engine/language_client_ruby/baml.gemspec b/engine/language_client_ruby/baml.gemspec index bf9ffbf21..8bdf026dc 100644 --- a/engine/language_client_ruby/baml.gemspec +++ b/engine/language_client_ruby/baml.gemspec @@ -2,7 +2,7 @@ Gem::Specification.new do |spec| spec.name = "baml" - spec.version = "0.62.0" + spec.version = "0.63.0" spec.authors = ["BoundaryML"] spec.email = ["contact@boundaryml.com"] diff --git a/engine/language_client_typescript/package.json b/engine/language_client_typescript/package.json index 6ec0300dc..85aa4af5e 100644 --- a/engine/language_client_typescript/package.json +++ b/engine/language_client_typescript/package.json @@ -1,6 +1,6 @@ { "name": "@boundaryml/baml", - "version": "0.62.0", + "version": "0.63.0", "description": "BAML typescript bindings (package.json)", "repository": { "type": "git", diff --git a/integ-tests/baml_src/generators.baml b/integ-tests/baml_src/generators.baml index cfda34584..ff6a2f2e0 100644 --- a/integ-tests/baml_src/generators.baml +++ b/integ-tests/baml_src/generators.baml @@ -1,24 +1,24 @@ generator lang_python { output_type python/pydantic output_dir "../python" - version "0.62.0" + version "0.63.0" } generator lang_typescript { output_type typescript output_dir "../typescript" - version "0.62.0" + version "0.63.0" } generator lang_ruby { output_type ruby/sorbet output_dir "../ruby" - version "0.62.0" + version "0.63.0" } // generator openapi { // output_type rest/openapi // output_dir "../openapi" -// version "0.62.0" +// version "0.63.0" // on_generate "rm .gitignore" // } diff --git a/integ-tests/python/baml_client/inlinedbaml.py b/integ-tests/python/baml_client/inlinedbaml.py index 0ad4d9432..20587a8cf 100644 --- a/integ-tests/python/baml_client/inlinedbaml.py +++ b/integ-tests/python/baml_client/inlinedbaml.py @@ -25,7 +25,7 @@ "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}", - "generators.baml": "generator lang_python {\n output_type python/pydantic\n output_dir \"../python\"\n version \"0.62.0\"\n}\n\ngenerator lang_typescript {\n output_type typescript\n output_dir \"../typescript\"\n version \"0.62.0\"\n}\n\ngenerator lang_ruby {\n output_type ruby/sorbet\n output_dir \"../ruby\"\n version \"0.62.0\"\n}\n\n// generator openapi {\n// output_type rest/openapi\n// output_dir \"../openapi\"\n// version \"0.62.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.63.0\"\n}\n\ngenerator lang_typescript {\n output_type typescript\n output_dir \"../typescript\"\n version \"0.63.0\"\n}\n\ngenerator lang_ruby {\n output_type ruby/sorbet\n output_dir \"../ruby\"\n version \"0.63.0\"\n}\n\n// generator openapi {\n// output_type rest/openapi\n// output_dir \"../openapi\"\n// version \"0.63.0\"\n// on_generate \"rm .gitignore\"\n// }\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}", diff --git a/integ-tests/python/report.html b/integ-tests/python/report.html index a73825d28..a56f1bad9 100644 --- a/integ-tests/python/report.html +++ b/integ-tests/python/report.html @@ -3,11 +3,11 @@
Test Report

Summary

77
1 failed 76 passed

Tests

tests/test_functions.py 173 0:03:14.664365

PASSED test_env_vars_reset 0:00:01.360201

Setup

Call

Captured stdout call
Context depth is greater than 0!
+    
Test Report

Summary

78
2 failed 76 passed

Tests

tests/test_functions.py 273 0:02:51.448367

PASSED test_env_vars_reset 0:00:01.702021

Setup

Call

Captured stdout call
Context depth is greater than 0!
 Except but ending trace!
 Context depth is greater than 0!
-
Captured stderr call
[2024-10-21T21:09:15Z WARN  baml_events] Function ExtractPeople:
-    Client: GPT4 (<unknown>) - 130ms
+
Captured stderr call
[2024-10-23T17:50:55Z WARN  baml_events] Function ExtractPeople:
+    Client: GPT4 (<unknown>) - 214ms
     ---PROMPT---
     [chat] system: 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.
     
@@ -32,8 +32,8 @@
         }
     }
     
-[2024-10-21T21:09:16Z INFO  baml_events] Function ExtractPeople:
-    Client: GPT4 (gpt-4o-2024-08-06) - 733ms. StopReason: stop
+[2024-10-23T17:50:56Z INFO  baml_events] Function ExtractPeople:
+    Client: GPT4 (gpt-4o-2024-08-06) - 984ms. StopReason: stop
     ---PROMPT---
     [chat] system: 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.
     
@@ -60,11 +60,11 @@
         "hair_color": "BLACK"
       }
     ]
-

Teardown

PASSED test_sync 0:00:00.853908

Setup

Call

Captured stdout call
got response key
+

Teardown

PASSED test_sync 0:00:00.506908

Setup

Call

Captured stdout call
got response key
 true
 52
-
Captured stderr call
[2024-10-21T21:09:17Z INFO  baml_events] Function TestFnNamedArgsSingleClass:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 839ms. StopReason: stop
+
Captured stderr call
[2024-10-23T17:50:57Z INFO  baml_events] Function TestFnNamedArgsSingleClass:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 502ms. StopReason: stop
     ---PROMPT---
     [chat] system: Print these values back to me:
     key
@@ -77,8 +77,8 @@
     52
     ---Parsed Response (string)---
     "key\ntrue\n52"
-

Teardown

PASSED TestAllInputs::test_single_bool 0:00:00.364199

Setup

Call

Captured stderr call
[2024-10-21T21:09:17Z INFO  baml_events] Function TestFnNamedArgsSingleBool:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 358ms. StopReason: stop
+

Teardown

PASSED TestAllInputs::test_single_bool 0:00:00.314198

Setup

Call

Captured stderr call
[2024-10-23T17:50:57Z INFO  baml_events] Function TestFnNamedArgsSingleBool:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 307ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return this value back to me: true
     
@@ -86,8 +86,8 @@
     true
     ---Parsed Response (string)---
     "true"
-

Teardown

PASSED TestAllInputs::test_single_string_list 0:00:00.671011

Setup

Call

Captured stderr call
[2024-10-21T21:09:18Z INFO  baml_events] Function TestFnNamedArgsSingleStringList:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 663ms. StopReason: stop
+

Teardown

PASSED TestAllInputs::test_single_string_list 0:00:01.075544

Setup

Call

Captured stderr call
[2024-10-23T17:50:58Z INFO  baml_events] Function TestFnNamedArgsSingleStringList:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 1069ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return this value back to me: ["a", "b", "c"]
     
@@ -95,8 +95,8 @@
     ["a", "b", "c"]
     ---Parsed Response (string)---
     "[\"a\", \"b\", \"c\"]"
-

Teardown

PASSED TestAllInputs::test_single_class 0:00:00.385378

Setup

Call

Captured stderr call
[2024-10-21T21:09:18Z INFO  baml_events] Function TestFnNamedArgsSingleClass:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 379ms. StopReason: stop
+

Teardown

PASSED TestAllInputs::test_single_class 0:00:00.447142

Setup

Call

Captured stderr call
[2024-10-23T17:50:59Z INFO  baml_events] Function TestFnNamedArgsSingleClass:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 441ms. StopReason: stop
     ---PROMPT---
     [chat] system: Print these values back to me:
     key
@@ -109,8 +109,8 @@
     52
     ---Parsed Response (string)---
     "key\ntrue\n52"
-

Teardown

PASSED TestAllInputs::test_multiple_args 0:00:00.680528

Setup

Call

Captured stderr call
[2024-10-21T21:09:19Z INFO  baml_events] Function TestMulticlassNamedArgs:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 674ms. StopReason: stop
+

Teardown

PASSED TestAllInputs::test_multiple_args 0:00:00.684478

Setup

Call

Captured stderr call
[2024-10-23T17:50:59Z INFO  baml_events] Function TestMulticlassNamedArgs:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 680ms. StopReason: stop
     ---PROMPT---
     [chat] system: Print these values back to me:
     key
@@ -129,7 +129,7 @@
     64
     ---Parsed Response (string)---
     "key\ntrue\n52\nkey\ntrue\n64"
-

Teardown

PASSED TestAllInputs::test_single_enum_list 0:00:00.361575

Setup

Call

Captured stderr call
[2024-10-21T21:09:19Z INFO  baml_events] Function TestFnNamedArgsSingleEnumList:
+

Teardown

PASSED TestAllInputs::test_single_enum_list 0:00:00.359352

Setup

Call

Captured stderr call
[2024-10-23T17:51:00Z INFO  baml_events] Function TestFnNamedArgsSingleEnumList:
     Client: GPT35 (gpt-3.5-turbo-0125) - 356ms. StopReason: stop
     ---PROMPT---
     [chat] system: Print these values back to me:
@@ -139,8 +139,8 @@
     ["TWO"]
     ---Parsed Response (string)---
     "[\"TWO\"]"
-

Teardown

PASSED TestAllInputs::test_single_float 0:00:00.874032

Setup

Call

Captured stderr call
[2024-10-21T21:09:20Z INFO  baml_events] Function TestFnNamedArgsSingleFloat:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 868ms. StopReason: stop
+

Teardown

PASSED TestAllInputs::test_single_float 0:00:00.357679

Setup

Call

Captured stderr call
[2024-10-23T17:51:00Z INFO  baml_events] Function TestFnNamedArgsSingleFloat:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 352ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return this value back to me: 3.12
     
@@ -148,8 +148,8 @@
     3.12
     ---Parsed Response (string)---
     "3.12"
-

Teardown

PASSED TestAllInputs::test_single_int 0:00:00.837118

Setup

Call

Captured stderr call
[2024-10-21T21:09:21Z INFO  baml_events] Function TestFnNamedArgsSingleInt:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 830ms. StopReason: stop
+

Teardown

PASSED TestAllInputs::test_single_int 0:00:00.552004

Setup

Call

Captured stderr call
[2024-10-23T17:51:01Z INFO  baml_events] Function TestFnNamedArgsSingleInt:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 546ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return this value back to me: 3566
     
@@ -157,8 +157,8 @@
     3566
     ---Parsed Response (string)---
     "3566"
-

Teardown

PASSED TestAllInputs::test_single_map_string_to_string 0:00:00.522795

Setup

Call

Captured stderr call
[2024-10-21T21:09:22Z INFO  baml_events] Function TestFnNamedArgsSingleMapStringToString:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 516ms. StopReason: stop
+

Teardown

PASSED TestAllInputs::test_single_map_string_to_string 0:00:00.668674

Setup

Call

Captured stderr call
[2024-10-23T17:51:01Z INFO  baml_events] Function TestFnNamedArgsSingleMapStringToString:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 659ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return this value back to me: {"dolor": "sit", "lorem": "ipsum"}
     
@@ -169,8 +169,8 @@
       "dolor": "sit",
       "lorem": "ipsum"
     }
-

Teardown

PASSED TestAllInputs::test_single_map_string_to_class 0:00:00.685528

Setup

Call

Captured stderr call
[2024-10-21T21:09:22Z INFO  baml_events] Function TestFnNamedArgsSingleMapStringToClass:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 678ms. StopReason: stop
+

Teardown

PASSED TestAllInputs::test_single_map_string_to_class 0:00:00.682060

Setup

Call

Captured stderr call
[2024-10-23T17:51:02Z INFO  baml_events] Function TestFnNamedArgsSingleMapStringToClass:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 674ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return this value back to me: {"lorem": {
         "word": "ipsum",
@@ -188,30 +188,34 @@
         "word": "ipsum"
       }
     }
-

Teardown

PASSED TestAllInputs::test_single_map_string_to_map 0:00:00.570172

Setup

Call

Captured stderr call
[2024-10-21T21:09:23Z INFO  baml_events] Function TestFnNamedArgsSingleMapStringToMap:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 563ms. StopReason: stop
+

Teardown

PASSED TestAllInputs::test_single_map_string_to_map 0:00:00.913485

Setup

Call

Captured stderr call
[2024-10-23T17:51:03Z INFO  baml_events] Function TestFnNamedArgsSingleMapStringToMap:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 906ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return this value back to me: {"lorem": {"word": "ipsum"}}
     
     ---LLM REPLY---
-    {"lorem": {"word": "ipsum"}}
+    {
+        "lorem": {
+            "word": "ipsum"
+        }
+    }
     ---Parsed Response (map<string, map<string, string>>)---
     {
       "lorem": {
         "word": "ipsum"
       }
     }
-

Teardown

PASSED test_should_work_for_all_outputs 0:00:03.665940

Setup

Call

Captured stderr call
[2024-10-21T21:09:23Z INFO  baml_events] Function FnOutputBool:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 430ms. StopReason: stop
+

Teardown

PASSED test_should_work_for_all_outputs 0:00:04.215497

Setup

Call

Captured stderr call
[2024-10-23T17:51:03Z INFO  baml_events] Function FnOutputBool:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 486ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return a true: Answer as a: bool
     
     ---LLM REPLY---
-    true
+    True
     ---Parsed Response (bool)---
     true
-[2024-10-21T21:09:24Z INFO  baml_events] Function FnOutputClassList:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 630ms. StopReason: stop
+[2024-10-23T17:51:04Z INFO  baml_events] Function FnOutputClassList:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 789ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return a JSON array that follows this schema: 
     Answer with a JSON Array using this schema:
@@ -227,19 +231,19 @@
     ---LLM REPLY---
     [
       {
-        "prop1": "example",
+        "prop1": "example string",
         "prop2": 123
       }
     ]
     ---Parsed Response (list<class TestOutputClass>)---
     [
       {
-        "prop1": "example",
+        "prop1": "example string",
         "prop2": 123
       }
     ]
-[2024-10-21T21:09:25Z INFO  baml_events] Function FnOutputClassWithEnum:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 808ms. StopReason: stop
+[2024-10-23T17:51:05Z INFO  baml_events] Function FnOutputClassWithEnum:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 771ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return a made up json blob that matches this schema:
     Answer in JSON using this schema:
@@ -253,16 +257,16 @@
     
     ---LLM REPLY---
     {
-      "prop1": "Lorem ipsum",
+      "prop1": "Hello World",
       "prop2": "TWO"
     }
     ---Parsed Response (class TestClassWithEnum)---
     {
-      "prop1": "Lorem ipsum",
+      "prop1": "Hello World",
       "prop2": "TWO"
     }
-[2024-10-21T21:09:25Z INFO  baml_events] Function FnOutputClass:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 626ms. StopReason: stop
+[2024-10-23T17:51:06Z INFO  baml_events] Function FnOutputClass:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 701ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return a JSON blob with this schema: 
     Answer in JSON using this schema:
@@ -277,16 +281,16 @@
     
     ---LLM REPLY---
     {
-      "prop1": "Hello, World!",
+      "prop1": "Hello, world!",
       "prop2": 540
     }
     ---Parsed Response (class TestOutputClass)---
     {
-      "prop1": "Hello, World!",
+      "prop1": "Hello, world!",
       "prop2": 540
     }
-[2024-10-21T21:09:26Z INFO  baml_events] Function FnEnumListOutput:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 477ms. StopReason: stop
+[2024-10-23T17:51:06Z INFO  baml_events] Function FnEnumListOutput:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 572ms. StopReason: stop
     ---PROMPT---
     [chat] system: Print out two of these values randomly selected from the list below in a json array.
     
@@ -299,16 +303,16 @@
     
     ---LLM REPLY---
     [
-      'TWO',
-      'THREE'
+      'ONE',
+      'TWO'
     ]
     ---Parsed Response (list<enum EnumOutput>)---
     [
-      "TWO",
-      "THREE"
+      "ONE",
+      "TWO"
     ]
-[2024-10-21T21:09:26Z INFO  baml_events] Function FnEnumOutput:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 658ms. StopReason: stop
+[2024-10-23T17:51:07Z INFO  baml_events] Function FnEnumOutput:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 861ms. StopReason: stop
     ---PROMPT---
     [chat] system: Choose one of these values randomly. Before you give the answer, write out an unrelated haiku about the ocean.
     
@@ -319,15 +323,17 @@
     - THREE
     
     ---LLM REPLY---
-    Sparkling blue waters
-    Waves crashing upon the shore
-    Peace found in the sea
+    In the vast ocean,
+    Waves crash upon the shorelines,
+    Whispers of the sea.
     
-    VALUE_ENUM: TWO
+    VALUE_ENUM
+    ----
+    - TWO
     ---Parsed Response (enum EnumOutput)---
     "TWO"
-

Teardown

PASSED test_should_work_with_image_url 0:00:01.114574

Setup

Call

Captured stderr call
[2024-10-21T21:09:28Z INFO  baml_events] Function TestImageInput:
-    Client: GPT4o (gpt-4o-2024-08-06) - 1109ms. StopReason: stop
+

Teardown

PASSED test_should_work_with_image_url 0:00:01.199094

Setup

Call

Captured stderr call
[2024-10-23T17:51:08Z INFO  baml_events] Function TestImageInput:
+    Client: GPT4o (gpt-4o-2024-08-06) - 1192ms. StopReason: stop
     ---PROMPT---
     [chat] user: Describe this in 4 words. One word must be the color<image_placeholder: https://upload.wikimedia.org/wikipedia/en/4/4d/Shrek_%28character%29.png>
     
@@ -335,39 +341,43 @@
     Green animated ogre smiling.
     ---Parsed Response (string)---
     "Green animated ogre smiling."
-

Teardown

PASSED test_should_work_with_image_list 0:00:01.825899

Setup

Call

Captured stderr call
[2024-10-21T21:09:29Z INFO  baml_events] Function TestImageListInput:
-    Client: GPT4o (gpt-4o-2024-08-06) - 1820ms. StopReason: stop
+

Teardown

PASSED test_should_work_with_image_list 0:00:01.245259

Setup

Call

Captured stderr call
[2024-10-23T17:51:10Z INFO  baml_events] Function TestImageListInput:
+    Client: GPT4o (gpt-4o-2024-08-06) - 1240ms. StopReason: stop
     ---PROMPT---
     [chat] user: What colors do these have in common? [<image_placeholder: https://upload.wikimedia.org/wikipedia/en/4/4d/Shrek_%28character%29.png>,<image_placeholder: https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_92x30dp.png>]
     
     ---LLM REPLY---
-    The common colors between the two images are green, yellow, and brown.
+    The colors green and yellow are common between the two images.
     ---Parsed Response (string)---
-    "The common colors between the two images are green, yellow, and brown."
-

Teardown

PASSED test_should_work_with_vertex 0:00:16.973024

Setup

Call

Captured stderr call
[2024-10-21T21:09:46Z INFO  baml_events] Function TestVertex:
-    Client: Vertex () - 16964ms. StopReason: "STOP"
+    "The colors green and yellow are common between the two images."
+

Teardown

PASSED test_should_work_with_vertex 0:00:10.459983

Setup

Call

Captured stderr call
[2024-10-23T17:51:20Z INFO  baml_events] Function TestVertex:
+    Client: Vertex () - 10453ms. StopReason: "STOP"
     ---PROMPT---
     [chat] user: Write a nice short story about donkey kong
     
     ---LLM REPLY---
-    The morning sun, filtering through the leafy canopy, painted dappled patterns on Donkey Kong's fur as he munched contentedly on a particularly plump banana. Retirement, he had discovered, was glorious. Gone were the days of frantic chases across rickety mine shafts and precarious platforms. No more meddling plumbers pilfering his banana hoard. 
+    The setting sun painted the jungle canopy in fiery hues. Donkey Kong, perched on his highest platform, watched the sky with a melancholic air. Gone were the days of rambunctious barrel-throwing and playful princess-napping. Now, his fur was speckled with grey, and his banana hoard, while impressive, brought him little joy. 
     
-    He glanced at the smaller figure beside him, swinging upside down from a vine, a miniature Donkey Kong with a shock of brown hair. Diddy Kong, his beloved nephew and former partner-in-crime, grinned, peeling his own banana with his feet.
+    A shadow flickered across the clearing, and DK's ears twitched.  A small, lanky figure, all elbows and knees, stumbled into view. It was Diddy Kong, his nephew and once his most enthusiastic apprentice in the art of mischief. But Diddy seemed...different. His usual boundless energy was replaced by a drooping weariness.
     
-    "Remember the time," Diddy chuckled, "when you tried to build a banana-powered rocket to the moon?"
+    "Diddy?" Donkey Kong rumbled, his voice echoing through the trees. "What troubles you, little buddy?"
     
-    Donkey Kong snorted, a deep rumble in his chest. He'd rather forget the disastrous (and messy) experiment. 
+    Diddy shuffled closer, his tail dragging in the dust. "The young ones," he mumbled, "they say...they say my banana-hide-and-seek is boring."
     
-    "And the time," Diddy continued, mischief twinkling in his eyes, "you challenged Cranky to a dance-off? You know, to win back your banana stash?"
+    Donkey Kong's heart ached for his nephew. He remembered the sting of being considered "old-fashioned." He lumbered down his platform, the wood creaking familiarly beneath his weight. 
     
-    Donkey Kong threw a half-eaten banana at his nephew, who dodged it with a yelp of laughter. 
+    He stopped before Diddy and lowered himself until they were eye-to-eye. "Diddy," he said, his tone gentle, "the best games are those shared with family." 
     
-    Yes, they had their share of adventures, but the best part was sharing them with family. And as Donkey Kong watched Diddy swing away, a new generation of Kongs already clamoring for attention, he knew the laughter, the mischief, and the love of family would continue to echo through their jungle home, just like the legends of Donkey Kong himself. 
+    Diddy's eyes widened. A slow grin spread across his face. "Uncle DK!" he shouted, grabbing Donkey Kong's hand and pulling him toward the jungle. "I have an idea!"
+    
+    That night, the jungle echoed with laughter.  Donkey Kong, perched high in a tree, watched Diddy teach the young Kongs a new game: banana hide-and-seek with a twist. Instead of hiding individual bananas, they were hiding parts of a map that led to the ultimate prize - Donkey Kong's legendary banana hoard!
+    
+    As Donkey Kong watched the young ones race through the jungle, their eyes bright with excitement, he felt a familiar warmth bloom in his chest.  The thrill of the chase never faded, especially when shared with those you loved.  His laugh rumbled through the trees, as strong and full of life as ever.  The jungle was alive with the sounds of family, and Donkey Kong wouldn't have it any other way. 
     
     ---Parsed Response (string)---
-    "The morning sun, filtering through the leafy canopy, painted dappled patterns on Donkey Kong's fur as he munched contentedly on a particularly plump banana. Retirement, he had discovered, was glorious. Gone were the days of frantic chases across rickety mine shafts and precarious platforms. No more meddling plumbers pilfering his banana hoard. \n\nHe glanced at the smaller figure beside him, swinging upside down from a vine, a miniature Donkey Kong with a shock of brown hair. Diddy Kong, his beloved nephew and former partner-in-crime, grinned, peeling his own banana with his feet.\n\n\"Remember the time,\" Diddy chuckled, \"when you tried to build a banana-powered rocket to the moon?\"\n\nDonkey Kong snorted, a deep rumble in his chest. He'd rather forget the disastrous (and messy) experiment. \n\n\"And the time,\" Diddy continued, mischief twinkling in his eyes, \"you challenged Cranky to a dance-off? You know, to win back your banana stash?\"\n\nDonkey Kong threw a half-eaten banana at his nephew, who dodged it with a yelp of laughter. \n\nYes, they had their share of adventures, but the best part was sharing them with family. And as Donkey Kong watched Diddy swing away, a new generation of Kongs already clamoring for attention, he knew the laughter, the mischief, and the love of family would continue to echo through their jungle home, just like the legends of Donkey Kong himself. \n"
-

Teardown

PASSED test_should_work_with_image_base64 0:00:02.424895

Setup

Call

Captured stderr call
[2024-10-21T21:09:49Z INFO  baml_events] Function TestImageInput:
-    Client: GPT4o (gpt-4o-2024-08-06) - 2399ms. StopReason: stop
+    "The setting sun painted the jungle canopy in fiery hues. Donkey Kong, perched on his highest platform, watched the sky with a melancholic air. Gone were the days of rambunctious barrel-throwing and playful princess-napping. Now, his fur was speckled with grey, and his banana hoard, while impressive, brought him little joy. \n\nA shadow flickered across the clearing, and DK's ears twitched.  A small, lanky figure, all elbows and knees, stumbled into view. It was Diddy Kong, his nephew and once his most enthusiastic apprentice in the art of mischief. But Diddy seemed...different. His usual boundless energy was replaced by a drooping weariness.\n\n\"Diddy?\" Donkey Kong rumbled, his voice echoing through the trees. \"What troubles you, little buddy?\"\n\nDiddy shuffled closer, his tail dragging in the dust. \"The young ones,\" he mumbled, \"they say...they say my banana-hide-and-seek is boring.\"\n\nDonkey Kong's heart ached for his nephew. He remembered the sting of being considered \"old-fashioned.\" He lumbered down his platform, the wood creaking familiarly beneath his weight. \n\nHe stopped before Diddy and lowered himself until they were eye-to-eye. \"Diddy,\" he said, his tone gentle, \"the best games are those shared with family.\" \n\nDiddy's eyes widened. A slow grin spread across his face. \"Uncle DK!\" he shouted, grabbing Donkey Kong's hand and pulling him toward the jungle. \"I have an idea!\"\n\nThat night, the jungle echoed with laughter.  Donkey Kong, perched high in a tree, watched Diddy teach the young Kongs a new game: banana hide-and-seek with a twist. Instead of hiding individual bananas, they were hiding parts of a map that led to the ultimate prize - Donkey Kong's legendary banana hoard!\n\nAs Donkey Kong watched the young ones race through the jungle, their eyes bright with excitement, he felt a familiar warmth bloom in his chest.  The thrill of the chase never faded, especially when shared with those you loved.  His laugh rumbled through the trees, as strong and full of life as ever.  The jungle was alive with the sounds of family, and Donkey Kong wouldn't have it any other way. \n"
+

Teardown

PASSED test_should_work_with_image_base64 0:00:01.773493

Setup

Call

Captured stderr call
[2024-10-23T17:51:22Z INFO  baml_events] Function TestImageInput:
+    Client: GPT4o (gpt-4o-2024-08-06) - 1750ms. StopReason: stop
     ---PROMPT---
     [chat] user: Describe this in 4 words. One word must be the color<image_placeholder base64>
     
@@ -375,8 +385,8 @@
     Green animated ogre smiling.
     ---Parsed Response (string)---
     "Green animated ogre smiling."
-

Teardown

PASSED test_should_work_with_audio_base64 0:00:01.226413

Setup

Call

Captured stderr call
[2024-10-21T21:09:50Z INFO  baml_events] Function AudioInput:
-    Client: Gemini () - 1212ms. StopReason: "STOP"
+

Teardown

PASSED test_should_work_with_audio_base64 0:00:00.996453

Setup

Call

Captured stderr call
[2024-10-23T17:51:23Z INFO  baml_events] Function AudioInput:
+    Client: Gemini () - 983ms. StopReason: "STOP"
     ---PROMPT---
     [chat] user: Does this sound like a roar? Yes or no? One word no other characters.<image_placeholder base64>
     
@@ -385,8 +395,8 @@
     
     ---Parsed Response (string)---
     "Yes \n"
-

Teardown

PASSED test_should_work_with_audio_url 0:00:01.564858

Setup

Call

Captured stderr call
[2024-10-21T21:09:52Z INFO  baml_events] Function AudioInput:
-    Client: Gemini () - 1401ms. StopReason: "STOP"
+

Teardown

PASSED test_should_work_with_audio_url 0:00:01.453691

Setup

Call

Captured stderr call
[2024-10-23T17:51:24Z INFO  baml_events] Function AudioInput:
+    Client: Gemini () - 1327ms. StopReason: "STOP"
     ---PROMPT---
     [chat] user: Does this sound like a roar? Yes or no? One word no other characters.<audio_placeholder base64>
     
@@ -395,10 +405,10 @@
     
     ---Parsed Response (string)---
     "No \n"
-

Teardown

PASSED test_works_with_retries2 0:00:02.284012

Setup

Call

Captured stdout call
Expected error LLM call failed: LLMErrorResponse { client: "RetryClientExponential", model: None, prompt: Chat([RenderedChatMessage { role: "system", allow_duplicate_role: false, parts: [Text("Say a haiku")] }]), request_options: {"model": String("gpt-3.5-turbo")}, start_time: SystemTime { tv_sec: 1729544994, tv_nsec: 202792000 }, latency: 210.975333ms, message: "Request failed: {\n    \"error\": {\n        \"message\": \"Incorrect API key provided: blahh. You can find your API key at https://platform.openai.com/account/api-keys.\",\n        \"type\": \"invalid_request_error\",\n        \"param\": null,\n        \"code\": \"invalid_api_key\"\n    }\n}\n", code: InvalidAuthentication }
-
Captured stderr call
[2024-10-21T21:09:54Z WARN  baml_events] Function TestRetryExponential:
+

Teardown

PASSED test_works_with_retries2 0:00:02.403037

Setup

Call

Captured stdout call
Expected error LLM call failed: LLMErrorResponse { client: "RetryClientExponential", model: None, prompt: Chat([RenderedChatMessage { role: "system", allow_duplicate_role: false, parts: [Text("Say a haiku")] }]), request_options: {"model": String("gpt-3.5-turbo")}, start_time: SystemTime { tv_sec: 1729705887, tv_nsec: 25834000 }, latency: 226.189625ms, message: "Request failed: {\n    \"error\": {\n        \"message\": \"Incorrect API key provided: blahh. You can find your API key at https://platform.openai.com/account/api-keys.\",\n        \"type\": \"invalid_request_error\",\n        \"param\": null,\n        \"code\": \"invalid_api_key\"\n    }\n}\n", code: InvalidAuthentication }
+
Captured stderr call
[2024-10-23T17:51:27Z WARN  baml_events] Function TestRetryExponential:
     (3 other previous tries)
-    Client: RetryClientExponential (<unknown>) - 210ms
+    Client: RetryClientExponential (<unknown>) - 226ms
     ---PROMPT---
     [chat] system: Say a haiku
     
@@ -414,419 +424,357 @@
         }
     }
     
-

Teardown

PASSED test_works_with_fallbacks 0:00:02.164975

Setup

Call

Captured stderr call
[2024-10-21T21:09:56Z INFO  baml_events] Function TestFallbackClient:
+

Teardown

PASSED test_works_with_fallbacks 0:00:02.193783

Setup

Call

Captured stderr call
[2024-10-23T17:51:29Z INFO  baml_events] Function TestFallbackClient:
     (5 other previous tries)
-    Client: GPT35 (gpt-3.5-turbo-0125) - 654ms. StopReason: stop
+    Client: GPT35 (gpt-3.5-turbo-0125) - 653ms. StopReason: stop
     ---PROMPT---
     [chat] system: Say a haiku about mexico.
     
     ---LLM REPLY---
-    Vibrant colors bloom
-    Mariachi music plays
-    Mexico's beauty
+    Land of vibrant hues,
+    Mariachi music sings,
+    Mexico's soul true.
     ---Parsed Response (string)---
-    "Vibrant colors bloom\nMariachi music plays\nMexico's beauty"
-

Teardown

PASSED test_works_with_failing_azure_fallback 0:00:00.003020

Setup

Call

Teardown

PASSED test_claude 0:00:01.274422

Setup

Call

Captured stderr call
[2024-10-21T21:09:57Z INFO  baml_events] Function PromptTestClaude:
-    Client: Sonnet (claude-3-5-sonnet-20241022) - 1265ms. StopReason: "end_turn"
+    "Land of vibrant hues,\nMariachi music sings,\nMexico's soul true."
+

Teardown

PASSED test_works_with_failing_azure_fallback 0:00:00.002590

Setup

Call

Teardown

PASSED test_claude 0:00:00.971554

Setup

Call

Captured stderr call
[2024-10-23T17:51:30Z INFO  baml_events] Function PromptTestClaude:
+    Client: Sonnet (claude-3-5-sonnet-20241022) - 960ms. StopReason: "end_turn"
     ---PROMPT---
     [chat] user: Tell me a haiku about Mt Rainier is tall
     
     ---LLM REPLY---
-    Here's a haiku about Mt. Rainier being tall:
+    Here's a haiku about Mt. Rainier's height:
     
     Rainier towers high
-    Piercing clouds with snowy peak
-    Nature's skyscraper
+    Ancient glacier-crowned giant
+    Piercing northwest skies
     ---Parsed Response (string)---
-    "Here's a haiku about Mt. Rainier being tall:\n\nRainier towers high\nPiercing clouds with snowy peak\nNature's skyscraper"
-

Teardown

PASSED test_gemini 0:00:07.735419

Setup

Call

Captured stdout call
LLM output from Gemini: Dottie sighed, the weight of the convenience store's fluorescent lights pressing down on her. Another day, another dollar, another questionable hot dog rotating slowly on the roller grill.  She glanced out the window at the endless Texas highway, shimmering under the midday sun.  
+    "Here's a haiku about Mt. Rainier's height:\n\nRainier towers high\nAncient glacier-crowned giant\nPiercing northwest skies"
+

Teardown

PASSED test_gemini 0:00:12.891945

Setup

Call

Captured stdout call
LLM output from Gemini: Bartholomew "Bart" Pepper, PhD, was a man of routine. Every morning at precisely 8:02, he'd arrive at his cluttered office in the Department of Unusual Flavors, a forgotten annex of the local university. And every morning, he'd brew a pot of intensely aromatic, mysteriously flavored tea, a concoction so unique it could only be described as...well, "Dr. Pepper."
 
-"Dr. Pepper, please," a man's voice startled her. He was tall and dusty, wearing a Stetson that shadowed his eyes. Dottie grabbed a bottle, the glass cool in her hand. 
+Bart had spent years, decades even, trying to recreate the taste of a soda his grandmother used to give him. He could still recall its sweet, slightly tangy fizz, the way it danced on his tongue, a symphony of 23 distinct, yet utterly harmonious flavors. He'd dedicated his life to rediscovering its secret, to bottling that fleeting memory. 
 
-As she rang him up, he saw her gazing out at the road. "Passing through?" he asked.
+He wasn't a soda jerk, as some colleagues snickered. He was a flavor historian, an archaeologist of the palate. His office, a testament to his obsession, overflowed with bubbling beakers, ancient cookbooks, and walls plastered with flavor charts that would make a sommelier weep.
 
-"Dreaming of it," she admitted. "This town's got a way of holding you hostage." 
+One rainy Tuesday, while poring over a faded manuscript titled "Elixirs of the Old World," a sentence leapt out: "And lo, the nectar of 23 fruits, when blended under the crimson moon..." His heart hammered in his chest. Could this be it? The long-lost recipe?
 
-The man smiled, a surprisingly gentle curve of his lips. "It's all about perspective, ma'am. Sometimes the sweetest things are hidden in plain sight." He took a swig of his Dr. Pepper.  "Twenty-two flavors, you know. Twenty-two reasons to smile." He winked and ambled out, leaving Dottie staring at the bottle in his wake. 
+He rushed to recreate the process, his hands trembling with anticipation. Hours melted away in a blur of bubbling potions and exotic spices. Finally, as the clock chimed midnight, he held a glass of his creation up to the moon, a single, perfect tear escaping his eye. 
 
-Twenty-two reasons. She started counting them off in her head – the familiar fizz, the caramel notes, the way the cold glass felt against her hand on a day like this. She popped the cap off her own Dr. Pepper, the scent a sudden burst of nostalgia.  It tasted like lazy summer afternoons by the creek, of fireflies winking in the twilight, of her grandmother's laughter echoing through their old farmhouse. 
+He took a sip. The taste...it was close. So close. But something was missing.  Disappointment threatened to engulf him, but then, from the corner of his eye, he spotted it – his grandmother's old music box, gathering dust. He wound it up, and a familiar, whimsical tune filled the air.  
 
-The highway shimmered outside, no longer a symbol of escape, but a ribbon of possibility. Maybe she couldn't travel it today, but she had her memories, her dreams, and yes, even this dusty old town, holding twenty-two reasons to smile in each day. 
+And in that moment, as the music mingled with the flavors on his tongue, it clicked. The missing ingredient wasn't a fruit, or a spice, but a feeling – the pure, unadulterated joy of a memory rekindled. Dr. Pepper smiled. His search wasn't over, not yet. But for the first time in a long time, he knew he was on the right track. He had a taste of the past, and now, he had the melody to guide him towards the future. His grandmother's soda, he realized, wasn't just about the 23 flavors; it was about the feeling they evoked. It was about love, laughter, and the bittersweet symphony of life itself. And he, Dr. Bartholomew Pepper, would spend the rest of his days trying to bottle that feeling, one delicious drop at a time. 
 
-
Captured stderr call
[2024-10-21T21:10:05Z INFO  baml_events] Function TestGemini:
-    Client: Gemini () - 7728ms. StopReason: "STOP"
+
Captured stderr call
[2024-10-23T17:51:43Z INFO  baml_events] Function TestGemini:
+    Client: Gemini () - 12884ms. StopReason: "STOP"
     ---PROMPT---
     [chat] user: Write a nice short story about Dr. Pepper
     
     ---LLM REPLY---
-    Dottie sighed, the weight of the convenience store's fluorescent lights pressing down on her. Another day, another dollar, another questionable hot dog rotating slowly on the roller grill.  She glanced out the window at the endless Texas highway, shimmering under the midday sun.  
+    Bartholomew "Bart" Pepper, PhD, was a man of routine. Every morning at precisely 8:02, he'd arrive at his cluttered office in the Department of Unusual Flavors, a forgotten annex of the local university. And every morning, he'd brew a pot of intensely aromatic, mysteriously flavored tea, a concoction so unique it could only be described as...well, "Dr. Pepper."
     
-    "Dr. Pepper, please," a man's voice startled her. He was tall and dusty, wearing a Stetson that shadowed his eyes. Dottie grabbed a bottle, the glass cool in her hand. 
+    Bart had spent years, decades even, trying to recreate the taste of a soda his grandmother used to give him. He could still recall its sweet, slightly tangy fizz, the way it danced on his tongue, a symphony of 23 distinct, yet utterly harmonious flavors. He'd dedicated his life to rediscovering its secret, to bottling that fleeting memory. 
     
-    As she rang him up, he saw her gazing out at the road. "Passing through?" he asked.
+    He wasn't a soda jerk, as some colleagues snickered. He was a flavor historian, an archaeologist of the palate. His office, a testament to his obsession, overflowed with bubbling beakers, ancient cookbooks, and walls plastered with flavor charts that would make a sommelier weep.
     
-    "Dreaming of it," she admitted. "This town's got a way of holding you hostage." 
+    One rainy Tuesday, while poring over a faded manuscript titled "Elixirs of the Old World," a sentence leapt out: "And lo, the nectar of 23 fruits, when blended under the crimson moon..." His heart hammered in his chest. Could this be it? The long-lost recipe?
     
-    The man smiled, a surprisingly gentle curve of his lips. "It's all about perspective, ma'am. Sometimes the sweetest things are hidden in plain sight." He took a swig of his Dr. Pepper.  "Twenty-two flavors, you know. Twenty-two reasons to smile." He winked and ambled out, leaving Dottie staring at the bottle in his wake. 
+    He rushed to recreate the process, his hands trembling with anticipation. Hours melted away in a blur of bubbling potions and exotic spices. Finally, as the clock chimed midnight, he held a glass of his creation up to the moon, a single, perfect tear escaping his eye. 
     
-    Twenty-two reasons. She started counting them off in her head – the familiar fizz, the caramel notes, the way the cold glass felt against her hand on a day like this. She popped the cap off her own Dr. Pepper, the scent a sudden burst of nostalgia.  It tasted like lazy summer afternoons by the creek, of fireflies winking in the twilight, of her grandmother's laughter echoing through their old farmhouse. 
+    He took a sip. The taste...it was close. So close. But something was missing.  Disappointment threatened to engulf him, but then, from the corner of his eye, he spotted it – his grandmother's old music box, gathering dust. He wound it up, and a familiar, whimsical tune filled the air.  
     
-    The highway shimmered outside, no longer a symbol of escape, but a ribbon of possibility. Maybe she couldn't travel it today, but she had her memories, her dreams, and yes, even this dusty old town, holding twenty-two reasons to smile in each day. 
+    And in that moment, as the music mingled with the flavors on his tongue, it clicked. The missing ingredient wasn't a fruit, or a spice, but a feeling – the pure, unadulterated joy of a memory rekindled. Dr. Pepper smiled. His search wasn't over, not yet. But for the first time in a long time, he knew he was on the right track. He had a taste of the past, and now, he had the melody to guide him towards the future. His grandmother's soda, he realized, wasn't just about the 23 flavors; it was about the feeling they evoked. It was about love, laughter, and the bittersweet symphony of life itself. And he, Dr. Bartholomew Pepper, would spend the rest of his days trying to bottle that feeling, one delicious drop at a time. 
     
     ---Parsed Response (string)---
-    "Dottie sighed, the weight of the convenience store's fluorescent lights pressing down on her. Another day, another dollar, another questionable hot dog rotating slowly on the roller grill.  She glanced out the window at the endless Texas highway, shimmering under the midday sun.  \n\n\"Dr. Pepper, please,\" a man's voice startled her. He was tall and dusty, wearing a Stetson that shadowed his eyes. Dottie grabbed a bottle, the glass cool in her hand. \n\nAs she rang him up, he saw her gazing out at the road. \"Passing through?\" he asked.\n\n\"Dreaming of it,\" she admitted. \"This town's got a way of holding you hostage.\" \n\nThe man smiled, a surprisingly gentle curve of his lips. \"It's all about perspective, ma'am. Sometimes the sweetest things are hidden in plain sight.\" He took a swig of his Dr. Pepper.  \"Twenty-two flavors, you know. Twenty-two reasons to smile.\" He winked and ambled out, leaving Dottie staring at the bottle in his wake. \n\nTwenty-two reasons. She started counting them off in her head – the familiar fizz, the caramel notes, the way the cold glass felt against her hand on a day like this. She popped the cap off her own Dr. Pepper, the scent a sudden burst of nostalgia.  It tasted like lazy summer afternoons by the creek, of fireflies winking in the twilight, of her grandmother's laughter echoing through their old farmhouse. \n\nThe highway shimmered outside, no longer a symbol of escape, but a ribbon of possibility. Maybe she couldn't travel it today, but she had her memories, her dreams, and yes, even this dusty old town, holding twenty-two reasons to smile in each day. \n"
-

Teardown

PASSED test_gemini_streaming 0:00:09.974979

Setup

Call

Captured stdout call
LLM output from Gemini: Old Doc Palmer adjusted his spectacles and peered at the bubbling concoction through the glass. Around him, the soda fountain buzzed with the afternoon rush, but his focus remained solely on the caramel-colored liquid within. 
-
-"Not quite right," he muttered, tapping a finger against the glass. 
-
-He'd been at it for weeks, determined to create a new soda flavor, something unique, something...different.  He'd tried every fruit imaginable, every spice, every combination he could conjure. Still, nothing sparked the excitement, the "aha!" moment he craved. 
+    "Bartholomew \"Bart\" Pepper, PhD, was a man of routine. Every morning at precisely 8:02, he'd arrive at his cluttered office in the Department of Unusual Flavors, a forgotten annex of the local university. And every morning, he'd brew a pot of intensely aromatic, mysteriously flavored tea, a concoction so unique it could only be described as...well, \"Dr. Pepper.\"\n\nBart had spent years, decades even, trying to recreate the taste of a soda his grandmother used to give him. He could still recall its sweet, slightly tangy fizz, the way it danced on his tongue, a symphony of 23 distinct, yet utterly harmonious flavors. He'd dedicated his life to rediscovering its secret, to bottling that fleeting memory. \n\nHe wasn't a soda jerk, as some colleagues snickered. He was a flavor historian, an archaeologist of the palate. His office, a testament to his obsession, overflowed with bubbling beakers, ancient cookbooks, and walls plastered with flavor charts that would make a sommelier weep.\n\nOne rainy Tuesday, while poring over a faded manuscript titled \"Elixirs of the Old World,\" a sentence leapt out: \"And lo, the nectar of 23 fruits, when blended under the crimson moon...\" His heart hammered in his chest. Could this be it? The long-lost recipe?\n\nHe rushed to recreate the process, his hands trembling with anticipation. Hours melted away in a blur of bubbling potions and exotic spices. Finally, as the clock chimed midnight, he held a glass of his creation up to the moon, a single, perfect tear escaping his eye. \n\nHe took a sip. The taste...it was close. So close. But something was missing.  Disappointment threatened to engulf him, but then, from the corner of his eye, he spotted it – his grandmother's old music box, gathering dust. He wound it up, and a familiar, whimsical tune filled the air.  \n\nAnd in that moment, as the music mingled with the flavors on his tongue, it clicked. The missing ingredient wasn't a fruit, or a spice, but a feeling – the pure, unadulterated joy of a memory rekindled. Dr. Pepper smiled. His search wasn't over, not yet. But for the first time in a long time, he knew he was on the right track. He had a taste of the past, and now, he had the melody to guide him towards the future. His grandmother's soda, he realized, wasn't just about the 23 flavors; it was about the feeling they evoked. It was about love, laughter, and the bittersweet symphony of life itself. And he, Dr. Bartholomew Pepper, would spend the rest of his days trying to bottle that feeling, one delicious drop at a time. \n"
+

Teardown

PASSED test_gemini_streaming 0:00:07.050195

Setup

Call

Captured stdout call
LLM output from Gemini: Dr. Pepper never meant to be a soda. He dreamt of grand adventures, of exploring the Amazon rainforest, of discovering lost cities and ancient artifacts. He devoured books on archaeology and anthropology, filling his head with stories of daring explorers and their thrilling discoveries. 
 
-"Whatcha making there, Doc?" 
+His father, a simple soda jerk, just shook his head and chuckled. "Adventures are for storybooks," he'd say, wiping down the counter. "You'll find excitement enough right here, mixing up fizzy drinks and serving smiles."
 
-Young Billy, his apprentice and all-around helper, leaned in, eyes wide with curiosity. Doc Palmer sighed. Even Billy, with his incessant questions and insatiable sweet tooth, couldn't offer a solution this time.
+But Dr. Pepper refused to be bottled up. He experimented with flavors late at night, combining cherry and licorice, amaretto and cola, determined to create a taste that was as bold and adventurous as his dreams. His creations were...unique. Explosively so. One unfortunate concoction involving pineapple and pickle juice nearly blew the roof off the soda fountain. 
 
-"Trying to capture lightning in a bottle," Doc Palmer admitted, his shoulders slumping. 
+Then, one starlit night, he stumbled upon the perfect blend. 23 flavors, harmonizing in a symphony of sweet, spicy, and mysterious. He took a sip, and it was like drinking liquid adventure. 
 
-Billy tilted his head, "Like the fireworks on the Fourth of July?"
+The soda became a sensation. People lined up for blocks, eager to taste the drink that was rumored to transport you to faraway lands with a single sip. And while Dr. Pepper never did make it to the Amazon, he found his own adventure in every bottle, in the smiles of his customers, and in the knowledge that he had created something truly extraordinary. 
 
-The question struck a chord in Doc Palmer's mind. Fireworks! He didn't need a specific fruit; he needed a feeling. The feeling of celebration, of excitement, of that first sip on a hot summer day that made your taste buds dance.
+Even today, with each sip of Dr. Pepper, you can taste the echoes of his adventurous spirit, a reminder that sometimes, the greatest journeys begin with a single, delicious dream. 
 
-He grabbed a handful of ingredients, ignoring Billy's worried look as he tossed them into the mix: a touch of licorice for a bit of mystery, a dash of amaretto for warmth, a whisper of cola for familiarity. 
-
-He shook the mixture, the soda fountain rattling in protest. The resulting concoction was a deep, rich brown, with a tantalizing aroma that filled the air.  He poured a glass and took a hesitant sip.
-
-His eyes widened.  A burst of flavors, sweet and spicy, familiar yet entirely new, exploded on his tongue. It was different, it was exciting, it was...perfect. 
-
-He looked at Billy, who was staring at him expectantly. 
-
-"Well, Doc?" 
-
-Doc Palmer grinned. "Billy, I think we've done it. We've bottled lightning." 
-
-And so, with a burst of inspiration and a dash of Fourth of July magic, Dr. Palmer created his namesake drink, a soda that was more than just a beverage. It was an experience, a celebration in every sip. The legend of Dr. Pepper was born. 
-
-
Captured stderr call
[2024-10-21T21:10:15Z INFO  baml_events] Function TestGemini:
-    Client: Gemini (gemini-1.5-pro-001) - 9959ms. StopReason: Stop
+
Captured stderr call
[2024-10-23T17:51:50Z INFO  baml_events] Function TestGemini:
+    Client: Gemini (gemini-1.5-pro-001) - 7006ms. StopReason: Stop
     ---PROMPT---
     [chat] user: Write a nice short story about Dr. Pepper
     
     ---LLM REPLY---
-    Old Doc Palmer adjusted his spectacles and peered at the bubbling concoction through the glass. Around him, the soda fountain buzzed with the afternoon rush, but his focus remained solely on the caramel-colored liquid within. 
-    
-    "Not quite right," he muttered, tapping a finger against the glass. 
-    
-    He'd been at it for weeks, determined to create a new soda flavor, something unique, something...different.  He'd tried every fruit imaginable, every spice, every combination he could conjure. Still, nothing sparked the excitement, the "aha!" moment he craved. 
+    Dr. Pepper never meant to be a soda. He dreamt of grand adventures, of exploring the Amazon rainforest, of discovering lost cities and ancient artifacts. He devoured books on archaeology and anthropology, filling his head with stories of daring explorers and their thrilling discoveries. 
     
-    "Whatcha making there, Doc?" 
+    His father, a simple soda jerk, just shook his head and chuckled. "Adventures are for storybooks," he'd say, wiping down the counter. "You'll find excitement enough right here, mixing up fizzy drinks and serving smiles."
     
-    Young Billy, his apprentice and all-around helper, leaned in, eyes wide with curiosity. Doc Palmer sighed. Even Billy, with his incessant questions and insatiable sweet tooth, couldn't offer a solution this time.
+    But Dr. Pepper refused to be bottled up. He experimented with flavors late at night, combining cherry and licorice, amaretto and cola, determined to create a taste that was as bold and adventurous as his dreams. His creations were...unique. Explosively so. One unfortunate concoction involving pineapple and pickle juice nearly blew the roof off the soda fountain. 
     
-    "Trying to capture lightning in a bottle," Doc Palmer admitted, his shoulders slumping. 
+    Then, one starlit night, he stumbled upon the perfect blend. 23 flavors, harmonizing in a symphony of sweet, spicy, and mysterious. He took a sip, and it was like drinking liquid adventure. 
     
-    Billy tilted his head, "Like the fireworks on the Fourth of July?"
+    The soda became a sensation. People lined up for blocks, eager to taste the drink that was rumored to transport you to faraway lands with a single sip. And while Dr. Pepper never did make it to the Amazon, he found his own adventure in every bottle, in the smiles of his customers, and in the knowledge that he had created something truly extraordinary. 
     
-    The question struck a chord in Doc Palmer's mind. Fireworks! He didn't need a specific fruit; he needed a feeling. The feeling of celebration, of excitement, of that first sip on a hot summer day that made your taste buds dance.
-    
-    He grabbed a handful of ingredients, ignoring Billy's worried look as he tossed them into the mix: a touch of licorice for a bit of mystery, a dash of amaretto for warmth, a whisper of cola for familiarity. 
-    
-    He shook the mixture, the soda fountain rattling in protest. The resulting concoction was a deep, rich brown, with a tantalizing aroma that filled the air.  He poured a glass and took a hesitant sip.
-    
-    His eyes widened.  A burst of flavors, sweet and spicy, familiar yet entirely new, exploded on his tongue. It was different, it was exciting, it was...perfect. 
-    
-    He looked at Billy, who was staring at him expectantly. 
-    
-    "Well, Doc?" 
-    
-    Doc Palmer grinned. "Billy, I think we've done it. We've bottled lightning." 
-    
-    And so, with a burst of inspiration and a dash of Fourth of July magic, Dr. Palmer created his namesake drink, a soda that was more than just a beverage. It was an experience, a celebration in every sip. The legend of Dr. Pepper was born. 
+    Even today, with each sip of Dr. Pepper, you can taste the echoes of his adventurous spirit, a reminder that sometimes, the greatest journeys begin with a single, delicious dream. 
     
     ---Parsed Response (string)---
-    "Old Doc Palmer adjusted his spectacles and peered at the bubbling concoction through the glass. Around him, the soda fountain buzzed with the afternoon rush, but his focus remained solely on the caramel-colored liquid within. \n\n\"Not quite right,\" he muttered, tapping a finger against the glass. \n\nHe'd been at it for weeks, determined to create a new soda flavor, something unique, something...different.  He'd tried every fruit imaginable, every spice, every combination he could conjure. Still, nothing sparked the excitement, the \"aha!\" moment he craved. \n\n\"Whatcha making there, Doc?\" \n\nYoung Billy, his apprentice and all-around helper, leaned in, eyes wide with curiosity. Doc Palmer sighed. Even Billy, with his incessant questions and insatiable sweet tooth, couldn't offer a solution this time.\n\n\"Trying to capture lightning in a bottle,\" Doc Palmer admitted, his shoulders slumping. \n\nBilly tilted his head, \"Like the fireworks on the Fourth of July?\"\n\nThe question struck a chord in Doc Palmer's mind. Fireworks! He didn't need a specific fruit; he needed a feeling. The feeling of celebration, of excitement, of that first sip on a hot summer day that made your taste buds dance.\n\nHe grabbed a handful of ingredients, ignoring Billy's worried look as he tossed them into the mix: a touch of licorice for a bit of mystery, a dash of amaretto for warmth, a whisper of cola for familiarity. \n\nHe shook the mixture, the soda fountain rattling in protest. The resulting concoction was a deep, rich brown, with a tantalizing aroma that filled the air.  He poured a glass and took a hesitant sip.\n\nHis eyes widened.  A burst of flavors, sweet and spicy, familiar yet entirely new, exploded on his tongue. It was different, it was exciting, it was...perfect. \n\nHe looked at Billy, who was staring at him expectantly. \n\n\"Well, Doc?\" \n\nDoc Palmer grinned. \"Billy, I think we've done it. We've bottled lightning.\" \n\nAnd so, with a burst of inspiration and a dash of Fourth of July magic, Dr. Palmer created his namesake drink, a soda that was more than just a beverage. It was an experience, a celebration in every sip. The legend of Dr. Pepper was born. \n"
-

Teardown

PASSED test_aws 0:00:02.320387

Setup

Call

Captured stderr call
[2024-10-21T21:10:15Z WARN  aws_runtime::env_config::normalize] section [Connection 1] ignored; config must be in the AWS config file rather than the credentials file
-[2024-10-21T21:10:15Z INFO  aws_config::meta::region] load_region; provider=EnvironmentVariableRegionProvider { env: Env(Real) }
-[2024-10-21T21:10:17Z INFO  baml_events] Function TestAws:
-    Client: AwsBedrock (anthropic.claude-3-haiku-20240307-v1:0) - 2147ms. StopReason: max_tokens
+    "Dr. Pepper never meant to be a soda. He dreamt of grand adventures, of exploring the Amazon rainforest, of discovering lost cities and ancient artifacts. He devoured books on archaeology and anthropology, filling his head with stories of daring explorers and their thrilling discoveries. \n\nHis father, a simple soda jerk, just shook his head and chuckled. \"Adventures are for storybooks,\" he'd say, wiping down the counter. \"You'll find excitement enough right here, mixing up fizzy drinks and serving smiles.\"\n\nBut Dr. Pepper refused to be bottled up. He experimented with flavors late at night, combining cherry and licorice, amaretto and cola, determined to create a taste that was as bold and adventurous as his dreams. His creations were...unique. Explosively so. One unfortunate concoction involving pineapple and pickle juice nearly blew the roof off the soda fountain. \n\nThen, one starlit night, he stumbled upon the perfect blend. 23 flavors, harmonizing in a symphony of sweet, spicy, and mysterious. He took a sip, and it was like drinking liquid adventure. \n\nThe soda became a sensation. People lined up for blocks, eager to taste the drink that was rumored to transport you to faraway lands with a single sip. And while Dr. Pepper never did make it to the Amazon, he found his own adventure in every bottle, in the smiles of his customers, and in the knowledge that he had created something truly extraordinary. \n\nEven today, with each sip of Dr. Pepper, you can taste the echoes of his adventurous spirit, a reminder that sometimes, the greatest journeys begin with a single, delicious dream. \n"
+

Teardown

PASSED test_aws 0:00:02.573056

Setup

Call

Captured stderr call
[2024-10-23T17:51:50Z WARN  aws_runtime::env_config::normalize] section [Connection 1] ignored; config must be in the AWS config file rather than the credentials file
+[2024-10-23T17:51:50Z INFO  aws_config::meta::region] load_region; provider=EnvironmentVariableRegionProvider { env: Env(Real) }
+[2024-10-23T17:51:52Z INFO  baml_events] Function TestAws:
+    Client: AwsBedrock (anthropic.claude-3-haiku-20240307-v1:0) - 2401ms. StopReason: max_tokens
     ---PROMPT---
     [chat] user: Write a nice short story about Mt Rainier is tall
     
     ---LLM REPLY---
     Here is a short story about Mount Rainier:
     
-    Towering high above the lush forests and shimmering lakes of the Pacific Northwest, Mount Rainier stands as a majestic and awe-inspiring natural wonder. At 14,411 feet tall, this dormant volcano is the highest peak in the Cascade Range, a rugged mountain chain that stretches from British Columbia to Northern California.
+    The Majestic Mountain
+    
+    As the morning sun crept over the distant horizon, its golden rays illuminated the towering presence of Mount Rainier, standing tall and proud against the azure sky. This magnificent stratovolcano, with its glaciers and snow-capped peak, was a sight to behold, commanding the awe and reverence of all who laid eyes upon it.
     
-    From miles away, the glaciated summit of Rainier
+    For the residents of
     ---Parsed Response (string)---
-    "Here is a short story about Mount Rainier:\n\nTowering high above the lush forests and shimmering lakes of the Pacific Northwest, Mount Rainier stands as a majestic and awe-inspiring natural wonder. At 14,411 feet tall, this dormant volcano is the highest peak in the Cascade Range, a rugged mountain chain that stretches from British Columbia to Northern California.\n\nFrom miles away, the glaciated summit of Rainier"
-

Teardown

PASSED test_openai_shorthand 0:00:07.620217

Setup

Call

Captured stderr call
[2024-10-21T21:10:25Z INFO  baml_events] Function TestOpenAIShorthand:
-    Client: openai/gpt-4o-mini (gpt-4o-mini-2024-07-18) - 7610ms. StopReason: stop
+    "Here is a short story about Mount Rainier:\n\nThe Majestic Mountain\n\nAs the morning sun crept over the distant horizon, its golden rays illuminated the towering presence of Mount Rainier, standing tall and proud against the azure sky. This magnificent stratovolcano, with its glaciers and snow-capped peak, was a sight to behold, commanding the awe and reverence of all who laid eyes upon it.\n\nFor the residents of"
+

Teardown

PASSED test_openai_shorthand 0:00:09.879589

Setup

Call

Captured stderr call
[2024-10-23T17:52:02Z INFO  baml_events] Function TestOpenAIShorthand:
+    Client: openai/gpt-4o-mini (gpt-4o-mini-2024-07-18) - 9867ms. StopReason: stop
     ---PROMPT---
     [chat] system: Write a nice short story about Mt Rainier is tall
     
     ---LLM REPLY---
-    Once upon a time in the Pacific Northwest, there stood a majestic giant known as Mt. Rainier. Towering over the landscape at a breathtaking 14,411 feet, it was more than just a mountain—it was a cherished landmark, a guardian of the valleys, forests, and rivers that flowed below.
+    Once upon a time in the Pacific Northwest, there stood a majestic giant known as Mt. Rainier. Towering at over 14,000 feet, it was not just the tallest peak in Washington State, but a symbol of beauty and strength that inspired everyone around it.
     
-    The locals often shared stories about Mt. Rainier, enchanting tales that spoke of its ancient spirit. According to the elders, Rainier was once a proud warrior who stood tall to protect his people. When danger approached, he erupted into action, releasing thunderous roars that echoed across the region. The mountain’s peaks often wore a crown of snow, said to be the remnants of his fierce battles against the ice-hearted Winter.
+    In the small town of Ashford, nestled at the foot of the mountain, lived a young girl named Lily. Since her earliest days, she had been captivated by the sight of Mt. Rainier. Its snow-capped summit sparkled in the sunlight during the day, and at sunset, it donned a cloak of purples and pinks, breathtaking and surreal.
     
-    Children would gather around fires at night, their eyes shimmering with wonder, as they listened to the elders recount how Rainier watched over them day and night. “Look up,” they’d say, pointing toward the towering summit. “He’s always there, guiding us like a lighthouse to ships at sea.”
+    Every summer, Lily would eagerly await the school break when her father took her hiking up the mountain. The trails wound like ribbons through thick forests of lush green trees, and as they ascended, the air turned crisp and clean. Lily’s eyes would widen in wonder at the wildflowers blooming in a riot of colors, while her father's laughter mingled with the song of distant waterfalls.
     
-    One crisp autumn morning, a young girl named Lila set out to climb Mt. Rainier with her father. As they trekked along the winding trails, she could feel the mountain’s presence all around her, every step filled with the whispers of the wind and the rustling of leaves. The vibrant colors of the changing season painted a breathtaking backdrop, and Lila marveled at how small she felt against such a colossal figure.
+    One warm afternoon, during a hike she'd especially anticipated, they chose a new trail that promised stunning views. With every step they took, the path steepened, and the chorus of nature seemed to grow louder. Birds chirped melodious tunes, and the breeze carried the sweet scent of pine.
     
-    “Why is it so tall, Daddy?” she asked, her voice filled with curiosity.
+    When they reached a breathtaking viewpoint, Lily stood in awe. Mt. Rainier loomed before her, its rugged peaks bathed in sunlight. It felt like touching the sky, as if they were standing at the feet of a sleeping giant. "Dad, it’s so tall!" she exclaimed, her eyes sparkling with excitement.
     
-    Her father smiled, looking up at the intimidating peaks. “Because it reaches for the stars, sweetheart. It wants to touch the sky and remind us that there are no limits to what we can achieve.”
+    Her father smiled and knelt beside her. "Yes, sweet pea, but remember that height is not just about how tall you can stand. It’s also about how far you can see and how many adventures you can have." 
     
-    With each step, Lila felt inspired. The higher they climbed, the more the world below unfolded in a tapestry of greens and blues. Clouds danced among the peaks, brushing against the summit like soft cotton candy. Lila imagined she could see the whole world from up there. 
+    Lily absorbed his words. As she gazed at the mountain, she felt a sense of connection that ran deeper than she had ever imagined. In its towering presence, she saw not just a peak but a guardian of stories, dreams, and memories. It was a reminder that life was filled with mountains to climb—some steep, some gentle, but all worth the journey.
     
-    At last, they reached a viewpoint just below the summit, where the landscape sprawled out in all directions. The view was breathtaking, a magnificent panorama that seemed almost magical. Lila looked at her father, her eyes wide with awe. “It really is tall,” she whispered. “But it makes me feel brave.”
+    That evening, as they made their way back down, the sun began to set behind Mt. Rainier, painting the sky in hues of fiery orange and calming indigo. With each step, Lily felt her heart swell with gratitude for the moments spent with her father, for the beauty of the mountain, and for the adventures yet to come.
     
-    Her father nodded, wrapping an arm around her shoulders. “Mountains like Rainier remind us of our ambitions. Sometimes, reaching them might seem impossible, but with determination and a little courage, we can conquer our very own mountains.”
+    Years later, long after she had grown into a young woman, Lily returned to Ashford. She stood at the same viewpoint, now alone, but felt her father’s spirit beside her, as strong and comforting as the mountain itself. She smiled, remembering how he had taught her that true height came not only from reaching the summit but also from the love and joy shared along the way.
     
-    As they descended, Lila felt a newfound confidence blossoming within her. She wasn’t just a climber of mountains; she was a dreamer of dreams. And just like Mt. Rainier, she vowed to stand tall against the challenges life would bring.
+    And as the twilight kissed the peak of Mt. Rainier goodnight, Lily whispered a promise to the mountain: "I will continue to climb my own adventures, no matter how steep, as long as I carry your spirit with me." 
     
-    Years later, Lila would often return to the mountain, gazing up at its snow-capped peak, reminding herself of that day. With every visit, Rainier continued to inspire her—an everlasting symbol of courage, strength, and the endless quest to reach higher. And as she would tell the stories of her own adventures to her children, she knew deep down that Mt. Rainier would always stand sentinel, watching over her dreams, forever tall and unwavering.
+    The mountain stood tall and silent, its presence unwavering, ready to inspire generations to come.
     ---Parsed Response (string)---
-    "Once upon a time in the Pacific Northwest, there stood a majestic giant known as Mt. Rainier. Towering over the landscape at a breathtaking 14,411 feet, it was more than just a mountain—it was a cherished landmark, a guardian of the valleys, forests, and rivers that flowed below.\n\nThe locals often shared stories about Mt. Rainier, enchanting tales that spoke of its ancient spirit. According to the elders, Rainier was once a proud warrior who stood tall to protect his people. When danger approached, he erupted into action, releasing thunderous roars that echoed across the region. The mountain’s peaks often wore a crown of snow, said to be the remnants of his fierce battles against the ice-hearted Winter.\n\nChildren would gather around fires at night, their eyes shimmering with wonder, as they listened to the elders recount how Rainier watched over them day and night. “Look up,” they’d say, pointing toward the towering summit. “He’s always there, guiding us like a lighthouse to ships at sea.”\n\nOne crisp autumn morning, a young girl named Lila set out to climb Mt. Rainier with her father. As they trekked along the winding trails, she could feel the mountain’s presence all around her, every step filled with the whispers of the wind and the rustling of leaves. The vibrant colors of the changing season painted a breathtaking backdrop, and Lila marveled at how small she felt against such a colossal figure.\n\n“Why is it so tall, Daddy?” she asked, her voice filled with curiosity.\n\nHer father smiled, looking up at the intimidating peaks. “Because it reaches for the stars, sweetheart. It wants to touch the sky and remind us that there are no limits to what we can achieve.”\n\nWith each step, Lila felt inspired. The higher they climbed, the more the world below unfolded in a tapestry of greens and blues. Clouds danced among the peaks, brushing against the summit like soft cotton candy. Lila imagined she could see the whole world from up there. \n\nAt last, they reached a viewpoint just below the summit, where the landscape sprawled out in all directions. The view was breathtaking, a magnificent panorama that seemed almost magical. Lila looked at her father, her eyes wide with awe. “It really is tall,” she whispered. “But it makes me feel brave.”\n\nHer father nodded, wrapping an arm around her shoulders. “Mountains like Rainier remind us of our ambitions. Sometimes, reaching them might seem impossible, but with determination and a little courage, we can conquer our very own mountains.”\n\nAs they descended, Lila felt a newfound confidence blossoming within her. She wasn’t just a climber of mountains; she was a dreamer of dreams. And just like Mt. Rainier, she vowed to stand tall against the challenges life would bring.\n\nYears later, Lila would often return to the mountain, gazing up at its snow-capped peak, reminding herself of that day. With every visit, Rainier continued to inspire her—an everlasting symbol of courage, strength, and the endless quest to reach higher. And as she would tell the stories of her own adventures to her children, she knew deep down that Mt. Rainier would always stand sentinel, watching over her dreams, forever tall and unwavering."
-

Teardown

PASSED test_openai_shorthand_streaming 0:00:08.787896

Setup

Call

Captured stderr call
[2024-10-21T21:10:34Z INFO  baml_events] Function TestOpenAIShorthand:
-    Client: openai/gpt-4o-mini (gpt-4o-mini-2024-07-18) - 8776ms. StopReason: stop
+    "Once upon a time in the Pacific Northwest, there stood a majestic giant known as Mt. Rainier. Towering at over 14,000 feet, it was not just the tallest peak in Washington State, but a symbol of beauty and strength that inspired everyone around it.\n\nIn the small town of Ashford, nestled at the foot of the mountain, lived a young girl named Lily. Since her earliest days, she had been captivated by the sight of Mt. Rainier. Its snow-capped summit sparkled in the sunlight during the day, and at sunset, it donned a cloak of purples and pinks, breathtaking and surreal.\n\nEvery summer, Lily would eagerly await the school break when her father took her hiking up the mountain. The trails wound like ribbons through thick forests of lush green trees, and as they ascended, the air turned crisp and clean. Lily’s eyes would widen in wonder at the wildflowers blooming in a riot of colors, while her father's laughter mingled with the song of distant waterfalls.\n\nOne warm afternoon, during a hike she'd especially anticipated, they chose a new trail that promised stunning views. With every step they took, the path steepened, and the chorus of nature seemed to grow louder. Birds chirped melodious tunes, and the breeze carried the sweet scent of pine.\n\nWhen they reached a breathtaking viewpoint, Lily stood in awe. Mt. Rainier loomed before her, its rugged peaks bathed in sunlight. It felt like touching the sky, as if they were standing at the feet of a sleeping giant. \"Dad, it’s so tall!\" she exclaimed, her eyes sparkling with excitement.\n\nHer father smiled and knelt beside her. \"Yes, sweet pea, but remember that height is not just about how tall you can stand. It’s also about how far you can see and how many adventures you can have.\" \n\nLily absorbed his words. As she gazed at the mountain, she felt a sense of connection that ran deeper than she had ever imagined. In its towering presence, she saw not just a peak but a guardian of stories, dreams, and memories. It was a reminder that life was filled with mountains to climb—some steep, some gentle, but all worth the journey.\n\nThat evening, as they made their way back down, the sun began to set behind Mt. Rainier, painting the sky in hues of fiery orange and calming indigo. With each step, Lily felt her heart swell with gratitude for the moments spent with her father, for the beauty of the mountain, and for the adventures yet to come.\n\nYears later, long after she had grown into a young woman, Lily returned to Ashford. She stood at the same viewpoint, now alone, but felt her father’s spirit beside her, as strong and comforting as the mountain itself. She smiled, remembering how he had taught her that true height came not only from reaching the summit but also from the love and joy shared along the way.\n\nAnd as the twilight kissed the peak of Mt. Rainier goodnight, Lily whispered a promise to the mountain: \"I will continue to climb my own adventures, no matter how steep, as long as I carry your spirit with me.\" \n\nThe mountain stood tall and silent, its presence unwavering, ready to inspire generations to come."
+

Teardown

PASSED test_openai_shorthand_streaming 0:00:10.982331

Setup

Call

Captured stderr call
[2024-10-23T17:52:13Z INFO  baml_events] Function TestOpenAIShorthand:
+    Client: openai/gpt-4o-mini (gpt-4o-mini-2024-07-18) - 10971ms. StopReason: stop
     ---PROMPT---
     [chat] system: Write a nice short story about Mt Rainier is tall
     
     ---LLM REPLY---
-    Once upon a time, in the heart of the Pacific Northwest, there stood a towering giant named Mt. Rainier. Cloaked in a white blanket of snow, it guarded the secrets of the ancient forests below. Its peak kissed the clouds, a sentinel watching over the land with grace and majesty.
-    
-    In a quaint village nestled at the mountain's base lived a young girl named Lila. Every morning, she awoke to the sight of Mt. Rainier rising, tall and proud, its glaciers glimmering in the sunlight. To Lila, the mountain was not just a natural wonder; it was her greatest inspiration. She would often dream of climbing its rugged slopes and discovering the stories whispered by the winds that danced around its summit.
+    Once upon a time, in the lush and vibrant region of Washington State, there stood a magnificent giant known as Mt. Rainier. Towering at over 14,000 feet, it watched over the valley below like a wise old sentinel. Its snow-capped peak sparkled in the sunlight, casting a shadow that embraced the surrounding forests and meadows.
     
-    One summer day, Lila gathered her courage and asked her father if they could embark on an adventure to the mountain's peak. Her father, a wise man with a heart full of wanderlust, agreed. "But remember, my dear," he said, "the mountain is beautiful yet challenging. It will test us, but the journey will teach us all we need to know.”
+    On a quiet summer morning, a young girl named Elara set off on an adventure with her grandfather, who often spoke of the mountain as if it were a part of their family. They packed a picnic basket full of sandwiches, fresh berries, and her grandmother’s famous apple pie, and set off to a nearby stream, where the view of Mt. Rainier was breathtaking.
     
-    Equipped with hiking gear and a picnic basket filled with sandwiches, they set off early in the morning, the sun painting the sky in hues of orange and pink. As they began their ascent, Lila marveled at how her tiny village grew smaller with each step, and soon, the world below became a patchwork of greens and browns.
+    As they reached their destination, the sun shone brightly, illuminating the mountain's majestic beauty. "Look how tall it is, Grandpa!" Elara exclaimed, her eyes wide with awe. The mountain seemed to touch the sky, its rugged cliffs adorned with cascading glaciers like flowing garments.
     
-    As they climbed higher, Lila noticed the change in the air. It grew cooler and crisper, filled with the scent of pine and wildflowers. They encountered babbling brooks and fields of colorful blooms that seemed to stretch endlessly. Her heart raced with excitement at the beauty surrounding her.
+    Her grandfather chuckled. "Many believe Mt. Rainier is a giant spirit, watching over us. Local legends say that every child who admires it will grow taller and stronger in heart, just like the mountain itself."
     
-    But the climb was steeper than she imagined. Fatigue set in, and Lila found herself longing for the comfort of home. Sensing her struggle, her father paused to rest and encouraged her to look up. “Remember, my dear, Mt. Rainier is not just tall; it is a journey—a series of small steps that lead us closer to our dreams.”
+    Intrigued, Elara decided to climb a small hill nearby to get a better view. As she ascended, she imagined each step was a journey towards a dream. Reaching the top, she stood triumphant, her arms stretched wide. "I feel bigger than the mountain!" she shouted, laughter echoing in the crisp air.
     
-    With renewed determination, Lila focused on the path ahead. Each step was a victory, and with every breath, she felt the spirit of the mountain lifting her. They finally reached a breathtaking viewpoint, where the world sprawled beneath them like a painted canvas, vibrant and alive.
+    Grandpa joined her, brushing away wisps of gray hair from his forehead. "Ah, but remember, Elara, it isn’t only about height. It’s about having the strength to stand tall, even in the storms of life."
     
-    As they sat on a rocky ledge and munched on their sandwiches, Lila glanced up at Mt. Rainier's peak. She felt small yet significant, a part of something grand. A sense of belonging washed over her, and she understood that the mountain's true height was in the lessons it imparted—the strength to persevere, the courage to dream, and the beauty of the journey itself.
+    Elara nodded, taking in the lessons entwined with the mountain’s presence. They shared their picnic, each bite sweetened by the laughter and stories they exchanged. As the sun began to dip below the horizon, the mountain shimmered in hues of purple and gold, seemingly thanking them for the visit.
     
-    On their descent, with stars twinkling above them, Lila realized the mountain had woven its magic deep within her heart. From that day forward, she no longer saw Mt. Rainier as just a tall mountain, but a friend who had urged her to reach new heights, a friend who would forever remind her that life is an adventure best lived with passion and purpose.
+    That day, Elara learned that while Mt. Rainier was indeed tall, standing out among the mountains, the true strength lay in appreciating its grandeur, its resilience, and the love that filled the spaces around it—like the love she felt for her grandfather.
     
-    And so, Lila returned to her village, forever changed. Each time she gazed up at Mt. Rainier, she smiled, knowing she could conquer any challenge that lay ahead, inspired by the great height of the mountain and the lessons learned on her journey.
+    From that day on, whenever Elara looked up at the mountain, she didn’t just see its peak; she saw the warmth of memories, the stories of her family, and the promise that with each new day, she too would stand tall, ready to embrace life’s adventures.
     ---Parsed Response (string)---
-    "Once upon a time, in the heart of the Pacific Northwest, there stood a towering giant named Mt. Rainier. Cloaked in a white blanket of snow, it guarded the secrets of the ancient forests below. Its peak kissed the clouds, a sentinel watching over the land with grace and majesty.\n\nIn a quaint village nestled at the mountain's base lived a young girl named Lila. Every morning, she awoke to the sight of Mt. Rainier rising, tall and proud, its glaciers glimmering in the sunlight. To Lila, the mountain was not just a natural wonder; it was her greatest inspiration. She would often dream of climbing its rugged slopes and discovering the stories whispered by the winds that danced around its summit.\n\nOne summer day, Lila gathered her courage and asked her father if they could embark on an adventure to the mountain's peak. Her father, a wise man with a heart full of wanderlust, agreed. \"But remember, my dear,\" he said, \"the mountain is beautiful yet challenging. It will test us, but the journey will teach us all we need to know.”\n\nEquipped with hiking gear and a picnic basket filled with sandwiches, they set off early in the morning, the sun painting the sky in hues of orange and pink. As they began their ascent, Lila marveled at how her tiny village grew smaller with each step, and soon, the world below became a patchwork of greens and browns.\n\nAs they climbed higher, Lila noticed the change in the air. It grew cooler and crisper, filled with the scent of pine and wildflowers. They encountered babbling brooks and fields of colorful blooms that seemed to stretch endlessly. Her heart raced with excitement at the beauty surrounding her.\n\nBut the climb was steeper than she imagined. Fatigue set in, and Lila found herself longing for the comfort of home. Sensing her struggle, her father paused to rest and encouraged her to look up. “Remember, my dear, Mt. Rainier is not just tall; it is a journey—a series of small steps that lead us closer to our dreams.”\n\nWith renewed determination, Lila focused on the path ahead. Each step was a victory, and with every breath, she felt the spirit of the mountain lifting her. They finally reached a breathtaking viewpoint, where the world sprawled beneath them like a painted canvas, vibrant and alive.\n\nAs they sat on a rocky ledge and munched on their sandwiches, Lila glanced up at Mt. Rainier's peak. She felt small yet significant, a part of something grand. A sense of belonging washed over her, and she understood that the mountain's true height was in the lessons it imparted—the strength to persevere, the courage to dream, and the beauty of the journey itself.\n\nOn their descent, with stars twinkling above them, Lila realized the mountain had woven its magic deep within her heart. From that day forward, she no longer saw Mt. Rainier as just a tall mountain, but a friend who had urged her to reach new heights, a friend who would forever remind her that life is an adventure best lived with passion and purpose.\n\nAnd so, Lila returned to her village, forever changed. Each time she gazed up at Mt. Rainier, she smiled, knowing she could conquer any challenge that lay ahead, inspired by the great height of the mountain and the lessons learned on her journey."
-

Teardown

PASSED test_anthropic_shorthand 0:00:03.301404

Setup

Call

Captured stderr call
[2024-10-21T21:10:37Z INFO  baml_events] Function TestAnthropicShorthand:
-    Client: anthropic/claude-3-haiku-20240307 (claude-3-haiku-20240307) - 3294ms. StopReason: "end_turn"
+    "Once upon a time, in the lush and vibrant region of Washington State, there stood a magnificent giant known as Mt. Rainier. Towering at over 14,000 feet, it watched over the valley below like a wise old sentinel. Its snow-capped peak sparkled in the sunlight, casting a shadow that embraced the surrounding forests and meadows.\n\nOn a quiet summer morning, a young girl named Elara set off on an adventure with her grandfather, who often spoke of the mountain as if it were a part of their family. They packed a picnic basket full of sandwiches, fresh berries, and her grandmother’s famous apple pie, and set off to a nearby stream, where the view of Mt. Rainier was breathtaking.\n\nAs they reached their destination, the sun shone brightly, illuminating the mountain's majestic beauty. \"Look how tall it is, Grandpa!\" Elara exclaimed, her eyes wide with awe. The mountain seemed to touch the sky, its rugged cliffs adorned with cascading glaciers like flowing garments.\n\nHer grandfather chuckled. \"Many believe Mt. Rainier is a giant spirit, watching over us. Local legends say that every child who admires it will grow taller and stronger in heart, just like the mountain itself.\"\n\nIntrigued, Elara decided to climb a small hill nearby to get a better view. As she ascended, she imagined each step was a journey towards a dream. Reaching the top, she stood triumphant, her arms stretched wide. \"I feel bigger than the mountain!\" she shouted, laughter echoing in the crisp air.\n\nGrandpa joined her, brushing away wisps of gray hair from his forehead. \"Ah, but remember, Elara, it isn’t only about height. It’s about having the strength to stand tall, even in the storms of life.\"\n\nElara nodded, taking in the lessons entwined with the mountain’s presence. They shared their picnic, each bite sweetened by the laughter and stories they exchanged. As the sun began to dip below the horizon, the mountain shimmered in hues of purple and gold, seemingly thanking them for the visit.\n\nThat day, Elara learned that while Mt. Rainier was indeed tall, standing out among the mountains, the true strength lay in appreciating its grandeur, its resilience, and the love that filled the spaces around it—like the love she felt for her grandfather.\n\nFrom that day on, whenever Elara looked up at the mountain, she didn’t just see its peak; she saw the warmth of memories, the stories of her family, and the promise that with each new day, she too would stand tall, ready to embrace life’s adventures."
+

Teardown

PASSED test_anthropic_shorthand 0:00:03.232734

Setup

Call

Captured stderr call
[2024-10-23T17:52:17Z INFO  baml_events] Function TestAnthropicShorthand:
+    Client: anthropic/claude-3-haiku-20240307 (claude-3-haiku-20240307) - 3225ms. StopReason: "end_turn"
     ---PROMPT---
     [chat] user: Write a nice short story about Mt Rainier is tall
     
     ---LLM REPLY---
     Here is a short story about Mount Rainier:
     
-    The Majestic Mountain
+    Standing tall and majestic, Mount Rainier towers over the Pacific Northwest landscape. At 14,411 feet (4,392 meters), it is the highest mountain in the Cascade Range and one of the most prominent peaks in the contiguous United States.
     
-    As the sun's first rays peeked over the horizon, they illuminated the towering presence of Mount Rainier. Standing an impressive 14,411 feet tall, the dormant volcano commanded awe and reverence from all who laid eyes upon it. 
+    From a distance, the snow-capped summit of Rainier glistens in the sunlight, an awe-inspiring sight that has captivated countless visitors over the centuries. The mountain's sheer size and scale are truly breathtaking, evoking a sense of wonder and humility in all who behold it.
     
-    Emily gazed up at the snow-capped peak, her breath catching in her throat. Though she had lived in the Pacific Northwest her entire life, the sheer size and beauty of Mount Rainier never failed to leave her in wonder. The mountain seemed to stretch endlessly towards the heavens, a testament to the raw power and majesty of the natural world.
+    For the adventurous hiker or climber, scaling the slopes of Rainier is a challenging but immensely rewarding experience. The journey is filled with stunning vistas, glacial landscapes, and a profound connection to the natural world. Each step brings the summit closer, testing one's physical and mental limits.
     
-    Lacing up her hiking boots, Emily set out on the trail, eager to immerse herself in the mountain's grandeur. With each step, the colossal scale of Mount Rainier became more apparent. Towering glaciers gleamed in the morning light, while rugged volcanic ridges cut dramatic silhouettes against the sky. 
+    Yet, even for those who never venture beyond the mountain's base, Rainier's presence is a constant and comforting reminder of the power and beauty of the natural world. It stands as a symbol of the Pacific Northwest, a guardian over the lush forests, pristine lakes, and vibrant communities that surround it.
     
-    As Emily climbed higher, she felt her troubles and worries melt away, replaced by a deep sense of peace and connection. Here, surrounded by the ancient, untamed beauty of the mountain, she was humbled by her own insignificance in the face of such powerful forces.
-    
-    Pausing to catch her breath, Emily turned and gazed back down the valley, taking in the sweeping vistas. Mount Rainier stood tall and proud, a timeless guardian watching over the land. In that moment, she felt grateful to be in the presence of such a magnificent natural wonder – a reminder of the enduring power and grace of the Earth.
+    In the shadow of this towering giant, one cannot help but feel small, yet also part of something greater. Rainier's majesty inspires awe, reverence, and a deep appreciation for the enduring strength and resilience of the natural world.
     ---Parsed Response (string)---
-    "Here is a short story about Mount Rainier:\n\nThe Majestic Mountain\n\nAs the sun's first rays peeked over the horizon, they illuminated the towering presence of Mount Rainier. Standing an impressive 14,411 feet tall, the dormant volcano commanded awe and reverence from all who laid eyes upon it. \n\nEmily gazed up at the snow-capped peak, her breath catching in her throat. Though she had lived in the Pacific Northwest her entire life, the sheer size and beauty of Mount Rainier never failed to leave her in wonder. The mountain seemed to stretch endlessly towards the heavens, a testament to the raw power and majesty of the natural world.\n\nLacing up her hiking boots, Emily set out on the trail, eager to immerse herself in the mountain's grandeur. With each step, the colossal scale of Mount Rainier became more apparent. Towering glaciers gleamed in the morning light, while rugged volcanic ridges cut dramatic silhouettes against the sky. \n\nAs Emily climbed higher, she felt her troubles and worries melt away, replaced by a deep sense of peace and connection. Here, surrounded by the ancient, untamed beauty of the mountain, she was humbled by her own insignificance in the face of such powerful forces.\n\nPausing to catch her breath, Emily turned and gazed back down the valley, taking in the sweeping vistas. Mount Rainier stood tall and proud, a timeless guardian watching over the land. In that moment, she felt grateful to be in the presence of such a magnificent natural wonder – a reminder of the enduring power and grace of the Earth."
-

Teardown

PASSED test_anthropic_shorthand_streaming 0:00:04.189179

Setup

Call

Captured stderr call
[2024-10-21T21:10:41Z INFO  baml_events] Function TestAnthropicShorthand:
-    Client: anthropic/claude-3-haiku-20240307 (claude-3-haiku-20240307) - 4151ms. StopReason: "end_turn"
+    "Here is a short story about Mount Rainier:\n\nStanding tall and majestic, Mount Rainier towers over the Pacific Northwest landscape. At 14,411 feet (4,392 meters), it is the highest mountain in the Cascade Range and one of the most prominent peaks in the contiguous United States.\n\nFrom a distance, the snow-capped summit of Rainier glistens in the sunlight, an awe-inspiring sight that has captivated countless visitors over the centuries. The mountain's sheer size and scale are truly breathtaking, evoking a sense of wonder and humility in all who behold it.\n\nFor the adventurous hiker or climber, scaling the slopes of Rainier is a challenging but immensely rewarding experience. The journey is filled with stunning vistas, glacial landscapes, and a profound connection to the natural world. Each step brings the summit closer, testing one's physical and mental limits.\n\nYet, even for those who never venture beyond the mountain's base, Rainier's presence is a constant and comforting reminder of the power and beauty of the natural world. It stands as a symbol of the Pacific Northwest, a guardian over the lush forests, pristine lakes, and vibrant communities that surround it.\n\nIn the shadow of this towering giant, one cannot help but feel small, yet also part of something greater. Rainier's majesty inspires awe, reverence, and a deep appreciation for the enduring strength and resilience of the natural world."
+

Teardown

PASSED test_anthropic_shorthand_streaming 0:00:02.972404

Setup

Call

Captured stderr call
[2024-10-23T17:52:20Z INFO  baml_events] Function TestAnthropicShorthand:
+    Client: anthropic/claude-3-haiku-20240307 (claude-3-haiku-20240307) - 2965ms. StopReason: "end_turn"
     ---PROMPT---
     [chat] user: Write a nice short story about Mt Rainier is tall
     
     ---LLM REPLY---
     Here is a short story about Mount Rainier:
     
-    Towering Majesty: The Tale of Mount Rainier
-    
-    Against the clear, azure sky, the majestic peak of Mount Rainier stood tall and proud, its snow-capped summit glistening in the warm summer sun. This iconic volcano, standing at an impressive 14,411 feet, was a testament to the awe-inspiring power of nature.
+    The Majestic Presence of Mount Rainier
     
-    For those who had the privilege of gazing upon this natural wonder, the experience was nothing short of breathtaking. The sheer scale of the mountain was humbling, dwarfing the surrounding landscape and serving as a constant reminder of the might and grandeur of the Earth's geological forces.
+    As the sun rose over the Pacific Northwest, its golden rays peeked out from behind the towering silhouette of Mount Rainier. Standing tall at 14,411 feet, the dormant volcano cast a powerful presence over the surrounding landscape.
     
-    As the day wore on, the light played across the mountain's slopes, casting ever-changing shadows and highlights that captivated the senses. Hikers and adventurers trekked through the lush, verdant forests that clung to the lower reaches of the mountain, their eyes drawn upwards to the towering, snow-covered peak that seemed to reach for the heavens.
+    Sarah stood in awe, taking in the breathtaking sight. She had seen pictures of the mountain before, but nothing could have prepared her for the sheer scale and grandeur of seeing it in person. The snow-capped peak seemed to pierce the sky, a testament to the incredible forces that had shaped the land over millions of years.
     
-    For those who had the opportunity to explore the mountain's trails and glaciers, the experience was one of profound connection with the natural world. The challenges of the climb, the crisp, clean air, and the stunning vistas all combined to create a sense of wonder and reverence that lingered long after the journey had ended.
+    Capturing the moment with her camera, Sarah felt a sense of humility wash over her. This mountain, with its glaciers, forests, and alpine meadows, had witnessed the passage of time, surviving countless storms and natural upheavals. It was a living, breathing monument to the enduring power of nature.
     
-    Whether viewed from afar or experienced firsthand, Mount Rainier stood as a testament to the enduring power and beauty of our planet. Its towering presence, a true marvel of the natural world, inspired awe and wonder in all who encountered it, reminding us of the boundless potential of the world we inhabit.
+    As she continued her hike, Sarah couldn't help but feel a deep connection to the mountain. Its towering presence served as a reminder of the beauty and wonder that still exists in the world, even in the face of the many challenges we face. It was a humbling and inspiring experience, one that would stay with her long after she had returned home.
     ---Parsed Response (string)---
-    "Here is a short story about Mount Rainier:\n\nTowering Majesty: The Tale of Mount Rainier\n\nAgainst the clear, azure sky, the majestic peak of Mount Rainier stood tall and proud, its snow-capped summit glistening in the warm summer sun. This iconic volcano, standing at an impressive 14,411 feet, was a testament to the awe-inspiring power of nature.\n\nFor those who had the privilege of gazing upon this natural wonder, the experience was nothing short of breathtaking. The sheer scale of the mountain was humbling, dwarfing the surrounding landscape and serving as a constant reminder of the might and grandeur of the Earth's geological forces.\n\nAs the day wore on, the light played across the mountain's slopes, casting ever-changing shadows and highlights that captivated the senses. Hikers and adventurers trekked through the lush, verdant forests that clung to the lower reaches of the mountain, their eyes drawn upwards to the towering, snow-covered peak that seemed to reach for the heavens.\n\nFor those who had the opportunity to explore the mountain's trails and glaciers, the experience was one of profound connection with the natural world. The challenges of the climb, the crisp, clean air, and the stunning vistas all combined to create a sense of wonder and reverence that lingered long after the journey had ended.\n\nWhether viewed from afar or experienced firsthand, Mount Rainier stood as a testament to the enduring power and beauty of our planet. Its towering presence, a true marvel of the natural world, inspired awe and wonder in all who encountered it, reminding us of the boundless potential of the world we inhabit."
-

Teardown

PASSED test_fallback_to_shorthand 0:00:00.842871

Setup

Call

Captured stderr call
[2024-10-21T21:10:42Z INFO  baml_events] Function TestFallbackToShorthand:
+    "Here is a short story about Mount Rainier:\n\nThe Majestic Presence of Mount Rainier\n\nAs the sun rose over the Pacific Northwest, its golden rays peeked out from behind the towering silhouette of Mount Rainier. Standing tall at 14,411 feet, the dormant volcano cast a powerful presence over the surrounding landscape.\n\nSarah stood in awe, taking in the breathtaking sight. She had seen pictures of the mountain before, but nothing could have prepared her for the sheer scale and grandeur of seeing it in person. The snow-capped peak seemed to pierce the sky, a testament to the incredible forces that had shaped the land over millions of years.\n\nCapturing the moment with her camera, Sarah felt a sense of humility wash over her. This mountain, with its glaciers, forests, and alpine meadows, had witnessed the passage of time, surviving countless storms and natural upheavals. It was a living, breathing monument to the enduring power of nature.\n\nAs she continued her hike, Sarah couldn't help but feel a deep connection to the mountain. Its towering presence served as a reminder of the beauty and wonder that still exists in the world, even in the face of the many challenges we face. It was a humbling and inspiring experience, one that would stay with her long after she had returned home."
+

Teardown

PASSED test_fallback_to_shorthand 0:00:01.118485

Setup

Call

Captured stderr call
[2024-10-23T17:52:21Z INFO  baml_events] Function TestFallbackToShorthand:
     (1 other previous tries)
-    Client: openai/gpt-4o-mini (gpt-4o-mini-2024-07-18) - 590ms. StopReason: stop
+    Client: openai/gpt-4o-mini (gpt-4o-mini-2024-07-18) - 879ms. StopReason: stop
     ---PROMPT---
     [chat] system: Say a haiku about Mt Rainier is tall.
     
     ---LLM REPLY---
-    Majestic it looms,  
-    Snow-capped peak kisses the sky,  
-    Nature’s grandest gift.
+    In the sky so grand,  
+    Snow-capped peaks in silence stand,  
+    Mt. Rainier's proud.
     ---Parsed Response (string)---
-    "Majestic it looms,  \nSnow-capped peak kisses the sky,  \nNature’s grandest gift."
-

Teardown

PASSED test_aws_streaming 0:00:02.085835

Setup

Call

Captured stderr call
[2024-10-21T21:10:42Z WARN  aws_runtime::env_config::normalize] section [Connection 1] ignored; config must be in the AWS config file rather than the credentials file
-[2024-10-21T21:10:42Z INFO  aws_config::meta::region] load_region; provider=EnvironmentVariableRegionProvider { env: Env(Real) }
-[2024-10-21T21:10:44Z INFO  baml_events] Function TestAws:
-    Client: AwsBedrock (anthropic.claude-3-haiku-20240307-v1:0) - 2078ms. StopReason: unknown
+    "In the sky so grand,  \nSnow-capped peaks in silence stand,  \nMt. Rainier's proud."
+

Teardown

PASSED test_aws_streaming 0:00:02.405077

Setup

Call

Captured stderr call
[2024-10-23T17:52:21Z WARN  aws_runtime::env_config::normalize] section [Connection 1] ignored; config must be in the AWS config file rather than the credentials file
+[2024-10-23T17:52:21Z INFO  aws_config::meta::region] load_region; provider=EnvironmentVariableRegionProvider { env: Env(Real) }
+[2024-10-23T17:52:23Z INFO  baml_events] Function TestAws:
+    Client: AwsBedrock (anthropic.claude-3-haiku-20240307-v1:0) - 2393ms. StopReason: unknown
     ---PROMPT---
     [chat] user: Write a nice short story about Mt Rainier is tall
     
     ---LLM REPLY---
     Here is a short story about Mt. Rainier:
     
-    Towering over the land, Mt. Rainier stands tall and majestic. Its snow-capped peak rises up into the clear, blue sky, commanding the attention of all who gaze upon it.
+    Towering Majesty
     
-    For the people who live in the shadow of this mighty mountain, it is a constant and comforting presence. They are awed by its sheer size and grandeur, a reminder of the raw
+    As the sun rose over the rugged Cascade Range, its golden rays illuminated the majestic peak of Mount Rainier. Standing at an imposing 14,411 feet, the dormant volcano commanded awe and reverence from all who laid eyes upon it.
+    
+    Emily gazed up at the snow-capped mountain, her breath catching in her throat. She ha
     ---Parsed Response (string)---
-    "Here is a short story about Mt. Rainier:\n\nTowering over the land, Mt. Rainier stands tall and majestic. Its snow-capped peak rises up into the clear, blue sky, commanding the attention of all who gaze upon it.\n\nFor the people who live in the shadow of this mighty mountain, it is a constant and comforting presence. They are awed by its sheer size and grandeur, a reminder of the raw"
-

Teardown

PASSED test_streaming 0:00:04.434076

Setup

Call

Captured stderr call
[2024-10-21T21:10:49Z INFO  baml_events] Function PromptTestStreaming:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 4423ms. StopReason: stop
+    "Here is a short story about Mt. Rainier:\n\nTowering Majesty\n\nAs the sun rose over the rugged Cascade Range, its golden rays illuminated the majestic peak of Mount Rainier. Standing at an imposing 14,411 feet, the dormant volcano commanded awe and reverence from all who laid eyes upon it.\n\nEmily gazed up at the snow-capped mountain, her breath catching in her throat. She ha"
+

Teardown

PASSED test_streaming 0:00:04.877348

Setup

Call

Captured stderr call
[2024-10-23T17:52:28Z INFO  baml_events] Function PromptTestStreaming:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 4866ms. StopReason: stop
     ---PROMPT---
     [chat] system: Tell me a short story about Programming languages are fun to create
     
     ---LLM REPLY---
-    Once upon a time, in a world where creativity and innovation ruled supreme, a group of ambitious developers and computer scientists set out to create their own programming language. They were determined to push the boundaries of what was possible and make a language that was not only powerful and efficient but also fun and intuitive to use.
+    Once upon a time, in a land of computer geniuses and coding wizards, there lived a young programmer named Lily. Lily had always been fascinated by the world of programming languages and dreamed of creating her very own one day.
     
-    As they embarked on their journey, they brought together their diverse skills and expertise to brainstorm and design the perfect programming language. They spent countless hours discussing different features, syntax, and paradigms, experimenting with new ideas and testing them out in real-world scenarios.
+    With determination and passion driving her, Lily set out on her journey to create a unique and innovative programming language. She spent countless hours experimenting with different syntaxes, keywords, and features, experimenting and refining her creation every step of the way. Along the way, she encountered challenges and setbacks, but she persevered, fueled by her love for coding and creativity.
     
-    Through trial and error, they encountered many challenges and setbacks along the way. But instead of giving up, they persisted and learned from their mistakes, constantly refining and improving their creation until it was just right.
+    After many months of hard work, Lily finally unveiled her masterpiece - a programming language like no other. It was elegant, powerful, and incredibly versatile, allowing programmers to write code in ways they had never imagined before. The language quickly gained popularity and recognition in the programming community, earning Lily a reputation as a programming genius.
     
-    Finally, after months of hard work and dedication, they unveiled their masterpiece to the world - a programming language that was unlike anything that had ever been seen before. It was elegant, flexible, and incredibly user-friendly, with a clean and concise syntax that made coding a joy.
+    But more than the recognition and success, what truly brought joy to Lily's heart was the sheer thrill of creating something new and innovative. Programming languages had always been her passion, and now she had the opportunity to share her love with the world.
     
-    Programmers from all corners of the globe were excited to try out this new language, and soon it became a sensation, gaining a loyal following of enthusiasts and contributors who were eager to help it grow and evolve.
+    As she continued to refine and improve her language, Lily knew that the possibilities were endless. With each new feature and update, she pushed the boundaries of what was possible in the world of programming languages, always striving to make coding more accessible, enjoyable, and fun for all.
     
-    And so, the creators of this remarkable programming language basked in the glow of their success, proud of what they had achieved and excited to see where their creation would take them next. For in the world of programming, the possibilities were endless, and there was always something new and exciting just waiting to be created.
+    And so, Lily's journey as a programming language creator had only just begun, with a whole world of exciting possibilities and adventures awaiting her. For her, programming languages were not just a tool, but a canvas on which to paint her dreams and ideas, a world of endless creativity and imagination. And she knew that as long as she had her trusty keyboard and a spark of inspiration, there would be no limit to what she could achieve.
     ---Parsed Response (string)---
-    "Once upon a time, in a world where creativity and innovation ruled supreme, a group of ambitious developers and computer scientists set out to create their own programming language. They were determined to push the boundaries of what was possible and make a language that was not only powerful and efficient but also fun and intuitive to use.\n\nAs they embarked on their journey, they brought together their diverse skills and expertise to brainstorm and design the perfect programming language. They spent countless hours discussing different features, syntax, and paradigms, experimenting with new ideas and testing them out in real-world scenarios.\n\nThrough trial and error, they encountered many challenges and setbacks along the way. But instead of giving up, they persisted and learned from their mistakes, constantly refining and improving their creation until it was just right.\n\nFinally, after months of hard work and dedication, they unveiled their masterpiece to the world - a programming language that was unlike anything that had ever been seen before. It was elegant, flexible, and incredibly user-friendly, with a clean and concise syntax that made coding a joy.\n\nProgrammers from all corners of the globe were excited to try out this new language, and soon it became a sensation, gaining a loyal following of enthusiasts and contributors who were eager to help it grow and evolve.\n\nAnd so, the creators of this remarkable programming language basked in the glow of their success, proud of what they had achieved and excited to see where their creation would take them next. For in the world of programming, the possibilities were endless, and there was always something new and exciting just waiting to be created."
-

Teardown

PASSED test_streaming_uniterated 0:00:03.787408

Setup

Call

Captured stderr call
[2024-10-21T21:10:52Z INFO  baml_events] Function PromptTestStreaming:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 3778ms. StopReason: stop
+    "Once upon a time, in a land of computer geniuses and coding wizards, there lived a young programmer named Lily. Lily had always been fascinated by the world of programming languages and dreamed of creating her very own one day.\n\nWith determination and passion driving her, Lily set out on her journey to create a unique and innovative programming language. She spent countless hours experimenting with different syntaxes, keywords, and features, experimenting and refining her creation every step of the way. Along the way, she encountered challenges and setbacks, but she persevered, fueled by her love for coding and creativity.\n\nAfter many months of hard work, Lily finally unveiled her masterpiece - a programming language like no other. It was elegant, powerful, and incredibly versatile, allowing programmers to write code in ways they had never imagined before. The language quickly gained popularity and recognition in the programming community, earning Lily a reputation as a programming genius.\n\nBut more than the recognition and success, what truly brought joy to Lily's heart was the sheer thrill of creating something new and innovative. Programming languages had always been her passion, and now she had the opportunity to share her love with the world.\n\nAs she continued to refine and improve her language, Lily knew that the possibilities were endless. With each new feature and update, she pushed the boundaries of what was possible in the world of programming languages, always striving to make coding more accessible, enjoyable, and fun for all.\n\nAnd so, Lily's journey as a programming language creator had only just begun, with a whole world of exciting possibilities and adventures awaiting her. For her, programming languages were not just a tool, but a canvas on which to paint her dreams and ideas, a world of endless creativity and imagination. And she knew that as long as she had her trusty keyboard and a spark of inspiration, there would be no limit to what she could achieve."
+

Teardown

PASSED test_streaming_uniterated 0:00:03.721914

Setup

Call

Captured stderr call
[2024-10-23T17:52:32Z INFO  baml_events] Function PromptTestStreaming:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 3714ms. StopReason: stop
     ---PROMPT---
     [chat] system: Tell me a short story about The color blue makes me sad
     
     ---LLM REPLY---
-    Once there was a young girl named Lily who had always felt an inexplicable sadness whenever she saw the color blue. No matter if it was the clear blue skies on a sunny day or the deep blue ocean waves crashing on the shore, the sight of blue always filled her heart with a heavy feeling.
+    Once there was a young girl named Lily who had always been captivated by the color blue. She found solace in the calming hue of the sky and the peaceful depths of the ocean. Blue, to her, represented tranquility and serenity.
     
-    One day, as Lily walked through a park, she came across a beautiful blue butterfly fluttering among the flowers. Its wings shimmered in the sunlight, casting a mesmerizing blue hue all around. Lily couldn't help but feel a pang of sadness wash over her once again.
+    However, as Lily grew older, she began to associate the color blue with a deep sense of sadness. It all started with a heart-wrenching breakup that left her feeling inconsolable. The blue sky that used to bring her comfort now seemed to mock her with its vastness and emptiness.
     
-    Curious, she decided to sit on a nearby bench and watch the butterfly closely. As she observed its graceful movements and delicate features, Lily realized that the blue color wasn't the source of her sadness. Instead, it was the fleeting nature of beauty and the inevitability of change that made her heart ache.
+    Everywhere she looked, she saw shades of blue that reminded her of the pain she felt inside. The color that once brought her joy now only served as a constant reminder of her sorrow. She couldn't escape it, as it seemed to be everywhere she turned.
     
-    With this realization, Lily embraced her feelings of melancholy and allowed herself to appreciate the fleeting beauty of the blue butterfly. She understood that sadness was simply a part of life, just like the color blue, and that it was okay to feel both joy and sorrow in equal measure.
+    But as time passed, Lily began to realize that the color blue didn't have to be a symbol of sadness. Instead, she learned to embrace it as a reminder of the strength she gained through her struggles. With each passing day, the color blue began to lose its grip on her, and she found herself feeling lighter and more at peace.
     
-    From that day on, whenever Lily saw the color blue, she didn't shy away from it but instead welcomed it as a reminder that life was a delicate balance of light and dark, joy and sorrow. And though the color blue still made her feel sad at times, she knew that it was only because it held a mirror to her own fleeting emotions and experiences.
+    Lily discovered that the color blue was not just a representation of sadness, but also of healing and resilience. And as she moved forward with a renewed sense of hope, she found that the color blue no longer made her sad, but instead inspired her to keep pushing forward, no matter what life threw her way.
     ---Parsed Response (string)---
-    "Once there was a young girl named Lily who had always felt an inexplicable sadness whenever she saw the color blue. No matter if it was the clear blue skies on a sunny day or the deep blue ocean waves crashing on the shore, the sight of blue always filled her heart with a heavy feeling.\n\nOne day, as Lily walked through a park, she came across a beautiful blue butterfly fluttering among the flowers. Its wings shimmered in the sunlight, casting a mesmerizing blue hue all around. Lily couldn't help but feel a pang of sadness wash over her once again.\n\nCurious, she decided to sit on a nearby bench and watch the butterfly closely. As she observed its graceful movements and delicate features, Lily realized that the blue color wasn't the source of her sadness. Instead, it was the fleeting nature of beauty and the inevitability of change that made her heart ache.\n\nWith this realization, Lily embraced her feelings of melancholy and allowed herself to appreciate the fleeting beauty of the blue butterfly. She understood that sadness was simply a part of life, just like the color blue, and that it was okay to feel both joy and sorrow in equal measure.\n\nFrom that day on, whenever Lily saw the color blue, she didn't shy away from it but instead welcomed it as a reminder that life was a delicate balance of light and dark, joy and sorrow. And though the color blue still made her feel sad at times, she knew that it was only because it held a mirror to her own fleeting emotions and experiences."
-

Teardown

PASSED test_streaming_sync 0:00:05.068735

Setup

Call

Captured stderr call
[2024-10-21T21:10:58Z INFO  baml_events] Function PromptTestStreaming:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 5059ms. StopReason: stop
+    "Once there was a young girl named Lily who had always been captivated by the color blue. She found solace in the calming hue of the sky and the peaceful depths of the ocean. Blue, to her, represented tranquility and serenity.\n\nHowever, as Lily grew older, she began to associate the color blue with a deep sense of sadness. It all started with a heart-wrenching breakup that left her feeling inconsolable. The blue sky that used to bring her comfort now seemed to mock her with its vastness and emptiness.\n\nEverywhere she looked, she saw shades of blue that reminded her of the pain she felt inside. The color that once brought her joy now only served as a constant reminder of her sorrow. She couldn't escape it, as it seemed to be everywhere she turned.\n\nBut as time passed, Lily began to realize that the color blue didn't have to be a symbol of sadness. Instead, she learned to embrace it as a reminder of the strength she gained through her struggles. With each passing day, the color blue began to lose its grip on her, and she found herself feeling lighter and more at peace.\n\nLily discovered that the color blue was not just a representation of sadness, but also of healing and resilience. And as she moved forward with a renewed sense of hope, she found that the color blue no longer made her sad, but instead inspired her to keep pushing forward, no matter what life threw her way."
+

Teardown

PASSED test_streaming_sync 0:00:03.709747

Setup

Call

Captured stderr call
[2024-10-23T17:52:35Z INFO  baml_events] Function PromptTestStreaming:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 3704ms. StopReason: stop
     ---PROMPT---
     [chat] system: Tell me a short story about Programming languages are fun to create
     
     ---LLM REPLY---
-    Once upon a time in the magical land of Techtopia, there was a young wizard named Alex who had a passion for creating new things. He was known throughout the kingdom for his knack for inventing innovative tools and gadgets. One day, Alex decided to embark on a new adventure – creating his very own programming language.
+    Once upon a time, there was a programmer named Lily who had always dreamed of creating her own programming language. She spent countless nights writing code, debugging, and testing different features.
     
-    With a twinkle in his eye and a determined spirit, Alex set out to weave together spells of syntax and logic to bring his vision to life. He spent countless hours experimenting with different patterns, symbols, and rules, carefully crafting each element of his language with precision and care.
+    As she delved deeper into her project, she found the process of designing a new language to be incredibly exciting and rewarding. Each new feature she added felt like solving a complex puzzle, and she was thrilled to see her language come to life.
     
-    As he delved deeper into the magical world of programming, Alex discovered the endless possibilities that his language could unlock. With just a few lines of code, he could summon powerful algorithms, manipulate data with ease, and create intricate systems that danced with complexity.
+    Lily's language, which she named SparkleScript, had a sleek and user-friendly syntax that made it easy for programmers to quickly write efficient code. She incorporated innovative concepts and unique functionalities, making SparkleScript stand out from other programming languages.
     
-    But it wasn't just the practical power of his language that captivated Alex – it was the sheer joy of crafting something entirely his own. Each new feature he added, each bug he fixed, was a triumph of creativity and ingenuity. And as he shared his creation with fellow wizards and sorcerers, he found a community of like-minded souls who shared his love for the art of coding.
+    As word spread about SparkleScript, more and more developers began using it in their projects. Lily was amazed by the positive feedback she received from the programming community and was thrilled to see her creation making an impact in the tech world.
     
-    In the end, Alex's programming language became a beloved tool in Techtopia, used by wizards and enchanters far and wide. And as he looked upon the sprawling world of possibilities that his creation had unleashed, he knew that he had found his true calling – for in the act of programming, he had found not just a hobby, but a source of endless wonder and delight. And so, the tale of the young wizard who created a programming language lived on in the hearts of those who dared to dream, to create, and to embrace the magic of coding.
+    Creating SparkleScript had been a labor of love for Lily, but the joy and excitement she felt throughout the process made it all worth it. She realized that programming languages were not just tools for developers, but also a form of creative expression that could bring joy and inspiration to others. From that day on, Lily continued to work on new projects, always eager to explore the endless possibilities of programming languages.
     ---Parsed Response (string)---
-    "Once upon a time in the magical land of Techtopia, there was a young wizard named Alex who had a passion for creating new things. He was known throughout the kingdom for his knack for inventing innovative tools and gadgets. One day, Alex decided to embark on a new adventure – creating his very own programming language.\n\nWith a twinkle in his eye and a determined spirit, Alex set out to weave together spells of syntax and logic to bring his vision to life. He spent countless hours experimenting with different patterns, symbols, and rules, carefully crafting each element of his language with precision and care.\n\nAs he delved deeper into the magical world of programming, Alex discovered the endless possibilities that his language could unlock. With just a few lines of code, he could summon powerful algorithms, manipulate data with ease, and create intricate systems that danced with complexity.\n\nBut it wasn't just the practical power of his language that captivated Alex – it was the sheer joy of crafting something entirely his own. Each new feature he added, each bug he fixed, was a triumph of creativity and ingenuity. And as he shared his creation with fellow wizards and sorcerers, he found a community of like-minded souls who shared his love for the art of coding.\n\nIn the end, Alex's programming language became a beloved tool in Techtopia, used by wizards and enchanters far and wide. And as he looked upon the sprawling world of possibilities that his creation had unleashed, he knew that he had found his true calling – for in the act of programming, he had found not just a hobby, but a source of endless wonder and delight. And so, the tale of the young wizard who created a programming language lived on in the hearts of those who dared to dream, to create, and to embrace the magic of coding."
-

Teardown

PASSED test_streaming_uniterated_sync 0:00:06.346556

Setup

Call

Captured stderr call
[2024-10-21T21:11:04Z INFO  baml_events] Function PromptTestStreaming:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 6339ms. StopReason: stop
+    "Once upon a time, there was a programmer named Lily who had always dreamed of creating her own programming language. She spent countless nights writing code, debugging, and testing different features.\n\nAs she delved deeper into her project, she found the process of designing a new language to be incredibly exciting and rewarding. Each new feature she added felt like solving a complex puzzle, and she was thrilled to see her language come to life.\n\nLily's language, which she named SparkleScript, had a sleek and user-friendly syntax that made it easy for programmers to quickly write efficient code. She incorporated innovative concepts and unique functionalities, making SparkleScript stand out from other programming languages.\n\nAs word spread about SparkleScript, more and more developers began using it in their projects. Lily was amazed by the positive feedback she received from the programming community and was thrilled to see her creation making an impact in the tech world.\n\nCreating SparkleScript had been a labor of love for Lily, but the joy and excitement she felt throughout the process made it all worth it. She realized that programming languages were not just tools for developers, but also a form of creative expression that could bring joy and inspiration to others. From that day on, Lily continued to work on new projects, always eager to explore the endless possibilities of programming languages."
+

Teardown

PASSED test_streaming_uniterated_sync 0:00:02.757098

Setup

Call

Captured stderr call
[2024-10-23T17:52:38Z INFO  baml_events] Function PromptTestStreaming:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 2751ms. StopReason: stop
     ---PROMPT---
     [chat] system: Tell me a short story about The color blue makes me sad
     
     ---LLM REPLY---
-    Once upon a time, there was a young girl named Lily who lived in a world where colors held great power. Each color had its own unique effect on people's emotions, and among them, blue was known to have a particularly strong influence.
-    
-    For Lily, the color blue always made her sad. It reminded her of the ocean on stormy days, of cold winter nights, and of all the tears she had shed in moments of despair. She tried to avoid anything blue - clothes, paintings, even the sky on cloudy days - but no matter how hard she tried, the color would always find a way to sneak into her life.
+    Once there was a young girl named Lily who had a special connection to the color blue. Every time she saw the color, a wave of sadness washed over her heart, leaving her feeling lost and alone.
     
-    One day, while taking a walk in the forest, Lily came across a beautiful blue flower. As she looked at it, a wave of sadness washed over her, and she felt tears welling up in her eyes. But instead of turning away, she decided to face her fear head-on.
+    Lily tried to avoid anything blue, but it seemed to follow her everywhere. The sky, the ocean, even the clothes people wore all reminded her of the deep sorrow she felt inside.
     
-    She knelt down next to the flower and studied its delicate petals, its vibrant hue standing out against the green backdrop of the forest. Slowly, she began to realize that the color blue was not only a reminder of sadness but also a symbol of beauty and strength. The flower did not make her sad because it was blue; it made her sad because it was a reminder of the beauty and strength that could be found even in the darkest of moments.
+    One day, while taking a walk in the park, Lily came across a beautiful blue butterfly fluttering around a patch of wildflowers. As she watched it dance in the sunlight, a sense of peace washed over her.
     
-    From that day on, whenever Lily saw the color blue, she no longer felt sadness overwhelming her. Instead, she saw it as a reminder that even in the midst of sorrow, there was always a glimmer of hope and beauty to be found. And with that newfound perspective, she embraced the color blue, knowing that it held a power far greater than sorrow - the power to bring light and joy even in the darkest of times.
+    She realized that the color blue didn't have to be a symbol of sadness. It could also be a reminder of the beauty and wonder in the world around her. From that day on, whenever Lily saw the color blue, she chose to focus on the joy and happiness it brought her, rather than the sadness it once represented.
     ---Parsed Response (string)---
-    "Once upon a time, there was a young girl named Lily who lived in a world where colors held great power. Each color had its own unique effect on people's emotions, and among them, blue was known to have a particularly strong influence.\n\nFor Lily, the color blue always made her sad. It reminded her of the ocean on stormy days, of cold winter nights, and of all the tears she had shed in moments of despair. She tried to avoid anything blue - clothes, paintings, even the sky on cloudy days - but no matter how hard she tried, the color would always find a way to sneak into her life.\n\nOne day, while taking a walk in the forest, Lily came across a beautiful blue flower. As she looked at it, a wave of sadness washed over her, and she felt tears welling up in her eyes. But instead of turning away, she decided to face her fear head-on.\n\nShe knelt down next to the flower and studied its delicate petals, its vibrant hue standing out against the green backdrop of the forest. Slowly, she began to realize that the color blue was not only a reminder of sadness but also a symbol of beauty and strength. The flower did not make her sad because it was blue; it made her sad because it was a reminder of the beauty and strength that could be found even in the darkest of moments.\n\nFrom that day on, whenever Lily saw the color blue, she no longer felt sadness overwhelming her. Instead, she saw it as a reminder that even in the midst of sorrow, there was always a glimmer of hope and beauty to be found. And with that newfound perspective, she embraced the color blue, knowing that it held a power far greater than sorrow - the power to bring light and joy even in the darkest of times."
-

Teardown

PASSED test_streaming_claude 0:00:01.282504

Setup

Call

Captured stdout call
msgs:
-Here's a haiku about Mt. Rainier being tall:
+    "Once there was a young girl named Lily who had a special connection to the color blue. Every time she saw the color, a wave of sadness washed over her heart, leaving her feeling lost and alone.\n\nLily tried to avoid anything blue, but it seemed to follow her everywhere. The sky, the ocean, even the clothes people wore all reminded her of the deep sorrow she felt inside.\n\nOne day, while taking a walk in the park, Lily came across a beautiful blue butterfly fluttering around a patch of wildflowers. As she watched it dance in the sunlight, a sense of peace washed over her.\n\nShe realized that the color blue didn't have to be a symbol of sadness. It could also be a reminder of the beauty and wonder in the world around her. From that day on, whenever Lily saw the color blue, she chose to focus on the joy and happiness it brought her, rather than the sadness it once represented."
+

Teardown

PASSED test_streaming_claude 0:00:00.964816

Setup

Call

Captured stdout call
msgs:
+Here's a haiku about Mt. Rainier:
 
-Rainier towers high
-Snowcapped peak touches the sky
-Nature's majesty
+Rainier stands proud, high
+Glacier crown touches the clouds
+Northwest sentinel
 final:
-Here's a haiku about Mt. Rainier being tall:
+Here's a haiku about Mt. Rainier:
 
-Rainier towers high
-Snowcapped peak touches the sky
-Nature's majesty
-
Captured stderr call
[2024-10-21T21:11:05Z INFO  baml_events] Function PromptTestClaude:
-    Client: Sonnet (claude-3-5-sonnet-20241022) - 1263ms. StopReason: "end_turn"
+Rainier stands proud, high
+Glacier crown touches the clouds
+Northwest sentinel
+
Captured stderr call
[2024-10-23T17:52:39Z INFO  baml_events] Function PromptTestClaude:
+    Client: Sonnet (claude-3-5-sonnet-20241022) - 942ms. StopReason: "end_turn"
     ---PROMPT---
     [chat] user: Tell me a haiku about Mt Rainier is tall
     
     ---LLM REPLY---
-    Here's a haiku about Mt. Rainier being tall:
+    Here's a haiku about Mt. Rainier:
     
-    Rainier towers high
-    Snowcapped peak touches the sky
-    Nature's majesty
+    Rainier stands proud, high
+    Glacier crown touches the clouds
+    Northwest sentinel
     ---Parsed Response (string)---
-    "Here's a haiku about Mt. Rainier being tall:\n\nRainier towers high\nSnowcapped peak touches the sky\nNature's majesty"
-

Teardown

PASSED test_streaming_gemini 0:00:09.485462

Setup

Call

Captured stdout call
msgs:
-Barnabus "Barney" Pepper, PhD in Fizziology, adjusted his spectacles and peered into the swirling concoction before him. It was a beautiful crimson, bubbling merrily in the glass beaker. He inhaled deeply, the sweet aroma of cherry and licorice tickling his nose. "Almost..." he murmured, tapping a finger against the glass.
-
-For years, Barney had chased the perfect fizz. Not just any fizz, mind you, but a Dr. Pepper fizz. It was a family legacy, passed down from generations of Peppers. His great-great-grandfather, Silas Pepper, had invented the original, a bubbly elixir that tasted like pure joy. But the recipe, passed down through generations, had faded with time, leaving only tantalizing hints of its former glory.
-
-Barney, armed with his PhD and an insatiable thirst for knowledge (and Dr. Pepper), was determined to recreate it. He'd scoured dusty libraries, deciphered cryptic tasting notes scribbled on parchment, even journeyed to the peak of Mount Fizzmore, rumored to hold the secret ingredient (it was ginger, and quite underwhelming, he might add).
-
-Tonight, he believed he had finally cracked the code. With trembling hands, he added a single drop of amaretto extract, the final piece of the puzzle. The concoction fizzed with renewed vigor, a vibrant symphony of bubbles dancing before his eyes.
-
-He took a sip, the sweet, spicy liquid exploding across his palate. It was like a thousand fireworks going off, each one a flavor note hitting all the right spots.  Tears welled up in his eyes.  "Eureka!" he cried, his voice echoing through the lab. "It's...it's perfect!"
-
-He had done it. He, Dr. Barnabus Pepper, had resurrected the legendary Dr. Pepper fizz. As he leaned back, savoring the moment, he knew this was only the beginning. He could already imagine the world, united by the joy of his perfect fizz. And it was a future sweeter than he could have ever imagined. 
-
-final:
-Barnabus "Barney" Pepper, PhD in Fizziology, adjusted his spectacles and peered into the swirling concoction before him. It was a beautiful crimson, bubbling merrily in the glass beaker. He inhaled deeply, the sweet aroma of cherry and licorice tickling his nose. "Almost..." he murmured, tapping a finger against the glass.
-
-For years, Barney had chased the perfect fizz. Not just any fizz, mind you, but a Dr. Pepper fizz. It was a family legacy, passed down from generations of Peppers. His great-great-grandfather, Silas Pepper, had invented the original, a bubbly elixir that tasted like pure joy. But the recipe, passed down through generations, had faded with time, leaving only tantalizing hints of its former glory.
-
-Barney, armed with his PhD and an insatiable thirst for knowledge (and Dr. Pepper), was determined to recreate it. He'd scoured dusty libraries, deciphered cryptic tasting notes scribbled on parchment, even journeyed to the peak of Mount Fizzmore, rumored to hold the secret ingredient (it was ginger, and quite underwhelming, he might add).
+    "Here's a haiku about Mt. Rainier:\n\nRainier stands proud, high\nGlacier crown touches the clouds\nNorthwest sentinel"
+

Teardown

FAILED test_streaming_gemini 0:00:01.190266

baml_py.BamlClientHttpError: LLM call failed: LLMErrorResponse { client: "Gemini", model: Some("gemini-1.5-pro-001"), prompt: Chat([RenderedChatMessage { role: "user", allow_duplicate_role: false, parts: [Text("Write a nice short story about Dr.Pepper")] }]), request_options: {"safetySettings": Object {"threshold": String("BLOCK_LOW_AND_ABOVE"), "category": String("HARM_CATEGORY_HATE_SPEECH")}}, start_time: SystemTime { tv_sec: 1729705959, tv_nsec: 580233000 }, latency: 1.1818055s, message: "Failed to parse event: Error(\"missing field `content`\", line: 1, column: 359)", code: UnsupportedResponse(2) }

Setup

Call

>   ???
 
-Tonight, he believed he had finally cracked the code. With trembling hands, he added a single drop of amaretto extract, the final piece of the puzzle. The concoction fizzed with renewed vigor, a vibrant symphony of bubbles dancing before his eyes.
+tests/test_functions.py:464: 
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+../../engine/language_client_python/python_src/baml_py/stream.py:81: in get_final_response
+    return self.__final_coerce((await asyncio.wrap_future(final)))
+_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
 
-He took a sip, the sweet, spicy liquid exploding across his palate. It was like a thousand fireworks going off, each one a flavor note hitting all the right spots.  Tears welled up in his eyes.  "Eureka!" he cried, his voice echoing through the lab. "It's...it's perfect!"
+x = 
 
-He had done it. He, Dr. Barnabus Pepper, had resurrected the legendary Dr. Pepper fizz. As he leaned back, savoring the moment, he knew this was only the beginning. He could already imagine the world, united by the joy of his perfect fizz. And it was a future sweeter than he could have ever imagined. 
+>     lambda x: cast(str, x.cast_to(types, types)),
+      self.__ctx_manager.get(),
+    )
+E   baml_py.BamlClientHttpError: LLM call failed: LLMErrorResponse { client: "Gemini", model: Some("gemini-1.5-pro-001"), prompt: Chat([RenderedChatMessage { role: "user", allow_duplicate_role: false, parts: [Text("Write a nice short story about Dr.Pepper")] }]), request_options: {"safetySettings": Object {"threshold": String("BLOCK_LOW_AND_ABOVE"), "category": String("HARM_CATEGORY_HATE_SPEECH")}}, start_time: SystemTime { tv_sec: 1729705959, tv_nsec: 580233000 }, latency: 1.1818055s, message: "Failed to parse event: Error(\"missing field `content`\", line: 1, column: 359)", code: UnsupportedResponse(2) }
 
-
Captured stderr call
[2024-10-21T21:11:15Z INFO  baml_events] Function TestGemini:
-    Client: Gemini (gemini-1.5-pro-001) - 9472ms. StopReason: Stop
+baml_client/async_client.py:4473: BamlClientHttpError
Captured stderr call
[2024-10-23T17:52:40Z WARN  baml_events] Function TestGemini:
+    Client: Gemini (gemini-1.5-pro-001) - 1181ms
     ---PROMPT---
     [chat] user: Write a nice short story about Dr.Pepper
     
-    ---LLM REPLY---
-    Barnabus "Barney" Pepper, PhD in Fizziology, adjusted his spectacles and peered into the swirling concoction before him. It was a beautiful crimson, bubbling merrily in the glass beaker. He inhaled deeply, the sweet aroma of cherry and licorice tickling his nose. "Almost..." he murmured, tapping a finger against the glass.
-    
-    For years, Barney had chased the perfect fizz. Not just any fizz, mind you, but a Dr. Pepper fizz. It was a family legacy, passed down from generations of Peppers. His great-great-grandfather, Silas Pepper, had invented the original, a bubbly elixir that tasted like pure joy. But the recipe, passed down through generations, had faded with time, leaving only tantalizing hints of its former glory.
-    
-    Barney, armed with his PhD and an insatiable thirst for knowledge (and Dr. Pepper), was determined to recreate it. He'd scoured dusty libraries, deciphered cryptic tasting notes scribbled on parchment, even journeyed to the peak of Mount Fizzmore, rumored to hold the secret ingredient (it was ginger, and quite underwhelming, he might add).
-    
-    Tonight, he believed he had finally cracked the code. With trembling hands, he added a single drop of amaretto extract, the final piece of the puzzle. The concoction fizzed with renewed vigor, a vibrant symphony of bubbles dancing before his eyes.
-    
-    He took a sip, the sweet, spicy liquid exploding across his palate. It was like a thousand fireworks going off, each one a flavor note hitting all the right spots.  Tears welled up in his eyes.  "Eureka!" he cried, his voice echoing through the lab. "It's...it's perfect!"
-    
-    He had done it. He, Dr. Barnabus Pepper, had resurrected the legendary Dr. Pepper fizz. As he leaned back, savoring the moment, he knew this was only the beginning. He could already imagine the world, united by the joy of his perfect fizz. And it was a future sweeter than he could have ever imagined. 
-    
-    ---Parsed Response (string)---
-    "Barnabus \"Barney\" Pepper, PhD in Fizziology, adjusted his spectacles and peered into the swirling concoction before him. It was a beautiful crimson, bubbling merrily in the glass beaker. He inhaled deeply, the sweet aroma of cherry and licorice tickling his nose. \"Almost...\" he murmured, tapping a finger against the glass.\n\nFor years, Barney had chased the perfect fizz. Not just any fizz, mind you, but a Dr. Pepper fizz. It was a family legacy, passed down from generations of Peppers. His great-great-grandfather, Silas Pepper, had invented the original, a bubbly elixir that tasted like pure joy. But the recipe, passed down through generations, had faded with time, leaving only tantalizing hints of its former glory.\n\nBarney, armed with his PhD and an insatiable thirst for knowledge (and Dr. Pepper), was determined to recreate it. He'd scoured dusty libraries, deciphered cryptic tasting notes scribbled on parchment, even journeyed to the peak of Mount Fizzmore, rumored to hold the secret ingredient (it was ginger, and quite underwhelming, he might add).\n\nTonight, he believed he had finally cracked the code. With trembling hands, he added a single drop of amaretto extract, the final piece of the puzzle. The concoction fizzed with renewed vigor, a vibrant symphony of bubbles dancing before his eyes.\n\nHe took a sip, the sweet, spicy liquid exploding across his palate. It was like a thousand fireworks going off, each one a flavor note hitting all the right spots.  Tears welled up in his eyes.  \"Eureka!\" he cried, his voice echoing through the lab. \"It's...it's perfect!\"\n\nHe had done it. He, Dr. Barnabus Pepper, had resurrected the legendary Dr. Pepper fizz. As he leaned back, savoring the moment, he knew this was only the beginning. He could already imagine the world, united by the joy of his perfect fizz. And it was a future sweeter than he could have ever imagined. \n"
-

Teardown

PASSED test_tracing_async_only 0:00:05.949957

Setup

Call

Captured stdout call
STATS TraceStats(failed=0, started=15, finalized=15, submitted=15, sent=15, done=15)
-
Captured stderr call
[2024-10-21T21:11:16Z INFO  baml_events] Function FnOutputClass:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 606ms. StopReason: stop
+    ---REQUEST OPTIONS---
+    safetySettings: {"threshold":"BLOCK_LOW_AND_ABOVE","category":"HARM_CATEGORY_HATE_SPEECH"}
+    ---ERROR (BadResponse 2)---
+    Failed to parse event: Error("missing field `content`", line: 1, column: 359)
+

Teardown

PASSED test_tracing_async_only 0:00:06.015227

Setup

Call

Captured stdout call
STATS TraceStats(failed=0, started=15, finalized=15, submitted=15, sent=15, done=15)
+
Captured stderr call
[2024-10-23T17:52:41Z INFO  baml_events] Function FnOutputClass:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 535ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return a JSON blob with this schema: 
     Answer in JSON using this schema:
@@ -841,16 +789,16 @@
     
     ---LLM REPLY---
     {
-      "prop1": "Hello",
+      "prop1": "Hello, JSON!",
       "prop2": 540
     }
     ---Parsed Response (class TestOutputClass)---
     {
-      "prop1": "Hello",
+      "prop1": "Hello, JSON!",
       "prop2": 540
     }
-[2024-10-21T21:11:17Z INFO  baml_events] Function FnOutputClass:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 618ms. StopReason: stop
+[2024-10-23T17:52:42Z INFO  baml_events] Function FnOutputClass:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 689ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return a JSON blob with this schema: 
     Answer in JSON using this schema:
@@ -865,16 +813,16 @@
     
     ---LLM REPLY---
     {
-      "prop1": "Hello, JSON!",
+      "prop1": "Hello, world!",
       "prop2": 540
     }
     ---Parsed Response (class TestOutputClass)---
     {
-      "prop1": "Hello, JSON!",
+      "prop1": "Hello, world!",
       "prop2": 540
     }
-[2024-10-21T21:11:17Z INFO  baml_events] Function FnOutputClass:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 702ms. StopReason: stop
+[2024-10-23T17:52:44Z INFO  baml_events] Function FnOutputClass:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 716ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return a JSON blob with this schema: 
     Answer in JSON using this schema:
@@ -889,16 +837,16 @@
     
     ---LLM REPLY---
     {
-      "prop1": "This is a sample string",
+      "prop1": "Hello, world!",
       "prop2": 540
     }
     ---Parsed Response (class TestOutputClass)---
     {
-      "prop1": "This is a sample string",
+      "prop1": "Hello, world!",
       "prop2": 540
     }
-[2024-10-21T21:11:20Z INFO  baml_events] Function FnOutputClass:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 553ms. StopReason: stop
+[2024-10-23T17:52:46Z INFO  baml_events] Function FnOutputClass:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 789ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return a JSON blob with this schema: 
     Answer in JSON using this schema:
@@ -913,17 +861,17 @@
     
     ---LLM REPLY---
     {
-      "prop1": "Hello, world!",
+      "prop1": "example",
       "prop2": 540
     }
     ---Parsed Response (class TestOutputClass)---
     {
-      "prop1": "Hello, world!",
+      "prop1": "example",
       "prop2": 540
     }
-

Teardown

PASSED test_tracing_sync 0:00:00.001106

Setup

Call

Teardown

PASSED test_tracing_thread_pool 0:00:01.368758

Setup

Call

Teardown

PASSED test_tracing_thread_pool_async 0:00:13.663521

Setup

Call

Teardown

PASSED test_tracing_async_gather 0:00:01.223600

Setup

Call

Teardown

PASSED test_tracing_async_gather_top_level 0:00:01.484650

Setup

Call

Teardown

PASSED test_dynamic 0:00:01.164092

Setup

Call

Captured stdout call
{'name': 'Harrison', 'hair_color': <Color.BLACK: 'BLACK'>, 'last_name': [], 'height': 1.83, 'hobbies': [<Hobby.SPORTS: 'SPORTS'>]}
-
Captured stderr call
[2024-10-21T21:11:40Z INFO  baml_events] Function ExtractPeople:
-    Client: GPT4 (gpt-4o-2024-08-06) - 1151ms. StopReason: stop
+

Teardown

PASSED test_tracing_sync 0:00:00.001272

Setup

Call

Teardown

PASSED test_tracing_thread_pool 0:00:01.379530

Setup

Call

Teardown

PASSED test_tracing_thread_pool_async 0:00:13.874848

Setup

Call

Teardown

PASSED test_tracing_async_gather 0:00:01.455782

Setup

Call

Teardown

PASSED test_tracing_async_gather_top_level 0:00:01.441900

Setup

Call

Teardown

PASSED test_dynamic 0:00:01.275246

Setup

Call

Captured stdout call
{'name': 'Harrison', 'hair_color': <Color.BLACK: 'BLACK'>, 'last_name': [], 'height': 1.8288, 'hobbies': [<Hobby.SPORTS: 'SPORTS'>]}
+
Captured stderr call
[2024-10-23T17:53:06Z INFO  baml_events] Function ExtractPeople:
+    Client: GPT4 (gpt-4o-2024-08-06) - 1263ms. StopReason: stop
     ---PROMPT---
     [chat] system: 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.
     
@@ -950,7 +898,7 @@
         "name": "Harrison",
         "hair_color": "BLACK",
         "last_name": null,
-        "height": 1.83,
+        "height": 1.8288,
         "hobbies": ["sports"]
       }
     ]
@@ -961,16 +909,16 @@
         "name": "Harrison",
         "hair_color": "BLACK",
         "last_name": [],
-        "height": 1.83,
+        "height": 1.8288,
         "hobbies": [
           "SPORTS"
         ]
       }
     ]
-

Teardown

PASSED test_dynamic_class_output 0:00:01.038064

Setup

Call

Captured stdout call
[]
+

Teardown

PASSED test_dynamic_class_output 0:00:00.992172

Setup

Call

Captured stdout call
[]
 {"hair_color":"black"}
-
Captured stderr call
[2024-10-21T21:11:40Z INFO  baml_events] Function MyFunc:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 479ms. StopReason: stop
+
Captured stderr call
[2024-10-23T17:53:06Z INFO  baml_events] Function MyFunc:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 540ms. StopReason: stop
     ---PROMPT---
     [chat] system: Given a string, extract info using the schema:
     
@@ -989,8 +937,8 @@
     {
       "hair_color": "black"
     }
-[2024-10-21T21:11:41Z INFO  baml_events] Function MyFunc:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 545ms. StopReason: stop
+[2024-10-23T17:53:07Z INFO  baml_events] Function MyFunc:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 440ms. StopReason: stop
     ---PROMPT---
     [chat] system: Given a string, extract info using the schema:
     
@@ -1009,9 +957,9 @@
     {
       "hair_color": "black"
     }
-

Teardown

PASSED test_dynamic_class_nested_output_no_stream 0:00:01.023474

Setup

Call

Captured stdout call
{"name":{"first_name":"Mark","last_name":"Gonzalez","middle_name":null},"address":null,"hair_color":"black","height":6.0}
-
Captured stderr call
[2024-10-21T21:11:42Z INFO  baml_events] Function MyFunc:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 1013ms. StopReason: stop
+

Teardown

PASSED test_dynamic_class_nested_output_no_stream 0:00:01.194362

Setup

Call

Captured stdout call
{"name":{"first_name":"Mark","last_name":"Gonzalez","middle_name":null},"address":null,"hair_color":"black","height":6.0}
+
Captured stderr call
[2024-10-23T17:53:08Z INFO  baml_events] Function MyFunc:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 1185ms. StopReason: stop
     ---PROMPT---
     [chat] system: Given a string, extract info using the schema:
     
@@ -1052,7 +1000,7 @@
       "hair_color": "black",
       "height": 6.0
     }
-

Teardown

PASSED test_dynamic_class_nested_output_stream 0:00:00.868856

Setup

Call

Captured stdout call
streamed  name=None hair_color=None
+

Teardown

PASSED test_dynamic_class_nested_output_stream 0:00:00.918159

Setup

Call

Captured stdout call
streamed  name=None hair_color=None
 streamed  {'name': None, 'hair_color': None}
 streamed  name=None hair_color=None
 streamed  {'name': None, 'hair_color': None}
@@ -1129,8 +1077,8 @@
 streamed  name={'first_name': 'Mark', 'last_name': 'Gonzalez'} hair_color='black'
 streamed  {'name': {'first_name': 'Mark', 'last_name': 'Gonzalez'}, 'hair_color': 'black'}
 {"name":{"first_name":"Mark","last_name":"Gonzalez"},"hair_color":"black"}
-
Captured stderr call
[2024-10-21T21:11:42Z INFO  baml_events] Function MyFunc:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 860ms. StopReason: stop
+
Captured stderr call
[2024-10-23T17:53:09Z INFO  baml_events] Function MyFunc:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 909ms. StopReason: stop
     ---PROMPT---
     [chat] system: Given a string, extract info using the schema:
     
@@ -1161,7 +1109,7 @@
       },
       "hair_color": "black"
     }
-

Teardown

PASSED test_stream_dynamic_class_output 0:00:00.513415

Setup

Call

Captured stdout call
[]
+

Teardown

PASSED test_stream_dynamic_class_output 0:00:00.769215

Setup

Call

Captured stdout call
[]
 streamed  {'hair_color': '{'}
 streamed  {'hair_color': '{'}
 streamed  {'hair_color': '{\n  "'}
@@ -1178,8 +1126,8 @@
 final  hair_color='black'
 final  {'hair_color': 'black'}
 final  {"hair_color":"black"}
-
Captured stderr call
[2024-10-21T21:11:43Z INFO  baml_events] Function MyFunc:
-    Client: MyClient (gpt-4o-mini-2024-07-18) - 505ms. StopReason: stop
+
Captured stderr call
[2024-10-23T17:53:10Z INFO  baml_events] Function MyFunc:
+    Client: MyClient (gpt-4o-mini-2024-07-18) - 761ms. StopReason: stop
     ---PROMPT---
     [chat] system: Given a string, extract info using the schema:
     
@@ -1200,17 +1148,17 @@
     {
       "hair_color": "black"
     }
-

Teardown

PASSED test_dynamic_inputs_list2 0:00:01.259611

Setup

Call

Captured stderr call
[2024-10-21T21:11:44Z INFO  baml_events] Function DynamicListInputOutput:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 1251ms. StopReason: stop
+

Teardown

PASSED test_dynamic_inputs_list2 0:00:01.599661

Setup

Call

Captured stderr call
[2024-10-23T17:53:11Z INFO  baml_events] Function DynamicListInputOutput:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 1592ms. StopReason: stop
     ---PROMPT---
     [chat] system: Here is some input data:
     ----
     [{
         "new_key": "hi1",
+        "testKey": "myTest",
         "blah": {
             "nestedKey1": "nestedVal",
         },
-        "testKey": "myTest",
     }, {
         "new_key": "hi",
         "blah": {
@@ -1266,8 +1214,8 @@
         }
       }
     ]
-

Teardown

PASSED test_dynamic_types_enum 0:00:00.837452

Setup

Call

Captured stderr call
[2024-10-21T21:11:45Z INFO  baml_events] Function ExtractPeople:
-    Client: GPT4 (gpt-4o-2024-08-06) - 828ms. StopReason: stop
+

Teardown

PASSED test_dynamic_types_new_enum 0:00:00.814028

Setup

Call

Captured stderr call
[2024-10-23T17:53:12Z INFO  baml_events] Function ExtractPeople:
+    Client: GPT4 (gpt-4o-2024-08-06) - 805ms. StopReason: stop
     ---PROMPT---
     [chat] system: 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.
     
@@ -1297,8 +1245,27 @@
         "animalLiked": "GIRAFFE"
       }
     ]
-

Teardown

PASSED test_dynamic_literals 0:00:01.298448

Setup

Call

Captured stderr call
[2024-10-21T21:11:46Z INFO  baml_events] Function ExtractPeople:
-    Client: GPT4 (gpt-4o-2024-08-06) - 1290ms. StopReason: stop
+

Teardown

PASSED test_dynamic_types_existing_enum 0:00:00.505193

Setup

Call

Captured stderr call
[2024-10-23T17:53:13Z INFO  baml_events] Function ExtractHobby:
+    Client: GPT4 (gpt-4o-2024-08-06) - 497ms. StopReason: stop
+    ---PROMPT---
+    [chat] system: Answer with a JSON Array using this schema:
+    [
+      'SPORTS' or 'MUSIC' or 'READING' or 'Golfing'
+    ]
+    user: My name is Harrison. My hair is black and I'm 6 feet tall. golf and music are my favorite!.
+    
+    ---LLM REPLY---
+    [
+      "Golfing",
+      "MUSIC"
+    ]
+    ---Parsed Response (list<enum Hobby>)---
+    [
+      "Golfing",
+      "MUSIC"
+    ]
+

Teardown

PASSED test_dynamic_literals 0:00:00.944891

Setup

Call

Captured stderr call
[2024-10-23T17:53:14Z INFO  baml_events] Function ExtractPeople:
+    Client: GPT4 (gpt-4o-2024-08-06) - 936ms. StopReason: stop
     ---PROMPT---
     [chat] system: 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.
     
@@ -1328,23 +1295,23 @@
         "animalLiked": "GIRAFFE"
       }
     ]
-

Teardown

PASSED test_dynamic_inputs_list 0:00:01.175730

Setup

Call

Captured stderr call
[2024-10-21T21:11:48Z INFO  baml_events] Function DynamicListInputOutput:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 1166ms. StopReason: stop
+

Teardown

PASSED test_dynamic_inputs_list 0:00:01.568338

Setup

Call

Captured stderr call
[2024-10-23T17:53:15Z INFO  baml_events] Function DynamicListInputOutput:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 1557ms. StopReason: stop
     ---PROMPT---
     [chat] system: Here is some input data:
     ----
     [{
+        "testKey": "myTest",
+        "new_key": "hi",
         "blah": {
             "nestedKey1": "nestedVal",
         },
-        "testKey": "myTest",
-        "new_key": "hi",
     }, {
-        "testKey": "myTest",
         "new_key": "hi",
         "blah": {
             "nestedKey1": "nestedVal",
         },
+        "testKey": "myTest",
     }]
     ----
     
@@ -1394,12 +1361,12 @@
         }
       }
     ]
-

Teardown

PASSED test_dynamic_output_map 0:00:00.862678

Setup

Call

Captured stdout call
[]
-final  hair_color='black' attributes={'eye_color': 'blue', 'facial_hair': 'beard', 'height': '6 feet'}
-final  {'hair_color': 'black', 'attributes': {'eye_color': 'blue', 'facial_hair': 'beard', 'height': '6 feet'}}
-final  {"hair_color":"black","attributes":{"eye_color":"blue","facial_hair":"beard","height":"6 feet"}}
-
Captured stderr call
[2024-10-21T21:11:48Z INFO  baml_events] Function MyFunc:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 857ms. StopReason: stop
+

Teardown

PASSED test_dynamic_output_map 0:00:00.943212

Setup

Call

Captured stdout call
[]
+final  hair_color='black' attributes={'height': '6 feet', 'eye_color': 'blue', 'facial_hair': 'beard'}
+final  {'hair_color': 'black', 'attributes': {'height': '6 feet', 'eye_color': 'blue', 'facial_hair': 'beard'}}
+final  {"hair_color":"black","attributes":{"height":"6 feet","eye_color":"blue","facial_hair":"beard"}}
+
Captured stderr call
[2024-10-23T17:53:16Z INFO  baml_events] Function MyFunc:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 936ms. StopReason: stop
     ---PROMPT---
     [chat] system: Given a string, extract info using the schema:
     
@@ -1416,29 +1383,29 @@
     {
       "hair_color": "black",
       "attributes": {
+        "height": "6 feet",
         "eye_color": "blue",
-        "facial_hair": "beard",
-        "height": "6 feet"
+        "facial_hair": "beard"
       }
     }
     ---Parsed Response (class DynamicOutput)---
     {
       "hair_color": "black",
       "attributes": {
+        "height": "6 feet",
         "eye_color": "blue",
-        "facial_hair": "beard",
-        "height": "6 feet"
+        "facial_hair": "beard"
       }
     }
-

Teardown

PASSED test_dynamic_output_union 0:00:02.198647

Setup

Call

Captured stdout call
[]
-final  hair_color='black' attributes={'eye_color': 'blue', 'facial_hair': 'beard', 'age': '30'} height={'feet': 6.0, 'inches': None}
-final  {'hair_color': 'black', 'attributes': {'eye_color': 'blue', 'facial_hair': 'beard', 'age': '30'}, 'height': {'feet': 6.0, 'inches': None}}
-final  {"hair_color":"black","attributes":{"eye_color":"blue","facial_hair":"beard","age":"30"},"height":{"feet":6.0,"inches":null}}
+

Teardown

PASSED test_dynamic_output_union 0:00:02.932192

Setup

Call

Captured stdout call
[]
+final  hair_color='black' attributes={'eye_color': 'blue', 'facial_hair': 'beard'} height={'feet': 6.0, 'inches': None}
+final  {'hair_color': 'black', 'attributes': {'eye_color': 'blue', 'facial_hair': 'beard'}, 'height': {'feet': 6.0, 'inches': None}}
+final  {"hair_color":"black","attributes":{"eye_color":"blue","facial_hair":"beard"},"height":{"feet":6.0,"inches":null}}
 final  hair_color='black' attributes={'eye_color': 'blue', 'facial_hair': 'beard'} height={'meters': 1.8}
 final  {'hair_color': 'black', 'attributes': {'eye_color': 'blue', 'facial_hair': 'beard'}, 'height': {'meters': 1.8}}
 final  {"hair_color":"black","attributes":{"eye_color":"blue","facial_hair":"beard"},"height":{"meters":1.8}}
-
Captured stderr call
[2024-10-21T21:11:50Z INFO  baml_events] Function MyFunc:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 1170ms. StopReason: stop
+
Captured stderr call
[2024-10-23T17:53:18Z INFO  baml_events] Function MyFunc:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 1865ms. StopReason: stop
     ---PROMPT---
     [chat] system: Given a string, extract info using the schema:
     
@@ -1462,8 +1429,7 @@
       "hair_color": "black",
       "attributes": {
         "eye_color": "blue",
-        "facial_hair": "beard",
-        "age": "30"
+        "facial_hair": "beard"
       },
       "height": {
         "feet": 6,
@@ -1475,16 +1441,15 @@
       "hair_color": "black",
       "attributes": {
         "eye_color": "blue",
-        "facial_hair": "beard",
-        "age": "30"
+        "facial_hair": "beard"
       },
       "height": {
         "feet": 6.0,
         "inches": null
       }
     }
-[2024-10-21T21:11:51Z INFO  baml_events] Function MyFunc:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 1008ms. StopReason: stop
+[2024-10-23T17:53:19Z INFO  baml_events] Function MyFunc:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 1046ms. StopReason: stop
     ---PROMPT---
     [chat] system: Given a string, extract info using the schema:
     
@@ -1525,7 +1490,10 @@
         "meters": 1.8
       }
     }
-

Teardown

PASSED test_nested_class_streaming 0:00:04.822264

Setup

Call

Captured stdout call
streamed  {'prop1': None, 'prop2': None}
+

Teardown

PASSED test_nested_class_streaming 0:00:03.201873

Setup

Call

Captured stdout call
streamed  {'prop1': None, 'prop2': None}
+streamed  {'prop1': None, 'prop2': None}
+streamed  {'prop1': None, 'prop2': None}
+streamed  {'prop1': None, 'prop2': None}
 streamed  {'prop1': None, 'prop2': None}
 streamed  {'prop1': None, 'prop2': None}
 streamed  {'prop1': None, 'prop2': None}
@@ -1549,260 +1517,157 @@
 streamed  {'prop1': None, 'prop2': None}
 streamed  {'prop1': None, 'prop2': None}
 streamed  {'prop1': '', 'prop2': None}
-streamed  {'prop1': 'value', 'prop2': None}
-streamed  {'prop1': 'value1', 'prop2': None}
-streamed  {'prop1': 'value1', 'prop2': None}
-streamed  {'prop1': 'value1', 'prop2': None}
-streamed  {'prop1': 'value1', 'prop2': None}
-streamed  {'prop1': 'value1', 'prop2': None}
-streamed  {'prop1': 'value1', 'prop2': None}
-streamed  {'prop1': 'value1', 'prop2': None}
-streamed  {'prop1': 'value1', 'prop2': None}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': '', 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value', 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': None, 'inner': None}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': '', 'inner': None}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value', 'inner': None}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': None}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': None}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': None}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': None}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': None}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': None}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': None}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': None, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-streamed  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': None}}}
-final  {'prop1': 'value1', 'prop2': {'prop1': 'value2', 'prop2': 'value3', 'inner': {'prop2': 42, 'prop3': 3.14}}}
-
Captured stderr call
[2024-10-21T21:11:55Z INFO  baml_events] Function FnOutputClassNested:
-    Client: Ollama (llama2) - 4806ms. StopReason: stop
+streamed  {'prop1': 'Hello', 'prop2': None}
+streamed  {'prop1': 'Hello', 'prop2': None}
+streamed  {'prop1': 'Hello', 'prop2': None}
+streamed  {'prop1': 'Hello', 'prop2': None}
+streamed  {'prop1': 'Hello', 'prop2': None}
+streamed  {'prop1': 'Hello', 'prop2': None}
+streamed  {'prop1': 'Hello', 'prop2': None}
+streamed  {'prop1': 'Hello', 'prop2': None}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': None, 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': '', 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': None, 'inner': None}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': '', 'inner': None}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': None}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': None}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': None}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': None}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': None}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': None}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': None}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': None, 'prop3': None}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
+streamed  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': None}}}
+final  {'prop1': 'Hello', 'prop2': {'prop1': 'World', 'prop2': 'JSON', 'inner': {'prop2': 42, 'prop3': 3.14}}}
+
Captured stderr call
[2024-10-23T17:53:22Z INFO  baml_events] Function FnOutputClassNested:
+    Client: Ollama (llama2) - 3189ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return a made up json blob that matches this schema:
     Answer in JSON using this schema:
@@ -1822,50 +1687,44 @@
     JSON:
     
     ---LLM REPLY---
-    Here is a sample JSON blob that matches the provided schema:
-    ```json
+     Sure! Here is a made-up JSON blob that matches the schema you provided:
+    
     {
-      "prop1": "value1",
+      "prop1": "Hello",
       "prop2": {
-        "prop1": "value2",
-        "prop2": "value3",
+        "prop1": "World",
+        "prop2": "JSON",
         "inner": {
           "prop2": 42,
-          "prop3": 3.14,
+          "prop3": 3.14
         }
       }
     }
-    ```
-    Explanation:
-    
-    * `prop1` has a value of "value1".
-    * `prop2` is an object with three properties: `prop1`, `prop2`, and `inner`. The `prop1` property of `prop2` has a value of "value2", and the `prop2` property has a value of "value3".
-    * `inner` is an object with two properties: `prop2` and `prop3`. The `prop2` property has a value of 42, and the `prop3` property has a value of 3.14.
     
-    Note that the schema you provided defines a nested object with three levels of nesting (top-level `prop1`, inner `prop2`, and inner `inner`). The JSON blob I provided nested objects to match these levels of nesting.
+    Note that the schema specifies a string for `prop1`, an object for `prop2` with two properties `prop1` and `prop2`, and an inner object for `inner` with two properties `prop2` (which is an integer) and `prop3` (which is a floating-point number). I've satisfied these requirements by including the appropriate values in the JSON blob.
     ---Parsed Response (class TestClassNested)---
     {
-      "prop1": "value1",
+      "prop1": "Hello",
       "prop2": {
-        "prop1": "value2",
-        "prop2": "value3",
+        "prop1": "World",
+        "prop2": "JSON",
         "inner": {
           "prop2": 42,
           "prop3": 3.14
         }
       }
     }
-

Teardown

PASSED test_dynamic_client_with_openai 0:00:00.446947

Setup

Call

Captured stderr call
[2024-10-21T21:11:56Z INFO  baml_events] Function ExpectFailure:
-    Client: MyClient (gpt-3.5-turbo-0125) - 441ms. StopReason: stop
+

Teardown

PASSED test_dynamic_client_with_openai 0:00:00.544467

Setup

Call

Captured stderr call
[2024-10-23T17:53:23Z INFO  baml_events] Function ExpectFailure:
+    Client: MyClient (gpt-3.5-turbo-0125) - 542ms. StopReason: stop
     ---PROMPT---
     [chat] system: What is the capital of England?
     
     ---LLM REPLY---
-    London
+    The capital of England is London.
     ---Parsed Response (string)---
-    "London"
-

Teardown

PASSED test_dynamic_client_with_vertex_json_str_creds 0:00:01.309533

Setup

Call

Captured stderr call
[2024-10-21T21:11:57Z INFO  baml_events] Function ExpectFailure:
-    Client: MyClient () - 1305ms. StopReason: "STOP"
+    "The capital of England is London."
+

Teardown

PASSED test_dynamic_client_with_vertex_json_str_creds 0:00:00.970478

Setup

Call

Captured stderr call
[2024-10-23T17:53:24Z INFO  baml_events] Function ExpectFailure:
+    Client: MyClient () - 966ms. StopReason: "STOP"
     ---PROMPT---
     [chat] user: What is the capital of England?
     
@@ -1874,8 +1733,8 @@
     
     ---Parsed Response (string)---
     "The capital of England is **London**. \n"
-

Teardown

PASSED test_dynamic_client_with_vertex_json_object_creds 0:00:01.250145

Setup

Call

Captured stderr call
[2024-10-21T21:11:58Z INFO  baml_events] Function ExpectFailure:
-    Client: MyClient () - 1245ms. StopReason: "STOP"
+

Teardown

PASSED test_dynamic_client_with_vertex_json_object_creds 0:00:01.362261

Setup

Call

Captured stderr call
[2024-10-23T17:53:25Z INFO  baml_events] Function ExpectFailure:
+    Client: MyClient () - 1356ms. StopReason: "STOP"
     ---PROMPT---
     [chat] user: What is the capital of England?
     
@@ -1884,12 +1743,12 @@
     
     ---Parsed Response (string)---
     "The capital of England is **London**. \n"
-

Teardown

PASSED test_event_log_hook 0:00:01.406538

Setup

Call

Captured stdout call
Event log hook1: 
+

Teardown

PASSED test_event_log_hook 0:00:01.287641

Setup

Call

Captured stdout call
Event log hook1: 
 Event log event  BamlLogEvent {
     metadata: {
-        event_id: "fe0f41fd-d790-42ca-8d2e-12100ea30b23",
+        event_id: "5e70c857-b69e-489c-bd27-141e553260a1",
         parent_id: None,
-        root_event_id: "fe0f41fd-d790-42ca-8d2e-12100ea30b23"
+        root_event_id: "5e70c857-b69e-489c-bd27-141e553260a1"
     },
     prompt: "[
   {
@@ -1903,10 +1762,10 @@
 ]",
     raw_output: "["a", "b", "c"]",
     parsed_output: "["a", "b", "c"]",
-    start_time: "2024-10-21T21:11:59.240Z"
+    start_time: "2024-10-23T17:53:25.869Z"
 }
-
Captured stderr call
[2024-10-21T21:11:59Z INFO  baml_events] Function TestFnNamedArgsSingleStringList:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 669ms. StopReason: stop
+
Captured stderr call
[2024-10-23T17:53:26Z INFO  baml_events] Function TestFnNamedArgsSingleStringList:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 560ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return this value back to me: ["a", "b", "c"]
     
@@ -1914,7 +1773,7 @@
     ["a", "b", "c"]
     ---Parsed Response (string)---
     "[\"a\", \"b\", \"c\"]"
-

Teardown

PASSED test_aws_bedrock 0:00:02.002140

Setup

Call

Captured stdout call
streamed  'Here'
+

Teardown

PASSED test_aws_bedrock 0:00:02.756907

Setup

Call

Captured stdout call
streamed  'Here'
 streamed  'Here is'
 streamed  'Here is a'
 streamed  'Here is a short'
@@ -1926,129 +1785,126 @@
 streamed  'Here is a short story about lightning in a rock'
 streamed  'Here is a short story about lightning in a rock:'
 streamed  'Here is a short story about lightning in a rock:\n\nThe'
-streamed  'Here is a short story about lightning in a rock:\n\nThe Fallen'
-streamed  'Here is a short story about lightning in a rock:\n\nThe Fallen Star'
-streamed  'Here is a short story about lightning in a rock:\n\nThe Fallen Star\n\nAs the'
-streamed  'Here is a short story about lightning in a rock:\n\nThe Fallen Star\n\nAs the sun'
-streamed  'Here is a short story about lightning in a rock:\n\nThe Fallen Star\n\nAs the sun '
-streamed  'Here is a short story about lightning in a rock:\n\nThe Fallen Star\n\nAs the sun dippe'
-streamed  'Here is a short story about lightning in a rock:\n\nThe Fallen Star\n\nAs the sun dipped below'
-streamed  'Here is a short story about lightning in a rock:\n\nThe Fallen Star\n\nAs the sun dipped below the'
-streamed  're is a short story about lightning in a rock:\n\nThe Fallen Star\n\nAs the sun dipped below the horizon'
-streamed  'e is a short story about lightning in a rock:\n\nThe Fallen Star\n\nAs the sun dipped below the horizon,'
-streamed  'hort story about lightning in a rock:\n\nThe Fallen Star\n\nAs the sun dipped below the horizon, casting'
-streamed  'story about lightning in a rock:\n\nThe Fallen Star\n\nAs the sun dipped below the horizon, casting long'
-streamed  'out lightning in a rock:\n\nThe Fallen Star\n\nAs the sun dipped below the horizon, casting long shadows'
-streamed  'htning in a rock:\n\nThe Fallen Star\n\nAs the sun dipped below the horizon, casting long shadows across'
-streamed  'ng in a rock:\n\nThe Fallen Star\n\nAs the sun dipped below the horizon, casting long shadows across the'
-streamed  'in a rock:\n\nThe Fallen Star\n\nAs the sun dipped below the horizon, casting long shadows across the ru'
-streamed  'a rock:\n\nThe Fallen Star\n\nAs the sun dipped below the horizon, casting long shadows across the rugge'
-streamed  'The Fallen Star\n\nAs the sun dipped below the horizon, casting long shadows across the rugged terrain'
-streamed  'he Fallen Star\n\nAs the sun dipped below the horizon, casting long shadows across the rugged terrain,'
-streamed  ' Fallen Star\n\nAs the sun dipped below the horizon, casting long shadows across the rugged terrain, a'
-streamed  'n Star\n\nAs the sun dipped below the horizon, casting long shadows across the rugged terrain, a flash'
-streamed  'tar\n\nAs the sun dipped below the horizon, casting long shadows across the rugged terrain, a flash of'
-streamed  's the sun dipped below the horizon, casting long shadows across the rugged terrain, a flash of light'
-streamed  ' sun dipped below the horizon, casting long shadows across the rugged terrain, a flash of light pier'
-streamed  'un dipped below the horizon, casting long shadows across the rugged terrain, a flash of light pierce'
-streamed  'pped below the horizon, casting long shadows across the rugged terrain, a flash of light pierced the'
-streamed  ' the horizon, casting long shadows across the rugged terrain, a flash of light pierced the gathering'
-streamed  'zon, casting long shadows across the rugged terrain, a flash of light pierced the gathering darkness'
-streamed  'on, casting long shadows across the rugged terrain, a flash of light pierced the gathering darkness.'
-streamed  ', casting long shadows across the rugged terrain, a flash of light pierced the gathering darkness. A'
-streamed  'ting long shadows across the rugged terrain, a flash of light pierced the gathering darkness. A bolt'
-streamed  'g long shadows across the rugged terrain, a flash of light pierced the gathering darkness. A bolt of'
-streamed  'dows across the rugged terrain, a flash of light pierced the gathering darkness. A bolt of lightning'
-streamed  's the rugged terrain, a flash of light pierced the gathering darkness. A bolt of lightning seemingly'
-streamed  'e rugged terrain, a flash of light pierced the gathering darkness. A bolt of lightning seemingly eru'
-streamed  'ugged terrain, a flash of light pierced the gathering darkness. A bolt of lightning seemingly erupte'
-streamed  'terrain, a flash of light pierced the gathering darkness. A bolt of lightning seemingly erupted from'
-streamed  'ain, a flash of light pierced the gathering darkness. A bolt of lightning seemingly erupted from the'
-streamed  ' flash of light pierced the gathering darkness. A bolt of lightning seemingly erupted from the groun'
-streamed  'lash of light pierced the gathering darkness. A bolt of lightning seemingly erupted from the ground,'
-streamed  'of light pierced the gathering darkness. A bolt of lightning seemingly erupted from the ground, bran'
-streamed  'ght pierced the gathering darkness. A bolt of lightning seemingly erupted from the ground, branching'
-streamed  'pierced the gathering darkness. A bolt of lightning seemingly erupted from the ground, branching out'
-streamed  'rced the gathering darkness. A bolt of lightning seemingly erupted from the ground, branching out in'
-streamed  'ed the gathering darkness. A bolt of lightning seemingly erupted from the ground, branching out in a'
-streamed  'd the gathering darkness. A bolt of lightning seemingly erupted from the ground, branching out in a '
-streamed  'e gathering darkness. A bolt of lightning seemingly erupted from the ground, branching out in a dazz'
-streamed  'thering darkness. A bolt of lightning seemingly erupted from the ground, branching out in a dazzling'
-streamed  'darkness. A bolt of lightning seemingly erupted from the ground, branching out in a dazzling display'
-streamed  's. A bolt of lightning seemingly erupted from the ground, branching out in a dazzling display before'
-streamed  ' A bolt of lightning seemingly erupted from the ground, branching out in a dazzling display before f'
-streamed  'lt of lightning seemingly erupted from the ground, branching out in a dazzling display before fading'
-streamed  ' lightning seemingly erupted from the ground, branching out in a dazzling display before fading into'
-streamed  'htning seemingly erupted from the ground, branching out in a dazzling display before fading into the'
-streamed  ' seemingly erupted from the ground, branching out in a dazzling display before fading into the night'
-streamed  'seemingly erupted from the ground, branching out in a dazzling display before fading into the night.'
-streamed  'eemingly erupted from the ground, branching out in a dazzling display before fading into the night. '
-streamed  'erupted from the ground, branching out in a dazzling display before fading into the night. \n\nCurious'
-streamed  'rupted from the ground, branching out in a dazzling display before fading into the night. \n\nCurious,'
-streamed  'pted from the ground, branching out in a dazzling display before fading into the night. \n\nCurious, a'
-streamed  'rom the ground, branching out in a dazzling display before fading into the night. \n\nCurious, a young'
-streamed  'm the ground, branching out in a dazzling display before fading into the night. \n\nCurious, a young h'
-streamed  'e ground, branching out in a dazzling display before fading into the night. \n\nCurious, a young hiker'
-streamed  'und, branching out in a dazzling display before fading into the night. \n\nCurious, a young hiker made'
-streamed  ' branching out in a dazzling display before fading into the night. \n\nCurious, a young hiker made her'
-streamed  'nching out in a dazzling display before fading into the night. \n\nCurious, a young hiker made her way'
-streamed  'out in a dazzling display before fading into the night. \n\nCurious, a young hiker made her way across'
-streamed  'in a dazzling display before fading into the night. \n\nCurious, a young hiker made her way across the'
-streamed  'azzling display before fading into the night. \n\nCurious, a young hiker made her way across the rocky'
-streamed  'splay before fading into the night. \n\nCurious, a young hiker made her way across the rocky landscape'
-streamed  'play before fading into the night. \n\nCurious, a young hiker made her way across the rocky landscape,'
-streamed  ' before fading into the night. \n\nCurious, a young hiker made her way across the rocky landscape, her'
-streamed  're fading into the night. \n\nCurious, a young hiker made her way across the rocky landscape, her foot'
-streamed  ' fading into the night. \n\nCurious, a young hiker made her way across the rocky landscape, her footst'
-streamed  'ding into the night. \n\nCurious, a young hiker made her way across the rocky landscape, her footsteps'
-streamed  'ng into the night. \n\nCurious, a young hiker made her way across the rocky landscape, her footsteps c'
-streamed  'into the night. \n\nCurious, a young hiker made her way across the rocky landscape, her footsteps crun'
-streamed  'the night. \n\nCurious, a young hiker made her way across the rocky landscape, her footsteps crunching'
-streamed  ' night. \n\nCurious, a young hiker made her way across the rocky landscape, her footsteps crunching on'
-streamed  'ht. \n\nCurious, a young hiker made her way across the rocky landscape, her footsteps crunching on the'
-streamed  ' \n\nCurious, a young hiker made her way across the rocky landscape, her footsteps crunching on the gr'
-streamed  'urious, a young hiker made her way across the rocky landscape, her footsteps crunching on the gravel'
-streamed  'urious, a young hiker made her way across the rocky landscape, her footsteps crunching on the gravel'
-streamed  'urious, a young hiker made her way across the rocky landscape, her footsteps crunching on the gravel'
-streamed  'urious, a young hiker made her way across the rocky landscape, her footsteps crunching on the gravel'
+streamed  'Here is a short story about lightning in a rock:\n\nThe Spark'
+streamed  'Here is a short story about lightning in a rock:\n\nThe Spark Within'
+streamed  'Here is a short story about lightning in a rock:\n\nThe Spark Within\n\nJenny'
+streamed  'Here is a short story about lightning in a rock:\n\nThe Spark Within\n\nJenny st'
+streamed  'Here is a short story about lightning in a rock:\n\nThe Spark Within\n\nJenny strol'
+streamed  'Here is a short story about lightning in a rock:\n\nThe Spark Within\n\nJenny strolle'
+streamed  'Here is a short story about lightning in a rock:\n\nThe Spark Within\n\nJenny strolled along'
+streamed  'Here is a short story about lightning in a rock:\n\nThe Spark Within\n\nJenny strolled along the'
+streamed  'Here is a short story about lightning in a rock:\n\nThe Spark Within\n\nJenny strolled along the rocky'
+streamed  'e is a short story about lightning in a rock:\n\nThe Spark Within\n\nJenny strolled along the rocky path'
+streamed  ' is a short story about lightning in a rock:\n\nThe Spark Within\n\nJenny strolled along the rocky path,'
+streamed  'a short story about lightning in a rock:\n\nThe Spark Within\n\nJenny strolled along the rocky path, her'
+streamed  'rt story about lightning in a rock:\n\nThe Spark Within\n\nJenny strolled along the rocky path, her eyes'
+streamed  'about lightning in a rock:\n\nThe Spark Within\n\nJenny strolled along the rocky path, her eyes scanning'
+streamed  't lightning in a rock:\n\nThe Spark Within\n\nJenny strolled along the rocky path, her eyes scanning the'
+streamed  'tning in a rock:\n\nThe Spark Within\n\nJenny strolled along the rocky path, her eyes scanning the groun'
+streamed  ' in a rock:\n\nThe Spark Within\n\nJenny strolled along the rocky path, her eyes scanning the ground for'
+streamed  '\nThe Spark Within\n\nJenny strolled along the rocky path, her eyes scanning the ground for interesting'
+streamed  'park Within\n\nJenny strolled along the rocky path, her eyes scanning the ground for interesting finds'
+streamed  'ark Within\n\nJenny strolled along the rocky path, her eyes scanning the ground for interesting finds.'
+streamed  'Within\n\nJenny strolled along the rocky path, her eyes scanning the ground for interesting finds. She'
+streamed  'n\n\nJenny strolled along the rocky path, her eyes scanning the ground for interesting finds. She love'
+streamed  'nny strolled along the rocky path, her eyes scanning the ground for interesting finds. She loved the'
+streamed  'strolled along the rocky path, her eyes scanning the ground for interesting finds. She loved the out'
+streamed  'led along the rocky path, her eyes scanning the ground for interesting finds. She loved the outdoors'
+streamed  ' along the rocky path, her eyes scanning the ground for interesting finds. She loved the outdoors an'
+streamed  'g the rocky path, her eyes scanning the ground for interesting finds. She loved the outdoors and the'
+streamed  'rocky path, her eyes scanning the ground for interesting finds. She loved the outdoors and the sense'
+streamed  'ky path, her eyes scanning the ground for interesting finds. She loved the outdoors and the sense of'
+streamed  'er eyes scanning the ground for interesting finds. She loved the outdoors and the sense of discovery'
+streamed  'eyes scanning the ground for interesting finds. She loved the outdoors and the sense of discovery it'
+streamed  'nning the ground for interesting finds. She loved the outdoors and the sense of discovery it brought'
+streamed  'ning the ground for interesting finds. She loved the outdoors and the sense of discovery it brought.'
+streamed  'g the ground for interesting finds. She loved the outdoors and the sense of discovery it brought. As'
+streamed  'e ground for interesting finds. She loved the outdoors and the sense of discovery it brought. As she'
+streamed  'ground for interesting finds. She loved the outdoors and the sense of discovery it brought. As she n'
+streamed  'nd for interesting finds. She loved the outdoors and the sense of discovery it brought. As she neare'
+streamed  'r interesting finds. She loved the outdoors and the sense of discovery it brought. As she neared the'
+streamed  'eresting finds. She loved the outdoors and the sense of discovery it brought. As she neared the edge'
+streamed  'sting finds. She loved the outdoors and the sense of discovery it brought. As she neared the edge of'
+streamed  'g finds. She loved the outdoors and the sense of discovery it brought. As she neared the edge of the'
+streamed  's. She loved the outdoors and the sense of discovery it brought. As she neared the edge of the woods'
+streamed  '. She loved the outdoors and the sense of discovery it brought. As she neared the edge of the woods,'
+streamed  'She loved the outdoors and the sense of discovery it brought. As she neared the edge of the woods, a'
+streamed  'he outdoors and the sense of discovery it brought. As she neared the edge of the woods, a particular'
+streamed  'doors and the sense of discovery it brought. As she neared the edge of the woods, a particular stone'
+streamed  'nd the sense of discovery it brought. As she neared the edge of the woods, a particular stone caught'
+streamed  'he sense of discovery it brought. As she neared the edge of the woods, a particular stone caught her'
+streamed  'ense of discovery it brought. As she neared the edge of the woods, a particular stone caught her eye'
+streamed  'nse of discovery it brought. As she neared the edge of the woods, a particular stone caught her eye.'
+streamed  ' of discovery it brought. As she neared the edge of the woods, a particular stone caught her eye. It'
+streamed  'discovery it brought. As she neared the edge of the woods, a particular stone caught her eye. It was'
+streamed  'very it brought. As she neared the edge of the woods, a particular stone caught her eye. It was dark'
+streamed  'y it brought. As she neared the edge of the woods, a particular stone caught her eye. It was dark an'
+streamed  ' brought. As she neared the edge of the woods, a particular stone caught her eye. It was dark and ob'
+streamed  'ught. As she neared the edge of the woods, a particular stone caught her eye. It was dark and oblong'
+streamed  'ght. As she neared the edge of the woods, a particular stone caught her eye. It was dark and oblong,'
+streamed  'As she neared the edge of the woods, a particular stone caught her eye. It was dark and oblong, with'
+streamed  'she neared the edge of the woods, a particular stone caught her eye. It was dark and oblong, with ja'
+streamed  ' neared the edge of the woods, a particular stone caught her eye. It was dark and oblong, with jagge'
+streamed  ' the edge of the woods, a particular stone caught her eye. It was dark and oblong, with jagged edges'
+streamed  'edge of the woods, a particular stone caught her eye. It was dark and oblong, with jagged edges that'
+streamed  'f the woods, a particular stone caught her eye. It was dark and oblong, with jagged edges that looke'
+streamed  'ods, a particular stone caught her eye. It was dark and oblong, with jagged edges that looked almost'
+streamed  'icular stone caught her eye. It was dark and oblong, with jagged edges that looked almost artificial'
+streamed  'cular stone caught her eye. It was dark and oblong, with jagged edges that looked almost artificial.'
+streamed  'one caught her eye. It was dark and oblong, with jagged edges that looked almost artificial. Curious'
+streamed  'ne caught her eye. It was dark and oblong, with jagged edges that looked almost artificial. Curious,'
+streamed  'aught her eye. It was dark and oblong, with jagged edges that looked almost artificial. Curious, she'
+streamed  ' her eye. It was dark and oblong, with jagged edges that looked almost artificial. Curious, she bent'
+streamed  'eye. It was dark and oblong, with jagged edges that looked almost artificial. Curious, she bent down'
+streamed  '. It was dark and oblong, with jagged edges that looked almost artificial. Curious, she bent down an'
+streamed  's dark and oblong, with jagged edges that looked almost artificial. Curious, she bent down and picke'
+streamed  'rk and oblong, with jagged edges that looked almost artificial. Curious, she bent down and picked it'
+streamed  'and oblong, with jagged edges that looked almost artificial. Curious, she bent down and picked it up'
+streamed  'nd oblong, with jagged edges that looked almost artificial. Curious, she bent down and picked it up,'
+streamed  'g, with jagged edges that looked almost artificial. Curious, she bent down and picked it up, turning'
+streamed  'with jagged edges that looked almost artificial. Curious, she bent down and picked it up, turning it'
+streamed  'jagged edges that looked almost artificial. Curious, she bent down and picked it up, turning it over'
+streamed  'ged edges that looked almost artificial. Curious, she bent down and picked it up, turning it over in'
+streamed  'edges that looked almost artificial. Curious, she bent down and picked it up, turning it over in her'
+streamed  'that looked almost artificial. Curious, she bent down and picked it up, turning it over in her hands'
+streamed  'hat looked almost artificial. Curious, she bent down and picked it up, turning it over in her hands.'
+streamed  'hat looked almost artificial. Curious, she bent down and picked it up, turning it over in her hands.'
+streamed  'hat looked almost artificial. Curious, she bent down and picked it up, turning it over in her hands.'
+streamed  'hat looked almost artificial. Curious, she bent down and picked it up, turning it over in her hands.'
 streamed final Here is a short story about lightning in a rock:
 
-The Fallen Star
-
-As the sun dipped below the horizon, casting long shadows across the rugged terrain, a flash of light pierced the gathering darkness. A bolt of lightning seemingly erupted from the ground, branching out in a dazzling display before fading into the night. 
+The Spark Within
 
-Curious, a young hiker made her way across the rocky landscape, her footsteps crunching on the gravel
-
Captured stderr call
[2024-10-21T21:12:00Z WARN  aws_runtime::env_config::normalize] section [Connection 1] ignored; config must be in the AWS config file rather than the credentials file
-[2024-10-21T21:12:00Z INFO  aws_config::meta::region] load_region; provider=EnvironmentVariableRegionProvider { env: Env(Real) }
-[2024-10-21T21:12:02Z INFO  baml_events] Function TestAws:
-    Client: AwsBedrock (anthropic.claude-3-haiku-20240307-v1:0) - 1992ms. StopReason: unknown
+Jenny strolled along the rocky path, her eyes scanning the ground for interesting finds. She loved the outdoors and the sense of discovery it brought. As she neared the edge of the woods, a particular stone caught her eye. It was dark and oblong, with jagged edges that looked almost artificial. Curious, she bent down and picked it up, turning it over in her hands.
+
Captured stderr call
[2024-10-23T17:53:26Z WARN  aws_runtime::env_config::normalize] section [Connection 1] ignored; config must be in the AWS config file rather than the credentials file
+[2024-10-23T17:53:26Z INFO  aws_config::meta::region] load_region; provider=EnvironmentVariableRegionProvider { env: Env(Real) }
+[2024-10-23T17:53:29Z INFO  baml_events] Function TestAws:
+    Client: AwsBedrock (anthropic.claude-3-haiku-20240307-v1:0) - 2748ms. StopReason: unknown
     ---PROMPT---
     [chat] user: Write a nice short story about lightning in a rock
     
     ---LLM REPLY---
     Here is a short story about lightning in a rock:
     
-    The Fallen Star
-    
-    As the sun dipped below the horizon, casting long shadows across the rugged terrain, a flash of light pierced the gathering darkness. A bolt of lightning seemingly erupted from the ground, branching out in a dazzling display before fading into the night. 
+    The Spark Within
     
-    Curious, a young hiker made her way across the rocky landscape, her footsteps crunching on the gravel
+    Jenny strolled along the rocky path, her eyes scanning the ground for interesting finds. She loved the outdoors and the sense of discovery it brought. As she neared the edge of the woods, a particular stone caught her eye. It was dark and oblong, with jagged edges that looked almost artificial. Curious, she bent down and picked it up, turning it over in her hands.
     ---Parsed Response (string)---
-    "Here is a short story about lightning in a rock:\n\nThe Fallen Star\n\nAs the sun dipped below the horizon, casting long shadows across the rugged terrain, a flash of light pierced the gathering darkness. A bolt of lightning seemingly erupted from the ground, branching out in a dazzling display before fading into the night. \n\nCurious, a young hiker made her way across the rocky landscape, her footsteps crunching on the gravel"
-

Teardown

PASSED test_serialization_exception 0:00:00.560102

Setup

Call

Captured stdout call
Exception message from test:  <ExceptionInfo BamlValidationError(message=Failed to parse LLM response: Failed to coerce value: <root>: Failed while parsing require...required field: nonce2, raw_output=Hello there! How can I assist you today?, prompt=[chat] system: Say "hello there".
+    "Here is a short story about lightning in a rock:\n\nThe Spark Within\n\nJenny strolled along the rocky path, her eyes scanning the ground for interesting finds. She loved the outdoors and the sense of discovery it brought. As she neared the edge of the woods, a particular stone caught her eye. It was dark and oblong, with jagged edges that looked almost artificial. Curious, she bent down and picked it up, turning it over in her hands."
+

Teardown

PASSED test_serialization_exception 0:00:00.555345

Setup

Call

Captured stdout call
Exception message from test:  <ExceptionInfo BamlValidationError(message=Failed to parse LLM response: Failed to coerce value: <root>: Failed while parsing require...g required field: nonce2, raw_output=Hello there! How can I help you today?, prompt=[chat] system: Say "hello there".
 ) tblen=2>
-
Captured stderr call
[2024-10-21T21:12:02Z WARN  baml_events] Function DummyOutputFunction:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 556ms. StopReason: stop
+
Captured stderr call
[2024-10-23T17:53:30Z WARN  baml_events] Function DummyOutputFunction:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 548ms. StopReason: stop
     ---PROMPT---
     [chat] system: Say "hello there".
     
     ---LLM REPLY---
-    Hello there! How can I assist you today?
+    Hello there! How can I help you today?
     ---Parsed Response (Error)---
     Failed to coerce value: <root>: Failed while parsing required fields: missing=2, unparsed=0
       - <root>: Missing required field: nonce
       - <root>: Missing required field: nonce2
-

Teardown

PASSED test_stream_serialization_exception 0:00:00.706884

Setup

Call

Captured stdout call
streamed  nonce=None nonce2=None
+

Teardown

PASSED test_stream_serialization_exception 0:00:00.661441

Setup

Call

Captured stdout call
streamed  nonce=None nonce2=None
 streamed  nonce=None nonce2=None
 streamed  nonce=None nonce2=None
 streamed  nonce=None nonce2=None
@@ -2063,8 +1919,8 @@
 streamed  nonce=None nonce2=None
 Exception message:  <ExceptionInfo BamlValidationError(message=Failed to parse LLM response: Failed to coerce value: <root>: Failed while parsing require...required field: nonce2, raw_output=Hello there! How can I assist you today?, prompt=[chat] system: Say "hello there".
 ) tblen=3>
-
Captured stderr call
[2024-10-21T21:12:03Z WARN  baml_events] Function DummyOutputFunction:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 699ms. StopReason: stop
+
Captured stderr call
[2024-10-23T17:53:30Z WARN  baml_events] Function DummyOutputFunction:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 652ms. StopReason: stop
     ---PROMPT---
     [chat] system: Say "hello there".
     
@@ -2074,7 +1930,7 @@
     Failed to coerce value: <root>: Failed while parsing required fields: missing=2, unparsed=0
       - <root>: Missing required field: nonce
       - <root>: Missing required field: nonce2
-

Teardown

PASSED test_stream2_serialization_exception 0:00:00.482907

Setup

Call

Captured stdout call
streamed  nonce=None nonce2=None nonce3=None
+

Teardown

PASSED test_stream2_serialization_exception 0:00:00.582524

Setup

Call

Captured stdout call
streamed  nonce=None nonce2=None nonce3=None
 streamed  nonce=None nonce2=None nonce3=None
 streamed  nonce=None nonce2=None nonce3=None
 streamed  nonce=None nonce2=None nonce3=None
@@ -2087,22 +1943,22 @@
 streamed  nonce=None nonce2=None nonce3=None
 streamed  nonce=None nonce2=None nonce3=None
 streamed  nonce=None nonce2=None nonce3=None
-Exception message:  <ExceptionInfo BamlValidationError(message=Failed to parse LLM response: Failed to coerce value: <root>: Failed while parsing require...g required field: nonce3, raw_output=Hello there! How can I help you today?, prompt=[chat] system: Say "hello there".
+Exception message:  <ExceptionInfo BamlValidationError(message=Failed to parse LLM response: Failed to coerce value: <root>: Failed while parsing require...required field: nonce3, raw_output=Hello there! How can I assist you today?, prompt=[chat] system: Say "hello there".
 ) tblen=3>
-
Captured stderr call
[2024-10-21T21:12:04Z WARN  baml_events] Function DummyOutputFunction:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 475ms. StopReason: stop
+
Captured stderr call
[2024-10-23T17:53:31Z WARN  baml_events] Function DummyOutputFunction:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 575ms. StopReason: stop
     ---PROMPT---
     [chat] system: Say "hello there".
     
     ---LLM REPLY---
-    Hello there! How can I help you today?
+    Hello there! How can I assist you today?
     ---Parsed Response (Error)---
     Failed to coerce value: <root>: Failed while parsing required fields: missing=3, unparsed=0
       - <root>: Missing required field: nonce
       - <root>: Missing required field: nonce2
       - <root>: Missing required field: nonce3
-

Teardown

PASSED test_descriptions 0:00:02.293221

Setup

Call

Captured stderr call
[2024-10-21T21:12:06Z INFO  baml_events] Function SchemaDescriptions:
-    Client: GPT4o (gpt-4o-2024-08-06) - 2276ms. StopReason: stop
+

Teardown

PASSED test_descriptions 0:00:02.206135

Setup

Call

Captured stderr call
[2024-10-23T17:53:33Z INFO  baml_events] Function SchemaDescriptions:
+    Client: GPT4o (gpt-4o-2024-08-06) - 2189ms. StopReason: stop
     ---PROMPT---
     [chat] system: Return a schema with this format:
     
@@ -2205,15 +2061,47 @@
       "parens": "parens1",
       "other_group": "other"
     }
-

Teardown

FAILED test_caching 0:00:03.383143

AssertionError: Expected second call to be faster than first by a large margin.
-assert 2.4833388328552246 < 0.8984320163726807

Setup

Call

>   ???
-E   AssertionError: Expected second call to be faster than first by a large margin.
-E   assert 2.4833388328552246 < 0.8984320163726807
+

Teardown

FAILED test_caching 0:00:02.432727

AssertionError: Expected second call to be faster than first by a large margin.
+assert 1.2517509460449219 < 1.178415298461914

Setup

Call

@pytest.mark.asyncio
+    async def test_caching():
+        story_idea = """
+        In 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.
+    
+        Complications 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.
+    
+        The 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.
+    
+        As 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.
+    
+        Ultimately, 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.
+    
+        The 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.
+    
+        In 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.
+    """
+        rand = random.randint(0, 26)
+        story_idea += " " + rand * "a"
+        start = time.time()
+        _ = await b.TestCaching(story_idea, "be funny")
+        duration = time.time() - start
+    
+        start = time.time()
+        _ = await b.TestCaching(story_idea, "be real")
+        duration2 = time.time() - start
+    
+        print("Duration no caching: ", duration)
+        print("Duration with caching: ", duration2)
+    
+>       assert (
+            duration2 < duration
+        ), "Expected second call to be faster than first by a large margin."
+E       AssertionError: Expected second call to be faster than first by a large margin.
+E       assert 1.2517509460449219 < 1.178415298461914
 
-tests/test_functions.py:1133: AssertionError
Captured stdout call
Duration no caching:  0.8984320163726807
-Duration with caching:  2.4833388328552246
-
Captured stderr call
[2024-10-21T21:12:07Z INFO  baml_events] Function TestCaching:
-    Client: ClaudeWithCaching (claude-3-haiku-20240307) - 895ms. StopReason: "end_turn"
+tests/test_functions.py:1148: AssertionError
Captured stdout call
Duration no caching:  1.178415298461914
+Duration with caching:  1.2517509460449219
+
Captured stderr call
[2024-10-23T17:53:34Z INFO  baml_events] Function TestCaching:
+    Client: ClaudeWithCaching (claude-3-haiku-20240307) - 1172ms. StopReason: "end_turn"
     ---PROMPT---
     [chat] system: {"cache_control": Object {"type": String("ephemeral")}}::Describe this in 5 words: 
         In 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.
@@ -2229,17 +2117,17 @@
         The 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.
     
         In 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.
-     aaaaaaaaaaaaaaaaaaaa
+     aaaaaaaaaaaaaaaaa
     user: be funny
     
     ---LLM REPLY---
-    Here's a funny 5-word description of the story:
+    Here's a 5-word summary with some humor:
     
-    Dream hacking gone wild, oops.
+    Dream control: teenager's trippy nightmare.
     ---Parsed Response (string)---
-    "Here's a funny 5-word description of the story:\n\nDream hacking gone wild, oops."
-[2024-10-21T21:12:09Z INFO  baml_events] Function TestCaching:
-    Client: ClaudeWithCaching (claude-3-haiku-20240307) - 2477ms. StopReason: "end_turn"
+    "Here's a 5-word summary with some humor:\n\nDream control: teenager's trippy nightmare."
+[2024-10-23T17:53:36Z INFO  baml_events] Function TestCaching:
+    Client: ClaudeWithCaching (claude-3-haiku-20240307) - 1244ms. StopReason: "end_turn"
     ---PROMPT---
     [chat] system: {"cache_control": Object {"type": String("ephemeral")}}::Describe this in 5 words: 
         In 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.
@@ -2255,21 +2143,17 @@
         The 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.
     
         In 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.
-     aaaaaaaaaaaaaaaaaaaa
+     aaaaaaaaaaaaaaaaa
     user: be real
     
     ---LLM REPLY---
-    Okay, let me try to summarize the premise in a more concise and realistic way:
-    
-    In a near-future society, dreams have become a tradable commodity. A teenager named Alex discovers they have the rare ability to not just view, but manipulate the dreams of others. Initially, Alex uses this power to help people, but soon starts exploiting it for personal gain, crafting intricate dream experiences to sell on the black market. 
-    
-    As Alex's skill grows, the line between dream and reality begins to blur for their clients. A government agency takes notice of Alex's abilities and offers them a chance to use their powers for the "greater good." Meanwhile, an underground resistance warns Alex about the dangers of dream manipulation and mass control.
+    Here are 5 words to describe the story concept:
     
-    Torn between these opposing forces, Alex must wrestle with ethical dilemmas surrounding free will, consciousness, and the responsibilities that come with wielding power over people's minds. The story explores the societal implications of a world where dreams can be commodified, and challenges readers to consider the fine line between help and exploitation.
+    Dreamscape commodification, ethical dilemmas, personal responsibility
     ---Parsed Response (string)---
-    "Okay, let me try to summarize the premise in a more concise and realistic way:\n\nIn a near-future society, dreams have become a tradable commodity. A teenager named Alex discovers they have the rare ability to not just view, but manipulate the dreams of others. Initially, Alex uses this power to help people, but soon starts exploiting it for personal gain, crafting intricate dream experiences to sell on the black market. \n\nAs Alex's skill grows, the line between dream and reality begins to blur for their clients. A government agency takes notice of Alex's abilities and offers them a chance to use their powers for the \"greater good.\" Meanwhile, an underground resistance warns Alex about the dangers of dream manipulation and mass control.\n\nTorn between these opposing forces, Alex must wrestle with ethical dilemmas surrounding free will, consciousness, and the responsibilities that come with wielding power over people's minds. The story explores the societal implications of a world where dreams can be commodified, and challenges readers to consider the fine line between help and exploitation."
-

Teardown

PASSED test_arg_exceptions 0:00:00.950553

Setup

Call

Captured stderr call
[2024-10-21T21:12:10Z WARN  baml_events] Function MyFunc:
-    Client: MyClient (<unknown>) - 211ms
+    "Here are 5 words to describe the story concept:\n\nDreamscape commodification, ethical dilemmas, personal responsibility"
+

Teardown

PASSED test_arg_exceptions 0:00:01.053728

Setup

Call

Captured stderr call
[2024-10-23T17:53:36Z WARN  baml_events] Function MyFunc:
+    Client: MyClient (<unknown>) - 175ms
     ---PROMPT---
     [chat] system: Given a string, extract info using the schema:
     
@@ -2291,8 +2175,8 @@
         }
     }
     
-[2024-10-21T21:12:10Z WARN  baml_events] Function MyFunc:
-    Client: MyClient (<unknown>) - 173ms
+[2024-10-23T17:53:36Z WARN  baml_events] Function MyFunc:
+    Client: MyClient (<unknown>) - 197ms
     ---PROMPT---
     [chat] system: Given a string, extract info using the schema:
     
@@ -2314,34 +2198,34 @@
         }
     }
     
-[2024-10-21T21:12:10Z WARN  baml_events] Function DummyOutputFunction:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 557ms. StopReason: stop
+[2024-10-23T17:53:37Z WARN  baml_events] Function DummyOutputFunction:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 661ms. StopReason: stop
     ---PROMPT---
     [chat] system: Say "hello there".
     
     ---LLM REPLY---
-    Hello there! How can I assist you today?
+    Hello there! How can I help you today?
     ---Parsed Response (Error)---
     Failed to coerce value: <root>: Failed while parsing required fields: missing=2, unparsed=0
       - <root>: Missing required field: nonce
       - <root>: Missing required field: nonce2
-

Teardown

PASSED test_map_as_param 0:00:00.000888

Setup

Call

Teardown

PASSED test_baml_validation_error_format 0:00:00.578249

Setup

Call

Captured stdout call
Error:  BamlValidationError(message=Failed to parse LLM response: Failed to coerce value: <root>: Failed while parsing required fields: missing=2, unparsed=0
+

Teardown

PASSED test_map_as_param 0:00:00.002795

Setup

Call

Teardown

PASSED test_baml_validation_error_format 0:00:00.493436

Setup

Call

Captured stdout call
Error:  BamlValidationError(message=Failed to parse LLM response: Failed to coerce value: <root>: Failed while parsing required fields: missing=2, unparsed=0
   - <root>: Missing required field: nonce
-  - <root>: Missing required field: nonce2, raw_output=Hello there! How can I assist you today?, prompt=[chat] system: Say "hello there".
+  - <root>: Missing required field: nonce2, raw_output=Hello there! How can I help you today?, prompt=[chat] system: Say "hello there".
 )
-
Captured stderr call
[2024-10-21T21:12:11Z WARN  baml_events] Function DummyOutputFunction:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 574ms. StopReason: stop
+
Captured stderr call
[2024-10-23T17:53:37Z WARN  baml_events] Function DummyOutputFunction:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 485ms. StopReason: stop
     ---PROMPT---
     [chat] system: Say "hello there".
     
     ---LLM REPLY---
-    Hello there! How can I assist you today?
+    Hello there! How can I help you today?
     ---Parsed Response (Error)---
     Failed to coerce value: <root>: Failed while parsing required fields: missing=2, unparsed=0
       - <root>: Missing required field: nonce
       - <root>: Missing required field: nonce2
-

Teardown

PASSED test_no_stream_big_integer 0:00:00.737626

Setup

Call

Captured stderr call
[2024-10-21T21:12:12Z INFO  baml_events] Function StreamOneBigNumber:
-    Client: GPT4 (gpt-4o-2024-08-06) - 732ms. StopReason: stop
+

Teardown

PASSED test_no_stream_big_integer 0:00:00.521592

Setup

Call

Captured stderr call
[2024-10-23T17:53:38Z INFO  baml_events] Function StreamOneBigNumber:
+    Client: GPT4 (gpt-4o-2024-08-06) - 516ms. StopReason: stop
     ---PROMPT---
     [chat] system: Respond with only an integer, no affirmations or prefixes or anything.
     The response should be parsable as a JSON number.
@@ -2351,11 +2235,11 @@
     Answer as a: int
     
     ---LLM REPLY---
-    982374102938
+    202110102023
     ---Parsed Response (int)---
-    982374102938
-

Teardown

PASSED test_no_stream_object_with_numbers 0:00:00.735308

Setup

Call

Captured stderr call
[2024-10-21T21:12:12Z INFO  baml_events] Function StreamBigNumbers:
-    Client: GPT35 (gpt-3.5-turbo-0125) - 727ms. StopReason: stop
+    202110102023
+

Teardown

PASSED test_no_stream_object_with_numbers 0:00:00.578772

Setup

Call

Captured stderr call
[2024-10-23T17:53:38Z INFO  baml_events] Function StreamBigNumbers:
+    Client: GPT35 (gpt-3.5-turbo-0125) - 571ms. StopReason: stop
     ---PROMPT---
     [chat] system: Please make sure every integer in the output has 12 digits.
     For floats, provide a mix - from 0-10 places before the decimal point,
@@ -2369,16 +2253,16 @@
     
     ---LLM REPLY---
     {
-      "a": 100000000000,
-      "b": 123456.789
+      "a": 123456789012,
+      "b": 987654.321,
     }
     ---Parsed Response (class BigNumbers)---
     {
-      "a": 100000000000,
-      "b": 123456.789
+      "a": 123456789012,
+      "b": 987654.321
     }
-

Teardown

PASSED test_no_stream_compound_object 0:00:03.113028

Setup

Call

Captured stderr call
[2024-10-21T21:12:15Z INFO  baml_events] Function StreamingCompoundNumbers:
-    Client: GPT4 (gpt-4o-2024-08-06) - 3106ms. StopReason: stop
+

Teardown

PASSED test_no_stream_compound_object 0:00:03.469311

Setup

Call

Captured stderr call
[2024-10-23T17:53:42Z INFO  baml_events] Function StreamingCompoundNumbers:
+    Client: GPT4 (gpt-4o-2024-08-06) - 3460ms. StopReason: stop
     ---PROMPT---
     [chat] system:     Respond in pure json. Don't use any English descriptions like "Sure, I'll do that",
         nor put the result into a fenced code block.
@@ -2410,55 +2294,55 @@
     ---LLM REPLY---
     {
       "big": {
-        "a": 312345678901,
-        "b": 52234567.123456789
+        "a": 123456789012,
+        "b": 9876543210.123456789
       },
       "big_nums": [
         {
-          "a": 112345678901,
-          "b": 3456789.9876543210
+          "a": 234567890123,
+          "b": 1234567890.12345
         },
         {
-          "a": 987654321098,
-          "b": 1456.78901234
+          "a": 345678901234,
+          "b": 98765.123456789
         },
         {
-          "a": 192837465001,
-          "b": 9234567891.123456
+          "a": 456789012345,
+          "b": 6789012345.12
         }
       ],
       "another": {
-        "a": 234567890123,
-        "b": 67894567.0987654321
+        "a": 567890123456,
+        "b": 123.1234
       }
     }
     ---Parsed Response (class CompoundBigNumbers)---
     {
       "big": {
-        "a": 312345678901,
-        "b": 52234567.12345679
+        "a": 123456789012,
+        "b": 9876543210.123457
       },
       "big_nums": [
         {
-          "a": 112345678901,
-          "b": 3456789.987654321
+          "a": 234567890123,
+          "b": 1234567890.12345
         },
         {
-          "a": 987654321098,
-          "b": 1456.78901234
+          "a": 345678901234,
+          "b": 98765.123456789
         },
         {
-          "a": 192837465001,
-          "b": 9234567891.123455
+          "a": 456789012345,
+          "b": 6789012345.12
         }
       ],
       "another": {
-        "a": 234567890123,
-        "b": 67894567.09876543
+        "a": 567890123456,
+        "b": 123.1234
       }
     }
-

Teardown

PASSED test_no_stream_compound_object_with_yapping 0:00:12.722894

Setup

Call

Captured stderr call
[2024-10-21T21:12:28Z INFO  baml_events] Function StreamingCompoundNumbers:
-    Client: GPT4 (gpt-4o-2024-08-06) - 12715ms. StopReason: stop
+

Teardown

PASSED test_no_stream_compound_object_with_yapping 0:00:02.656053

Setup

Call

Captured stderr call
[2024-10-23T17:53:44Z INFO  baml_events] Function StreamingCompoundNumbers:
+    Client: GPT4 (gpt-4o-2024-08-06) - 2645ms. StopReason: stop
     ---PROMPT---
     [chat] system:     Please give me a friendly response before outputting json. And put the JSON
         into a fenced code block.
@@ -2486,63 +2370,61 @@
     }
     
     ---LLM REPLY---
-    Hello there! I hope you're having a great day. Here's the JSON data you requested:
+    Hey there! Sure, I can create that JSON for you with the specified constraints. Here it goes:
     
     ```json
     {
       "big": {
         "a": 123456789012,
-        "b": 9876543.123456789
+        "b": 9876543210.123456789
       },
       "big_nums": [
         {
           "a": 234567890123,
-          "b": 8765432.1
+          "b": 8765432109.12345678
         },
         {
           "a": 345678901234,
-          "b": 0.123456789
+          "b": 7654321012345.1234567
         },
         {
           "a": 456789012345,
-          "b": 98765.4321
+          "b": 654321012345678.123456
         }
       ],
       "another": {
         "a": 567890123456,
-        "b": 1234567890.987654321
+        "b": 5432101234567890.12345
       }
     }
-    ``` 
-    
-    Let me know if there's anything else you need! 😊
+    ```
     ---Parsed Response (class CompoundBigNumbers)---
     {
       "big": {
         "a": 123456789012,
-        "b": 9876543.12345679
+        "b": 9876543210.123457
       },
       "big_nums": [
         {
           "a": 234567890123,
-          "b": 8765432.1
+          "b": 8765432109.123457
         },
         {
           "a": 345678901234,
-          "b": 0.123456789
+          "b": 7654321012345.123
         },
         {
           "a": 456789012345,
-          "b": 98765.4321
+          "b": 654321012345678.1
         }
       ],
       "another": {
         "a": 567890123456,
-        "b": 1234567890.9876542
+        "b": 5432101234567890.0
       }
     }
-

Teardown

PASSED test_differing_unions 0:00:01.278532

Setup

Call

Captured stderr call
[2024-10-21T21:12:29Z INFO  baml_events] Function DifferentiateUnions:
-    Client: openai/gpt-4o-mini (gpt-4o-mini-2024-07-18) - 1270ms. StopReason: stop
+

Teardown

PASSED test_differing_unions 0:00:01.980671

Setup

Call

Captured stderr call
[2024-10-23T17:53:46Z INFO  baml_events] Function DifferentiateUnions:
+    Client: openai/gpt-4o-mini (gpt-4o-mini-2024-07-18) - 1971ms. StopReason: stop
     ---PROMPT---
     [chat] system: Create a data model that represents the latter of the two classes.
     
@@ -2555,7 +2437,7 @@
     }
     
     ---LLM REPLY---
-    Here is a JSON representation of a data model that uses the second schema—incorporating both an integer value and a string value:
+    Here is a JSON representation of a data model that fits the criteria you've provided. I'll use the second schema with the additional string value:
     
     ```json
     {
@@ -2564,10 +2446,10 @@
     }
     ```
     
-    In this model, `value` is an integer set to `42`, and `value2` is a string set to `"example string"`. You can adjust the integer and string values as needed.
+    You can replace the `42` and `"example string"` with actual data that fits your context.
     ---Parsed Response (class OriginalB)---
     {
       "value": 42,
       "value2": "example string"
     }
-

Teardown

tests/test_pydantic.py 3 0:00:00.002057

PASSED test_model_validate_success 0:00:00.001073

Setup

Call

Teardown

PASSED test_model_validate_failure 0:00:00.000550

Setup

Call

Teardown

PASSED test_model_dump 0:00:00.000434

Setup

Call

Teardown

\ No newline at end of file +

Teardown

tests/test_pydantic.py 3 0:00:00.002231

PASSED test_model_validate_success 0:00:00.001203

Setup

Call

Teardown

PASSED test_model_validate_failure 0:00:00.000578

Setup

Call

Teardown

PASSED test_model_dump 0:00:00.000450

Setup

Call

Teardown

\ No newline at end of file diff --git a/integ-tests/ruby/baml_client/inlined.rb b/integ-tests/ruby/baml_client/inlined.rb index 280e3a4c5..53848ff45 100644 --- a/integ-tests/ruby/baml_client/inlined.rb +++ b/integ-tests/ruby/baml_client/inlined.rb @@ -25,7 +25,7 @@ module Inlined "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}", - "generators.baml" => "generator lang_python {\n output_type python/pydantic\n output_dir \"../python\"\n version \"0.62.0\"\n}\n\ngenerator lang_typescript {\n output_type typescript\n output_dir \"../typescript\"\n version \"0.62.0\"\n}\n\ngenerator lang_ruby {\n output_type ruby/sorbet\n output_dir \"../ruby\"\n version \"0.62.0\"\n}\n\n// generator openapi {\n// output_type rest/openapi\n// output_dir \"../openapi\"\n// version \"0.62.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.63.0\"\n}\n\ngenerator lang_typescript {\n output_type typescript\n output_dir \"../typescript\"\n version \"0.63.0\"\n}\n\ngenerator lang_ruby {\n output_type ruby/sorbet\n output_dir \"../ruby\"\n version \"0.63.0\"\n}\n\n// generator openapi {\n// output_type rest/openapi\n// output_dir \"../openapi\"\n// version \"0.63.0\"\n// on_generate \"rm .gitignore\"\n// }\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}", diff --git a/integ-tests/typescript/baml_client/inlinedbaml.ts b/integ-tests/typescript/baml_client/inlinedbaml.ts index a68c0cee9..301251c5d 100644 --- a/integ-tests/typescript/baml_client/inlinedbaml.ts +++ b/integ-tests/typescript/baml_client/inlinedbaml.ts @@ -26,7 +26,7 @@ const fileMap = { "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}", - "generators.baml": "generator lang_python {\n output_type python/pydantic\n output_dir \"../python\"\n version \"0.62.0\"\n}\n\ngenerator lang_typescript {\n output_type typescript\n output_dir \"../typescript\"\n version \"0.62.0\"\n}\n\ngenerator lang_ruby {\n output_type ruby/sorbet\n output_dir \"../ruby\"\n version \"0.62.0\"\n}\n\n// generator openapi {\n// output_type rest/openapi\n// output_dir \"../openapi\"\n// version \"0.62.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.63.0\"\n}\n\ngenerator lang_typescript {\n output_type typescript\n output_dir \"../typescript\"\n version \"0.63.0\"\n}\n\ngenerator lang_ruby {\n output_type ruby/sorbet\n output_dir \"../ruby\"\n version \"0.63.0\"\n}\n\n// generator openapi {\n// output_type rest/openapi\n// output_dir \"../openapi\"\n// version \"0.63.0\"\n// on_generate \"rm .gitignore\"\n// }\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}", diff --git a/integ-tests/typescript/pnpm-lock.yaml b/integ-tests/typescript/pnpm-lock.yaml index 469acb4f2..47656a559 100644 --- a/integ-tests/typescript/pnpm-lock.yaml +++ b/integ-tests/typescript/pnpm-lock.yaml @@ -1,1492 +1,78 @@ -lockfileVersion: '9.0' +lockfileVersion: '6.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false -importers: +dependencies: + '@boundaryml/baml': + specifier: link:../../engine/language_client_typescript + version: link:../../engine/language_client_typescript + dotenv: + specifier: ^16.4.5 + version: 16.4.5 + +devDependencies: + '@swc/core': + specifier: ^1.5.7 + version: 1.7.6 + '@swc/jest': + specifier: ^0.2.36 + version: 0.2.36(@swc/core@1.7.6) + '@types/jest': + specifier: ^29.5.12 + version: 29.5.12 + '@types/node': + specifier: ^20.11.27 + version: 20.14.14 + dotenv-cli: + specifier: ^7.4.2 + version: 7.4.2 + jest: + specifier: ^29.7.0 + version: 29.7.0(@types/node@20.14.14)(ts-node@10.9.2) + jest-html-reporter: + specifier: ^3.10.2 + version: 3.10.2(jest@29.7.0)(typescript@5.5.4) + ts-jest: + specifier: ^29.1.2 + version: 29.2.4(@babel/core@7.25.2)(jest@29.7.0)(typescript@5.5.4) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@swc/core@1.7.6)(@types/node@20.14.14)(typescript@5.5.4) + ts-node-dev: + specifier: ^2.0.0 + version: 2.0.0(@swc/core@1.7.6)(@types/node@20.14.14)(typescript@5.5.4) + typescript: + specifier: ^5.4.2 + version: 5.5.4 - .: - dependencies: - '@boundaryml/baml': - specifier: link:../../engine/language_client_typescript - version: link:../../engine/language_client_typescript - dotenv: - specifier: ^16.4.5 - version: 16.4.5 - devDependencies: - '@swc/core': - specifier: ^1.5.7 - version: 1.7.6 - '@swc/jest': - specifier: ^0.2.36 - version: 0.2.36(@swc/core@1.7.6) - '@types/jest': - specifier: ^29.5.12 - version: 29.5.12 - '@types/node': - specifier: ^20.11.27 - version: 20.14.14 - dotenv-cli: - specifier: ^7.4.2 - version: 7.4.2 - jest: - specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.14)(ts-node@10.9.2) - jest-html-reporter: - specifier: ^3.10.2 - version: 3.10.2(jest@29.7.0)(typescript@5.5.4) - ts-jest: - specifier: ^29.1.2 - version: 29.2.4(@babel/core@7.25.2)(jest@29.7.0)(typescript@5.5.4) - ts-node: - specifier: ^10.9.2 - version: 10.9.2(@swc/core@1.7.6)(@types/node@20.14.14)(typescript@5.5.4) - ts-node-dev: - specifier: ^2.0.0 - version: 2.0.0(@swc/core@1.7.6)(@types/node@20.14.14)(typescript@5.5.4) - typescript: - specifier: ^5.4.2 - version: 5.5.4 - -packages: - - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - - '@babel/code-frame@7.24.7': - resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.25.2': - resolution: {integrity: sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.25.2': - resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.25.0': - resolution: {integrity: sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.25.2': - resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.24.7': - resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.25.2': - resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-plugin-utils@7.24.8': - resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-simple-access@7.24.7': - resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.24.8': - resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.24.7': - resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-option@7.24.8': - resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.25.0': - resolution: {integrity: sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==} - engines: {node: '>=6.9.0'} - - '@babel/highlight@7.24.7': - resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.25.3': - resolution: {integrity: sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==} - 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-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.24.7': - resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==} - 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-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.24.7': - resolution: {integrity: sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/template@7.25.0': - resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.25.3': - resolution: {integrity: sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.25.2': - resolution: {integrity: sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==} - engines: {node: '>=6.9.0'} - - '@bcoe/v8-coverage@0.2.3': - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - - '@cspotcode/source-map-support@0.8.1': - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - 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.5': - resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} - 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/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==} - - '@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.7.6': - resolution: {integrity: sha512-6lYHey84ZzsdtC7UuPheM4Rm0Inzxm6Sb8U6dmKc4eCx8JL0LfWG4LC5RsdsrTxnjTsbriWlnhZBffh8ijUHIQ==} - engines: {node: '>=10'} - cpu: [arm64] - os: [darwin] - - '@swc/core-darwin-x64@1.7.6': - resolution: {integrity: sha512-Fyl+8aH9O5rpx4O7r2KnsPpoi32iWoKOYKiipeTbGjQ/E95tNPxbmsz4yqE8Ovldcga60IPJ5OKQA3HWRiuzdw==} - engines: {node: '>=10'} - cpu: [x64] - os: [darwin] - - '@swc/core-linux-arm-gnueabihf@1.7.6': - resolution: {integrity: sha512-2WxYTqFaOx48GKC2cbO1/IntA+w+kfCFy436Ij7qRqqtV/WAvTM9TC1OmiFbqq436rSot52qYmX8fkwdB5UcLQ==} - engines: {node: '>=10'} - cpu: [arm] - os: [linux] - - '@swc/core-linux-arm64-gnu@1.7.6': - resolution: {integrity: sha512-TBEGMSe0LhvPe4S7E68c7VzgT3OMu4VTmBLS7B2aHv4v8uZO92Khpp7L0WqgYU1y5eMjk+XLDLi4kokiNHv/Hg==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux] - - '@swc/core-linux-arm64-musl@1.7.6': - resolution: {integrity: sha512-QI8QGL0HGT42tj7F1A+YAzhGkJjUcvvTfI1e2m704W0Enl2/UIK9v5D1zvQzYwusRyKuaQfbeBRYDh0NcLOGLg==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux] - - '@swc/core-linux-x64-gnu@1.7.6': - resolution: {integrity: sha512-61AYVzhjuNQAVIKKWOJu3H0/pFD28RYJGxnGg3YMhvRLRyuWNyY5Nyyj2WkKcz/ON+g38Arlz00NT1LDIViRLg==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux] - - '@swc/core-linux-x64-musl@1.7.6': - resolution: {integrity: sha512-hQFznpfLK8XajfAAN9Cjs0w/aVmO7iu9VZvInyrTCRcPqxV5O+rvrhRxKvC1LRMZXr5M6JRSRtepp5w+TK4kAw==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux] - - '@swc/core-win32-arm64-msvc@1.7.6': - resolution: {integrity: sha512-Aqsd9afykVMuekzjm4X4TDqwxmG4CrzoOSFe0hZrn9SMio72l5eAPnMtYoe5LsIqtjV8MNprLfXaNbjHjTegmA==} - engines: {node: '>=10'} - cpu: [arm64] - os: [win32] - - '@swc/core-win32-ia32-msvc@1.7.6': - resolution: {integrity: sha512-9h0hYnOeRVNeQgHQTvD1Im67faNSSzBZ7Adtxyu9urNLfBTJilMllFd2QuGHlKW5+uaT6ZH7ZWDb+c/enx7Lcg==} - engines: {node: '>=10'} - cpu: [ia32] - os: [win32] - - '@swc/core-win32-x64-msvc@1.7.6': - resolution: {integrity: sha512-izeoB8glCSe6IIDQmrVm6bvR9muk9TeKgmtY7b6l1BwL4BFnTUk4dMmpbntT90bEVQn3JPCaPtUG4HfL8VuyuA==} - engines: {node: '>=10'} - cpu: [x64] - os: [win32] - - '@swc/core@1.7.6': - resolution: {integrity: sha512-FZxyao9eQks1MRmUshgsZTmlg/HB2oXK5fghkoWJm/1CU2q2kaJlVDll2as5j+rmWiwkp0Gidlq8wlXcEEAO+g==} - engines: {node: '>=10'} - peerDependencies: - '@swc/helpers': '*' - peerDependenciesMeta: - '@swc/helpers': - optional: true - - '@swc/counter@0.1.3': - resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - - '@swc/jest@0.2.36': - resolution: {integrity: sha512-8X80dp81ugxs4a11z1ka43FPhP+/e+mJNXJSxiNYk8gIX/jPBtY4gQTrKu/KIoco8bzKuPI5lUxjfLiGsfvnlw==} - engines: {npm: '>= 7.0.0'} - peerDependencies: - '@swc/core': '*' - - '@swc/types@0.1.12': - resolution: {integrity: sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA==} - - '@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==} - - '@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/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.12': - resolution: {integrity: sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==} - - '@types/node@20.14.14': - resolution: {integrity: sha512-d64f00982fS9YoOgJkAMolK7MN8Iq3TDdVjchbYHdEmjth/DHowx82GnoA+tVUAN+7vxfYUgAzi+JXbKNd2SDQ==} - - '@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/yargs-parser@21.0.3': - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - - '@types/yargs@17.0.33': - resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} - - acorn-walk@8.3.3: - resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} - engines: {node: '>=0.4.0'} - - acorn@8.12.1: - resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} - engines: {node: '>=0.4.0'} - hasBin: true - - 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-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'} - - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - - arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - - argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - - async@3.2.5: - resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} - - 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.0.1: - resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} - 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==} - - 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.23.3: - resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} - 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==} - - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - 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.30001651: - resolution: {integrity: sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==} - - chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - - 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'} - - chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} - - ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} - - cjs-module-lexer@1.3.1: - resolution: {integrity: sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==} - - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - - 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==} - - 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.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - - dateformat@3.0.2: - resolution: {integrity: sha512-EelsCzH0gMC2YmXuMeaZ3c6md1sUJQxyb1XXc4xaisi/K6qKukqZhKPrEQyRkdNIncgYyLoDTReq0nNyuKerTg==} - - debug@4.3.6: - resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - dedent@1.5.3: - resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true - - deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - - detect-newline@3.1.0: - resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} - engines: {node: '>=8'} - - 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'} - - dotenv-cli@7.4.2: - resolution: {integrity: sha512-SbUj8l61zIbzyhIbg0FwPJq6+wjbzdn9oEtozQpZ6kW2ihCcapKVZj49oCT3oPM+mgQm+itgvUQcG5szxVrZTA==} - hasBin: true - - dotenv-expand@10.0.0: - resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} - engines: {node: '>=12'} - - dotenv@16.4.5: - resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} - engines: {node: '>=12'} - - dynamic-dedupe@0.3.0: - resolution: {integrity: sha512-ssuANeD+z97meYOqd50e04Ze5qp4bPqo8cCkI4TRjZkzAUgIDTrXV1R8QCdINpiI+hw14+rYazvTRdQrz0/rFQ==} - - ejs@3.1.10: - resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} - engines: {node: '>=0.10.0'} - hasBin: true - - electron-to-chromium@1.5.5: - resolution: {integrity: sha512-QR7/A7ZkMS8tZuoftC/jfqNkZLQO779SSW3YuZHP4eXpj3EffGLFcB/Xu9AAZQzLccTiCV+EmUo3ha4mQ9wnlA==} - - 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==} - - error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - - escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} - 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'} - - esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - - 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} - - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - fb-watchman@2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} - - 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'} - - 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==} - - 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-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} - - get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - - 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'} - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - 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'} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - - human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - - 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'} - - 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==} - - is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - - is-core-module@2.15.0: - resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==} - engines: {node: '>= 0.4'} - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - 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-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - - 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'} - - 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-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-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-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@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 - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true - - jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - - json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - - 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==} - - kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - - leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - - locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} - - lodash.memoize@4.1.2: - resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} - - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - - 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==} - - merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - - micromatch@4.0.7: - resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} - engines: {node: '>=8.6'} - - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} - - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - - mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true - - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - - node-int64@0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - - node-releases@2.0.18: - resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} - - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - - npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - - 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'} - - 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-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - - parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - - 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==} - - picocolors@1.0.1: - resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - 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'} - - 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'} - - pure-rand@6.1.0: - resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} - - react-is@18.3.1: - resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - - resolve-cwd@3.0.0: - resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} - engines: {node: '>=8'} - - resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - - resolve.exports@2.0.2: - resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} - engines: {node: '>=10'} - - resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true - - rimraf@2.7.1: - resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - - 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 - - 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'} - - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - - sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - - 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==} - - stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} - - 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'} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - 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-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'} - - 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'} - - test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} - - tmpl@1.0.5: - resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - - to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - tree-kill@1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true - - ts-jest@29.2.4: - resolution: {integrity: sha512-3d6tgDyhCI29HlpwIq87sNuI+3Q6GLTTCeYRHCs7vDz+/3GCMwEtV9jezLyl4ZtnBgx00I7hm8PCP8cTksMGrw==} - 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@7.0.0: - resolution: {integrity: sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==} - - 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'} - - typescript@5.5.4: - resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} - engines: {node: '>=14.17'} - hasBin: true - - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - - update-browserslist-db@1.1.0: - resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - 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'} - - walker@1.0.8: - resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - - 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} - - xmlbuilder@15.0.0: - resolution: {integrity: sha512-KLu/G0DoWhkncQ9eHSI6s0/w+T4TM7rQaLhtCaL6tORv8jFlJPlnGumsgTcGfYeS1qZ/IHqrvDG7zJZ4d7e+nw==} - engines: {node: '>=8.0'} - - 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==} - - 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'} - -snapshots: +packages: - '@ampproject/remapping@2.3.0': + /@ampproject/remapping@2.3.0: + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} dependencies: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 + dev: true - '@babel/code-frame@7.24.7': + /@babel/code-frame@7.24.7: + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} + engines: {node: '>=6.9.0'} dependencies: '@babel/highlight': 7.24.7 picocolors: 1.0.1 + dev: true - '@babel/compat-data@7.25.2': {} + /@babel/compat-data@7.25.2: + resolution: {integrity: sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==} + engines: {node: '>=6.9.0'} + dev: true - '@babel/core@7.25.2': + /@babel/core@7.25.2: + resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} + engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.24.7 @@ -1505,30 +91,44 @@ snapshots: semver: 6.3.1 transitivePeerDependencies: - supports-color + dev: true - '@babel/generator@7.25.0': + /@babel/generator@7.25.0: + resolution: {integrity: sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==} + engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.25.2 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 + dev: true - '@babel/helper-compilation-targets@7.25.2': + /@babel/helper-compilation-targets@7.25.2: + resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} + engines: {node: '>=6.9.0'} dependencies: '@babel/compat-data': 7.25.2 '@babel/helper-validator-option': 7.24.8 browserslist: 4.23.3 lru-cache: 5.1.1 semver: 6.3.1 + dev: true - '@babel/helper-module-imports@7.24.7': + /@babel/helper-module-imports@7.24.7: + resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} + engines: {node: '>=6.9.0'} dependencies: '@babel/traverse': 7.25.3 '@babel/types': 7.25.2 transitivePeerDependencies: - supports-color + dev: true - '@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2)': + /@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2): + resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.25.2 '@babel/helper-module-imports': 7.24.7 @@ -1537,115 +137,205 @@ snapshots: '@babel/traverse': 7.25.3 transitivePeerDependencies: - supports-color + dev: true - '@babel/helper-plugin-utils@7.24.8': {} + /@babel/helper-plugin-utils@7.24.8: + resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} + engines: {node: '>=6.9.0'} + dev: true - '@babel/helper-simple-access@7.24.7': + /@babel/helper-simple-access@7.24.7: + resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} + engines: {node: '>=6.9.0'} dependencies: '@babel/traverse': 7.25.3 '@babel/types': 7.25.2 transitivePeerDependencies: - supports-color + dev: true - '@babel/helper-string-parser@7.24.8': {} + /@babel/helper-string-parser@7.24.8: + resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} + engines: {node: '>=6.9.0'} + dev: true - '@babel/helper-validator-identifier@7.24.7': {} + /@babel/helper-validator-identifier@7.24.7: + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + engines: {node: '>=6.9.0'} + dev: true - '@babel/helper-validator-option@7.24.8': {} + /@babel/helper-validator-option@7.24.8: + resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} + engines: {node: '>=6.9.0'} + dev: true - '@babel/helpers@7.25.0': + /@babel/helpers@7.25.0: + resolution: {integrity: sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==} + engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.25.0 '@babel/types': 7.25.2 + dev: true - '@babel/highlight@7.24.7': + /@babel/highlight@7.24.7: + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} + engines: {node: '>=6.9.0'} dependencies: '@babel/helper-validator-identifier': 7.24.7 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.0.1 + dev: true - '@babel/parser@7.25.3': + /@babel/parser@7.25.3: + resolution: {integrity: sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==} + engines: {node: '>=6.0.0'} + hasBin: true dependencies: '@babel/types': 7.25.2 + dev: true - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.25.2)': + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.25.2): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 + dev: true - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.25.2)': + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.25.2): + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 + dev: true - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.2)': + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.2): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 + dev: true - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.2)': + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.2): + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 + dev: true - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.2)': + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.2): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 + dev: true - '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.25.2)': + /@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 + dev: true - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.2)': + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.2): + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 + dev: true - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.25.2)': + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.25.2): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 + dev: true - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.25.2)': + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.25.2): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 + dev: true - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.2)': + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.2): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 + dev: true - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.25.2)': + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.25.2): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 + dev: true - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.2)': + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.2): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 + dev: true - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.2)': + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.2): + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 + dev: true - '@babel/plugin-syntax-typescript@7.24.7(@babel/core@7.25.2)': + /@babel/plugin-syntax-typescript@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 + dev: true - '@babel/template@7.25.0': + /@babel/template@7.25.0: + resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} + engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.24.7 '@babel/parser': 7.25.3 '@babel/types': 7.25.2 + dev: true - '@babel/traverse@7.25.3': + /@babel/traverse@7.25.3: + resolution: {integrity: sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==} + engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.24.7 '@babel/generator': 7.25.0 @@ -1656,30 +346,47 @@ snapshots: globals: 11.12.0 transitivePeerDependencies: - supports-color + dev: true - '@babel/types@7.25.2': + /@babel/types@7.25.2: + resolution: {integrity: sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==} + engines: {node: '>=6.9.0'} dependencies: '@babel/helper-string-parser': 7.24.8 '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 + dev: true - '@bcoe/v8-coverage@0.2.3': {} + /@bcoe/v8-coverage@0.2.3: + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + dev: true - '@cspotcode/source-map-support@0.8.1': + /@cspotcode/source-map-support@0.8.1: + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} dependencies: '@jridgewell/trace-mapping': 0.3.9 + dev: true - '@istanbuljs/load-nyc-config@1.1.0': + /@istanbuljs/load-nyc-config@1.1.0: + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} 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 + dev: true - '@istanbuljs/schema@0.1.3': {} + /@istanbuljs/schema@0.1.3: + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + dev: true - '@jest/console@29.7.0': + /@jest/console@29.7.0: + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 '@types/node': 20.14.14 @@ -1687,8 +394,16 @@ snapshots: jest-message-util: 29.7.0 jest-util: 29.7.0 slash: 3.0.0 + dev: true - '@jest/core@29.7.0(ts-node@10.9.2)': + /@jest/core@29.7.0(ts-node@10.9.2): + 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 dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 @@ -1722,30 +437,45 @@ snapshots: - babel-plugin-macros - supports-color - ts-node + dev: true - '@jest/create-cache-key-function@29.7.0': + /@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} dependencies: '@jest/types': 29.6.3 + dev: true - '@jest/environment@29.7.0': + /@jest/environment@29.7.0: + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 '@types/node': 20.14.14 jest-mock: 29.7.0 + dev: true - '@jest/expect-utils@29.7.0': + /@jest/expect-utils@29.7.0: + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-get-type: 29.6.3 + dev: true - '@jest/expect@29.7.0': + /@jest/expect@29.7.0: + resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: expect: 29.7.0 jest-snapshot: 29.7.0 transitivePeerDependencies: - supports-color + dev: true - '@jest/fake-timers@29.7.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} dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 @@ -1753,8 +483,11 @@ snapshots: jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 + dev: true - '@jest/globals@29.7.0': + /@jest/globals@29.7.0: + resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/environment': 29.7.0 '@jest/expect': 29.7.0 @@ -1762,8 +495,16 @@ snapshots: jest-mock: 29.7.0 transitivePeerDependencies: - supports-color + dev: true - '@jest/reporters@29.7.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 dependencies: '@bcoe/v8-coverage': 0.2.3 '@jest/console': 29.7.0 @@ -1791,32 +532,47 @@ snapshots: v8-to-istanbul: 9.3.0 transitivePeerDependencies: - supports-color + dev: true - '@jest/schemas@29.6.3': + /@jest/schemas@29.6.3: + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@sinclair/typebox': 0.27.8 + dev: true - '@jest/source-map@29.6.3': + /@jest/source-map@29.6.3: + resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jridgewell/trace-mapping': 0.3.25 callsites: 3.1.0 graceful-fs: 4.2.11 + dev: true - '@jest/test-result@29.7.0': + /@jest/test-result@29.7.0: + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.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 + dev: true - '@jest/test-sequencer@29.7.0': + /@jest/test-sequencer@29.7.0: + resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/test-result': 29.7.0 graceful-fs: 4.2.11 jest-haste-map: 29.7.0 slash: 3.0.0 + dev: true - '@jest/transform@29.7.0': + /@jest/transform@29.7.0: + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/core': 7.25.2 '@jest/types': 29.6.3 @@ -1835,8 +591,11 @@ snapshots: write-file-atomic: 4.0.2 transitivePeerDependencies: - supports-color + dev: true - '@jest/types@29.6.3': + /@jest/types@29.6.3: + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 @@ -1844,70 +603,160 @@ snapshots: '@types/node': 20.14.14 '@types/yargs': 17.0.33 chalk: 4.1.2 + dev: true - '@jridgewell/gen-mapping@0.3.5': + /@jridgewell/gen-mapping@0.3.5: + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} dependencies: '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 + dev: true - '@jridgewell/resolve-uri@3.1.2': {} + /@jridgewell/resolve-uri@3.1.2: + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + dev: true - '@jridgewell/set-array@1.2.1': {} + /@jridgewell/set-array@1.2.1: + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + dev: true - '@jridgewell/sourcemap-codec@1.5.0': {} + /@jridgewell/sourcemap-codec@1.5.0: + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + dev: true - '@jridgewell/trace-mapping@0.3.25': + /@jridgewell/trace-mapping@0.3.25: + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 + dev: true - '@jridgewell/trace-mapping@0.3.9': + /@jridgewell/trace-mapping@0.3.9: + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 + dev: true - '@sinclair/typebox@0.27.8': {} + /@sinclair/typebox@0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + dev: true - '@sinonjs/commons@3.0.1': + /@sinonjs/commons@3.0.1: + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} dependencies: type-detect: 4.0.8 + dev: true - '@sinonjs/fake-timers@10.3.0': + /@sinonjs/fake-timers@10.3.0: + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} dependencies: '@sinonjs/commons': 3.0.1 + dev: true - '@swc/core-darwin-arm64@1.7.6': + /@swc/core-darwin-arm64@1.7.6: + resolution: {integrity: sha512-6lYHey84ZzsdtC7UuPheM4Rm0Inzxm6Sb8U6dmKc4eCx8JL0LfWG4LC5RsdsrTxnjTsbriWlnhZBffh8ijUHIQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true optional: true - '@swc/core-darwin-x64@1.7.6': + /@swc/core-darwin-x64@1.7.6: + resolution: {integrity: sha512-Fyl+8aH9O5rpx4O7r2KnsPpoi32iWoKOYKiipeTbGjQ/E95tNPxbmsz4yqE8Ovldcga60IPJ5OKQA3HWRiuzdw==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true optional: true - '@swc/core-linux-arm-gnueabihf@1.7.6': + /@swc/core-linux-arm-gnueabihf@1.7.6: + resolution: {integrity: sha512-2WxYTqFaOx48GKC2cbO1/IntA+w+kfCFy436Ij7qRqqtV/WAvTM9TC1OmiFbqq436rSot52qYmX8fkwdB5UcLQ==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true optional: true - '@swc/core-linux-arm64-gnu@1.7.6': + /@swc/core-linux-arm64-gnu@1.7.6: + resolution: {integrity: sha512-TBEGMSe0LhvPe4S7E68c7VzgT3OMu4VTmBLS7B2aHv4v8uZO92Khpp7L0WqgYU1y5eMjk+XLDLi4kokiNHv/Hg==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@swc/core-linux-arm64-musl@1.7.6': + /@swc/core-linux-arm64-musl@1.7.6: + resolution: {integrity: sha512-QI8QGL0HGT42tj7F1A+YAzhGkJjUcvvTfI1e2m704W0Enl2/UIK9v5D1zvQzYwusRyKuaQfbeBRYDh0NcLOGLg==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@swc/core-linux-x64-gnu@1.7.6': + /@swc/core-linux-x64-gnu@1.7.6: + resolution: {integrity: sha512-61AYVzhjuNQAVIKKWOJu3H0/pFD28RYJGxnGg3YMhvRLRyuWNyY5Nyyj2WkKcz/ON+g38Arlz00NT1LDIViRLg==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@swc/core-linux-x64-musl@1.7.6': + /@swc/core-linux-x64-musl@1.7.6: + resolution: {integrity: sha512-hQFznpfLK8XajfAAN9Cjs0w/aVmO7iu9VZvInyrTCRcPqxV5O+rvrhRxKvC1LRMZXr5M6JRSRtepp5w+TK4kAw==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@swc/core-win32-arm64-msvc@1.7.6': + /@swc/core-win32-arm64-msvc@1.7.6: + resolution: {integrity: sha512-Aqsd9afykVMuekzjm4X4TDqwxmG4CrzoOSFe0hZrn9SMio72l5eAPnMtYoe5LsIqtjV8MNprLfXaNbjHjTegmA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true optional: true - '@swc/core-win32-ia32-msvc@1.7.6': + /@swc/core-win32-ia32-msvc@1.7.6: + resolution: {integrity: sha512-9h0hYnOeRVNeQgHQTvD1Im67faNSSzBZ7Adtxyu9urNLfBTJilMllFd2QuGHlKW5+uaT6ZH7ZWDb+c/enx7Lcg==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true optional: true - '@swc/core-win32-x64-msvc@1.7.6': + /@swc/core-win32-x64-msvc@1.7.6: + resolution: {integrity: sha512-izeoB8glCSe6IIDQmrVm6bvR9muk9TeKgmtY7b6l1BwL4BFnTUk4dMmpbntT90bEVQn3JPCaPtUG4HfL8VuyuA==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true optional: true - '@swc/core@1.7.6': + /@swc/core@1.7.6: + resolution: {integrity: sha512-FZxyao9eQks1MRmUshgsZTmlg/HB2oXK5fghkoWJm/1CU2q2kaJlVDll2as5j+rmWiwkp0Gidlq8wlXcEEAO+g==} + engines: {node: '>=10'} + requiresBuild: true + peerDependencies: + '@swc/helpers': '*' + peerDependenciesMeta: + '@swc/helpers': + optional: true dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.12 @@ -1922,120 +771,203 @@ snapshots: '@swc/core-win32-arm64-msvc': 1.7.6 '@swc/core-win32-ia32-msvc': 1.7.6 '@swc/core-win32-x64-msvc': 1.7.6 + dev: true - '@swc/counter@0.1.3': {} + /@swc/counter@0.1.3: + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + dev: true - '@swc/jest@0.2.36(@swc/core@1.7.6)': + /@swc/jest@0.2.36(@swc/core@1.7.6): + resolution: {integrity: sha512-8X80dp81ugxs4a11z1ka43FPhP+/e+mJNXJSxiNYk8gIX/jPBtY4gQTrKu/KIoco8bzKuPI5lUxjfLiGsfvnlw==} + engines: {npm: '>= 7.0.0'} + peerDependencies: + '@swc/core': '*' dependencies: '@jest/create-cache-key-function': 29.7.0 '@swc/core': 1.7.6 '@swc/counter': 0.1.3 jsonc-parser: 3.3.1 + dev: true - '@swc/types@0.1.12': + /@swc/types@0.1.12: + resolution: {integrity: sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA==} dependencies: '@swc/counter': 0.1.3 + dev: true - '@tsconfig/node10@1.0.11': {} + /@tsconfig/node10@1.0.11: + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + dev: true - '@tsconfig/node12@1.0.11': {} + /@tsconfig/node12@1.0.11: + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + dev: true - '@tsconfig/node14@1.0.3': {} + /@tsconfig/node14@1.0.3: + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + dev: true - '@tsconfig/node16@1.0.4': {} + /@tsconfig/node16@1.0.4: + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + dev: true - '@types/babel__core@7.20.5': + /@types/babel__core@7.20.5: + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} dependencies: '@babel/parser': 7.25.3 '@babel/types': 7.25.2 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 + dev: true - '@types/babel__generator@7.6.8': + /@types/babel__generator@7.6.8: + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} dependencies: '@babel/types': 7.25.2 + dev: true - '@types/babel__template@7.4.4': + /@types/babel__template@7.4.4: + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} dependencies: '@babel/parser': 7.25.3 '@babel/types': 7.25.2 + dev: true - '@types/babel__traverse@7.20.6': + /@types/babel__traverse@7.20.6: + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} dependencies: '@babel/types': 7.25.2 + dev: true - '@types/graceful-fs@4.1.9': + /@types/graceful-fs@4.1.9: + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} dependencies: '@types/node': 20.14.14 + dev: true - '@types/istanbul-lib-coverage@2.0.6': {} + /@types/istanbul-lib-coverage@2.0.6: + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + dev: true - '@types/istanbul-lib-report@3.0.3': + /@types/istanbul-lib-report@3.0.3: + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} dependencies: '@types/istanbul-lib-coverage': 2.0.6 + dev: true - '@types/istanbul-reports@3.0.4': + /@types/istanbul-reports@3.0.4: + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} dependencies: '@types/istanbul-lib-report': 3.0.3 + dev: true - '@types/jest@29.5.12': + /@types/jest@29.5.12: + resolution: {integrity: sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==} dependencies: expect: 29.7.0 pretty-format: 29.7.0 + dev: true - '@types/node@20.14.14': + /@types/node@20.14.14: + resolution: {integrity: sha512-d64f00982fS9YoOgJkAMolK7MN8Iq3TDdVjchbYHdEmjth/DHowx82GnoA+tVUAN+7vxfYUgAzi+JXbKNd2SDQ==} dependencies: undici-types: 5.26.5 + dev: true - '@types/stack-utils@2.0.3': {} + /@types/stack-utils@2.0.3: + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + dev: true - '@types/strip-bom@3.0.0': {} + /@types/strip-bom@3.0.0: + resolution: {integrity: sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ==} + dev: true - '@types/strip-json-comments@0.0.30': {} + /@types/strip-json-comments@0.0.30: + resolution: {integrity: sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==} + dev: true - '@types/yargs-parser@21.0.3': {} + /@types/yargs-parser@21.0.3: + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + dev: true - '@types/yargs@17.0.33': + /@types/yargs@17.0.33: + resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} dependencies: '@types/yargs-parser': 21.0.3 + dev: true - acorn-walk@8.3.3: + /acorn-walk@8.3.3: + resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} + engines: {node: '>=0.4.0'} dependencies: acorn: 8.12.1 + dev: true - acorn@8.12.1: {} + /acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true - ansi-escapes@4.3.2: + /ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} dependencies: type-fest: 0.21.3 + dev: true - ansi-regex@5.0.1: {} + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true - ansi-styles@3.2.1: + /ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} dependencies: color-convert: 1.9.3 + dev: true - ansi-styles@4.3.0: + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} dependencies: color-convert: 2.0.1 + dev: true - ansi-styles@5.2.0: {} + /ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + dev: true - anymatch@3.1.3: + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 + dev: true - arg@4.1.3: {} + /arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + dev: true - argparse@1.0.10: + /argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: sprintf-js: 1.0.3 + dev: true - async@3.2.5: {} + /async@3.2.5: + resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} + dev: true - babel-jest@29.7.0(@babel/core@7.25.2): + /babel-jest@29.7.0(@babel/core@7.25.2): + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 dependencies: '@babel/core': 7.25.2 '@jest/transform': 29.7.0 @@ -2047,8 +979,11 @@ snapshots: slash: 3.0.0 transitivePeerDependencies: - supports-color + dev: true - babel-plugin-istanbul@6.1.1: + /babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} dependencies: '@babel/helper-plugin-utils': 7.24.8 '@istanbuljs/load-nyc-config': 1.1.0 @@ -2057,15 +992,22 @@ snapshots: test-exclude: 6.0.0 transitivePeerDependencies: - supports-color + dev: true - babel-plugin-jest-hoist@29.6.3: + /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} dependencies: '@babel/template': 7.25.0 '@babel/types': 7.25.2 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.6 + dev: true - babel-preset-current-node-syntax@1.0.1(@babel/core@7.25.2): + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.25.2): + resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.25.2 '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2) @@ -2080,69 +1022,120 @@ snapshots: '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.2) '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.2) + dev: true - babel-preset-jest@29.6.3(@babel/core@7.25.2): + /babel-preset-jest@29.6.3(@babel/core@7.25.2): + 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 dependencies: '@babel/core': 7.25.2 babel-plugin-jest-hoist: 29.6.3 babel-preset-current-node-syntax: 1.0.1(@babel/core@7.25.2) + dev: true - balanced-match@1.0.2: {} + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true - binary-extensions@2.3.0: {} + /binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + dev: true - brace-expansion@1.1.11: + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 + dev: true - brace-expansion@2.0.1: + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} dependencies: balanced-match: 1.0.2 + dev: true - braces@3.0.3: + /braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} dependencies: fill-range: 7.1.1 + dev: true - browserslist@4.23.3: + /browserslist@4.23.3: + resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true dependencies: caniuse-lite: 1.0.30001651 electron-to-chromium: 1.5.5 node-releases: 2.0.18 update-browserslist-db: 1.1.0(browserslist@4.23.3) + dev: true - bs-logger@0.2.6: + /bs-logger@0.2.6: + resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} + engines: {node: '>= 6'} dependencies: fast-json-stable-stringify: 2.1.0 + dev: true - bser@2.1.1: + /bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} dependencies: node-int64: 0.4.0 + dev: true - buffer-from@1.1.2: {} + /buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + dev: true - callsites@3.1.0: {} + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true - camelcase@5.3.1: {} + /camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + dev: true - camelcase@6.3.0: {} + /camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + dev: true - caniuse-lite@1.0.30001651: {} + /caniuse-lite@1.0.30001651: + resolution: {integrity: sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==} + dev: true - chalk@2.4.2: + /chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} dependencies: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 + dev: true - chalk@4.1.2: + /chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 + dev: true - char-regex@1.0.2: {} + /char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + dev: true - chokidar@3.6.0: + /chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} dependencies: anymatch: 3.1.3 braces: 3.0.3 @@ -2153,38 +1146,68 @@ snapshots: readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.3 + dev: true - ci-info@3.9.0: {} + /ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + dev: true - cjs-module-lexer@1.3.1: {} + /cjs-module-lexer@1.3.1: + resolution: {integrity: sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==} + dev: true - cliui@8.0.1: + /cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + dev: true - co@4.6.0: {} + /co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + dev: true - collect-v8-coverage@1.0.2: {} + /collect-v8-coverage@1.0.2: + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + dev: true - color-convert@1.9.3: + /color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: color-name: 1.1.3 + dev: true - color-convert@2.0.1: + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 + dev: true - color-name@1.1.3: {} + /color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + dev: true - color-name@1.1.4: {} + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true - concat-map@0.0.1: {} + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: true - convert-source-map@2.0.0: {} + /convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + dev: true - create-jest@29.7.0(@types/node@20.14.14)(ts-node@10.9.2): + /create-jest@29.7.0(@types/node@20.14.14)(ts-node@10.9.2): + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 @@ -2198,69 +1221,142 @@ snapshots: - babel-plugin-macros - supports-color - ts-node + dev: true - create-require@1.1.1: {} + /create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + dev: true - cross-spawn@7.0.3: + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 + dev: true - dateformat@3.0.2: {} + /dateformat@3.0.2: + resolution: {integrity: sha512-EelsCzH0gMC2YmXuMeaZ3c6md1sUJQxyb1XXc4xaisi/K6qKukqZhKPrEQyRkdNIncgYyLoDTReq0nNyuKerTg==} + dev: true - debug@4.3.6: + /debug@4.3.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true dependencies: ms: 2.1.2 + dev: true - dedent@1.5.3: {} + /dedent@1.5.3: + resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + dev: true - deepmerge@4.3.1: {} + /deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + dev: true - detect-newline@3.1.0: {} + /detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + dev: true - diff-sequences@29.6.3: {} + /diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true - diff@4.0.2: {} + /diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + dev: true - dotenv-cli@7.4.2: + /dotenv-cli@7.4.2: + resolution: {integrity: sha512-SbUj8l61zIbzyhIbg0FwPJq6+wjbzdn9oEtozQpZ6kW2ihCcapKVZj49oCT3oPM+mgQm+itgvUQcG5szxVrZTA==} + hasBin: true dependencies: cross-spawn: 7.0.3 dotenv: 16.4.5 dotenv-expand: 10.0.0 minimist: 1.2.8 + dev: true - dotenv-expand@10.0.0: {} + /dotenv-expand@10.0.0: + resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} + engines: {node: '>=12'} + dev: true - dotenv@16.4.5: {} + /dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + engines: {node: '>=12'} - dynamic-dedupe@0.3.0: + /dynamic-dedupe@0.3.0: + resolution: {integrity: sha512-ssuANeD+z97meYOqd50e04Ze5qp4bPqo8cCkI4TRjZkzAUgIDTrXV1R8QCdINpiI+hw14+rYazvTRdQrz0/rFQ==} dependencies: xtend: 4.0.2 + dev: true - ejs@3.1.10: + /ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true dependencies: jake: 10.9.2 + dev: true - electron-to-chromium@1.5.5: {} + /electron-to-chromium@1.5.5: + resolution: {integrity: sha512-QR7/A7ZkMS8tZuoftC/jfqNkZLQO779SSW3YuZHP4eXpj3EffGLFcB/Xu9AAZQzLccTiCV+EmUo3ha4mQ9wnlA==} + dev: true - emittery@0.13.1: {} + /emittery@0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} + dev: true - emoji-regex@8.0.0: {} + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true - error-ex@1.3.2: + /error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 + dev: true - escalade@3.1.2: {} + /escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + dev: true - escape-string-regexp@1.0.5: {} + /escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + dev: true - escape-string-regexp@2.0.0: {} + /escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + dev: true - esprima@4.0.1: {} + /esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + dev: true - execa@5.1.1: + /execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} dependencies: cross-spawn: 7.0.3 get-stream: 6.0.1 @@ -2271,56 +1367,101 @@ snapshots: onetime: 5.1.2 signal-exit: 3.0.7 strip-final-newline: 2.0.0 + dev: true - exit@0.1.2: {} + /exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + dev: true - expect@29.7.0: + /expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.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 + dev: true - fast-json-stable-stringify@2.1.0: {} + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true - fb-watchman@2.0.2: + /fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} dependencies: bser: 2.1.1 + dev: true - filelist@1.0.4: + /filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: minimatch: 5.1.6 + dev: true - fill-range@7.1.1: + /fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 + dev: true - find-up@4.1.0: + /find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} dependencies: locate-path: 5.0.0 path-exists: 4.0.0 + dev: true - fs.realpath@1.0.0: {} + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true - fsevents@2.3.3: + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true optional: true - function-bind@1.1.2: {} + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: true - gensync@1.0.0-beta.2: {} + /gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + dev: true - get-caller-file@2.0.5: {} + /get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: true - get-package-type@0.1.0: {} + /get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + dev: true - get-stream@6.0.1: {} + /get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + dev: true - glob-parent@5.1.2: + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 + dev: true - glob@7.2.3: + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -2328,66 +1469,131 @@ snapshots: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 + dev: true - globals@11.12.0: {} + /globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: true - graceful-fs@4.2.11: {} + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + dev: true - has-flag@3.0.0: {} + /has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + dev: true - has-flag@4.0.0: {} + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true - hasown@2.0.2: + /hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} dependencies: function-bind: 1.1.2 + dev: true - html-escaper@2.0.2: {} + /html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + dev: true - human-signals@2.1.0: {} + /human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + dev: true - import-local@3.2.0: + /import-local@3.2.0: + resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} + engines: {node: '>=8'} + hasBin: true dependencies: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 + dev: true - imurmurhash@0.1.4: {} + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: true - inflight@1.0.6: + /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. dependencies: once: 1.4.0 wrappy: 1.0.2 + dev: true - inherits@2.0.4: {} + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true - is-arrayish@0.2.1: {} + /is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + dev: true - is-binary-path@2.1.0: + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} dependencies: binary-extensions: 2.3.0 + dev: true - is-core-module@2.15.0: + /is-core-module@2.15.0: + resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==} + engines: {node: '>= 0.4'} dependencies: hasown: 2.0.2 + dev: true - is-extglob@2.1.1: {} + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: true - is-fullwidth-code-point@3.0.0: {} + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true - is-generator-fn@2.1.0: {} + /is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + dev: true - is-glob@4.0.3: + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 + dev: true - is-number@7.0.0: {} + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true - is-stream@2.0.1: {} + /is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + dev: true - isexe@2.0.0: {} + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true - istanbul-lib-coverage@3.2.2: {} + /istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + dev: true - istanbul-lib-instrument@5.2.1: + /istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} dependencies: '@babel/core': 7.25.2 '@babel/parser': 7.25.3 @@ -2396,8 +1602,11 @@ snapshots: semver: 6.3.1 transitivePeerDependencies: - supports-color + dev: true - istanbul-lib-instrument@6.0.3: + /istanbul-lib-instrument@6.0.3: + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} + engines: {node: '>=10'} dependencies: '@babel/core': 7.25.2 '@babel/parser': 7.25.3 @@ -2406,40 +1615,59 @@ snapshots: semver: 7.6.3 transitivePeerDependencies: - supports-color + dev: true - istanbul-lib-report@3.0.1: + /istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} dependencies: istanbul-lib-coverage: 3.2.2 make-dir: 4.0.0 supports-color: 7.2.0 + dev: true - istanbul-lib-source-maps@4.0.1: + /istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} dependencies: debug: 4.3.6 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: - supports-color + dev: true - istanbul-reports@3.1.7: + /istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 + dev: true - jake@10.9.2: + /jake@10.9.2: + resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} + engines: {node: '>=10'} + hasBin: true dependencies: async: 3.2.5 chalk: 4.1.2 filelist: 1.0.4 minimatch: 3.1.2 + dev: true - jest-changed-files@29.7.0: + /jest-changed-files@29.7.0: + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: execa: 5.1.1 jest-util: 29.7.0 p-limit: 3.1.0 + dev: true - jest-circus@29.7.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} dependencies: '@jest/environment': 29.7.0 '@jest/expect': 29.7.0 @@ -2464,8 +1692,17 @@ snapshots: transitivePeerDependencies: - babel-plugin-macros - supports-color + dev: true - jest-cli@29.7.0(@types/node@20.14.14)(ts-node@10.9.2): + /jest-cli@29.7.0(@types/node@20.14.14)(ts-node@10.9.2): + 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 dependencies: '@jest/core': 29.7.0(ts-node@10.9.2) '@jest/test-result': 29.7.0 @@ -2483,8 +1720,19 @@ snapshots: - babel-plugin-macros - supports-color - ts-node + dev: true - jest-config@29.7.0(@types/node@20.14.14)(ts-node@10.9.2): + /jest-config@29.7.0(@types/node@20.14.14)(ts-node@10.9.2): + 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 dependencies: '@babel/core': 7.25.2 '@jest/test-sequencer': 29.7.0 @@ -2513,27 +1761,39 @@ snapshots: transitivePeerDependencies: - babel-plugin-macros - supports-color + dev: true - jest-diff@29.7.0: + /jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 diff-sequences: 29.6.3 jest-get-type: 29.6.3 pretty-format: 29.7.0 + dev: true - jest-docblock@29.7.0: + /jest-docblock@29.7.0: + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: detect-newline: 3.1.0 + dev: true - jest-each@29.7.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} 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 + dev: true - jest-environment-node@29.7.0: + /jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 @@ -2541,10 +1801,16 @@ snapshots: '@types/node': 20.14.14 jest-mock: 29.7.0 jest-util: 29.7.0 + dev: true - jest-get-type@29.6.3: {} + /jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true - jest-haste-map@29.7.0: + /jest-haste-map@29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 @@ -2559,8 +1825,14 @@ snapshots: walker: 1.0.8 optionalDependencies: fsevents: 2.3.3 + dev: true - jest-html-reporter@3.10.2(jest@29.7.0)(typescript@5.5.4): + /jest-html-reporter@3.10.2(jest@29.7.0)(typescript@5.5.4): + 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 dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 @@ -2570,20 +1842,29 @@ snapshots: strip-ansi: 6.0.1 typescript: 5.5.4 xmlbuilder: 15.0.0 + dev: true - jest-leak-detector@29.7.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} dependencies: jest-get-type: 29.6.3 pretty-format: 29.7.0 + dev: true - jest-matcher-utils@29.7.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} dependencies: chalk: 4.1.2 jest-diff: 29.7.0 jest-get-type: 29.6.3 pretty-format: 29.7.0 + dev: true - jest-message-util@29.7.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} dependencies: '@babel/code-frame': 7.24.7 '@jest/types': 29.6.3 @@ -2594,27 +1875,47 @@ snapshots: pretty-format: 29.7.0 slash: 3.0.0 stack-utils: 2.0.6 + dev: true - jest-mock@29.7.0: + /jest-mock@29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 '@types/node': 20.14.14 jest-util: 29.7.0 + dev: true - jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): + /jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true dependencies: jest-resolve: 29.7.0 + dev: true - jest-regex-util@29.6.3: {} + /jest-regex-util@29.6.3: + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true - jest-resolve-dependencies@29.7.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} dependencies: jest-regex-util: 29.6.3 jest-snapshot: 29.7.0 transitivePeerDependencies: - supports-color + dev: true - jest-resolve@29.7.0: + /jest-resolve@29.7.0: + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 graceful-fs: 4.2.11 @@ -2625,8 +1926,11 @@ snapshots: resolve: 1.22.8 resolve.exports: 2.0.2 slash: 3.0.0 + dev: true - jest-runner@29.7.0: + /jest-runner@29.7.0: + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/console': 29.7.0 '@jest/environment': 29.7.0 @@ -2651,8 +1955,11 @@ snapshots: source-map-support: 0.5.13 transitivePeerDependencies: - supports-color + dev: true - jest-runtime@29.7.0: + /jest-runtime@29.7.0: + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 @@ -2678,8 +1985,11 @@ snapshots: strip-bom: 4.0.0 transitivePeerDependencies: - supports-color + dev: true - jest-snapshot@29.7.0: + /jest-snapshot@29.7.0: + resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/core': 7.25.2 '@babel/generator': 7.25.0 @@ -2703,8 +2013,11 @@ snapshots: semver: 7.6.3 transitivePeerDependencies: - supports-color + dev: true - jest-util@29.7.0: + /jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 '@types/node': 20.14.14 @@ -2712,8 +2025,11 @@ snapshots: ci-info: 3.9.0 graceful-fs: 4.2.11 picomatch: 2.3.1 + dev: true - jest-validate@29.7.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} dependencies: '@jest/types': 29.6.3 camelcase: 6.3.0 @@ -2721,8 +2037,11 @@ snapshots: jest-get-type: 29.6.3 leven: 3.1.0 pretty-format: 29.7.0 + dev: true - jest-watcher@29.7.0: + /jest-watcher@29.7.0: + resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 @@ -2732,15 +2051,27 @@ snapshots: emittery: 0.13.1 jest-util: 29.7.0 string-length: 4.0.2 + dev: true - jest-worker@29.7.0: + /jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@types/node': 20.14.14 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 + dev: true - jest@29.7.0(@types/node@20.14.14)(ts-node@10.9.2): + /jest@29.7.0(@types/node@20.14.14)(ts-node@10.9.2): + 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 dependencies: '@jest/core': 29.7.0(ts-node@10.9.2) '@jest/types': 29.6.3 @@ -2751,259 +2082,510 @@ snapshots: - babel-plugin-macros - supports-color - ts-node + dev: true - js-tokens@4.0.0: {} + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: true - js-yaml@3.14.1: + /js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true dependencies: argparse: 1.0.10 esprima: 4.0.1 + dev: true - jsesc@2.5.2: {} + /jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + dev: true - json-parse-even-better-errors@2.3.1: {} + /json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + dev: true - json5@2.2.3: {} + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + dev: true - jsonc-parser@3.3.1: {} + /jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + dev: true - kleur@3.0.3: {} + /kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + dev: true - leven@3.1.0: {} + /leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + dev: true - lines-and-columns@1.2.4: {} + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true - locate-path@5.0.0: + /locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} dependencies: p-locate: 4.1.0 + dev: true - lodash.memoize@4.1.2: {} + /lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + dev: true - lru-cache@5.1.1: + /lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: yallist: 3.1.1 + dev: true - make-dir@4.0.0: + /make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} dependencies: semver: 7.6.3 + dev: true - make-error@1.3.6: {} + /make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + dev: true - makeerror@1.0.12: + /makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} dependencies: tmpl: 1.0.5 + dev: true - merge-stream@2.0.0: {} + /merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: true - micromatch@4.0.7: + /micromatch@4.0.7: + resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + engines: {node: '>=8.6'} dependencies: braces: 3.0.3 picomatch: 2.3.1 + dev: true - mimic-fn@2.1.0: {} + /mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + dev: true - minimatch@3.1.2: + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 + dev: true - minimatch@5.1.6: + /minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 + dev: true - minimist@1.2.8: {} + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: true - mkdirp@1.0.4: {} + /mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + dev: true - ms@2.1.2: {} + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true - natural-compare@1.4.0: {} + /natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true - node-int64@0.4.0: {} + /node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + dev: true - node-releases@2.0.18: {} + /node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + dev: true - normalize-path@3.0.0: {} + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true - npm-run-path@4.0.1: + /npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} dependencies: path-key: 3.1.1 + dev: true - once@1.4.0: + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 + dev: true - onetime@5.1.2: + /onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 + dev: true - p-limit@2.3.0: + /p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} dependencies: p-try: 2.2.0 + dev: true - p-limit@3.1.0: + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 + dev: true - p-locate@4.1.0: + /p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} dependencies: p-limit: 2.3.0 + dev: true - p-try@2.2.0: {} + /p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + dev: true - parse-json@5.2.0: + /parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} dependencies: '@babel/code-frame': 7.24.7 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + dev: true - path-exists@4.0.0: {} + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: true - path-is-absolute@1.0.1: {} + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: true - path-key@3.1.1: {} + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true - path-parse@1.0.7: {} + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true - picocolors@1.0.1: {} + /picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + dev: true - picomatch@2.3.1: {} + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true - pirates@4.0.6: {} + /pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + dev: true - pkg-dir@4.2.0: + /pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} dependencies: find-up: 4.1.0 + dev: true - pretty-format@29.7.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} dependencies: '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 react-is: 18.3.1 + dev: true - prompts@2.4.2: + /prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} dependencies: kleur: 3.0.3 sisteransi: 1.0.5 + dev: true - pure-rand@6.1.0: {} + /pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + dev: true - react-is@18.3.1: {} + /react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + dev: true - readdirp@3.6.0: + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 + dev: true - require-directory@2.1.1: {} + /require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: true - resolve-cwd@3.0.0: + /resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} dependencies: resolve-from: 5.0.0 + dev: true - resolve-from@5.0.0: {} + /resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + dev: true - resolve.exports@2.0.2: {} + /resolve.exports@2.0.2: + resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} + engines: {node: '>=10'} + dev: true - resolve@1.22.8: + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true dependencies: is-core-module: 2.15.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + dev: true - rimraf@2.7.1: + /rimraf@2.7.1: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true dependencies: glob: 7.2.3 + dev: true - semver@6.3.1: {} + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + dev: true - semver@7.6.3: {} + /semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + dev: true - shebang-command@2.0.0: + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 + dev: true - shebang-regex@3.0.0: {} + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true - signal-exit@3.0.7: {} + /signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: true - sisteransi@1.0.5: {} + /sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + dev: true - slash@3.0.0: {} + /slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: true - source-map-support@0.5.13: + /source-map-support@0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} dependencies: buffer-from: 1.1.2 source-map: 0.6.1 + dev: true - source-map-support@0.5.21: + /source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: buffer-from: 1.1.2 source-map: 0.6.1 + dev: true - source-map@0.6.1: {} + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: true - sprintf-js@1.0.3: {} + /sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + dev: true - stack-utils@2.0.6: + /stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} dependencies: escape-string-regexp: 2.0.0 + dev: true - string-length@4.0.2: + /string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} dependencies: char-regex: 1.0.2 strip-ansi: 6.0.1 + dev: true - string-width@4.2.3: + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 + dev: true - strip-ansi@6.0.1: + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 + dev: true - strip-bom@3.0.0: {} + /strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: true - strip-bom@4.0.0: {} + /strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + dev: true - strip-final-newline@2.0.0: {} + /strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + dev: true - strip-json-comments@2.0.1: {} + /strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + dev: true - strip-json-comments@3.1.1: {} + /strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true - supports-color@5.5.0: + /supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} dependencies: has-flag: 3.0.0 + dev: true - supports-color@7.2.0: + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} dependencies: has-flag: 4.0.0 + dev: true - supports-color@8.1.1: + /supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} dependencies: has-flag: 4.0.0 + dev: true - supports-preserve-symlinks-flag@1.0.0: {} + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true - test-exclude@6.0.0: + /test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} dependencies: '@istanbuljs/schema': 0.1.3 glob: 7.2.3 minimatch: 3.1.2 + dev: true - tmpl@1.0.5: {} + /tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + dev: true - to-fast-properties@2.0.0: {} + /to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + dev: true - to-regex-range@5.0.1: + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 + dev: true - tree-kill@1.2.2: {} + /tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + dev: true - ts-jest@29.2.4(@babel/core@7.25.2)(jest@29.7.0)(typescript@5.5.4): + /ts-jest@29.2.4(@babel/core@7.25.2)(jest@29.7.0)(typescript@5.5.4): + resolution: {integrity: sha512-3d6tgDyhCI29HlpwIq87sNuI+3Q6GLTTCeYRHCs7vDz+/3GCMwEtV9jezLyl4ZtnBgx00I7hm8PCP8cTksMGrw==} + 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 dependencies: '@babel/core': 7.25.2 bs-logger: 0.2.6 @@ -3017,8 +2599,18 @@ snapshots: semver: 7.6.3 typescript: 5.5.4 yargs-parser: 21.1.1 + dev: true - ts-node-dev@2.0.0(@swc/core@1.7.6)(@types/node@20.14.14)(typescript@5.5.4): + /ts-node-dev@2.0.0(@swc/core@1.7.6)(@types/node@20.14.14)(typescript@5.5.4): + resolution: {integrity: sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w==} + engines: {node: '>=0.8.0'} + hasBin: true + peerDependencies: + node-notifier: '*' + typescript: '*' + peerDependenciesMeta: + node-notifier: + optional: true dependencies: chokidar: 3.6.0 dynamic-dedupe: 0.3.0 @@ -3035,8 +2627,21 @@ snapshots: - '@swc/core' - '@swc/wasm' - '@types/node' + dev: true - ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.14.14)(typescript@5.5.4): + /ts-node@10.9.2(@swc/core@1.7.6)(@types/node@20.14.14)(typescript@5.5.4): + 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 dependencies: '@cspotcode/source-map-support': 0.8.1 '@swc/core': 1.7.6 @@ -3054,68 +2659,123 @@ snapshots: typescript: 5.5.4 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 + dev: true - tsconfig@7.0.0: + /tsconfig@7.0.0: + resolution: {integrity: sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==} 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 + dev: true - type-detect@4.0.8: {} + /type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + dev: true - type-fest@0.21.3: {} + /type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + dev: true - typescript@5.5.4: {} + /typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} + engines: {node: '>=14.17'} + hasBin: true + dev: true - undici-types@5.26.5: {} + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + dev: true - update-browserslist-db@1.1.0(browserslist@4.23.3): + /update-browserslist-db@1.1.0(browserslist@4.23.3): + resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' dependencies: browserslist: 4.23.3 escalade: 3.1.2 picocolors: 1.0.1 + dev: true - v8-compile-cache-lib@3.0.1: {} + /v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + dev: true - v8-to-istanbul@9.3.0: + /v8-to-istanbul@9.3.0: + resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} + engines: {node: '>=10.12.0'} dependencies: '@jridgewell/trace-mapping': 0.3.25 '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 + dev: true - walker@1.0.8: + /walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: makeerror: 1.0.12 + dev: true - which@2.0.2: + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true dependencies: isexe: 2.0.0 + dev: true - wrap-ansi@7.0.0: + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 + dev: true - wrappy@1.0.2: {} + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: true - write-file-atomic@4.0.2: + /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} dependencies: imurmurhash: 0.1.4 signal-exit: 3.0.7 + dev: true - xmlbuilder@15.0.0: {} + /xmlbuilder@15.0.0: + resolution: {integrity: sha512-KLu/G0DoWhkncQ9eHSI6s0/w+T4TM7rQaLhtCaL6tORv8jFlJPlnGumsgTcGfYeS1qZ/IHqrvDG7zJZ4d7e+nw==} + engines: {node: '>=8.0'} + dev: true - xtend@4.0.2: {} + /xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + dev: true - y18n@5.0.8: {} + /y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: true - yallist@3.1.1: {} + /yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + dev: true - yargs-parser@21.1.1: {} + /yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + dev: true - yargs@17.7.2: + /yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} dependencies: cliui: 8.0.1 escalade: 3.1.2 @@ -3124,7 +2784,14 @@ snapshots: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 + dev: true - yn@3.1.1: {} + /yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + dev: true - yocto-queue@0.1.0: {} + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true diff --git a/integ-tests/typescript/test-report.html b/integ-tests/typescript/test-report.html index 75291c42b..41ccdd97e 100644 --- a/integ-tests/typescript/test-report.html +++ b/integ-tests/typescript/test-report.html @@ -257,13 +257,24 @@ font-size: 1rem; padding: 0 0.5rem; } -

Test Report

Started: 2024-10-21 14:07:26
Suites (1)
0 passed
1 failed
0 pending
Tests (51)
49 passed
2 failed
0 pending
Integ tests > should work for all inputs
single bool
passed
0.383s
Integ tests > should work for all inputs
single string list
passed
0.545s
Integ tests > should work for all inputs
single class
passed
0.527s
Integ tests > should work for all inputs
multiple classes
passed
0.546s
Integ tests > should work for all inputs
single enum list
passed
0.561s
Integ tests > should work for all inputs
single float
passed
0.342s
Integ tests > should work for all inputs
single int
passed
0.455s
Integ tests > should work for all inputs
single optional string
passed
0.518s
Integ tests > should work for all inputs
single map string to string
passed
0.599s
Integ tests > should work for all inputs
single map string to class
passed
0.772s
Integ tests > should work for all inputs
single map string to map
passed
0.568s
Integ tests
should work for all outputs
failed
4.554s
BamlValidationError: BamlValidationError: Failed to parse LLM response: Failed to coerce value: <root>: Too many matches for EnumOutput. Got: ONE (1 times), TWO (1 times), THREE (1 times)
-    at Function.from (/Users/vbv/repos/gloo-lang/engine/language_client_typescript/index.js:33:28)
-    at from (/Users/vbv/repos/gloo-lang/engine/language_client_typescript/index.js:58:32)
-    at BamlAsyncClient.FnEnumOutput (/Users/vbv/repos/gloo-lang/integ-tests/typescript/baml_client/async_client.ts:811:50)
-    at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:125:20)
Integ tests
works with retries1
passed
1.351s
Integ tests
works with retries2
passed
2.249s
Integ tests
works with fallbacks
passed
2.041s
Integ tests
should work with image from url
passed
2.373s
Integ tests
should work with image from base 64
passed
2.346s
Integ tests
should work with audio base 64
passed
1.445s
Integ tests
should work with audio from url
passed
1.163s
Integ tests
should support streaming in OpenAI
passed
3.369s
Integ tests
should support streaming in Gemini
passed
9.511s
Integ tests
should support AWS
passed
2.522s
Integ tests
should support streaming in AWS
passed
2.342s
Integ tests
should support OpenAI shorthand
passed
7.424s
Integ tests
should support OpenAI shorthand streaming
passed
4.16s
Integ tests
should support anthropic shorthand
passed
2.678s
Integ tests
should support anthropic shorthand streaming
passed
4.126s
Integ tests
should support streaming without iterating
passed
3.071s
Integ tests
should support streaming in Claude
passed
1.42s
Integ tests
should support vertex
passed
8.601s
Integ tests
supports tracing sync
passed
0.013s
Integ tests
supports tracing async
passed
2.348s
Integ tests
should work with dynamic types single
passed
1.02s
Integ tests
should work with dynamic types enum
passed
0.895s
Integ tests
should work with dynamic literals
passed
1.779s
Integ tests
should work with dynamic types class
passed
1.006s
Integ tests
should work with dynamic inputs class
passed
1.381s
Integ tests
should work with dynamic inputs list
passed
0.685s
Integ tests
should work with dynamic output map
passed
1.511s
Integ tests
should work with dynamic output union
passed
2.402s
Integ tests
should work with nested classes
failed
10.346s
Error: {"type":"BamlValidationError","prompt":"[\u001b[2mchat\u001b[0m] \u001b[43msystem: \u001b[0mReturn a made up json blob that matches this schema:\nAnswer in JSON using this schema:\n{\n  prop1: string,\n  prop2: {\n    prop1: string,\n    prop2: string,\n    inner: {\n      prop2: int,\n      prop3: float,\n    },\n  },\n}\n---\n\nJSON:\n","raw_output":"Sure! Here is a made-up JSON blob that matches the schema you provided:\n```json\n{\n  \"prop1\": \"Hello\",\n  \"prop2\": {\n    \"prop1\": \"Hi\",\n    \"prop2\": \"World\",\n    \"inner\": {\n      \"prop3\": 4.5,\n      \"prop4\": 3.14,\n    },\n  },\n}\n```\nHere's a breakdown of the JSON:\n\n* `prop1`: A string property with value \"Hello\"\n* `prop2`: An object property with values:\n\t+ `prop1`: A string property with value \"Hi\"\n\t+ `prop2`: A string property with value \"World\"\n\t+ `inner`: An object property with values:\n\t\t- `prop3`: An integer property with value 4.5\n\t\t- `prop4`: A float property with value 3.14\n* `inner` contains another object property with two properties: `prop3` and `prop4`.\n\nI hope this helps! Let me know if you have any questions or need further clarification.","message":"BamlValidationError: Failed to parse LLM response: Failed to coerce value: <root>: Failed to find any TestClassNested in 3 items\n  - <root>: Failed while parsing required fields: missing=0, unparsed=1\n    - <root>: Failed to parse field prop2: prop2: Failed while parsing required fields: missing=0, unparsed=1\n      - prop2: Failed to parse field inner: prop2.inner: Failed while parsing required fields: missing=1, unparsed=0\n        - prop2.inner: Missing required field: prop2\n        - prop2.inner: Failed while parsing required fields: missing=1, unparsed=0\n          - prop2.inner: Missing required field: prop2\n      - prop2: Failed while parsing required fields: missing=0, unparsed=1\n        - prop2: Failed to parse field inner: prop2.inner: Failed while parsing required fields: missing=1, unparsed=0\n          - prop2.inner: Missing required field: prop2\n          - prop2.inner: Failed while parsing required fields: missing=1, unparsed=0\n            - prop2.inner: Missing required field: prop2\n  - <root>: Failed while parsing required fields: missing=2, unparsed=0\n    - <root>: Missing required field: prop1\n    - <root>: Missing required field: prop2\n  - <root>: Failed while parsing required fields: missing=0, unparsed=1\n    - <root>: Failed to parse field prop2: prop2: Failed while parsing required fields: missing=0, unparsed=1\n      - prop2: Failed to parse field inner: prop2.inner: Failed while parsing required fields: missing=1, unparsed=0\n        - prop2.inner: Missing required field: prop2\n        - prop2.inner: Failed while parsing required fields: missing=1, unparsed=0\n          - prop2.inner: Missing required field: prop2\n      - prop2: Failed while parsing required fields: missing=0, unparsed=1\n        - prop2: Failed to parse field inner: prop2.inner: Failed while parsing required fields: missing=1, unparsed=0\n          - prop2.inner: Missing required field: prop2\n          - prop2.inner: Failed while parsing required fields: missing=1, unparsed=0\n            - prop2.inner: Missing required field: prop2"}
-    at BamlStream.parsed [as getFinalResponse] (/Users/vbv/repos/gloo-lang/engine/language_client_typescript/stream.js:58:39)
-    at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:535:19)
Integ tests
should work with dynamic client
passed
0.66s
Integ tests
should work with 'onLogEvent'
passed
2.035s
Integ tests
should work with a sync client
passed
0.757s
Integ tests
should raise an error when appropriate
passed
0.888s
Integ tests
should raise a BAMLValidationError
passed
0.517s
Integ tests
should reset environment variables correctly
passed
0.832s
Integ tests
should use aliases when serializing input objects - classes
passed
1.107s
Integ tests
should use aliases when serializing, but still have original keys in jinja
passed
0.972s
Integ tests
should use aliases when serializing input objects - enums
passed
0.478s
Integ tests
should use aliases when serializing input objects - lists
passed
0.402s
Console Log
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:41:15)
+

Test Report

Started: 2024-10-23 10:48:49
Suites (1)
0 passed
1 failed
0 pending
Tests (51)
50 passed
1 failed
0 pending
Integ tests > should work for all inputs
single bool
passed
0.645s
Integ tests > should work for all inputs
single string list
passed
0.543s
Integ tests > should work for all inputs
single class
passed
0.503s
Integ tests > should work for all inputs
multiple classes
passed
0.926s
Integ tests > should work for all inputs
single enum list
passed
0.462s
Integ tests > should work for all inputs
single float
passed
0.72s
Integ tests > should work for all inputs
single int
passed
0.506s
Integ tests > should work for all inputs
single optional string
passed
0.424s
Integ tests > should work for all inputs
single map string to string
passed
0.849s
Integ tests > should work for all inputs
single map string to class
passed
1.458s
Integ tests > should work for all inputs
single map string to map
passed
0.805s
Integ tests
should work for all outputs
passed
4.499s
Integ tests
works with retries1
passed
1.212s
Integ tests
works with retries2
passed
2.283s
Integ tests
works with fallbacks
passed
2.223s
Integ tests
should work with image from url
passed
1.228s
Integ tests
should work with image from base 64
passed
1.097s
Integ tests
should work with audio base 64
passed
1.239s
Integ tests
should work with audio from url
passed
1.256s
Integ tests
should support streaming in OpenAI
passed
3.557s
Integ tests
should support streaming in Gemini
passed
9.5s
Integ tests
should support AWS
passed
2.614s
Integ tests
should support streaming in AWS
passed
2.337s
Integ tests
should support OpenAI shorthand
passed
11.907s
Integ tests
should support OpenAI shorthand streaming
passed
12.382s
Integ tests
should support anthropic shorthand
passed
2.732s
Integ tests
should support anthropic shorthand streaming
passed
4.167s
Integ tests
should support streaming without iterating
passed
4.25s
Integ tests
should support streaming in Claude
passed
1.014s
Integ tests
should support vertex
passed
10.841s
Integ tests
supports tracing sync
passed
0.016s
Integ tests
supports tracing async
passed
4.106s
Integ tests
should work with dynamic types single
passed
1.115s
Integ tests
should work with dynamic types enum
passed
0.848s
Integ tests
should work with dynamic literals
passed
0.851s
Integ tests
should work with dynamic types class
passed
1.098s
Integ tests
should work with dynamic inputs class
passed
0.682s
Integ tests
should work with dynamic inputs list
passed
0.707s
Integ tests
should work with dynamic output map
passed
1.086s
Integ tests
should work with dynamic output union
passed
2.735s
Integ tests
should work with nested classes
failed
10.164s
Error: expect(received).toEqual(expected) // deep equality
+
+- Expected  - 1
++ Received  + 1
+
+  Object {
+    "prop1": "example",
+    "prop2": Object {
+      "inner": Object {
+        "prop2": 42,
+-       "prop3": 3.14,
++       "prop3": null,
+      },
+      "prop1": "value1",
+      "prop2": "value2",
+    },
+  }
+    at Object.toEqual (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:537:25)
Integ tests
should work with dynamic client
passed
0.673s
Integ tests
should work with 'onLogEvent'
passed
2.621s
Integ tests
should work with a sync client
passed
0.888s
Integ tests
should raise an error when appropriate
passed
0.924s
Integ tests
should raise a BAMLValidationError
passed
0.476s
Integ tests
should reset environment variables correctly
passed
1.909s
Integ tests
should use aliases when serializing input objects - classes
passed
0.873s
Integ tests
should use aliases when serializing, but still have original keys in jinja
passed
1.091s
Integ tests
should use aliases when serializing input objects - enums
passed
0.422s
Integ tests
should use aliases when serializing input objects - lists
passed
0.499s
Console Log
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:41:15)
     at Promise.then.completed (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/utils.js:298:28)
     at new Promise (<anonymous>)
     at callAsyncCircusFn (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-circus@29.7.0/node_modules/jest-circus/build/utils.js:231:10)
@@ -278,12 +289,12 @@
     at runTestInternal (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-runner@29.7.0/node_modules/jest-runner/build/runTest.js:367:16)
     at runTest (/Users/vbv/repos/gloo-lang/integ-tests/typescript/node_modules/.pnpm/jest-runner@29.7.0/node_modules/jest-runner/build/runTest.js:444:34)
calling with class
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:47:15)
got response key
 true
-52
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:133:15)
Expected error Error: BamlError: BamlClientError: BamlClientHttpError: LLM call failed: LLMErrorResponse { client: "RetryClientConstant", model: None, prompt: Chat([RenderedChatMessage { role: "system", allow_duplicate_role: false, parts: [Text("Say a haiku")] }]), request_options: {"model": String("gpt-3.5-turbo")}, start_time: SystemTime { tv_sec: 1729544859, tv_nsec: 13341000 }, latency: 290.43475ms, message: "Request failed: {\n    \"error\": {\n        \"message\": \"Incorrect API key provided: blah. You can find your API key at https://platform.openai.com/account/api-keys.\",\n        \"type\": \"invalid_request_error\",\n        \"param\": null,\n        \"code\": \"invalid_api_key\"\n    }\n}\n", code: InvalidAuthentication }
-    at BamlAsyncClient.parsed [as TestRetryConstant] (/Users/vbv/repos/gloo-lang/integ-tests/typescript/baml_client/async_client.ts:2159:18)
+52
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:133:15)
Expected error Error: BamlError: BamlClientError: BamlClientHttpError: LLM call failed: LLMErrorResponse { client: "RetryClientConstant", model: None, prompt: Chat([RenderedChatMessage { role: "system", allow_duplicate_role: false, parts: [Text("Say a haiku")] }]), request_options: {"model": String("gpt-3.5-turbo")}, start_time: SystemTime { tv_sec: 1729705742, tv_nsec: 988409000 }, latency: 207.287416ms, message: "Request failed: {\n    \"error\": {\n        \"message\": \"Incorrect API key provided: blah. You can find your API key at https://platform.openai.com/account/api-keys.\",\n        \"type\": \"invalid_request_error\",\n        \"param\": null,\n        \"code\": \"invalid_api_key\"\n    }\n}\n", code: InvalidAuthentication }
+    at BamlAsyncClient.parsed [as TestRetryConstant] (/Users/vbv/repos/gloo-lang/integ-tests/typescript/baml_client/async_client.ts:2184:18)
     at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:130:7) {
   code: 'GenericFailure'
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:142:15)
Expected error Error: BamlError: BamlClientError: BamlClientHttpError: LLM call failed: LLMErrorResponse { client: "RetryClientExponential", model: None, prompt: Chat([RenderedChatMessage { role: "system", allow_duplicate_role: false, parts: [Text("Say a haiku")] }]), request_options: {"model": String("gpt-3.5-turbo")}, start_time: SystemTime { tv_sec: 1729544861, tv_nsec: 363925000 }, latency: 222.247958ms, message: "Request failed: {\n    \"error\": {\n        \"message\": \"Incorrect API key provided: blahh. You can find your API key at https://platform.openai.com/account/api-keys.\",\n        \"type\": \"invalid_request_error\",\n        \"param\": null,\n        \"code\": \"invalid_api_key\"\n    }\n}\n", code: InvalidAuthentication }
-    at BamlAsyncClient.parsed [as TestRetryExponential] (/Users/vbv/repos/gloo-lang/integ-tests/typescript/baml_client/async_client.ts:2184:18)
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:142:15)
Expected error Error: BamlError: BamlClientError: BamlClientHttpError: LLM call failed: LLMErrorResponse { client: "RetryClientExponential", model: None, prompt: Chat([RenderedChatMessage { role: "system", allow_duplicate_role: false, parts: [Text("Say a haiku")] }]), request_options: {"model": String("gpt-3.5-turbo")}, start_time: SystemTime { tv_sec: 1729705745, tv_nsec: 299498000 }, latency: 211.756667ms, message: "Request failed: {\n    \"error\": {\n        \"message\": \"Incorrect API key provided: blahh. You can find your API key at https://platform.openai.com/account/api-keys.\",\n        \"type\": \"invalid_request_error\",\n        \"param\": null,\n        \"code\": \"invalid_api_key\"\n    }\n}\n", code: InvalidAuthentication }
+    at BamlAsyncClient.parsed [as TestRetryExponential] (/Users/vbv/repos/gloo-lang/integ-tests/typescript/baml_client/async_client.ts:2209:18)
     at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:139:7) {
   code: 'GenericFailure'
 }
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:295:15)
@@ -684,592 +695,1278 @@
   height: { feet: 6, inches: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:518:13)
final  {
   hair_color: 'black',
-  attributes: { eye_color: 'blue', facial_hair: 'beard' },
+  attributes: { eye_color: 'blue', facial_hair: 'beard', age: '30' },
   height: { meters: 1.8 }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: '', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'Hello', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'Hello', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'Hello', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'Hello', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'Hello', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'Hello', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'Hello', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'Hello', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'Hello', prop2: { prop1: null, prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'Hello', prop2: { prop1: null, prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'Hello', prop2: { prop1: null, prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'Hello', prop2: { prop1: null, prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'Hello', prop2: { prop1: null, prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'Hello', prop2: { prop1: null, prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'Hello', prop2: { prop1: null, prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'Hello', prop2: { prop1: '', prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'Hello', prop2: { prop1: 'Hi', prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'Hello', prop2: { prop1: 'Hi', prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'Hello', prop2: { prop1: 'Hi', prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'Hello', prop2: { prop1: 'Hi', prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'Hello', prop2: { prop1: 'Hi', prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'Hello', prop2: { prop1: 'Hi', prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'Hello', prop2: { prop1: 'Hi', prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'Hello', prop2: { prop1: 'Hi', prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'Hello', prop2: { prop1: 'Hi', prop2: '', inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'Hello', prop2: { prop1: 'Hi', prop2: 'World', inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'Hello', prop2: { prop1: 'Hi', prop2: 'World', inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'Hello', prop2: { prop1: 'Hi', prop2: 'World', inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'Hello', prop2: { prop1: 'Hi', prop2: 'World', inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'Hello', prop2: { prop1: 'Hi', prop2: 'World', inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'Hello', prop2: { prop1: 'Hi', prop2: 'World', inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'Hello', prop2: { prop1: 'Hi', prop2: 'World', inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: null } }
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: null, prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: '', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'example', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'example', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'example', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'example', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'example', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'example', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'example', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'example', prop2: null }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'example', prop2: { prop1: null, prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'example', prop2: { prop1: null, prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'example', prop2: { prop1: null, prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'example', prop2: { prop1: null, prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'example', prop2: { prop1: null, prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'example', prop2: { prop1: null, prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'example', prop2: { prop1: null, prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg { prop1: 'example', prop2: { prop1: '', prop2: null, inner: null } }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
+  prop1: 'example',
+  prop2: { prop1: 'value', prop2: null, inner: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: null } }
+  prop1: 'example',
+  prop2: { prop1: 'value1', prop2: null, inner: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: null } }
+  prop1: 'example',
+  prop2: { prop1: 'value1', prop2: null, inner: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: null } }
+  prop1: 'example',
+  prop2: { prop1: 'value1', prop2: null, inner: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: null } }
+  prop1: 'example',
+  prop2: { prop1: 'value1', prop2: null, inner: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: null } }
+  prop1: 'example',
+  prop2: { prop1: 'value1', prop2: null, inner: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: null } }
+  prop1: 'example',
+  prop2: { prop1: 'value1', prop2: null, inner: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: null } }
+  prop1: 'example',
+  prop2: { prop1: 'value1', prop2: null, inner: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: null } }
+  prop1: 'example',
+  prop2: { prop1: 'value1', prop2: null, inner: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: null } }
+  prop1: 'example',
+  prop2: { prop1: 'value1', prop2: '', inner: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: null } }
+  prop1: 'example',
+  prop2: { prop1: 'value1', prop2: 'value', inner: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: { prop1: 'value1', prop2: 'value2', inner: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: { prop1: 'value1', prop2: 'value2', inner: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: { prop1: 'value1', prop2: 'value2', inner: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: { prop1: 'value1', prop2: 'value2', inner: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: { prop1: 'value1', prop2: 'value2', inner: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: null } }
+  prop1: 'example',
+  prop2: { prop1: 'value1', prop2: 'value2', inner: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: { prop1: 'value1', prop2: 'value2', inner: null }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: null, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: null, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: null, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: null, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: null, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: null, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: null, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: null, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: null, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: null, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: null, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: 3.14 }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: null }
+  }
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:531:15)
msg {
-  prop1: 'Hello',
-  prop2: { prop1: 'Hi', prop2: 'World', inner: { prop2: null, prop3: 4.5 } }
+  prop1: 'example',
+  prop2: {
+    prop1: 'value1',
+    prop2: 'value2',
+    inner: { prop2: 42, prop3: null }
+  }
 }
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:556:15)
     at callback (/Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:70:17)
onLogEvent {
   metadata: {
-    eventId: '9f74ac43-3903-478e-8936-54d5a8ed8f23',
-    rootEventId: '9f74ac43-3903-478e-8936-54d5a8ed8f23'
+    eventId: 'a31531d1-9291-4c37-9e8c-543c8d03112f',
+    rootEventId: 'a31531d1-9291-4c37-9e8c-543c8d03112f'
   },
   prompt: '[\n' +
     '  {\n' +
@@ -1283,12 +1980,12 @@
     ']',
   rawOutput: '["a", "b", "c"]',
   parsedOutput: '["a", "b", "c"]',
-  startTime: '2024-10-21T21:09:04.550Z'
+  startTime: '2024-10-23T17:50:42.810Z'
 }
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:556:15)
     at callback (/Users/vbv/repos/gloo-lang/engine/language_client_typescript/async_context_vars.js:70:17)
onLogEvent {
   metadata: {
-    eventId: '0daa000d-c611-4880-980b-649055872789',
-    rootEventId: '0daa000d-c611-4880-980b-649055872789'
+    eventId: '3f560d75-8a68-4465-9e67-e6b19dcc530a',
+    rootEventId: '3f560d75-8a68-4465-9e67-e6b19dcc530a'
   },
   prompt: '[\n' +
     '  {\n' +
@@ -1302,9 +1999,9 @@
     ']',
   rawOutput: '["d", "e", "f"]',
   parsedOutput: '["d", "e", "f"]',
-  startTime: '2024-10-21T21:09:05.030Z'
-}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:590:15)
Error: Error: BamlError: BamlClientError: BamlClientHttpError: LLM call failed: LLMErrorResponse { client: "MyClient", model: None, prompt: Chat([RenderedChatMessage { role: "system", allow_duplicate_role: false, parts: [Text("Given a string, extract info using the schema:\n\nMy name is Harrison. My hair is black and I'm 6 feet tall.\n\nAnswer in JSON using this schema:\n{\n}")] }]), request_options: {"model": String("gpt-4o-mini")}, start_time: SystemTime { tv_sec: 1729544947, tv_nsec: 193917000 }, latency: 190.5325ms, message: "Request failed: {\n    \"error\": {\n        \"message\": \"Incorrect API key provided: INVALID_KEY. You can find your API key at https://platform.openai.com/account/api-keys.\",\n        \"type\": \"invalid_request_error\",\n        \"param\": null,\n        \"code\": \"invalid_api_key\"\n    }\n}\n", code: InvalidAuthentication }
-    at BamlAsyncClient.parsed (/Users/vbv/repos/gloo-lang/integ-tests/typescript/baml_client/async_client.ts:1159:18)
+  startTime: '2024-10-23T17:50:43.419Z'
+}
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:590:15)
Error: Error: BamlError: BamlClientError: BamlClientHttpError: LLM call failed: LLMErrorResponse { client: "MyClient", model: None, prompt: Chat([RenderedChatMessage { role: "system", allow_duplicate_role: false, parts: [Text("Given a string, extract info using the schema:\n\nMy name is Harrison. My hair is black and I'm 6 feet tall.\n\nAnswer in JSON using this schema:\n{\n}")] }]), request_options: {"model": String("gpt-4o-mini")}, start_time: SystemTime { tv_sec: 1729705845, tv_nsec: 729217000 }, latency: 171.837125ms, message: "Request failed: {\n    \"error\": {\n        \"message\": \"Incorrect API key provided: INVALID_KEY. You can find your API key at https://platform.openai.com/account/api-keys.\",\n        \"type\": \"invalid_request_error\",\n        \"param\": null,\n        \"code\": \"invalid_api_key\"\n    }\n}\n", code: InvalidAuthentication }
+    at BamlAsyncClient.parsed (/Users/vbv/repos/gloo-lang/integ-tests/typescript/baml_client/async_client.ts:1184:18)
     at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:587:7) {
   code: 'GenericFailure'
 }
    at log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:598:17)
@@ -1317,7 +2014,7 @@
     at /Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:596:9
     at Object.<anonymous> (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:594:5) {
   prompt: '[\x1B[2mchat\x1B[0m] \x1B[43msystem: \x1B[0mSay "hello there".\n',
-  raw_output: 'Hello there! How can I assist you today?'
+  raw_output: 'Hello there!'
 }
    at Object.log (/Users/vbv/repos/gloo-lang/integ-tests/typescript/tests/integ-tests.test.ts:610:17)
error BamlValidationError: BamlValidationError: Failed to parse LLM response: Failed to coerce value: <root>: Failed while parsing required fields: missing=2, unparsed=0
   - <root>: Missing required field: nonce
   - <root>: Missing required field: nonce2
diff --git a/tools/versions/engine.cfg b/tools/versions/engine.cfg
index fd635fdae..03bd2c17c 100644
--- a/tools/versions/engine.cfg
+++ b/tools/versions/engine.cfg
@@ -1,5 +1,5 @@
 [bumpversion]
-current_version = 0.62.0
+current_version = 0.63.0
 commit = False
 tag = False
 parse = ^(?P\d+)\.(?P\d+).(?P\d+)$
diff --git a/tools/versions/integ-tests.cfg b/tools/versions/integ-tests.cfg
index 7da5a2905..9875eb0fa 100644
--- a/tools/versions/integ-tests.cfg
+++ b/tools/versions/integ-tests.cfg
@@ -1,5 +1,5 @@
 [bumpversion]
-current_version = 0.62.0
+current_version = 0.63.0
 commit = False
 tag = False
 parse = ^(?P\d+)\.(?P\d+).(?P\d+)$
diff --git a/tools/versions/python.cfg b/tools/versions/python.cfg
index faf906e6d..1279db970 100644
--- a/tools/versions/python.cfg
+++ b/tools/versions/python.cfg
@@ -1,5 +1,5 @@
 [bumpversion]
-current_version = 0.62.0
+current_version = 0.63.0
 commit = False
 tag = False
 parse = ^(?P\d+)\.(?P\d+).(?P\d+)$
diff --git a/tools/versions/ruby.cfg b/tools/versions/ruby.cfg
index bdcaf359c..782dcb661 100644
--- a/tools/versions/ruby.cfg
+++ b/tools/versions/ruby.cfg
@@ -1,5 +1,5 @@
 [bumpversion]
-current_version = 0.62.0
+current_version = 0.63.0
 commit = False
 tag = False
 parse = ^(?P\d+)\.(?P\d+).(?P\d+)$
diff --git a/tools/versions/typescript.cfg b/tools/versions/typescript.cfg
index 5394a205b..e34647f1a 100644
--- a/tools/versions/typescript.cfg
+++ b/tools/versions/typescript.cfg
@@ -1,5 +1,5 @@
 [bumpversion]
-current_version = 0.62.0
+current_version = 0.63.0
 commit = False
 tag = False
 parse = ^(?P\d+)\.(?P\d+).(?P\d+)$
diff --git a/tools/versions/vscode.cfg b/tools/versions/vscode.cfg
index 9f4f53313..2c7268382 100644
--- a/tools/versions/vscode.cfg
+++ b/tools/versions/vscode.cfg
@@ -1,5 +1,5 @@
 [bumpversion]
-current_version = 0.62.0
+current_version = 0.63.0
 commit = False
 tag = False
 parse = ^(?P\d+)\.(?P\d+).(?P\d+)$
diff --git a/typescript/vscode-ext/packages/package.json b/typescript/vscode-ext/packages/package.json
index ca0b609d7..ddf7ca608 100644
--- a/typescript/vscode-ext/packages/package.json
+++ b/typescript/vscode-ext/packages/package.json
@@ -2,7 +2,7 @@
   "name": "baml-extension",
   "displayName": "Baml",
   "description": "BAML is a DSL for AI applications.",
-  "version": "0.62.0",
+  "version": "0.63.0",
   "publisher": "Boundary",
   "repository": "https://github.com/BoundaryML/baml",
   "homepage": "https://www.boundaryml.com",