From 09c8a5764aecf664d956f849d430286dc08172ae Mon Sep 17 00:00:00 2001
From: Onur Solmaz <2453968+osolmaz@users.noreply.github.com>
Date: Tue, 8 Apr 2025 18:56:08 +0200
Subject: [PATCH 01/11] Move Python code to its own dir
---
.gitignore | 3 ++-
.python-version => python/.python-version | 0
conftest.py => python/conftest.py | 0
{jsondoc => python/jsondoc}/__init__.py | 0
{jsondoc => python/jsondoc}/bin/convert_jsondoc.py | 1 -
{jsondoc => python/jsondoc}/bin/validate_jsondoc.py | 0
{jsondoc => python/jsondoc}/convert/__init__.py | 0
{jsondoc => python/jsondoc}/convert/html.py | 0
{jsondoc => python/jsondoc}/convert/markdown.py | 0
{jsondoc => python/jsondoc}/convert/placeholder.py | 0
{jsondoc => python/jsondoc}/convert/utils.py | 0
{jsondoc => python/jsondoc}/models/__init__.py | 0
{jsondoc => python/jsondoc}/models/block/__init__.py | 0
{jsondoc => python/jsondoc}/models/block/base/__init__.py | 0
{jsondoc => python/jsondoc}/models/block/types/__init__.py | 0
.../jsondoc}/models/block/types/bulleted_list_item/__init__.py | 0
.../jsondoc}/models/block/types/code/__init__.py | 0
.../jsondoc}/models/block/types/column/__init__.py | 0
.../jsondoc}/models/block/types/column_list/__init__.py | 0
.../jsondoc}/models/block/types/divider/__init__.py | 0
.../jsondoc}/models/block/types/equation/__init__.py | 0
.../jsondoc}/models/block/types/heading_1/__init__.py | 0
.../jsondoc}/models/block/types/heading_2/__init__.py | 0
.../jsondoc}/models/block/types/heading_3/__init__.py | 0
.../jsondoc}/models/block/types/image/__init__.py | 0
.../models/block/types/image/external_image/__init__.py | 0
.../jsondoc}/models/block/types/image/file_image/__init__.py | 0
.../jsondoc}/models/block/types/numbered_list_item/__init__.py | 0
.../jsondoc}/models/block/types/paragraph/__init__.py | 0
.../jsondoc}/models/block/types/quote/__init__.py | 0
.../jsondoc}/models/block/types/rich_text/__init__.py | 0
.../jsondoc}/models/block/types/rich_text/base/__init__.py | 0
.../jsondoc}/models/block/types/rich_text/equation/__init__.py | 0
.../jsondoc}/models/block/types/rich_text/text/__init__.py | 0
.../jsondoc}/models/block/types/table/__init__.py | 0
.../jsondoc}/models/block/types/table_row/__init__.py | 0
.../jsondoc}/models/block/types/to_do/__init__.py | 0
.../jsondoc}/models/block/types/toggle/__init__.py | 0
{jsondoc => python/jsondoc}/models/file/__init__.py | 0
{jsondoc => python/jsondoc}/models/file/base/__init__.py | 0
{jsondoc => python/jsondoc}/models/file/external/__init__.py | 0
{jsondoc => python/jsondoc}/models/file/file/__init__.py | 0
{jsondoc => python/jsondoc}/models/page/__init__.py | 0
.../jsondoc}/models/shared_definitions/__init__.py | 0
{jsondoc => python/jsondoc}/rules.py | 0
{jsondoc => python/jsondoc}/serialize.py | 0
{jsondoc => python/jsondoc}/utils/__init__.py | 0
{jsondoc => python/jsondoc}/utils/block.py | 0
{jsondoc => python/jsondoc}/utils/text_with_backref.py | 0
{jsondoc => python/jsondoc}/validate/__init__.py | 0
{misc => python/misc}/hash_demo.py | 0
.../misc}/jsonschema_examples/basic_if_then/ex1_success.json | 0
.../misc}/jsonschema_examples/basic_if_then/ex2_success.json | 0
.../misc}/jsonschema_examples/basic_if_then/ex3_fail.json | 0
.../misc}/jsonschema_examples/basic_if_then/schema.json | 0
{misc => python/misc}/test_notion_api.py | 0
{misc => python/misc}/test_notion_api2.py | 0
pyproject.toml => python/pyproject.toml | 0
{scripts => python/scripts}/autogen_pydantic.py | 1 -
{scripts => python/scripts}/utils.py | 0
{tests => python/tests}/html_jsondoc_pairs/test_a_basic.json | 0
.../tests}/html_jsondoc_pairs/test_blockquote_paragraph.json | 0
{tests => python/tests}/html_jsondoc_pairs/test_br_basic.json | 0
.../html_jsondoc_pairs/test_figure_image_with_caption.json | 0
{tests => python/tests}/html_jsondoc_pairs/test_ol_basic.json | 0
.../tests}/html_jsondoc_pairs/test_paragraph_basic.json | 0
.../tests}/html_jsondoc_pairs/test_paragraph_bold.json | 0
.../tests}/html_jsondoc_pairs/test_table_basic.json | 0
.../tests}/html_jsondoc_pairs/test_table_with_caption.json | 0
{tests => python/tests}/html_jsondoc_pairs/test_ul_basic.json | 0
{tests => python/tests}/test_html_to_jsondoc.py | 3 +--
{tests => python/tests}/test_jsondoc_to_markdown.py | 0
{tests => python/tests}/test_main.py | 0
{tests => python/tests}/test_serialization.py | 0
{tests => python/tests}/test_validation.py | 0
uv.lock => python/uv.lock | 0
76 files changed, 3 insertions(+), 5 deletions(-)
rename .python-version => python/.python-version (100%)
rename conftest.py => python/conftest.py (100%)
rename {jsondoc => python/jsondoc}/__init__.py (100%)
rename {jsondoc => python/jsondoc}/bin/convert_jsondoc.py (99%)
rename {jsondoc => python/jsondoc}/bin/validate_jsondoc.py (100%)
rename {jsondoc => python/jsondoc}/convert/__init__.py (100%)
rename {jsondoc => python/jsondoc}/convert/html.py (100%)
rename {jsondoc => python/jsondoc}/convert/markdown.py (100%)
rename {jsondoc => python/jsondoc}/convert/placeholder.py (100%)
rename {jsondoc => python/jsondoc}/convert/utils.py (100%)
rename {jsondoc => python/jsondoc}/models/__init__.py (100%)
rename {jsondoc => python/jsondoc}/models/block/__init__.py (100%)
rename {jsondoc => python/jsondoc}/models/block/base/__init__.py (100%)
rename {jsondoc => python/jsondoc}/models/block/types/__init__.py (100%)
rename {jsondoc => python/jsondoc}/models/block/types/bulleted_list_item/__init__.py (100%)
rename {jsondoc => python/jsondoc}/models/block/types/code/__init__.py (100%)
rename {jsondoc => python/jsondoc}/models/block/types/column/__init__.py (100%)
rename {jsondoc => python/jsondoc}/models/block/types/column_list/__init__.py (100%)
rename {jsondoc => python/jsondoc}/models/block/types/divider/__init__.py (100%)
rename {jsondoc => python/jsondoc}/models/block/types/equation/__init__.py (100%)
rename {jsondoc => python/jsondoc}/models/block/types/heading_1/__init__.py (100%)
rename {jsondoc => python/jsondoc}/models/block/types/heading_2/__init__.py (100%)
rename {jsondoc => python/jsondoc}/models/block/types/heading_3/__init__.py (100%)
rename {jsondoc => python/jsondoc}/models/block/types/image/__init__.py (100%)
rename {jsondoc => python/jsondoc}/models/block/types/image/external_image/__init__.py (100%)
rename {jsondoc => python/jsondoc}/models/block/types/image/file_image/__init__.py (100%)
rename {jsondoc => python/jsondoc}/models/block/types/numbered_list_item/__init__.py (100%)
rename {jsondoc => python/jsondoc}/models/block/types/paragraph/__init__.py (100%)
rename {jsondoc => python/jsondoc}/models/block/types/quote/__init__.py (100%)
rename {jsondoc => python/jsondoc}/models/block/types/rich_text/__init__.py (100%)
rename {jsondoc => python/jsondoc}/models/block/types/rich_text/base/__init__.py (100%)
rename {jsondoc => python/jsondoc}/models/block/types/rich_text/equation/__init__.py (100%)
rename {jsondoc => python/jsondoc}/models/block/types/rich_text/text/__init__.py (100%)
rename {jsondoc => python/jsondoc}/models/block/types/table/__init__.py (100%)
rename {jsondoc => python/jsondoc}/models/block/types/table_row/__init__.py (100%)
rename {jsondoc => python/jsondoc}/models/block/types/to_do/__init__.py (100%)
rename {jsondoc => python/jsondoc}/models/block/types/toggle/__init__.py (100%)
rename {jsondoc => python/jsondoc}/models/file/__init__.py (100%)
rename {jsondoc => python/jsondoc}/models/file/base/__init__.py (100%)
rename {jsondoc => python/jsondoc}/models/file/external/__init__.py (100%)
rename {jsondoc => python/jsondoc}/models/file/file/__init__.py (100%)
rename {jsondoc => python/jsondoc}/models/page/__init__.py (100%)
rename {jsondoc => python/jsondoc}/models/shared_definitions/__init__.py (100%)
rename {jsondoc => python/jsondoc}/rules.py (100%)
rename {jsondoc => python/jsondoc}/serialize.py (100%)
rename {jsondoc => python/jsondoc}/utils/__init__.py (100%)
rename {jsondoc => python/jsondoc}/utils/block.py (100%)
rename {jsondoc => python/jsondoc}/utils/text_with_backref.py (100%)
rename {jsondoc => python/jsondoc}/validate/__init__.py (100%)
rename {misc => python/misc}/hash_demo.py (100%)
rename {misc => python/misc}/jsonschema_examples/basic_if_then/ex1_success.json (100%)
rename {misc => python/misc}/jsonschema_examples/basic_if_then/ex2_success.json (100%)
rename {misc => python/misc}/jsonschema_examples/basic_if_then/ex3_fail.json (100%)
rename {misc => python/misc}/jsonschema_examples/basic_if_then/schema.json (100%)
rename {misc => python/misc}/test_notion_api.py (100%)
rename {misc => python/misc}/test_notion_api2.py (100%)
rename pyproject.toml => python/pyproject.toml (100%)
rename {scripts => python/scripts}/autogen_pydantic.py (99%)
rename {scripts => python/scripts}/utils.py (100%)
rename {tests => python/tests}/html_jsondoc_pairs/test_a_basic.json (100%)
rename {tests => python/tests}/html_jsondoc_pairs/test_blockquote_paragraph.json (100%)
rename {tests => python/tests}/html_jsondoc_pairs/test_br_basic.json (100%)
rename {tests => python/tests}/html_jsondoc_pairs/test_figure_image_with_caption.json (100%)
rename {tests => python/tests}/html_jsondoc_pairs/test_ol_basic.json (100%)
rename {tests => python/tests}/html_jsondoc_pairs/test_paragraph_basic.json (100%)
rename {tests => python/tests}/html_jsondoc_pairs/test_paragraph_bold.json (100%)
rename {tests => python/tests}/html_jsondoc_pairs/test_table_basic.json (100%)
rename {tests => python/tests}/html_jsondoc_pairs/test_table_with_caption.json (100%)
rename {tests => python/tests}/html_jsondoc_pairs/test_ul_basic.json (100%)
rename {tests => python/tests}/test_html_to_jsondoc.py (99%)
rename {tests => python/tests}/test_jsondoc_to_markdown.py (100%)
rename {tests => python/tests}/test_main.py (100%)
rename {tests => python/tests}/test_serialization.py (100%)
rename {tests => python/tests}/test_validation.py (100%)
rename uv.lock => python/uv.lock (100%)
diff --git a/.gitignore b/.gitignore
index 534ee83..fe08754 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,4 +6,5 @@ __pycache__
build/
*.docx
*.pptx
-scratch/
\ No newline at end of file
+scratch/
+dist/
\ No newline at end of file
diff --git a/.python-version b/python/.python-version
similarity index 100%
rename from .python-version
rename to python/.python-version
diff --git a/conftest.py b/python/conftest.py
similarity index 100%
rename from conftest.py
rename to python/conftest.py
diff --git a/jsondoc/__init__.py b/python/jsondoc/__init__.py
similarity index 100%
rename from jsondoc/__init__.py
rename to python/jsondoc/__init__.py
diff --git a/jsondoc/bin/convert_jsondoc.py b/python/jsondoc/bin/convert_jsondoc.py
similarity index 99%
rename from jsondoc/bin/convert_jsondoc.py
rename to python/jsondoc/bin/convert_jsondoc.py
index 090b656..d00211b 100644
--- a/jsondoc/bin/convert_jsondoc.py
+++ b/python/jsondoc/bin/convert_jsondoc.py
@@ -2,7 +2,6 @@
import sys
import pypandoc
-
from jsondoc.convert.html import html_to_jsondoc
from jsondoc.convert.markdown import jsondoc_to_markdown
from jsondoc.serialize import jsondoc_dump_json, load_jsondoc
diff --git a/jsondoc/bin/validate_jsondoc.py b/python/jsondoc/bin/validate_jsondoc.py
similarity index 100%
rename from jsondoc/bin/validate_jsondoc.py
rename to python/jsondoc/bin/validate_jsondoc.py
diff --git a/jsondoc/convert/__init__.py b/python/jsondoc/convert/__init__.py
similarity index 100%
rename from jsondoc/convert/__init__.py
rename to python/jsondoc/convert/__init__.py
diff --git a/jsondoc/convert/html.py b/python/jsondoc/convert/html.py
similarity index 100%
rename from jsondoc/convert/html.py
rename to python/jsondoc/convert/html.py
diff --git a/jsondoc/convert/markdown.py b/python/jsondoc/convert/markdown.py
similarity index 100%
rename from jsondoc/convert/markdown.py
rename to python/jsondoc/convert/markdown.py
diff --git a/jsondoc/convert/placeholder.py b/python/jsondoc/convert/placeholder.py
similarity index 100%
rename from jsondoc/convert/placeholder.py
rename to python/jsondoc/convert/placeholder.py
diff --git a/jsondoc/convert/utils.py b/python/jsondoc/convert/utils.py
similarity index 100%
rename from jsondoc/convert/utils.py
rename to python/jsondoc/convert/utils.py
diff --git a/jsondoc/models/__init__.py b/python/jsondoc/models/__init__.py
similarity index 100%
rename from jsondoc/models/__init__.py
rename to python/jsondoc/models/__init__.py
diff --git a/jsondoc/models/block/__init__.py b/python/jsondoc/models/block/__init__.py
similarity index 100%
rename from jsondoc/models/block/__init__.py
rename to python/jsondoc/models/block/__init__.py
diff --git a/jsondoc/models/block/base/__init__.py b/python/jsondoc/models/block/base/__init__.py
similarity index 100%
rename from jsondoc/models/block/base/__init__.py
rename to python/jsondoc/models/block/base/__init__.py
diff --git a/jsondoc/models/block/types/__init__.py b/python/jsondoc/models/block/types/__init__.py
similarity index 100%
rename from jsondoc/models/block/types/__init__.py
rename to python/jsondoc/models/block/types/__init__.py
diff --git a/jsondoc/models/block/types/bulleted_list_item/__init__.py b/python/jsondoc/models/block/types/bulleted_list_item/__init__.py
similarity index 100%
rename from jsondoc/models/block/types/bulleted_list_item/__init__.py
rename to python/jsondoc/models/block/types/bulleted_list_item/__init__.py
diff --git a/jsondoc/models/block/types/code/__init__.py b/python/jsondoc/models/block/types/code/__init__.py
similarity index 100%
rename from jsondoc/models/block/types/code/__init__.py
rename to python/jsondoc/models/block/types/code/__init__.py
diff --git a/jsondoc/models/block/types/column/__init__.py b/python/jsondoc/models/block/types/column/__init__.py
similarity index 100%
rename from jsondoc/models/block/types/column/__init__.py
rename to python/jsondoc/models/block/types/column/__init__.py
diff --git a/jsondoc/models/block/types/column_list/__init__.py b/python/jsondoc/models/block/types/column_list/__init__.py
similarity index 100%
rename from jsondoc/models/block/types/column_list/__init__.py
rename to python/jsondoc/models/block/types/column_list/__init__.py
diff --git a/jsondoc/models/block/types/divider/__init__.py b/python/jsondoc/models/block/types/divider/__init__.py
similarity index 100%
rename from jsondoc/models/block/types/divider/__init__.py
rename to python/jsondoc/models/block/types/divider/__init__.py
diff --git a/jsondoc/models/block/types/equation/__init__.py b/python/jsondoc/models/block/types/equation/__init__.py
similarity index 100%
rename from jsondoc/models/block/types/equation/__init__.py
rename to python/jsondoc/models/block/types/equation/__init__.py
diff --git a/jsondoc/models/block/types/heading_1/__init__.py b/python/jsondoc/models/block/types/heading_1/__init__.py
similarity index 100%
rename from jsondoc/models/block/types/heading_1/__init__.py
rename to python/jsondoc/models/block/types/heading_1/__init__.py
diff --git a/jsondoc/models/block/types/heading_2/__init__.py b/python/jsondoc/models/block/types/heading_2/__init__.py
similarity index 100%
rename from jsondoc/models/block/types/heading_2/__init__.py
rename to python/jsondoc/models/block/types/heading_2/__init__.py
diff --git a/jsondoc/models/block/types/heading_3/__init__.py b/python/jsondoc/models/block/types/heading_3/__init__.py
similarity index 100%
rename from jsondoc/models/block/types/heading_3/__init__.py
rename to python/jsondoc/models/block/types/heading_3/__init__.py
diff --git a/jsondoc/models/block/types/image/__init__.py b/python/jsondoc/models/block/types/image/__init__.py
similarity index 100%
rename from jsondoc/models/block/types/image/__init__.py
rename to python/jsondoc/models/block/types/image/__init__.py
diff --git a/jsondoc/models/block/types/image/external_image/__init__.py b/python/jsondoc/models/block/types/image/external_image/__init__.py
similarity index 100%
rename from jsondoc/models/block/types/image/external_image/__init__.py
rename to python/jsondoc/models/block/types/image/external_image/__init__.py
diff --git a/jsondoc/models/block/types/image/file_image/__init__.py b/python/jsondoc/models/block/types/image/file_image/__init__.py
similarity index 100%
rename from jsondoc/models/block/types/image/file_image/__init__.py
rename to python/jsondoc/models/block/types/image/file_image/__init__.py
diff --git a/jsondoc/models/block/types/numbered_list_item/__init__.py b/python/jsondoc/models/block/types/numbered_list_item/__init__.py
similarity index 100%
rename from jsondoc/models/block/types/numbered_list_item/__init__.py
rename to python/jsondoc/models/block/types/numbered_list_item/__init__.py
diff --git a/jsondoc/models/block/types/paragraph/__init__.py b/python/jsondoc/models/block/types/paragraph/__init__.py
similarity index 100%
rename from jsondoc/models/block/types/paragraph/__init__.py
rename to python/jsondoc/models/block/types/paragraph/__init__.py
diff --git a/jsondoc/models/block/types/quote/__init__.py b/python/jsondoc/models/block/types/quote/__init__.py
similarity index 100%
rename from jsondoc/models/block/types/quote/__init__.py
rename to python/jsondoc/models/block/types/quote/__init__.py
diff --git a/jsondoc/models/block/types/rich_text/__init__.py b/python/jsondoc/models/block/types/rich_text/__init__.py
similarity index 100%
rename from jsondoc/models/block/types/rich_text/__init__.py
rename to python/jsondoc/models/block/types/rich_text/__init__.py
diff --git a/jsondoc/models/block/types/rich_text/base/__init__.py b/python/jsondoc/models/block/types/rich_text/base/__init__.py
similarity index 100%
rename from jsondoc/models/block/types/rich_text/base/__init__.py
rename to python/jsondoc/models/block/types/rich_text/base/__init__.py
diff --git a/jsondoc/models/block/types/rich_text/equation/__init__.py b/python/jsondoc/models/block/types/rich_text/equation/__init__.py
similarity index 100%
rename from jsondoc/models/block/types/rich_text/equation/__init__.py
rename to python/jsondoc/models/block/types/rich_text/equation/__init__.py
diff --git a/jsondoc/models/block/types/rich_text/text/__init__.py b/python/jsondoc/models/block/types/rich_text/text/__init__.py
similarity index 100%
rename from jsondoc/models/block/types/rich_text/text/__init__.py
rename to python/jsondoc/models/block/types/rich_text/text/__init__.py
diff --git a/jsondoc/models/block/types/table/__init__.py b/python/jsondoc/models/block/types/table/__init__.py
similarity index 100%
rename from jsondoc/models/block/types/table/__init__.py
rename to python/jsondoc/models/block/types/table/__init__.py
diff --git a/jsondoc/models/block/types/table_row/__init__.py b/python/jsondoc/models/block/types/table_row/__init__.py
similarity index 100%
rename from jsondoc/models/block/types/table_row/__init__.py
rename to python/jsondoc/models/block/types/table_row/__init__.py
diff --git a/jsondoc/models/block/types/to_do/__init__.py b/python/jsondoc/models/block/types/to_do/__init__.py
similarity index 100%
rename from jsondoc/models/block/types/to_do/__init__.py
rename to python/jsondoc/models/block/types/to_do/__init__.py
diff --git a/jsondoc/models/block/types/toggle/__init__.py b/python/jsondoc/models/block/types/toggle/__init__.py
similarity index 100%
rename from jsondoc/models/block/types/toggle/__init__.py
rename to python/jsondoc/models/block/types/toggle/__init__.py
diff --git a/jsondoc/models/file/__init__.py b/python/jsondoc/models/file/__init__.py
similarity index 100%
rename from jsondoc/models/file/__init__.py
rename to python/jsondoc/models/file/__init__.py
diff --git a/jsondoc/models/file/base/__init__.py b/python/jsondoc/models/file/base/__init__.py
similarity index 100%
rename from jsondoc/models/file/base/__init__.py
rename to python/jsondoc/models/file/base/__init__.py
diff --git a/jsondoc/models/file/external/__init__.py b/python/jsondoc/models/file/external/__init__.py
similarity index 100%
rename from jsondoc/models/file/external/__init__.py
rename to python/jsondoc/models/file/external/__init__.py
diff --git a/jsondoc/models/file/file/__init__.py b/python/jsondoc/models/file/file/__init__.py
similarity index 100%
rename from jsondoc/models/file/file/__init__.py
rename to python/jsondoc/models/file/file/__init__.py
diff --git a/jsondoc/models/page/__init__.py b/python/jsondoc/models/page/__init__.py
similarity index 100%
rename from jsondoc/models/page/__init__.py
rename to python/jsondoc/models/page/__init__.py
diff --git a/jsondoc/models/shared_definitions/__init__.py b/python/jsondoc/models/shared_definitions/__init__.py
similarity index 100%
rename from jsondoc/models/shared_definitions/__init__.py
rename to python/jsondoc/models/shared_definitions/__init__.py
diff --git a/jsondoc/rules.py b/python/jsondoc/rules.py
similarity index 100%
rename from jsondoc/rules.py
rename to python/jsondoc/rules.py
diff --git a/jsondoc/serialize.py b/python/jsondoc/serialize.py
similarity index 100%
rename from jsondoc/serialize.py
rename to python/jsondoc/serialize.py
diff --git a/jsondoc/utils/__init__.py b/python/jsondoc/utils/__init__.py
similarity index 100%
rename from jsondoc/utils/__init__.py
rename to python/jsondoc/utils/__init__.py
diff --git a/jsondoc/utils/block.py b/python/jsondoc/utils/block.py
similarity index 100%
rename from jsondoc/utils/block.py
rename to python/jsondoc/utils/block.py
diff --git a/jsondoc/utils/text_with_backref.py b/python/jsondoc/utils/text_with_backref.py
similarity index 100%
rename from jsondoc/utils/text_with_backref.py
rename to python/jsondoc/utils/text_with_backref.py
diff --git a/jsondoc/validate/__init__.py b/python/jsondoc/validate/__init__.py
similarity index 100%
rename from jsondoc/validate/__init__.py
rename to python/jsondoc/validate/__init__.py
diff --git a/misc/hash_demo.py b/python/misc/hash_demo.py
similarity index 100%
rename from misc/hash_demo.py
rename to python/misc/hash_demo.py
diff --git a/misc/jsonschema_examples/basic_if_then/ex1_success.json b/python/misc/jsonschema_examples/basic_if_then/ex1_success.json
similarity index 100%
rename from misc/jsonschema_examples/basic_if_then/ex1_success.json
rename to python/misc/jsonschema_examples/basic_if_then/ex1_success.json
diff --git a/misc/jsonschema_examples/basic_if_then/ex2_success.json b/python/misc/jsonschema_examples/basic_if_then/ex2_success.json
similarity index 100%
rename from misc/jsonschema_examples/basic_if_then/ex2_success.json
rename to python/misc/jsonschema_examples/basic_if_then/ex2_success.json
diff --git a/misc/jsonschema_examples/basic_if_then/ex3_fail.json b/python/misc/jsonschema_examples/basic_if_then/ex3_fail.json
similarity index 100%
rename from misc/jsonschema_examples/basic_if_then/ex3_fail.json
rename to python/misc/jsonschema_examples/basic_if_then/ex3_fail.json
diff --git a/misc/jsonschema_examples/basic_if_then/schema.json b/python/misc/jsonschema_examples/basic_if_then/schema.json
similarity index 100%
rename from misc/jsonschema_examples/basic_if_then/schema.json
rename to python/misc/jsonschema_examples/basic_if_then/schema.json
diff --git a/misc/test_notion_api.py b/python/misc/test_notion_api.py
similarity index 100%
rename from misc/test_notion_api.py
rename to python/misc/test_notion_api.py
diff --git a/misc/test_notion_api2.py b/python/misc/test_notion_api2.py
similarity index 100%
rename from misc/test_notion_api2.py
rename to python/misc/test_notion_api2.py
diff --git a/pyproject.toml b/python/pyproject.toml
similarity index 100%
rename from pyproject.toml
rename to python/pyproject.toml
diff --git a/scripts/autogen_pydantic.py b/python/scripts/autogen_pydantic.py
similarity index 99%
rename from scripts/autogen_pydantic.py
rename to python/scripts/autogen_pydantic.py
index 54f12d8..c2ebb60 100644
--- a/scripts/autogen_pydantic.py
+++ b/python/scripts/autogen_pydantic.py
@@ -6,7 +6,6 @@
from urllib.parse import urljoin
from datamodel_code_generator import DataModelType, InputFileType, generate
-
from jsondoc.utils import load_json_file, replace_refs_with_arbitrary_object
# from scripts.utils import copy_directory_without_comments
diff --git a/scripts/utils.py b/python/scripts/utils.py
similarity index 100%
rename from scripts/utils.py
rename to python/scripts/utils.py
diff --git a/tests/html_jsondoc_pairs/test_a_basic.json b/python/tests/html_jsondoc_pairs/test_a_basic.json
similarity index 100%
rename from tests/html_jsondoc_pairs/test_a_basic.json
rename to python/tests/html_jsondoc_pairs/test_a_basic.json
diff --git a/tests/html_jsondoc_pairs/test_blockquote_paragraph.json b/python/tests/html_jsondoc_pairs/test_blockquote_paragraph.json
similarity index 100%
rename from tests/html_jsondoc_pairs/test_blockquote_paragraph.json
rename to python/tests/html_jsondoc_pairs/test_blockquote_paragraph.json
diff --git a/tests/html_jsondoc_pairs/test_br_basic.json b/python/tests/html_jsondoc_pairs/test_br_basic.json
similarity index 100%
rename from tests/html_jsondoc_pairs/test_br_basic.json
rename to python/tests/html_jsondoc_pairs/test_br_basic.json
diff --git a/tests/html_jsondoc_pairs/test_figure_image_with_caption.json b/python/tests/html_jsondoc_pairs/test_figure_image_with_caption.json
similarity index 100%
rename from tests/html_jsondoc_pairs/test_figure_image_with_caption.json
rename to python/tests/html_jsondoc_pairs/test_figure_image_with_caption.json
diff --git a/tests/html_jsondoc_pairs/test_ol_basic.json b/python/tests/html_jsondoc_pairs/test_ol_basic.json
similarity index 100%
rename from tests/html_jsondoc_pairs/test_ol_basic.json
rename to python/tests/html_jsondoc_pairs/test_ol_basic.json
diff --git a/tests/html_jsondoc_pairs/test_paragraph_basic.json b/python/tests/html_jsondoc_pairs/test_paragraph_basic.json
similarity index 100%
rename from tests/html_jsondoc_pairs/test_paragraph_basic.json
rename to python/tests/html_jsondoc_pairs/test_paragraph_basic.json
diff --git a/tests/html_jsondoc_pairs/test_paragraph_bold.json b/python/tests/html_jsondoc_pairs/test_paragraph_bold.json
similarity index 100%
rename from tests/html_jsondoc_pairs/test_paragraph_bold.json
rename to python/tests/html_jsondoc_pairs/test_paragraph_bold.json
diff --git a/tests/html_jsondoc_pairs/test_table_basic.json b/python/tests/html_jsondoc_pairs/test_table_basic.json
similarity index 100%
rename from tests/html_jsondoc_pairs/test_table_basic.json
rename to python/tests/html_jsondoc_pairs/test_table_basic.json
diff --git a/tests/html_jsondoc_pairs/test_table_with_caption.json b/python/tests/html_jsondoc_pairs/test_table_with_caption.json
similarity index 100%
rename from tests/html_jsondoc_pairs/test_table_with_caption.json
rename to python/tests/html_jsondoc_pairs/test_table_with_caption.json
diff --git a/tests/html_jsondoc_pairs/test_ul_basic.json b/python/tests/html_jsondoc_pairs/test_ul_basic.json
similarity index 100%
rename from tests/html_jsondoc_pairs/test_ul_basic.json
rename to python/tests/html_jsondoc_pairs/test_ul_basic.json
diff --git a/tests/test_html_to_jsondoc.py b/python/tests/test_html_to_jsondoc.py
similarity index 99%
rename from tests/test_html_to_jsondoc.py
rename to python/tests/test_html_to_jsondoc.py
index 19c2e8d..f6b95e1 100644
--- a/tests/test_html_to_jsondoc.py
+++ b/python/tests/test_html_to_jsondoc.py
@@ -2,12 +2,11 @@
import os
from pathlib import Path
-from pydantic import BaseModel
-
from jsondoc.convert.html import html_to_jsondoc
from jsondoc.convert.markdown import jsondoc_to_markdown
from jsondoc.serialize import jsondoc_dump_json, load_jsondoc
from jsondoc.utils import diff_jsonable_dict, load_json_file, set_dict_recursive
+from pydantic import BaseModel
def test_convert_html_all_elements():
diff --git a/tests/test_jsondoc_to_markdown.py b/python/tests/test_jsondoc_to_markdown.py
similarity index 100%
rename from tests/test_jsondoc_to_markdown.py
rename to python/tests/test_jsondoc_to_markdown.py
diff --git a/tests/test_main.py b/python/tests/test_main.py
similarity index 100%
rename from tests/test_main.py
rename to python/tests/test_main.py
diff --git a/tests/test_serialization.py b/python/tests/test_serialization.py
similarity index 100%
rename from tests/test_serialization.py
rename to python/tests/test_serialization.py
diff --git a/tests/test_validation.py b/python/tests/test_validation.py
similarity index 100%
rename from tests/test_validation.py
rename to python/tests/test_validation.py
diff --git a/uv.lock b/python/uv.lock
similarity index 100%
rename from uv.lock
rename to python/uv.lock
From 888641ac3f28c31f0f081bd9bd52cd1520eeb2b2 Mon Sep 17 00:00:00 2001
From: Onur Solmaz <2453968+osolmaz@users.noreply.github.com>
Date: Tue, 8 Apr 2025 19:00:48 +0200
Subject: [PATCH 02/11] Checkpoint
---
.github/workflows/test.yaml | 4 +++-
python/README.md | 5 +++++
python/tests/test_html_to_jsondoc.py | 2 +-
python/tests/test_jsondoc_to_markdown.py | 2 +-
python/tests/test_serialization.py | 2 +-
5 files changed, 11 insertions(+), 4 deletions(-)
create mode 100644 python/README.md
diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml
index 838876c..b001273 100644
--- a/.github/workflows/test.yaml
+++ b/.github/workflows/test.yaml
@@ -26,10 +26,12 @@ jobs:
uses: astral-sh/setup-uv@v5
- name: Install dependencies
+ working-directory: ./python
run: uv sync --all-extras --dev
- name: Run tests
+ working-directory: ./python
run: |
- uv run pytest
+ PYTHONPATH=.. uv run pytest
diff --git a/python/README.md b/python/README.md
new file mode 100644
index 0000000..ad3a820
--- /dev/null
+++ b/python/README.md
@@ -0,0 +1,5 @@
+# JSON-DOC Python Package
+
+Python implementation of the JSON-DOC specification.
+
+See the [root README](../README.md) for more information.
\ No newline at end of file
diff --git a/python/tests/test_html_to_jsondoc.py b/python/tests/test_html_to_jsondoc.py
index f6b95e1..561e699 100644
--- a/python/tests/test_html_to_jsondoc.py
+++ b/python/tests/test_html_to_jsondoc.py
@@ -10,7 +10,7 @@
def test_convert_html_all_elements():
- path = "examples/html/html_all_elements.html"
+ path = "../examples/html/html_all_elements.html"
content = open(path, "r").read()
# content = "
This is a bold word and this is an emphasized word.
"
diff --git a/python/tests/test_jsondoc_to_markdown.py b/python/tests/test_jsondoc_to_markdown.py
index bdee3cc..55dc5d0 100644
--- a/python/tests/test_jsondoc_to_markdown.py
+++ b/python/tests/test_jsondoc_to_markdown.py
@@ -5,7 +5,7 @@
def test_convert_jsondoc_to_markdown():
- path = "schema/page/ex1_success.json"
+ path = "../schema/page/ex1_success.json"
content = load_json_file(path)
page = load_jsondoc(content)
diff --git a/python/tests/test_serialization.py b/python/tests/test_serialization.py
index 57848a6..779a285 100644
--- a/python/tests/test_serialization.py
+++ b/python/tests/test_serialization.py
@@ -5,7 +5,7 @@
from jsondoc.serialize import load_page
from jsondoc.utils import diff_strings, load_json_file, timer
-PAGE_PATH = "schema/page/ex1_success.json"
+PAGE_PATH = "../schema/page/ex1_success.json"
def remove_null_fields(string):
From 86c56db1f6935f4977068211d4959e9ca8bb8ad9 Mon Sep 17 00:00:00 2001
From: Onur Solmaz <2453968+osolmaz@users.noreply.github.com>
Date: Tue, 8 Apr 2025 19:03:22 +0200
Subject: [PATCH 03/11] Checkpoint
---
.github/workflows/build.yaml | 8 ++++++--
.github/workflows/publish.yaml | 4 ++++
2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
index ec895e2..43bad50 100644
--- a/.github/workflows/build.yaml
+++ b/.github/workflows/build.yaml
@@ -24,21 +24,25 @@ jobs:
with:
python-version: "3.12"
enable-cache: true
- cache-dependency-glob: "requirements.txt"
+ cache-dependency-glob: "python/requirements.txt"
- name: Install dependencies
+ working-directory: ./python
run: |
if [ -f requirements.txt ]; then uv pip install -r requirements.txt; fi
uv pip install pytest
- name: Install the package
+ working-directory: ./python
run: |
uv pip install .
- name: Test with pytest
+ working-directory: ./python
run: |
- uv run pytest
+ PYTHONPATH=.. uv run pytest
- name: Check if the main script is installed
+ working-directory: ./python
run: |
uv run convert_jsondoc --help
diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml
index 8483f2d..529fb91 100644
--- a/.github/workflows/publish.yaml
+++ b/.github/workflows/publish.yaml
@@ -34,10 +34,12 @@ jobs:
uses: astral-sh/setup-uv@v5
- name: Install dependencies
+ working-directory: ./python
run: |
uv pip install --system toml
- name: Extract version from tag and update pyproject.toml
+ working-directory: ./python
run: |
# Get the version from the tag (remove 'v' prefix)
TAG_VERSION=${GITHUB_REF#refs/tags/v}
@@ -58,11 +60,13 @@ jobs:
cat pyproject.toml | grep version
- name: Build package
+ working-directory: ./python
run: uv build --no-sources
- name: Publish package to PyPI
uses: pypa/gh-action-pypi-publish@v1.12.4
with:
+ packages-dir: python/dist/
user: __token__
password: ${{ secrets.PYPI_API_TOKEN }}
verbose: true
From 628dbbad6e5c3e84b4c4bf63e71e2db21f1b4883 Mon Sep 17 00:00:00 2001
From: Onur Solmaz <2453968+osolmaz@users.noreply.github.com>
Date: Wed, 21 May 2025 12:47:59 +0200
Subject: [PATCH 04/11] Add prompt
---
docs/2025-05-21-json-doc-ts-prompt.md | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
create mode 100644 docs/2025-05-21-json-doc-ts-prompt.md
diff --git a/docs/2025-05-21-json-doc-ts-prompt.md b/docs/2025-05-21-json-doc-ts-prompt.md
new file mode 100644
index 0000000..7d12b5e
--- /dev/null
+++ b/docs/2025-05-21-json-doc-ts-prompt.md
@@ -0,0 +1,21 @@
+---
+title: "Implementing JSON-DOC TypeScript parser"
+author: "Onur "
+date: "2025-05-21"
+---
+
+A lot of coding agent products went into production recently, such as OpenAI Codex, Google Jules, Claude Code, etc. The TypeScript implementation is an ideal task, thanks to existing tests.
+
+Below is the prompt:
+
+```
+Convert JSON Schemas into TS interfaces similar to what is in Python with datamodel-codegen. See https://github.com/bcherny/json-schema-to-typescript and https://github.com/ThomasAribart/json-schema-to-ts. Compare the two and choose the best option.
+
+The interfaces MUST BE generated programmatically, just as how we do in Python. Understand the directory structure first, list, navigate and read files. Look at the json schema files under /schema, and compare them with the generated files in the python directory
+
+We basically need to implement parsing of a JSON-DOC file into typed objects in typescript, similar to Python load_jsondoc() and similar functions
+
+Note that we use uv for running python. There are example json-doc files and tests under /tests and github actions that make sure that the parsing and validation logic in python is correct
+
+For a correct ts implementation, similar tests and checks need to be implemented. Make sure to use up-to-date typescript tooling and conventions. This library is supposed to be installed universally, keep that in mind. Do not use obscure or non-general tooling for packaging and distribution. Follow today's best practices
+```
\ No newline at end of file
From f33d0e60fd52765aa0ac31f81aa8c76ddd151f9b Mon Sep 17 00:00:00 2001
From: Onur Solmaz <2453968+osolmaz@users.noreply.github.com>
Date: Wed, 21 May 2025 13:36:45 +0200
Subject: [PATCH 05/11] Fix validation test
---
python/tests/test_validation.py | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/python/tests/test_validation.py b/python/tests/test_validation.py
index 355f5c3..9793df7 100644
--- a/python/tests/test_validation.py
+++ b/python/tests/test_validation.py
@@ -4,6 +4,8 @@
# Usage: python run_validation_tests.py schema/
+SCHEMA_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../schema"))
+
def run_validation(schema_path, data_path, root=None):
cmd = [
@@ -25,7 +27,7 @@ def run_validation(schema_path, data_path, root=None):
return result.returncode == 0, result.stdout
-def process_directory(source_dir):
+def process_directory(source_dir) -> list[str]:
failed_tests = []
for root, dirs, files in os.walk(source_dir):
@@ -57,6 +59,11 @@ def process_directory(source_dir):
return failed_tests
+def test_validation():
+ failed_tests = process_directory(SCHEMA_DIR)
+ assert len(failed_tests) == 0, f"Failed tests: {failed_tests}"
+
+
if __name__ == "__main__":
if len(sys.argv) != 2:
print("Usage: python script.py ")
From fd3ee0d286e6ce97d192ec3167746e323ce4ec19 Mon Sep 17 00:00:00 2001
From: Onur Solmaz <2453968+osolmaz@users.noreply.github.com>
Date: Thu, 22 May 2025 15:24:36 +0200
Subject: [PATCH 06/11] Claude code test (ts implementation for types) (#13)
* Add CLAUDE.md
* Commit first passing version
* Checkpoint
* Model did reward hacking
* Checkpoint
* Second try
* Don't hardcode enums as well
* Use the main page example for serialization test
* Run prettier
---
CLAUDE.md | 126 +
docs/typescript-implementation.md | 134 +
ts/.github/workflows/build.yml | 43 +
ts/.github/workflows/publish.yml | 36 +
ts/.gitignore | 136 +
ts/README.md | 68 +
ts/jest.config.js | 9 +
ts/package-lock.json | 4329 +++++++++++++++++
ts/package.json | 46 +
ts/scripts/generate-types.ts | 680 +++
ts/src/index.ts | 32 +
ts/src/models/generated/block/base/base.ts | 24 +
ts/src/models/generated/block/base/index.ts | 1 +
ts/src/models/generated/block/block.ts | 22 +
ts/src/models/generated/block/index.ts | 3 +
.../bulleted_list_item/bulleted_list_item.ts | 37 +
.../block/types/bulleted_list_item/index.ts | 1 +
.../models/generated/block/types/code/code.ts | 88 +
.../generated/block/types/code/index.ts | 1 +
.../generated/block/types/column/column.ts | 13 +
.../generated/block/types/column/index.ts | 1 +
.../block/types/column_list/column_list.ts | 13 +
.../block/types/column_list/index.ts | 1 +
.../generated/block/types/divider/divider.ts | 8 +
.../generated/block/types/divider/index.ts | 1 +
.../block/types/equation/equation.ts | 10 +
.../generated/block/types/equation/index.ts | 1 +
.../block/types/heading_1/heading_1.ts | 33 +
.../generated/block/types/heading_1/index.ts | 1 +
.../block/types/heading_2/heading_2.ts | 33 +
.../generated/block/types/heading_2/index.ts | 1 +
.../block/types/heading_3/heading_3.ts | 33 +
.../generated/block/types/heading_3/index.ts | 1 +
.../image/external_image/external_image.ts | 9 +
.../block/types/image/external_image/index.ts | 1 +
.../types/image/file_image/file_image.ts | 9 +
.../block/types/image/file_image/index.ts | 1 +
.../generated/block/types/image/image.ts | 10 +
.../generated/block/types/image/index.ts | 3 +
ts/src/models/generated/block/types/index.ts | 18 +
.../block/types/numbered_list_item/index.ts | 1 +
.../numbered_list_item/numbered_list_item.ts | 37 +
.../generated/block/types/paragraph/index.ts | 1 +
.../block/types/paragraph/paragraph.ts | 37 +
.../generated/block/types/quote/index.ts | 1 +
.../generated/block/types/quote/quote.ts | 37 +
.../block/types/rich_text/base/base.ts | 1 +
.../block/types/rich_text/base/index.ts | 1 +
.../types/rich_text/equation/equation.ts | 16 +
.../block/types/rich_text/equation/index.ts | 1 +
.../generated/block/types/rich_text/index.ts | 4 +
.../block/types/rich_text/rich_text.ts | 5 +
.../block/types/rich_text/text/index.ts | 1 +
.../block/types/rich_text/text/text.ts | 19 +
.../generated/block/types/table/index.ts | 1 +
.../generated/block/types/table/table.ts | 17 +
.../generated/block/types/table_row/index.ts | 1 +
.../block/types/table_row/table_row.ts | 12 +
.../generated/block/types/to_do/index.ts | 1 +
.../generated/block/types/to_do/to_do.ts | 38 +
.../generated/block/types/toggle/index.ts | 1 +
.../generated/block/types/toggle/toggle.ts | 37 +
ts/src/models/generated/essential-types.ts | 130 +
ts/src/models/generated/file/base/base.ts | 1 +
ts/src/models/generated/file/base/index.ts | 1 +
.../generated/file/external/external.ts | 6 +
.../models/generated/file/external/index.ts | 1 +
ts/src/models/generated/file/file.ts | 5 +
ts/src/models/generated/file/file/file.ts | 7 +
ts/src/models/generated/file/file/index.ts | 1 +
ts/src/models/generated/file/index.ts | 4 +
ts/src/models/generated/index.ts | 5 +
ts/src/models/generated/page/index.ts | 1 +
ts/src/models/generated/page/page.ts | 41 +
.../generated/shared_definitions/index.ts | 1 +
.../shared_definitions/shared_definitions.ts | 3 +
ts/src/serialization/loader.ts | 385 ++
ts/src/utils/json.ts | 74 +
ts/src/validation/validator.ts | 89 +
ts/tests/serialization.test.ts | 257 +
ts/tsconfig.json | 17 +
81 files changed, 7316 insertions(+)
create mode 100644 CLAUDE.md
create mode 100644 docs/typescript-implementation.md
create mode 100644 ts/.github/workflows/build.yml
create mode 100644 ts/.github/workflows/publish.yml
create mode 100644 ts/.gitignore
create mode 100644 ts/README.md
create mode 100644 ts/jest.config.js
create mode 100644 ts/package-lock.json
create mode 100644 ts/package.json
create mode 100644 ts/scripts/generate-types.ts
create mode 100644 ts/src/index.ts
create mode 100644 ts/src/models/generated/block/base/base.ts
create mode 100644 ts/src/models/generated/block/base/index.ts
create mode 100644 ts/src/models/generated/block/block.ts
create mode 100644 ts/src/models/generated/block/index.ts
create mode 100644 ts/src/models/generated/block/types/bulleted_list_item/bulleted_list_item.ts
create mode 100644 ts/src/models/generated/block/types/bulleted_list_item/index.ts
create mode 100644 ts/src/models/generated/block/types/code/code.ts
create mode 100644 ts/src/models/generated/block/types/code/index.ts
create mode 100644 ts/src/models/generated/block/types/column/column.ts
create mode 100644 ts/src/models/generated/block/types/column/index.ts
create mode 100644 ts/src/models/generated/block/types/column_list/column_list.ts
create mode 100644 ts/src/models/generated/block/types/column_list/index.ts
create mode 100644 ts/src/models/generated/block/types/divider/divider.ts
create mode 100644 ts/src/models/generated/block/types/divider/index.ts
create mode 100644 ts/src/models/generated/block/types/equation/equation.ts
create mode 100644 ts/src/models/generated/block/types/equation/index.ts
create mode 100644 ts/src/models/generated/block/types/heading_1/heading_1.ts
create mode 100644 ts/src/models/generated/block/types/heading_1/index.ts
create mode 100644 ts/src/models/generated/block/types/heading_2/heading_2.ts
create mode 100644 ts/src/models/generated/block/types/heading_2/index.ts
create mode 100644 ts/src/models/generated/block/types/heading_3/heading_3.ts
create mode 100644 ts/src/models/generated/block/types/heading_3/index.ts
create mode 100644 ts/src/models/generated/block/types/image/external_image/external_image.ts
create mode 100644 ts/src/models/generated/block/types/image/external_image/index.ts
create mode 100644 ts/src/models/generated/block/types/image/file_image/file_image.ts
create mode 100644 ts/src/models/generated/block/types/image/file_image/index.ts
create mode 100644 ts/src/models/generated/block/types/image/image.ts
create mode 100644 ts/src/models/generated/block/types/image/index.ts
create mode 100644 ts/src/models/generated/block/types/index.ts
create mode 100644 ts/src/models/generated/block/types/numbered_list_item/index.ts
create mode 100644 ts/src/models/generated/block/types/numbered_list_item/numbered_list_item.ts
create mode 100644 ts/src/models/generated/block/types/paragraph/index.ts
create mode 100644 ts/src/models/generated/block/types/paragraph/paragraph.ts
create mode 100644 ts/src/models/generated/block/types/quote/index.ts
create mode 100644 ts/src/models/generated/block/types/quote/quote.ts
create mode 100644 ts/src/models/generated/block/types/rich_text/base/base.ts
create mode 100644 ts/src/models/generated/block/types/rich_text/base/index.ts
create mode 100644 ts/src/models/generated/block/types/rich_text/equation/equation.ts
create mode 100644 ts/src/models/generated/block/types/rich_text/equation/index.ts
create mode 100644 ts/src/models/generated/block/types/rich_text/index.ts
create mode 100644 ts/src/models/generated/block/types/rich_text/rich_text.ts
create mode 100644 ts/src/models/generated/block/types/rich_text/text/index.ts
create mode 100644 ts/src/models/generated/block/types/rich_text/text/text.ts
create mode 100644 ts/src/models/generated/block/types/table/index.ts
create mode 100644 ts/src/models/generated/block/types/table/table.ts
create mode 100644 ts/src/models/generated/block/types/table_row/index.ts
create mode 100644 ts/src/models/generated/block/types/table_row/table_row.ts
create mode 100644 ts/src/models/generated/block/types/to_do/index.ts
create mode 100644 ts/src/models/generated/block/types/to_do/to_do.ts
create mode 100644 ts/src/models/generated/block/types/toggle/index.ts
create mode 100644 ts/src/models/generated/block/types/toggle/toggle.ts
create mode 100644 ts/src/models/generated/essential-types.ts
create mode 100644 ts/src/models/generated/file/base/base.ts
create mode 100644 ts/src/models/generated/file/base/index.ts
create mode 100644 ts/src/models/generated/file/external/external.ts
create mode 100644 ts/src/models/generated/file/external/index.ts
create mode 100644 ts/src/models/generated/file/file.ts
create mode 100644 ts/src/models/generated/file/file/file.ts
create mode 100644 ts/src/models/generated/file/file/index.ts
create mode 100644 ts/src/models/generated/file/index.ts
create mode 100644 ts/src/models/generated/index.ts
create mode 100644 ts/src/models/generated/page/index.ts
create mode 100644 ts/src/models/generated/page/page.ts
create mode 100644 ts/src/models/generated/shared_definitions/index.ts
create mode 100644 ts/src/models/generated/shared_definitions/shared_definitions.ts
create mode 100644 ts/src/serialization/loader.ts
create mode 100644 ts/src/utils/json.ts
create mode 100644 ts/src/validation/validator.ts
create mode 100644 ts/tests/serialization.test.ts
create mode 100644 ts/tsconfig.json
diff --git a/CLAUDE.md b/CLAUDE.md
new file mode 100644
index 0000000..a28eff3
--- /dev/null
+++ b/CLAUDE.md
@@ -0,0 +1,126 @@
+# CLAUDE.md
+
+This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
+
+## Project Overview
+
+JSON-DOC is a standardized format for storing structured content in JSON files, inspired by Notion's data model. It supports a wide variety of content types including paragraphs, headings, lists, tables, images, code blocks, and more.
+
+The project consists of:
+1. A JSON schema specification for the format
+2. A Python implementation
+3. A TypeScript implementation (in progress)
+4. Converters for various formats (HTML, Markdown, etc.)
+
+## Project Structure
+
+- `/schema/`: JSON schemas defining the structure of JSON-DOC files
+- `/python/`: Python implementation
+- `/ts/`: TypeScript implementation (in progress)
+- `/docs/`: Documentation
+- `/examples/`: Example files showing the format
+- `/tests/`: Tests for both implementations
+
+## Development Commands
+
+### Python Development
+
+```bash
+# Set up development environment
+cd /Users/onur/tc/JSON-DOC/python
+python -m pip install -e .
+python -m pip install -e ".[dev]"
+
+# Run tests
+cd /Users/onur/tc/JSON-DOC/python
+pytest
+
+# Run a specific test
+cd /Users/onur/tc/JSON-DOC/python
+pytest tests/test_serialization.py -v
+
+# Run validation tests
+cd /Users/onur/tc/JSON-DOC/python
+python tests/test_validation.py schema
+
+# Run linting
+cd /Users/onur/tc/JSON-DOC/python
+ruff check .
+ruff format .
+```
+
+### TypeScript Development
+
+```bash
+# Set up development environment
+cd /Users/onur/tc/JSON-DOC/ts
+npm install
+
+# Build TypeScript
+cd /Users/onur/tc/JSON-DOC/ts
+npm run build
+
+# Run tests
+cd /Users/onur/tc/JSON-DOC/ts
+npm test
+```
+
+## Architecture Overview
+
+### JSON-DOC Schema
+
+The JSON-DOC schema is defined in JSONSchema format, with the following primary components:
+
+1. **Page**: The top-level container for all content
+2. **Block**: Content blocks of various types (paragraph, heading, list item, etc.)
+3. **Rich Text**: Text content with formatting (bold, italic, etc.)
+4. **File**: External file references (images, etc.)
+
+Each block type has specific schemas and validation rules.
+
+### Python Implementation
+
+The Python implementation uses Pydantic models for validation and serialization, with:
+
+- Block types implemented as classes inheriting from a base Block class
+- Rich text types implemented as classes inheriting from a base RichText class
+- Serialization/deserialization functions for loading and saving JSON-DOC files
+- Converters for HTML, Markdown, and other formats
+
+Key modules:
+- `jsondoc.models`: Pydantic models for JSON-DOC
+- `jsondoc.serialize`: Functions for loading/saving JSON-DOC
+- `jsondoc.validate`: Schema validation
+- `jsondoc.convert`: Conversion between formats
+
+### TypeScript Implementation
+
+The TypeScript implementation is in progress, following similar architecture to the Python version:
+
+- Type definitions for all JSON-DOC structures
+- Functions for loading/saving JSON-DOC files
+- Schema validation
+- Converters for other formats
+
+## Testing Strategy
+
+- Schema validation tests ensure examples conform to schemas
+- Serialization tests ensure round-trip conversion preserves data
+- Conversion tests verify correct transformation between formats
+- Integration tests for end-to-end workflows
+
+## Implementation Notes
+
+1. The project follows a modular architecture with clear separation between:
+ - Schema definition
+ - Model implementation
+ - Validation
+ - Serialization
+ - Conversion
+
+2. The TypeScript implementation should follow the same patterns as the Python implementation, with appropriate adaptations for the TypeScript ecosystem.
+
+3. The core functionality is focused on:
+ - Loading JSON-DOC files into typed objects
+ - Validating JSON-DOC files against schemas
+ - Converting between JSON-DOC and other formats
\ No newline at end of file
diff --git a/docs/typescript-implementation.md b/docs/typescript-implementation.md
new file mode 100644
index 0000000..2206bbd
--- /dev/null
+++ b/docs/typescript-implementation.md
@@ -0,0 +1,134 @@
+---
+title: "TypeScript Implementation"
+author: "TextCortex Dev Team"
+date: "2025-05-21"
+---
+
+This file was generated by Claude Code.
+
+---
+
+# JSON-DOC TypeScript Implementation
+
+In addition to the Python implementation, JSON-DOC is also available as a TypeScript library. This allows for better integration with JavaScript/TypeScript projects and web applications.
+
+## Installation
+
+```bash
+# Using npm
+npm install jsondoc
+
+# Using yarn
+yarn add jsondoc
+```
+
+## Features
+
+The TypeScript implementation provides the following features:
+
+- Full TypeScript type definitions for all JSON-DOC objects
+- Loader/serializer functions similar to the Python implementation
+- Runtime validation using JSON Schema (via ajv)
+- Support for all block types defined in the JSON-DOC specification
+
+## Usage
+
+```typescript
+import { loadJsonDoc, jsonDocDumpJson } from 'jsondoc';
+
+// Load JSON-DOC from a string
+const jsonString = '{"object":"page","id":"page-id","children":[...]}';
+const doc = loadJsonDoc(jsonString);
+
+// Or load from an object
+const jsonObject = {
+ object: 'page',
+ id: 'page-id',
+ children: [...]
+};
+const doc2 = loadJsonDoc(jsonObject);
+
+// Serialize back to JSON
+const serialized = jsonDocDumpJson(doc, 2); // 2 spaces indentation
+```
+
+## Type Definitions
+
+The TypeScript implementation provides type-safe interfaces for all JSON-DOC objects. These are automatically generated from the same JSON schemas used by the Python implementation.
+
+```typescript
+import {
+ Page,
+ BlockBase,
+ BlockType,
+ RichTextText
+} from 'jsondoc';
+
+// Create a simple page
+const page: Page = {
+ object: 'page',
+ id: 'page-id',
+ children: [
+ {
+ object: 'block',
+ type: BlockType.Paragraph,
+ paragraph: {
+ rich_text: [
+ {
+ type: 'text',
+ text: {
+ content: 'Hello, world!'
+ }
+ }
+ ]
+ }
+ }
+ ]
+};
+```
+
+## Validation
+
+The TypeScript implementation includes validation functions similar to the Python implementation:
+
+```typescript
+import { validateAgainstSchema, loadSchema } from 'jsondoc';
+
+// Load a schema
+const schema = await loadSchema('path/to/schema.json');
+
+// Validate a document
+try {
+ validateAgainstSchema(document, schema);
+ console.log('Document is valid');
+} catch (error) {
+ console.error('Validation failed:', error.message);
+}
+```
+
+## Implementation Details
+
+### Code Generation
+
+The TypeScript interfaces are generated directly from the JSON schemas using `json-schema-to-typescript`. This ensures that the TypeScript types match the JSON schema definitions exactly.
+
+### Architecture
+
+The TypeScript implementation follows a similar architecture to the Python implementation:
+
+- **models/**: TypeScript interfaces for JSON-DOC objects
+- **validation/**: Schema validation functionality
+- **serialization/**: Loading and serializing JSON-DOC objects
+- **utils/**: Utility functions
+
+### Differences from Python Implementation
+
+While we strive to keep the API similar between the Python and TypeScript implementations, there are some differences due to the nature of the languages:
+
+1. TypeScript's type system is compile-time only, so runtime validation is handled separately using ajv
+2. The TypeScript implementation uses standard ES modules for imports/exports
+3. Function naming follows JavaScript conventions (camelCase instead of snake_case)
+
+## Development
+
+If you want to contribute to the TypeScript implementation, see the [README.md](../ts/README.md) file in the `ts` directory for development instructions.
\ No newline at end of file
diff --git a/ts/.github/workflows/build.yml b/ts/.github/workflows/build.yml
new file mode 100644
index 0000000..8a3d372
--- /dev/null
+++ b/ts/.github/workflows/build.yml
@@ -0,0 +1,43 @@
+name: Build and Test
+
+on:
+ push:
+ branches: [main]
+ paths:
+ - "ts/**"
+ pull_request:
+ branches: [main]
+ paths:
+ - "ts/**"
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ defaults:
+ run:
+ working-directory: ./ts
+
+ strategy:
+ matrix:
+ node-version: [16.x, 18.x, 20.x]
+
+ steps:
+ - uses: actions/checkout@v3
+ - name: Use Node.js ${{ matrix.node-version }}
+ uses: actions/setup-node@v3
+ with:
+ node-version: ${{ matrix.node-version }}
+ cache: "npm"
+ cache-dependency-path: ./ts/package-lock.json
+
+ - name: Install dependencies
+ run: npm ci
+
+ - name: Generate types
+ run: npm run generate-types
+
+ - name: Build
+ run: npm run build
+
+ - name: Test
+ run: npm test
diff --git a/ts/.github/workflows/publish.yml b/ts/.github/workflows/publish.yml
new file mode 100644
index 0000000..69e4793
--- /dev/null
+++ b/ts/.github/workflows/publish.yml
@@ -0,0 +1,36 @@
+name: Publish Package
+
+on:
+ release:
+ types: [created]
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ defaults:
+ run:
+ working-directory: ./ts
+
+ steps:
+ - uses: actions/checkout@v3
+ - uses: actions/setup-node@v3
+ with:
+ node-version: "16.x"
+ registry-url: "https://registry.npmjs.org"
+
+ - name: Install dependencies
+ run: npm ci
+
+ - name: Generate types
+ run: npm run generate-types
+
+ - name: Build
+ run: npm run build
+
+ - name: Test
+ run: npm test
+
+ - name: Publish
+ run: npm publish
+ env:
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
diff --git a/ts/.gitignore b/ts/.gitignore
new file mode 100644
index 0000000..1170717
--- /dev/null
+++ b/ts/.gitignore
@@ -0,0 +1,136 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+lerna-debug.log*
+.pnpm-debug.log*
+
+# Diagnostic reports (https://nodejs.org/api/report.html)
+report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
+
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+*.lcov
+
+# nyc test coverage
+.nyc_output
+
+# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# Bower dependency directory (https://bower.io/)
+bower_components
+
+# node-waf configuration
+.lock-wscript
+
+# Compiled binary addons (https://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directories
+node_modules/
+jspm_packages/
+
+# Snowpack dependency directory (https://snowpack.dev/)
+web_modules/
+
+# TypeScript cache
+*.tsbuildinfo
+
+# Optional npm cache directory
+.npm
+
+# Optional eslint cache
+.eslintcache
+
+# Optional stylelint cache
+.stylelintcache
+
+# Microbundle cache
+.rpt2_cache/
+.rts2_cache_cjs/
+.rts2_cache_es/
+.rts2_cache_umd/
+
+# Optional REPL history
+.node_repl_history
+
+# Output of 'npm pack'
+*.tgz
+
+# Yarn Integrity file
+.yarn-integrity
+
+# dotenv environment variable files
+.env
+.env.development.local
+.env.test.local
+.env.production.local
+.env.local
+
+# parcel-bundler cache (https://parceljs.org/)
+.cache
+.parcel-cache
+
+# Next.js build output
+.next
+out
+
+# Nuxt.js build / generate output
+.nuxt
+dist
+
+# Gatsby files
+.cache/
+# Comment in the public line in if your project uses Gatsby and not Next.js
+# https://nextjs.org/blog/next-9-1#public-directory-support
+# public
+
+# vuepress build output
+.vuepress/dist
+
+# vuepress v2.x temp and cache directory
+.temp
+.cache
+
+# vitepress build output
+**/.vitepress/dist
+
+# vitepress cache directory
+**/.vitepress/cache
+
+# Docusaurus cache and generated files
+.docusaurus
+
+# Serverless directories
+.serverless/
+
+# FuseBox cache
+.fusebox/
+
+# DynamoDB Local files
+.dynamodb/
+
+# TernJS port file
+.tern-port
+
+# Stores VSCode versions used for testing VSCode extensions
+.vscode-test
+
+# yarn v2
+.yarn/cache
+.yarn/unplugged
+.yarn/build-state.yml
+.yarn/install-state.gz
+.pnp.*
diff --git a/ts/README.md b/ts/README.md
new file mode 100644
index 0000000..6819d11
--- /dev/null
+++ b/ts/README.md
@@ -0,0 +1,68 @@
+# JSON-DOC TypeScript Implementation
+
+TypeScript implementation of the JSON-DOC specification.
+
+## Installation
+
+```bash
+npm install jsondoc
+```
+
+## Usage
+
+```typescript
+import { loadJsonDoc, jsonDocDumpJson } from 'jsondoc';
+
+// Load JSON-DOC from a string or object
+const jsonString = '{"object":"page","id":"page-id","children":[...]}';
+const doc = loadJsonDoc(jsonString);
+
+// Or load from an object
+const jsonObject = {
+ object: 'page',
+ id: 'page-id',
+ children: [...]
+};
+const doc2 = loadJsonDoc(jsonObject);
+
+// Serialize back to JSON
+const serialized = jsonDocDumpJson(doc, 2); // 2 spaces indentation
+```
+
+## Features
+
+- Full TypeScript type definitions for JSON-DOC format
+- Load and serialize JSON-DOC objects
+- Type-safe handling of different block types
+- Runtime validation using JSON Schema
+- Support for all block types defined in the JSON-DOC specification
+
+## Development
+
+### Setup
+
+```bash
+# Install dependencies
+npm install
+
+# Generate TypeScript types from JSON schemas
+npm run generate-types
+
+# Build the project
+npm run build
+
+# Run tests
+npm test
+```
+
+### Project Structure
+
+- `src/models/`: TypeScript type definitions
+- `src/serialization/`: Functions for loading and serializing JSON-DOC
+- `src/validation/`: JSON schema validation utilities
+- `src/utils/`: Helper functions
+- `tests/`: Test suite
+
+## License
+
+MIT
diff --git a/ts/jest.config.js b/ts/jest.config.js
new file mode 100644
index 0000000..e4ead60
--- /dev/null
+++ b/ts/jest.config.js
@@ -0,0 +1,9 @@
+/** @type {import('ts-jest').JestConfigWithTsJest} */
+module.exports = {
+ preset: "ts-jest",
+ testEnvironment: "node",
+ testMatch: ["**/tests/**/*.test.ts"],
+ transform: {
+ "^.+\\.tsx?$": ["ts-jest", { tsconfig: "tsconfig.json" }],
+ },
+};
diff --git a/ts/package-lock.json b/ts/package-lock.json
new file mode 100644
index 0000000..8d23e83
--- /dev/null
+++ b/ts/package-lock.json
@@ -0,0 +1,4329 @@
+{
+ "name": "jsondoc",
+ "version": "0.1.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "jsondoc",
+ "version": "0.1.0",
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^8.17.1",
+ "ajv-formats": "^3.0.1",
+ "json5": "^2.2.3",
+ "strip-json-comments": "^5.0.2"
+ },
+ "devDependencies": {
+ "@types/jest": "^29.5.14",
+ "ajv": "^8.17.1",
+ "ajv-formats": "^3.0.1",
+ "jest": "^29.7.0",
+ "json-schema-to-typescript": "^15.0.4",
+ "prettier": "3.5.3",
+ "ts-jest": "^29.3.4",
+ "ts-node": "^10.9.2",
+ "typescript": "^5.8.3"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/@ampproject/remapping": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
+ "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@apidevtools/json-schema-ref-parser": {
+ "version": "11.9.3",
+ "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-11.9.3.tgz",
+ "integrity": "sha512-60vepv88RwcJtSHrD6MjIL6Ta3SOYbgfnkHb+ppAVK+o9mXprRtulx7VlRl3lN3bbvysAfCS7WMVfhUYemB0IQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jsdevtools/ono": "^7.1.3",
+ "@types/json-schema": "^7.0.15",
+ "js-yaml": "^4.1.0"
+ },
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/philsturgeon"
+ }
+ },
+ "node_modules/@apidevtools/json-schema-ref-parser/node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true,
+ "license": "Python-2.0"
+ },
+ "node_modules/@apidevtools/json-schema-ref-parser/node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
+ "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.27.1",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/compat-data": {
+ "version": "7.27.2",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.2.tgz",
+ "integrity": "sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/core": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.1.tgz",
+ "integrity": "sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@ampproject/remapping": "^2.2.0",
+ "@babel/code-frame": "^7.27.1",
+ "@babel/generator": "^7.27.1",
+ "@babel/helper-compilation-targets": "^7.27.1",
+ "@babel/helper-module-transforms": "^7.27.1",
+ "@babel/helpers": "^7.27.1",
+ "@babel/parser": "^7.27.1",
+ "@babel/template": "^7.27.1",
+ "@babel/traverse": "^7.27.1",
+ "@babel/types": "^7.27.1",
+ "convert-source-map": "^2.0.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.3",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/babel"
+ }
+ },
+ "node_modules/@babel/generator": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.1.tgz",
+ "integrity": "sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.27.1",
+ "@babel/types": "^7.27.1",
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "jsesc": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets": {
+ "version": "7.27.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz",
+ "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/compat-data": "^7.27.2",
+ "@babel/helper-validator-option": "^7.27.1",
+ "browserslist": "^4.24.0",
+ "lru-cache": "^5.1.1",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-imports": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz",
+ "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/traverse": "^7.27.1",
+ "@babel/types": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-transforms": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.1.tgz",
+ "integrity": "sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.27.1",
+ "@babel/traverse": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-plugin-utils": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz",
+ "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
+ "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
+ "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-option": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
+ "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helpers": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.1.tgz",
+ "integrity": "sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/template": "^7.27.1",
+ "@babel/types": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.27.2",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz",
+ "integrity": "sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.27.1"
+ },
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-async-generators": {
+ "version": "7.8.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
+ "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-bigint": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
+ "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-class-properties": {
+ "version": "7.12.13",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
+ "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.12.13"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-class-static-block": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
+ "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-import-attributes": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz",
+ "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-import-meta": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
+ "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-json-strings": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
+ "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-jsx": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz",
+ "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-logical-assignment-operators": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
+ "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
+ "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-numeric-separator": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
+ "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-object-rest-spread": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
+ "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-optional-catch-binding": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
+ "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-optional-chaining": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
+ "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-private-property-in-object": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
+ "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-top-level-await": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
+ "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-typescript": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz",
+ "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/template": {
+ "version": "7.27.2",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz",
+ "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.27.1",
+ "@babel/parser": "^7.27.2",
+ "@babel/types": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.1.tgz",
+ "integrity": "sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.27.1",
+ "@babel/generator": "^7.27.1",
+ "@babel/parser": "^7.27.1",
+ "@babel/template": "^7.27.1",
+ "@babel/types": "^7.27.1",
+ "debug": "^4.3.1",
+ "globals": "^11.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz",
+ "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@bcoe/v8-coverage": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
+ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@cspotcode/source-map-support": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
+ "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/trace-mapping": "0.3.9"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
+ "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
+ "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "camelcase": "^5.3.1",
+ "find-up": "^4.1.0",
+ "get-package-type": "^0.1.0",
+ "js-yaml": "^3.13.1",
+ "resolve-from": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@istanbuljs/schema": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
+ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@jest/console": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz",
+ "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/core": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz",
+ "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/console": "^29.7.0",
+ "@jest/reporters": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
+ "exit": "^0.1.2",
+ "graceful-fs": "^4.2.9",
+ "jest-changed-files": "^29.7.0",
+ "jest-config": "^29.7.0",
+ "jest-haste-map": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-regex-util": "^29.6.3",
+ "jest-resolve": "^29.7.0",
+ "jest-resolve-dependencies": "^29.7.0",
+ "jest-runner": "^29.7.0",
+ "jest-runtime": "^29.7.0",
+ "jest-snapshot": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
+ "jest-watcher": "^29.7.0",
+ "micromatch": "^4.0.4",
+ "pretty-format": "^29.7.0",
+ "slash": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "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
+ }
+ }
+ },
+ "node_modules/@jest/environment": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz",
+ "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/fake-timers": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "jest-mock": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/expect": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz",
+ "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "expect": "^29.7.0",
+ "jest-snapshot": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/expect-utils": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz",
+ "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "jest-get-type": "^29.6.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/fake-timers": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz",
+ "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "@sinonjs/fake-timers": "^10.0.2",
+ "@types/node": "*",
+ "jest-message-util": "^29.7.0",
+ "jest-mock": "^29.7.0",
+ "jest-util": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/globals": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz",
+ "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/environment": "^29.7.0",
+ "@jest/expect": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "jest-mock": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/reporters": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz",
+ "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@bcoe/v8-coverage": "^0.2.3",
+ "@jest/console": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@jridgewell/trace-mapping": "^0.3.18",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "collect-v8-coverage": "^1.0.0",
+ "exit": "^0.1.2",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.2.9",
+ "istanbul-lib-coverage": "^3.0.0",
+ "istanbul-lib-instrument": "^6.0.0",
+ "istanbul-lib-report": "^3.0.0",
+ "istanbul-lib-source-maps": "^4.0.0",
+ "istanbul-reports": "^3.1.3",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-worker": "^29.7.0",
+ "slash": "^3.0.0",
+ "string-length": "^4.0.1",
+ "strip-ansi": "^6.0.0",
+ "v8-to-istanbul": "^9.0.1"
+ },
+ "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
+ }
+ }
+ },
+ "node_modules/@jest/schemas": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
+ "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@sinclair/typebox": "^0.27.8"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/source-map": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz",
+ "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.18",
+ "callsites": "^3.0.0",
+ "graceful-fs": "^4.2.9"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/test-result": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz",
+ "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/console": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "collect-v8-coverage": "^1.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/test-sequencer": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz",
+ "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/test-result": "^29.7.0",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.7.0",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/transform": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz",
+ "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.11.6",
+ "@jest/types": "^29.6.3",
+ "@jridgewell/trace-mapping": "^0.3.18",
+ "babel-plugin-istanbul": "^6.1.1",
+ "chalk": "^4.0.0",
+ "convert-source-map": "^2.0.0",
+ "fast-json-stable-stringify": "^2.1.0",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.7.0",
+ "jest-regex-util": "^29.6.3",
+ "jest-util": "^29.7.0",
+ "micromatch": "^4.0.4",
+ "pirates": "^4.0.4",
+ "slash": "^3.0.0",
+ "write-file-atomic": "^4.0.2"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/types": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/schemas": "^29.6.3",
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "@types/istanbul-reports": "^3.0.0",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.8",
+ "chalk": "^4.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
+ "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/set-array": "^1.2.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.25",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+ "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@jsdevtools/ono": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz",
+ "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@sinclair/typebox": {
+ "version": "0.27.8",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
+ "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@sinonjs/commons": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
+ "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "type-detect": "4.0.8"
+ }
+ },
+ "node_modules/@sinonjs/fake-timers": {
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz",
+ "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@sinonjs/commons": "^3.0.0"
+ }
+ },
+ "node_modules/@tsconfig/node10": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz",
+ "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@tsconfig/node12": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
+ "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@tsconfig/node14": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
+ "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@tsconfig/node16": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
+ "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/babel__core": {
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
+ "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7",
+ "@types/babel__generator": "*",
+ "@types/babel__template": "*",
+ "@types/babel__traverse": "*"
+ }
+ },
+ "node_modules/@types/babel__generator": {
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz",
+ "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__template": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
+ "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__traverse": {
+ "version": "7.20.7",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz",
+ "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.20.7"
+ }
+ },
+ "node_modules/@types/graceful-fs": {
+ "version": "4.1.9",
+ "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz",
+ "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/istanbul-lib-coverage": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
+ "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/istanbul-lib-report": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz",
+ "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/istanbul-lib-coverage": "*"
+ }
+ },
+ "node_modules/@types/istanbul-reports": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz",
+ "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/istanbul-lib-report": "*"
+ }
+ },
+ "node_modules/@types/jest": {
+ "version": "29.5.14",
+ "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz",
+ "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "expect": "^29.0.0",
+ "pretty-format": "^29.0.0"
+ }
+ },
+ "node_modules/@types/json-schema": {
+ "version": "7.0.15",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/lodash": {
+ "version": "4.17.17",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.17.tgz",
+ "integrity": "sha512-RRVJ+J3J+WmyOTqnz3PiBLA501eKwXl2noseKOrNo/6+XEHjTAxO4xHvxQB6QuNm+s4WRbn6rSiap8+EA+ykFQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/node": {
+ "version": "22.15.21",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.21.tgz",
+ "integrity": "sha512-EV/37Td6c+MgKAbkcLG6vqZ2zEYHD7bvSrzqqs2RIhbA6w3x+Dqz8MZM3sP6kGTeLrdoOgKZe+Xja7tUB2DNkQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.21.0"
+ }
+ },
+ "node_modules/@types/stack-utils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz",
+ "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/yargs": {
+ "version": "17.0.33",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz",
+ "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "node_modules/@types/yargs-parser": {
+ "version": "21.0.3",
+ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz",
+ "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/acorn": {
+ "version": "8.14.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
+ "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-walk": {
+ "version": "8.3.4",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz",
+ "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "acorn": "^8.11.0"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ajv-formats": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz",
+ "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^8.0.0"
+ },
+ "peerDependencies": {
+ "ajv": "^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "ajv": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/ansi-escapes": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "type-fest": "^0.21.3"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/arg": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
+ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "node_modules/async": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
+ "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/babel-jest": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz",
+ "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/transform": "^29.7.0",
+ "@types/babel__core": "^7.1.14",
+ "babel-plugin-istanbul": "^6.1.1",
+ "babel-preset-jest": "^29.6.3",
+ "chalk": "^4.0.0",
+ "graceful-fs": "^4.2.9",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.8.0"
+ }
+ },
+ "node_modules/babel-plugin-istanbul": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
+ "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@istanbuljs/load-nyc-config": "^1.0.0",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-instrument": "^5.0.4",
+ "test-exclude": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
+ "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@babel/core": "^7.12.3",
+ "@babel/parser": "^7.14.7",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-coverage": "^3.2.0",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/babel-plugin-jest-hoist": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz",
+ "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/template": "^7.3.3",
+ "@babel/types": "^7.3.3",
+ "@types/babel__core": "^7.1.14",
+ "@types/babel__traverse": "^7.0.6"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/babel-preset-current-node-syntax": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz",
+ "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/plugin-syntax-async-generators": "^7.8.4",
+ "@babel/plugin-syntax-bigint": "^7.8.3",
+ "@babel/plugin-syntax-class-properties": "^7.12.13",
+ "@babel/plugin-syntax-class-static-block": "^7.14.5",
+ "@babel/plugin-syntax-import-attributes": "^7.24.7",
+ "@babel/plugin-syntax-import-meta": "^7.10.4",
+ "@babel/plugin-syntax-json-strings": "^7.8.3",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
+ "@babel/plugin-syntax-numeric-separator": "^7.10.4",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.3",
+ "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
+ "@babel/plugin-syntax-top-level-await": "^7.14.5"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/babel-preset-jest": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz",
+ "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "babel-plugin-jest-hoist": "^29.6.3",
+ "babel-preset-current-node-syntax": "^1.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.24.5",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.5.tgz",
+ "integrity": "sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001716",
+ "electron-to-chromium": "^1.5.149",
+ "node-releases": "^2.0.19",
+ "update-browserslist-db": "^1.1.3"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/bs-logger": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz",
+ "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-json-stable-stringify": "2.x"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/bser": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
+ "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "node-int64": "^0.4.0"
+ }
+ },
+ "node_modules/buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001718",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001718.tgz",
+ "integrity": "sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "CC-BY-4.0"
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/char-regex": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
+ "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/ci-info": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
+ "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/sibiraj-s"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cjs-module-lexer": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz",
+ "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "iojs": ">= 1.0.0",
+ "node": ">= 0.12.0"
+ }
+ },
+ "node_modules/collect-v8-coverage": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz",
+ "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/create-jest": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz",
+ "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "chalk": "^4.0.0",
+ "exit": "^0.1.2",
+ "graceful-fs": "^4.2.9",
+ "jest-config": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "prompts": "^2.0.1"
+ },
+ "bin": {
+ "create-jest": "bin/create-jest.js"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/create-require": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
+ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
+ "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/dedent": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz",
+ "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "babel-plugin-macros": "^3.1.0"
+ },
+ "peerDependenciesMeta": {
+ "babel-plugin-macros": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deepmerge": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/detect-newline": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
+ "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/diff": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/diff-sequences": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz",
+ "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/ejs": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz",
+ "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "jake": "^10.8.5"
+ },
+ "bin": {
+ "ejs": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.5.155",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.155.tgz",
+ "integrity": "sha512-ps5KcGGmwL8VaeJlvlDlu4fORQpv3+GIcF5I3f9tUKUlJ/wsysh6HU8P5L1XWRYeXfA0oJd4PyM8ds8zTFf6Ng==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/emittery": {
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
+ "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/emittery?sponsor=1"
+ }
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
+ "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/execa": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
+ "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.0",
+ "human-signals": "^2.1.0",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.1",
+ "onetime": "^5.1.2",
+ "signal-exit": "^3.0.3",
+ "strip-final-newline": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ }
+ },
+ "node_modules/exit": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
+ "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/expect": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz",
+ "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==",
+ "dev": true,
+ "license": "MIT",
+ "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"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-uri": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz",
+ "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/fb-watchman": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
+ "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "bser": "2.1.1"
+ }
+ },
+ "node_modules/filelist": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
+ "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "minimatch": "^5.0.1"
+ }
+ },
+ "node_modules/filelist/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/filelist/node_modules/minimatch": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-package-type": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
+ "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/html-escaper": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
+ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/human-signals": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=10.17.0"
+ }
+ },
+ "node_modules/import-local": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz",
+ "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pkg-dir": "^4.2.0",
+ "resolve-cwd": "^3.0.0"
+ },
+ "bin": {
+ "import-local-fixture": "fixtures/cli.js"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "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.",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/is-core-module": {
+ "version": "2.16.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
+ "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-generator-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
+ "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/istanbul-lib-coverage": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
+ "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/istanbul-lib-instrument": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz",
+ "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@babel/core": "^7.23.9",
+ "@babel/parser": "^7.23.9",
+ "@istanbuljs/schema": "^0.1.3",
+ "istanbul-lib-coverage": "^3.2.0",
+ "semver": "^7.5.4"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/istanbul-lib-instrument/node_modules/semver": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+ "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/istanbul-lib-report": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
+ "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "istanbul-lib-coverage": "^3.0.0",
+ "make-dir": "^4.0.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/istanbul-lib-source-maps": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
+ "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "debug": "^4.1.1",
+ "istanbul-lib-coverage": "^3.0.0",
+ "source-map": "^0.6.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/istanbul-reports": {
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz",
+ "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "html-escaper": "^2.0.0",
+ "istanbul-lib-report": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jake": {
+ "version": "10.9.2",
+ "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz",
+ "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "async": "^3.2.3",
+ "chalk": "^4.0.2",
+ "filelist": "^1.0.4",
+ "minimatch": "^3.1.2"
+ },
+ "bin": {
+ "jake": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/jest": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz",
+ "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/core": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "import-local": "^3.0.2",
+ "jest-cli": "^29.7.0"
+ },
+ "bin": {
+ "jest": "bin/jest.js"
+ },
+ "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
+ }
+ }
+ },
+ "node_modules/jest-changed-files": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz",
+ "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "execa": "^5.0.0",
+ "jest-util": "^29.7.0",
+ "p-limit": "^3.1.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-circus": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz",
+ "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/environment": "^29.7.0",
+ "@jest/expect": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "co": "^4.6.0",
+ "dedent": "^1.0.0",
+ "is-generator-fn": "^2.0.0",
+ "jest-each": "^29.7.0",
+ "jest-matcher-utils": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-runtime": "^29.7.0",
+ "jest-snapshot": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "p-limit": "^3.1.0",
+ "pretty-format": "^29.7.0",
+ "pure-rand": "^6.0.0",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-cli": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz",
+ "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/core": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "chalk": "^4.0.0",
+ "create-jest": "^29.7.0",
+ "exit": "^0.1.2",
+ "import-local": "^3.0.2",
+ "jest-config": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
+ "yargs": "^17.3.1"
+ },
+ "bin": {
+ "jest": "bin/jest.js"
+ },
+ "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
+ }
+ }
+ },
+ "node_modules/jest-config": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz",
+ "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.11.6",
+ "@jest/test-sequencer": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "babel-jest": "^29.7.0",
+ "chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
+ "deepmerge": "^4.2.2",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.2.9",
+ "jest-circus": "^29.7.0",
+ "jest-environment-node": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "jest-regex-util": "^29.6.3",
+ "jest-resolve": "^29.7.0",
+ "jest-runner": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
+ "micromatch": "^4.0.4",
+ "parse-json": "^5.2.0",
+ "pretty-format": "^29.7.0",
+ "slash": "^3.0.0",
+ "strip-json-comments": "^3.1.1"
+ },
+ "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
+ }
+ }
+ },
+ "node_modules/jest-config/node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/jest-diff": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz",
+ "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^4.0.0",
+ "diff-sequences": "^29.6.3",
+ "jest-get-type": "^29.6.3",
+ "pretty-format": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-docblock": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz",
+ "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "detect-newline": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-each": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz",
+ "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "chalk": "^4.0.0",
+ "jest-get-type": "^29.6.3",
+ "jest-util": "^29.7.0",
+ "pretty-format": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-environment-node": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz",
+ "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/environment": "^29.7.0",
+ "@jest/fake-timers": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "jest-mock": "^29.7.0",
+ "jest-util": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-get-type": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
+ "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-haste-map": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz",
+ "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "@types/graceful-fs": "^4.1.3",
+ "@types/node": "*",
+ "anymatch": "^3.0.3",
+ "fb-watchman": "^2.0.0",
+ "graceful-fs": "^4.2.9",
+ "jest-regex-util": "^29.6.3",
+ "jest-util": "^29.7.0",
+ "jest-worker": "^29.7.0",
+ "micromatch": "^4.0.4",
+ "walker": "^1.0.8"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "^2.3.2"
+ }
+ },
+ "node_modules/jest-leak-detector": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz",
+ "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "jest-get-type": "^29.6.3",
+ "pretty-format": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-matcher-utils": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz",
+ "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^4.0.0",
+ "jest-diff": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "pretty-format": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-message-util": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz",
+ "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.12.13",
+ "@jest/types": "^29.6.3",
+ "@types/stack-utils": "^2.0.0",
+ "chalk": "^4.0.0",
+ "graceful-fs": "^4.2.9",
+ "micromatch": "^4.0.4",
+ "pretty-format": "^29.7.0",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-mock": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz",
+ "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "jest-util": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-pnp-resolver": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
+ "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ },
+ "peerDependencies": {
+ "jest-resolve": "*"
+ },
+ "peerDependenciesMeta": {
+ "jest-resolve": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jest-regex-util": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz",
+ "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-resolve": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz",
+ "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^4.0.0",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.7.0",
+ "jest-pnp-resolver": "^1.2.2",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
+ "resolve": "^1.20.0",
+ "resolve.exports": "^2.0.0",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-resolve-dependencies": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz",
+ "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "jest-regex-util": "^29.6.3",
+ "jest-snapshot": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-runner": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz",
+ "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/console": "^29.7.0",
+ "@jest/environment": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "emittery": "^0.13.1",
+ "graceful-fs": "^4.2.9",
+ "jest-docblock": "^29.7.0",
+ "jest-environment-node": "^29.7.0",
+ "jest-haste-map": "^29.7.0",
+ "jest-leak-detector": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-resolve": "^29.7.0",
+ "jest-runtime": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-watcher": "^29.7.0",
+ "jest-worker": "^29.7.0",
+ "p-limit": "^3.1.0",
+ "source-map-support": "0.5.13"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-runtime": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz",
+ "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/environment": "^29.7.0",
+ "@jest/fake-timers": "^29.7.0",
+ "@jest/globals": "^29.7.0",
+ "@jest/source-map": "^29.6.3",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "cjs-module-lexer": "^1.0.0",
+ "collect-v8-coverage": "^1.0.0",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-mock": "^29.7.0",
+ "jest-regex-util": "^29.6.3",
+ "jest-resolve": "^29.7.0",
+ "jest-snapshot": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "slash": "^3.0.0",
+ "strip-bom": "^4.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-snapshot": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz",
+ "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.11.6",
+ "@babel/generator": "^7.7.2",
+ "@babel/plugin-syntax-jsx": "^7.7.2",
+ "@babel/plugin-syntax-typescript": "^7.7.2",
+ "@babel/types": "^7.3.3",
+ "@jest/expect-utils": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "babel-preset-current-node-syntax": "^1.0.0",
+ "chalk": "^4.0.0",
+ "expect": "^29.7.0",
+ "graceful-fs": "^4.2.9",
+ "jest-diff": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "jest-matcher-utils": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "natural-compare": "^1.4.0",
+ "pretty-format": "^29.7.0",
+ "semver": "^7.5.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-snapshot/node_modules/semver": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+ "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/jest-util": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
+ "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
+ "graceful-fs": "^4.2.9",
+ "picomatch": "^2.2.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-validate": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
+ "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "camelcase": "^6.2.0",
+ "chalk": "^4.0.0",
+ "jest-get-type": "^29.6.3",
+ "leven": "^3.1.0",
+ "pretty-format": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-validate/node_modules/camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/jest-watcher": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz",
+ "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/test-result": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^4.0.0",
+ "emittery": "^0.13.1",
+ "jest-util": "^29.7.0",
+ "string-length": "^4.0.1"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-worker": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz",
+ "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*",
+ "jest-util": "^29.7.0",
+ "merge-stream": "^2.0.0",
+ "supports-color": "^8.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-worker/node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsesc": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
+ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-schema-to-typescript": {
+ "version": "15.0.4",
+ "resolved": "https://registry.npmjs.org/json-schema-to-typescript/-/json-schema-to-typescript-15.0.4.tgz",
+ "integrity": "sha512-Su9oK8DR4xCmDsLlyvadkXzX6+GGXJpbhwoLtOGArAG61dvbW4YQmSEno2y66ahpIdmLMg6YUf/QHLgiwvkrHQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@apidevtools/json-schema-ref-parser": "^11.5.5",
+ "@types/json-schema": "^7.0.15",
+ "@types/lodash": "^4.17.7",
+ "is-glob": "^4.0.3",
+ "js-yaml": "^4.1.0",
+ "lodash": "^4.17.21",
+ "minimist": "^1.2.8",
+ "prettier": "^3.2.5",
+ "tinyglobby": "^0.2.9"
+ },
+ "bin": {
+ "json2ts": "dist/src/cli.js"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/json-schema-to-typescript/node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true,
+ "license": "Python-2.0"
+ },
+ "node_modules/json-schema-to-typescript/node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "license": "MIT",
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/kleur": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
+ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/leven": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
+ "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.memoize": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+ "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "node_modules/make-dir": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
+ "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "semver": "^7.5.3"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/make-dir/node_modules/semver": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+ "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/make-error": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
+ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/makeerror": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
+ "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "tmpl": "1.0.5"
+ }
+ },
+ "node_modules/merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/node-int64": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
+ "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.19",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
+ "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mimic-fn": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/p-locate/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pirates": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
+ "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "find-up": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/prettier": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz",
+ "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "prettier": "bin/prettier.cjs"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "node_modules/pretty-format": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
+ "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/schemas": "^29.6.3",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^18.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/prompts": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
+ "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kleur": "^3.0.3",
+ "sisteransi": "^1.0.5"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/pure-rand": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz",
+ "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/dubzzz"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fast-check"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/react-is": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/require-from-string": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.10",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
+ "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-core-module": "^2.16.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-cwd": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
+ "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "resolve-from": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/resolve.exports": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz",
+ "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/sisteransi": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
+ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-support": {
+ "version": "0.5.13",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
+ "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "node_modules/sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/stack-utils": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
+ "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "escape-string-regexp": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/string-length": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
+ "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "char-regex": "^1.0.2",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-bom": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
+ "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.2.tgz",
+ "integrity": "sha512-4X2FR3UwhNUE9G49aIsJW5hRRR3GXGTBTZRMfv568O60ojM8HcWjV/VxAxCDW3SUND33O6ZY66ZuRcdkj73q2g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/test-exclude": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
+ "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "@istanbuljs/schema": "^0.1.2",
+ "glob": "^7.1.4",
+ "minimatch": "^3.0.4"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/tinyglobby": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz",
+ "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.4.4",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/tinyglobby/node_modules/fdir": {
+ "version": "6.4.4",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz",
+ "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tinyglobby/node_modules/picomatch": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
+ "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/tmpl": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
+ "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/ts-jest": {
+ "version": "29.3.4",
+ "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.3.4.tgz",
+ "integrity": "sha512-Iqbrm8IXOmV+ggWHOTEbjwyCf2xZlUMv5npExksXohL+tk8va4Fjhb+X2+Rt9NBmgO7bJ8WpnMLOwih/DnMlFA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "bs-logger": "^0.2.6",
+ "ejs": "^3.1.10",
+ "fast-json-stable-stringify": "^2.1.0",
+ "jest-util": "^29.0.0",
+ "json5": "^2.2.3",
+ "lodash.memoize": "^4.1.2",
+ "make-error": "^1.3.6",
+ "semver": "^7.7.2",
+ "type-fest": "^4.41.0",
+ "yargs-parser": "^21.1.1"
+ },
+ "bin": {
+ "ts-jest": "cli.js"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": ">=7.0.0-beta.0 <8",
+ "@jest/transform": "^29.0.0",
+ "@jest/types": "^29.0.0",
+ "babel-jest": "^29.0.0",
+ "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
+ }
+ }
+ },
+ "node_modules/ts-jest/node_modules/semver": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+ "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/ts-jest/node_modules/type-fest": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
+ "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ts-node": {
+ "version": "10.9.2",
+ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
+ "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@cspotcode/source-map-support": "^0.8.0",
+ "@tsconfig/node10": "^1.0.7",
+ "@tsconfig/node12": "^1.0.7",
+ "@tsconfig/node14": "^1.0.0",
+ "@tsconfig/node16": "^1.0.2",
+ "acorn": "^8.4.1",
+ "acorn-walk": "^8.1.1",
+ "arg": "^4.1.0",
+ "create-require": "^1.1.0",
+ "diff": "^4.0.1",
+ "make-error": "^1.1.1",
+ "v8-compile-cache-lib": "^3.0.1",
+ "yn": "3.1.1"
+ },
+ "bin": {
+ "ts-node": "dist/bin.js",
+ "ts-node-cwd": "dist/bin-cwd.js",
+ "ts-node-esm": "dist/bin-esm.js",
+ "ts-node-script": "dist/bin-script.js",
+ "ts-node-transpile-only": "dist/bin-transpile.js",
+ "ts-script": "dist/bin-script-deprecated.js"
+ },
+ "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
+ }
+ }
+ },
+ "node_modules/type-detect": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
+ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "0.21.3",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.8.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
+ "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
+ "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.1"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/v8-compile-cache-lib": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
+ "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/v8-to-istanbul": {
+ "version": "9.3.0",
+ "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz",
+ "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.12",
+ "@types/istanbul-lib-coverage": "^2.0.1",
+ "convert-source-map": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10.12.0"
+ }
+ },
+ "node_modules/walker": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
+ "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "makeerror": "1.0.12"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/write-file-atomic": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz",
+ "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^3.0.7"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/yargs": {
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.1.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yn": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
+ "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ }
+ }
+}
diff --git a/ts/package.json b/ts/package.json
new file mode 100644
index 0000000..728297a
--- /dev/null
+++ b/ts/package.json
@@ -0,0 +1,46 @@
+{
+ "name": "jsondoc",
+ "version": "0.1.0",
+ "description": "JSON-DOC TypeScript implementation",
+ "main": "dist/src/index.js",
+ "types": "dist/src/index.d.ts",
+ "scripts": {
+ "clean": "rm -rf dist",
+ "build": "tsc",
+ "generate-types": "ts-node scripts/generate-types.ts",
+ "test": "jest",
+ "prepublishOnly": "npm run clean && npm run generate-types && npm run build",
+ "format": "prettier --write ."
+ },
+ "keywords": [
+ "json",
+ "document",
+ "notion",
+ "schema"
+ ],
+ "author": "TextCortex Dev Team ",
+ "license": "MIT",
+ "devDependencies": {
+ "@types/jest": "^29.5.14",
+ "ajv": "^8.17.1",
+ "ajv-formats": "^3.0.1",
+ "jest": "^29.7.0",
+ "json-schema-to-typescript": "^15.0.4",
+ "prettier": "3.5.3",
+ "ts-jest": "^29.3.4",
+ "ts-node": "^10.9.2",
+ "typescript": "^5.8.3"
+ },
+ "dependencies": {
+ "ajv": "^8.17.1",
+ "ajv-formats": "^3.0.1",
+ "json5": "^2.2.3",
+ "strip-json-comments": "^5.0.2"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ },
+ "files": [
+ "dist/src"
+ ]
+}
diff --git a/ts/scripts/generate-types.ts b/ts/scripts/generate-types.ts
new file mode 100644
index 0000000..e814302
--- /dev/null
+++ b/ts/scripts/generate-types.ts
@@ -0,0 +1,680 @@
+import * as fs from "fs";
+import * as path from "path";
+import { compile, JSONSchema } from "json-schema-to-typescript";
+import * as util from "util";
+import * as JSON5 from "json5";
+
+const readFile = util.promisify(fs.readFile);
+const writeFile = util.promisify(fs.writeFile);
+const mkdir = util.promisify(fs.mkdir);
+
+// Configuration
+const SCHEMA_DIR = path.resolve(__dirname, "../../schema");
+const OUTPUT_DIR = path.resolve(__dirname, "../src/models/generated");
+const SCHEMA_SUFFIX = "_schema.json";
+const EXAMPLE_FILE_SUFFIX = "ex1_success.json";
+
+// Cache loaded schemas to avoid duplicate file reads
+const schemaCache: Record = {};
+
+/**
+ * Load a JSON schema file with comment handling using JSON5
+ */
+async function loadJsonFile(filePath: string): Promise {
+ if (schemaCache[filePath]) {
+ return schemaCache[filePath];
+ }
+
+ try {
+ const content = await readFile(filePath, "utf8");
+
+ try {
+ // Use JSON5 to parse the content with comments and trailing commas
+ const parsed = JSON5.parse(content);
+
+ // Validate that we have a valid schema object
+ if (
+ parsed &&
+ typeof parsed === "object" &&
+ (parsed.title || parsed.$schema || parsed.type)
+ ) {
+ schemaCache[filePath] = parsed;
+ return parsed;
+ } else {
+ console.error(`Invalid schema format in ${filePath}`);
+ return {};
+ }
+ } catch (parseError) {
+ console.error(`Error parsing JSON from ${filePath}:`, parseError);
+ console.error(parseError);
+ // Return empty object as fallback
+ return {};
+ }
+ } catch (error) {
+ console.error(`Error loading JSON file ${filePath}:`, error);
+ // Return empty object as fallback
+ return {};
+ }
+}
+
+/**
+ * Resolve $ref references in schema
+ */
+async function resolveRefs(obj: any, sourceDir: string): Promise {
+ if (typeof obj !== "object" || obj === null) {
+ return obj;
+ }
+
+ if (Array.isArray(obj)) {
+ return Promise.all(obj.map((item) => resolveRefs(item, sourceDir)));
+ }
+
+ const result: Record = {};
+
+ for (const [key, value] of Object.entries(obj)) {
+ if (key === "$ref" && typeof value === "string") {
+ let ref = value as string;
+
+ // Handle absolute references starting with /
+ if (ref.startsWith("/")) {
+ ref = ref.substring(1);
+ }
+
+ // Handle fragments
+ let fragment: string | null = null;
+ if (ref.includes("#")) {
+ const tokens = ref.split("#");
+ ref = tokens[0];
+ fragment = tokens[1];
+ }
+
+ try {
+ const refPath = path.resolve(path.join(sourceDir, ref));
+ let refObj = await loadJsonFile(refPath);
+
+ if (fragment) {
+ // Navigate through the fragment path
+ const parts = fragment.split("/").filter(Boolean);
+ for (const part of parts) {
+ if (refObj && typeof refObj === "object" && part in refObj) {
+ refObj = refObj[part];
+ } else {
+ console.warn(
+ `Fragment part '${part}' not found in referenced object`,
+ );
+ refObj = {};
+ break;
+ }
+ }
+ }
+
+ // Get title for the type
+ const title = refObj.title;
+ if (!title) {
+ console.warn(`Title not found in ${refPath}, using fallback`);
+ // Just return the referenced object
+ return refObj || {};
+ }
+
+ // Handle custom type path similar to Python implementation
+ let customTypePath;
+ if (refObj.customTypePath) {
+ customTypePath = refObj.customTypePath;
+ } else {
+ const refTokens = ref.split("/");
+ // Remove the filename
+ refTokens.pop();
+ customTypePath = [...refTokens, title].join(".");
+ }
+
+ // Create a simplified reference object
+ return {
+ type: "object",
+ title,
+ properties: {},
+ additionalProperties: false,
+ // Add metadata for TypeScript generator
+ // These will be processed by json-schema-to-typescript
+ description: `Reference to ${customTypePath}`,
+ tsType: customTypePath.split(".").pop(),
+ };
+ } catch (error) {
+ console.error(`Error resolving reference ${ref}:`, error);
+ return {};
+ }
+ }
+
+ result[key] = await resolveRefs(value, sourceDir);
+ }
+
+ return result;
+}
+
+/**
+ * Convert a JSON schema to TypeScript interface
+ * @param schemaPath Path to the schema file
+ * @param sourceDir Directory containing all schemas (for resolving references)
+ * @param outputPath Path to write the TypeScript interface to
+ */
+async function convertSchemaToTypeScript(
+ schemaPath: string,
+ sourceDir: string,
+ outputPath: string,
+): Promise {
+ try {
+ // Load the schema
+ let schema = await loadJsonFile(schemaPath);
+ if (!schema || Object.keys(schema).length === 0) {
+ console.warn(`Empty or invalid schema at ${schemaPath}, skipping`);
+ return;
+ }
+
+ // Resolve references multiple times to handle nested references
+ for (let i = 0; i < 4; i++) {
+ schema = await resolveRefs(schema, sourceDir);
+ }
+
+ // Extract the filename and use it for interface naming
+ const fileName = path.basename(schemaPath, SCHEMA_SUFFIX);
+ const interfaceName = fileName
+ .split("_")
+ .map((part) => part.charAt(0).toUpperCase() + part.slice(1))
+ .join("");
+
+ // Generate TypeScript interface
+ const typeScript = await compile(schema, interfaceName, {
+ bannerComment: "",
+ style: {
+ printWidth: 100,
+ semi: true,
+ singleQuote: true,
+ tabWidth: 2,
+ },
+ additionalProperties: false,
+ });
+
+ // Ensure output directory exists
+ const outputDir = path.dirname(outputPath);
+ await mkdir(outputDir, { recursive: true });
+
+ // Write the TypeScript interface to file
+ await writeFile(outputPath, typeScript);
+ console.log(`Generated: ${outputPath}`);
+ } catch (error) {
+ console.error(`Error converting schema ${schemaPath}:`, error);
+ }
+}
+
+/**
+ * Create a TypeScript enum from a string enum schema
+ */
+async function createEnum(name: string, schema: any): Promise {
+ if (!schema.enum || !Array.isArray(schema.enum)) {
+ return "";
+ }
+
+ const enumValues = schema.enum
+ .map((value: string) => ` ${value} = '${value}',`)
+ .join("\n");
+ return `export enum ${name} {\n${enumValues}\n}\n`;
+}
+
+/**
+ * Create type guard functions for discriminated unions
+ */
+async function createTypeGuards(types: string[]): Promise {
+ const typeGuards = types
+ .map(
+ (type) =>
+ `export function is${type}(obj: any): obj is ${type} {
+ return obj && obj.type === '${type.toLowerCase()}';
+}\n`,
+ )
+ .join("\n");
+
+ return typeGuards;
+}
+
+/**
+ * Create barrel files (index.ts) for easier imports
+ */
+function createBarrelFiles(dir: string): void {
+ if (!fs.existsSync(dir)) return;
+
+ const items = fs.readdirSync(dir, { withFileTypes: true });
+
+ // Get directories
+ const directories = items
+ .filter((item) => item.isDirectory())
+ .map((item) => item.name);
+
+ // Get TypeScript files (excluding index.ts)
+ const typeScriptFiles = items
+ .filter(
+ (item) =>
+ item.isFile() && item.name.endsWith(".ts") && item.name !== "index.ts",
+ )
+ .map((item) => path.basename(item.name, ".ts"));
+
+ // Create index.ts with exports
+ const exports = [
+ ...directories.map((dir) => `export * from './${dir}';`),
+ ...typeScriptFiles.map((file) => `export * from './${file}';`),
+ ];
+
+ if (exports.length > 0) {
+ fs.writeFileSync(path.join(dir, "index.ts"), exports.join("\n") + "\n");
+ console.log(`Created barrel file: ${path.join(dir, "index.ts")}`);
+ }
+
+ // Process subdirectories recursively
+ for (const subDir of directories) {
+ createBarrelFiles(path.join(dir, subDir));
+ }
+}
+
+/**
+ * Extract enum values from a JSON schema file
+ */
+async function extractEnumValues(
+ schemaFilePath: string,
+ propertyPath: string = "properties.type.enum",
+): Promise {
+ try {
+ const schema = await loadJsonFile(schemaFilePath);
+
+ // Navigate through the property path to find the enum values
+ const pathParts = propertyPath.split(".");
+ let current = schema;
+
+ for (const part of pathParts) {
+ if (current && typeof current === "object" && part in current) {
+ current = current[part];
+ } else {
+ return [];
+ }
+ }
+
+ // Return the enum values if they exist and are an array
+ if (Array.isArray(current)) {
+ return current.map(String);
+ }
+
+ return [];
+ } catch (error) {
+ console.error(
+ `Error extracting enum values from ${schemaFilePath}:`,
+ error,
+ );
+ return [];
+ }
+}
+
+/**
+ * Extract enum values from a schema using const values in conditional blocks
+ */
+async function extractEnumValuesFromConditionals(
+ schemaFilePath: string,
+ conditionalPath: string = "allOf",
+): Promise {
+ try {
+ const schema = await loadJsonFile(schemaFilePath);
+
+ // Navigate to the conditional blocks
+ const pathParts = conditionalPath.split(".");
+ let current = schema;
+
+ for (const part of pathParts) {
+ if (current && typeof current === "object" && part in current) {
+ current = current[part];
+ } else {
+ return [];
+ }
+ }
+
+ // Return empty array if conditionals don't exist or aren't an array
+ if (!Array.isArray(current)) {
+ return [];
+ }
+
+ // Extract const values from conditionals
+ const constValues: string[] = [];
+
+ for (const condition of current) {
+ if (condition?.if?.properties?.type?.const) {
+ constValues.push(String(condition.if.properties.type.const));
+ }
+ }
+
+ return constValues;
+ } catch (error) {
+ console.error(
+ `Error extracting enum values from conditionals in ${schemaFilePath}:`,
+ error,
+ );
+ return [];
+ }
+}
+
+/**
+ * Extract const values from a JSON schema file for object types
+ */
+async function extractConstValues(
+ schemaFilePaths: string[],
+ propertyPath: string = "properties.object.const",
+): Promise {
+ const constValues: string[] = [];
+
+ for (const filePath of schemaFilePaths) {
+ try {
+ const schema = await loadJsonFile(filePath);
+
+ // Navigate through the property path to find the const value
+ const pathParts = propertyPath.split(".");
+ let current = schema;
+
+ for (const part of pathParts) {
+ if (current && typeof current === "object" && part in current) {
+ current = current[part];
+ } else {
+ current = null;
+ break;
+ }
+ }
+
+ // Add the const value if it exists and is a string
+ if (current && typeof current === "string") {
+ constValues.push(current);
+ }
+ } catch (error) {
+ console.error(`Error extracting const value from ${filePath}:`, error);
+ }
+ }
+
+ // Remove duplicates and return
+ return [...new Set(constValues)];
+}
+
+/**
+ * Generate enums from extracted values
+ */
+function generateEnum(
+ name: string,
+ values: string[],
+ camelCaseValues: boolean = false,
+): string {
+ if (values.length === 0) {
+ return `export enum ${name} {}\n`;
+ }
+
+ let enumString = `export enum ${name} {\n`;
+
+ for (const value of values) {
+ let enumKey = value;
+
+ if (camelCaseValues) {
+ // Convert snake_case to PascalCase
+ enumKey = value
+ .split("_")
+ .map(
+ (part) => part.charAt(0).toUpperCase() + part.slice(1).toLowerCase(),
+ )
+ .join("");
+ }
+
+ // For ObjectType, we need to keep the original string value lowercase
+ // since that's what's used in the serialization code
+ const stringValue = name === "ObjectType" ? value.toLowerCase() : value;
+
+ enumString += ` ${enumKey} = '${stringValue}',\n`;
+ }
+
+ enumString += "}\n";
+ return enumString;
+}
+
+/**
+ * Generate type guards for the types
+ */
+function generateTypeGuards(typeMap: Record): string {
+ let typeGuards = "";
+
+ for (const [typeName, values] of Object.entries(typeMap)) {
+ for (const value of values) {
+ let guardName = "";
+ let checkProperty = "";
+ let enumKey = "";
+
+ // Skip if value is empty
+ if (!value) continue;
+
+ if (typeName === "ObjectType") {
+ // For ObjectType, use values like 'page', 'block', etc.
+ // We need to capitalize the first letter for the enum key
+ enumKey = value.charAt(0).toUpperCase() + value.slice(1);
+ guardName = `is${enumKey}`;
+ checkProperty = `obj.object === ${typeName}.${enumKey}`;
+ } else if (typeName === "BlockType") {
+ // For BlockType, use values like 'paragraph', 'to_do', etc.
+ const pascalCaseValue = value
+ .split("_")
+ .map(
+ (part) =>
+ part.charAt(0).toUpperCase() + part.slice(1).toLowerCase(),
+ )
+ .join("");
+
+ enumKey = pascalCaseValue;
+ guardName = `is${pascalCaseValue}Block`;
+ checkProperty = `obj.type === ${typeName}.${pascalCaseValue}`;
+ } else if (typeName === "RichTextType") {
+ // For RichTextType, use values like 'text', 'equation', etc.
+ enumKey = value.charAt(0).toUpperCase() + value.slice(1);
+ guardName = `isRichText${enumKey}`;
+ checkProperty = `obj.type === ${typeName}.${enumKey}`;
+ } else if (typeName === "FileType") {
+ // For FileType, use values like 'file', 'external', etc.
+ enumKey = value.charAt(0).toUpperCase() + value.slice(1);
+ guardName = `is${enumKey}File`;
+ checkProperty = `obj.type === ${typeName}.${enumKey}`;
+ }
+
+ if (guardName && checkProperty) {
+ typeGuards += `
+export function ${guardName}(obj: any): obj is any {
+ return obj && ${checkProperty};
+}`;
+ }
+ }
+ }
+
+ return typeGuards;
+}
+
+/**
+ * Generate essential enums and interfaces that are needed for type references
+ */
+async function generateEssentialTypes(outputDir: string): Promise {
+ // Paths to schema files with enum values
+ const blockSchemaPath = path.resolve(SCHEMA_DIR, "block/block_schema.json");
+ const richTextSchemaPath = path.resolve(
+ SCHEMA_DIR,
+ "block/types/rich_text/rich_text_schema.json",
+ );
+ const fileSchemaPath = path.resolve(SCHEMA_DIR, "file/file_schema.json");
+
+ // Files to extract object type constants from
+ const objectTypeFiles = [
+ path.resolve(SCHEMA_DIR, "block/base/base_schema.json"),
+ path.resolve(SCHEMA_DIR, "page/page_schema.json"),
+ ];
+
+ // Extract enum values from schemas
+ const blockTypes = await extractEnumValues(blockSchemaPath);
+ const richTextTypes = await extractEnumValues(richTextSchemaPath);
+ const fileTypes = await extractEnumValues(fileSchemaPath);
+
+ // Extract additional values from conditionals if needed
+ const blockTypesFromConditionals =
+ await extractEnumValuesFromConditionals(blockSchemaPath);
+ const richTextTypesFromConditionals =
+ await extractEnumValuesFromConditionals(richTextSchemaPath);
+ const fileTypesFromConditionals =
+ await extractEnumValuesFromConditionals(fileSchemaPath);
+
+ // Extract object type constants
+ const objectTypes = await extractConstValues(objectTypeFiles);
+
+ // Combine values and remove duplicates
+ const allBlockTypes = [
+ ...new Set([...blockTypes, ...blockTypesFromConditionals]),
+ ];
+ const allRichTextTypes = [
+ ...new Set([...richTextTypes, ...richTextTypesFromConditionals]),
+ ];
+ const allFileTypes = [
+ ...new Set([...fileTypes, ...fileTypesFromConditionals]),
+ ];
+
+ // Extract enum values for parent types from schemas if available
+ // For now, we'll hardcode them as they're not explicitly defined in schemas
+ const parentTypes = ["database_id", "page_id", "workspace", "block_id"];
+
+ // Create a map of type names to their values for generating type guards
+ const typeMap: Record = {
+ ObjectType: objectTypes,
+ BlockType: allBlockTypes,
+ RichTextType: allRichTextTypes,
+ FileType: allFileTypes,
+ };
+
+ // Generate enums
+ const objectTypeEnum = generateEnum(
+ "ObjectType",
+ objectTypes.map((value) => value.charAt(0).toUpperCase() + value.slice(1)),
+ );
+ const blockTypeEnum = generateEnum("BlockType", allBlockTypes, true);
+ const richTextTypeEnum = generateEnum("RichTextType", allRichTextTypes, true);
+ const fileTypeEnum = generateEnum("FileType", allFileTypes, true);
+ const parentTypeEnum = generateEnum("ParentType", parentTypes, true);
+
+ // Generate type guards for all the types
+ const typeGuards = generateTypeGuards(typeMap);
+
+ // Combine all the generated types
+ const essentialTypesDef = `
+// Object types
+${objectTypeEnum}
+// Block types
+${blockTypeEnum}
+// Rich text types
+${richTextTypeEnum}
+// File types
+${fileTypeEnum}
+// Parent types
+${parentTypeEnum}
+// Base types
+export type JsonValue = string | number | boolean | null | JsonObject | JsonArray;
+export interface JsonObject { [key: string]: JsonValue }
+export type JsonArray = JsonValue[];
+
+// Type guards${typeGuards}
+`;
+
+ // Write the essential types to a file
+ const essentialTypesPath = path.join(outputDir, "essential-types.ts");
+ await writeFile(essentialTypesPath, essentialTypesDef);
+ console.log(`Generated essential types at ${essentialTypesPath}`);
+}
+
+/**
+ * Process all schema files and create TypeScript interfaces
+ */
+async function createTypeScriptModels(
+ sourceDir: string,
+ destinationDir: string,
+): Promise {
+ console.log(`Source directory: ${sourceDir}`);
+ console.log(`Destination directory: ${destinationDir}`);
+
+ // Check if source directory exists
+ if (!fs.existsSync(sourceDir)) {
+ throw new Error(`Source directory ${sourceDir} does not exist`);
+ }
+
+ // Clear destination directory if it exists
+ if (fs.existsSync(destinationDir)) {
+ fs.rmSync(destinationDir, { recursive: true, force: true });
+ }
+
+ // Create destination directory
+ await mkdir(destinationDir, { recursive: true });
+
+ // Generate essential types first
+ await generateEssentialTypes(destinationDir);
+
+ // Process schema files
+ const processDir = async (currentDir: string, relativePath: string = "") => {
+ console.log(
+ `Processing directory: ${currentDir}, relative path: ${relativePath}`,
+ );
+ const items = fs.readdirSync(currentDir, { withFileTypes: true });
+
+ // Process all subdirectories first
+ for (const item of items) {
+ if (item.isDirectory()) {
+ const sourceSubDir = path.join(currentDir, item.name);
+ const relativeSubPath = path.join(relativePath, item.name);
+ await processDir(sourceSubDir, relativeSubPath);
+ }
+ }
+
+ // Process schema files
+ for (const item of items) {
+ if (item.isFile() && item.name.endsWith(SCHEMA_SUFFIX)) {
+ const sourceFile = path.join(currentDir, item.name);
+ const destSubDir = path.join(destinationDir, relativePath);
+
+ // Create output file name (replacing _schema.json with .ts)
+ const baseName = path.basename(item.name, SCHEMA_SUFFIX);
+ const destFile = path.join(destSubDir, `${baseName}.ts`);
+
+ await convertSchemaToTypeScript(sourceFile, sourceDir, destFile);
+ }
+ }
+ };
+
+ await processDir(sourceDir);
+
+ // Create barrel files for easier imports
+ createBarrelFiles(destinationDir);
+
+ // Create the main index.ts file at the root of models
+ const rootIndex = path.join(destinationDir, "index.ts");
+ const rootDirs = fs
+ .readdirSync(destinationDir, { withFileTypes: true })
+ .filter((item) => item.isDirectory())
+ .map((item) => `export * from './${item.name}';`);
+
+ const rootFiles = fs
+ .readdirSync(destinationDir, { withFileTypes: true })
+ .filter(
+ (item) =>
+ item.isFile() && item.name.endsWith(".ts") && item.name !== "index.ts",
+ )
+ .map((item) => `export * from './${path.basename(item.name, ".ts")}';`);
+
+ fs.writeFileSync(rootIndex, [...rootDirs, ...rootFiles].join("\n") + "\n");
+ console.log(`Created root barrel file: ${rootIndex}`);
+}
+
+// Execute the script
+(async () => {
+ try {
+ await createTypeScriptModels(SCHEMA_DIR, OUTPUT_DIR);
+ console.log("TypeScript models generation completed successfully");
+ } catch (error) {
+ console.error("Error generating TypeScript models:", error);
+ process.exit(1);
+ }
+})();
diff --git a/ts/src/index.ts b/ts/src/index.ts
new file mode 100644
index 0000000..649dd9a
--- /dev/null
+++ b/ts/src/index.ts
@@ -0,0 +1,32 @@
+/**
+ * JSON-DOC TypeScript implementation
+ */
+
+// Export all type definitions from generated.ts
+export * from "./models/generated";
+
+// Export loader/serializer functions
+export {
+ loadJsonDoc,
+ loadPage,
+ loadBlock,
+ loadRichText,
+ loadImage,
+ jsonDocDumpJson,
+} from "./serialization/loader";
+
+// Export validation functions
+export {
+ validateAgainstSchema,
+ loadSchema,
+ registerSchema,
+ ValidationError,
+} from "./validation/validator";
+
+// Export utility functions
+export {
+ loadJson,
+ getNestedValue,
+ setNestedValue,
+ deepClone,
+} from "./utils/json";
diff --git a/ts/src/models/generated/block/base/base.ts b/ts/src/models/generated/block/base/base.ts
new file mode 100644
index 0000000..267fa3c
--- /dev/null
+++ b/ts/src/models/generated/block/base/base.ts
@@ -0,0 +1,24 @@
+export interface BlockBase {
+ object: "block";
+ id: string;
+ parent?: {
+ type: string;
+ block_id?: string;
+ page_id?: string;
+ };
+ type: string;
+ created_time: string;
+ created_by?: {
+ object: "user";
+ id: string;
+ };
+ last_edited_time?: string;
+ last_edited_by?: {
+ object: "user";
+ id: string;
+ };
+ archived?: boolean;
+ in_trash?: boolean;
+ has_children?: boolean;
+ metadata?: {};
+}
diff --git a/ts/src/models/generated/block/base/index.ts b/ts/src/models/generated/block/base/index.ts
new file mode 100644
index 0000000..955fdd1
--- /dev/null
+++ b/ts/src/models/generated/block/base/index.ts
@@ -0,0 +1 @@
+export * from "./base";
diff --git a/ts/src/models/generated/block/block.ts b/ts/src/models/generated/block/block.ts
new file mode 100644
index 0000000..c7c4b71
--- /dev/null
+++ b/ts/src/models/generated/block/block.ts
@@ -0,0 +1,22 @@
+export type Block = {
+ [k: string]: unknown;
+} & {
+ type:
+ | "paragraph"
+ | "to_do"
+ | "bulleted_list_item"
+ | "numbered_list_item"
+ | "code"
+ | "column"
+ | "column_list"
+ | "divider"
+ | "equation"
+ | "heading_1"
+ | "heading_2"
+ | "heading_3"
+ | "image"
+ | "quote"
+ | "table"
+ | "table_row"
+ | "toggle";
+};
diff --git a/ts/src/models/generated/block/index.ts b/ts/src/models/generated/block/index.ts
new file mode 100644
index 0000000..b2243dd
--- /dev/null
+++ b/ts/src/models/generated/block/index.ts
@@ -0,0 +1,3 @@
+export * from "./base";
+export * from "./types";
+export * from "./block";
diff --git a/ts/src/models/generated/block/types/bulleted_list_item/bulleted_list_item.ts b/ts/src/models/generated/block/types/bulleted_list_item/bulleted_list_item.ts
new file mode 100644
index 0000000..75cbdcf
--- /dev/null
+++ b/ts/src/models/generated/block/types/bulleted_list_item/bulleted_list_item.ts
@@ -0,0 +1,37 @@
+export type BulletedListItemBlock = BlockBase & {
+ type: "bulleted_list_item";
+ bulleted_list_item: {
+ rich_text: {
+ [k: string]: unknown;
+ }[];
+ color?:
+ | "blue"
+ | "blue_background"
+ | "brown"
+ | "brown_background"
+ | "default"
+ | "gray"
+ | "gray_background"
+ | "green"
+ | "green_background"
+ | "orange"
+ | "orange_background"
+ | "yellow"
+ | "pink"
+ | "pink_background"
+ | "purple"
+ | "purple_background"
+ | "red"
+ | "red_background"
+ | "yellow_background";
+ };
+ children?: Block[];
+};
+/**
+ * Reference to block.base.BlockBase
+ */
+export type BlockBase = BlockBase;
+/**
+ * Reference to jsondoc.models.block.base.BlockBase
+ */
+export type Block = BlockBase;
diff --git a/ts/src/models/generated/block/types/bulleted_list_item/index.ts b/ts/src/models/generated/block/types/bulleted_list_item/index.ts
new file mode 100644
index 0000000..fcc563f
--- /dev/null
+++ b/ts/src/models/generated/block/types/bulleted_list_item/index.ts
@@ -0,0 +1 @@
+export * from "./bulleted_list_item";
diff --git a/ts/src/models/generated/block/types/code/code.ts b/ts/src/models/generated/block/types/code/code.ts
new file mode 100644
index 0000000..c916fa7
--- /dev/null
+++ b/ts/src/models/generated/block/types/code/code.ts
@@ -0,0 +1,88 @@
+export type CodeBlock = BlockBase & {
+ type: "code";
+ code: {
+ caption?: {
+ [k: string]: unknown;
+ }[];
+ rich_text: {
+ [k: string]: unknown;
+ }[];
+ language?:
+ | "abap"
+ | "arduino"
+ | "bash"
+ | "basic"
+ | "c"
+ | "clojure"
+ | "coffeescript"
+ | "c++"
+ | "c#"
+ | "css"
+ | "dart"
+ | "diff"
+ | "docker"
+ | "elixir"
+ | "elm"
+ | "erlang"
+ | "flow"
+ | "fortran"
+ | "f#"
+ | "gherkin"
+ | "glsl"
+ | "go"
+ | "graphql"
+ | "groovy"
+ | "haskell"
+ | "html"
+ | "java"
+ | "javascript"
+ | "json"
+ | "julia"
+ | "kotlin"
+ | "latex"
+ | "less"
+ | "lisp"
+ | "livescript"
+ | "lua"
+ | "makefile"
+ | "markdown"
+ | "markup"
+ | "matlab"
+ | "mermaid"
+ | "nix"
+ | "objective-c"
+ | "ocaml"
+ | "pascal"
+ | "perl"
+ | "php"
+ | "plain text"
+ | "powershell"
+ | "prolog"
+ | "protobuf"
+ | "python"
+ | "r"
+ | "reason"
+ | "ruby"
+ | "rust"
+ | "sass"
+ | "scala"
+ | "scheme"
+ | "scss"
+ | "shell"
+ | "sql"
+ | "swift"
+ | "typescript"
+ | "vb.net"
+ | "verilog"
+ | "vhdl"
+ | "visual basic"
+ | "webassembly"
+ | "xml"
+ | "yaml"
+ | "java/c/c++/c#";
+ };
+};
+/**
+ * Reference to block.base.BlockBase
+ */
+export type BlockBase = BlockBase;
diff --git a/ts/src/models/generated/block/types/code/index.ts b/ts/src/models/generated/block/types/code/index.ts
new file mode 100644
index 0000000..dbba02e
--- /dev/null
+++ b/ts/src/models/generated/block/types/code/index.ts
@@ -0,0 +1 @@
+export * from "./code";
diff --git a/ts/src/models/generated/block/types/column/column.ts b/ts/src/models/generated/block/types/column/column.ts
new file mode 100644
index 0000000..217f411
--- /dev/null
+++ b/ts/src/models/generated/block/types/column/column.ts
@@ -0,0 +1,13 @@
+export type ColumnBlock = BlockBase & {
+ type: "column";
+ column: {};
+ children?: Block[];
+};
+/**
+ * Reference to block.base.BlockBase
+ */
+export type BlockBase = BlockBase;
+/**
+ * Reference to jsondoc.models.block.base.BlockBase
+ */
+export type Block = BlockBase;
diff --git a/ts/src/models/generated/block/types/column/index.ts b/ts/src/models/generated/block/types/column/index.ts
new file mode 100644
index 0000000..dc354db
--- /dev/null
+++ b/ts/src/models/generated/block/types/column/index.ts
@@ -0,0 +1 @@
+export * from "./column";
diff --git a/ts/src/models/generated/block/types/column_list/column_list.ts b/ts/src/models/generated/block/types/column_list/column_list.ts
new file mode 100644
index 0000000..63b8fdd
--- /dev/null
+++ b/ts/src/models/generated/block/types/column_list/column_list.ts
@@ -0,0 +1,13 @@
+export type ColumnListBlock = BlockBase & {
+ type: "column_list";
+ column_list: {};
+ children?: ColumnBlock[];
+};
+/**
+ * Reference to block.base.BlockBase
+ */
+export type BlockBase = BlockBase;
+/**
+ * Reference to block.types.column.ColumnBlock
+ */
+export type ColumnBlock = ColumnBlock;
diff --git a/ts/src/models/generated/block/types/column_list/index.ts b/ts/src/models/generated/block/types/column_list/index.ts
new file mode 100644
index 0000000..303edf9
--- /dev/null
+++ b/ts/src/models/generated/block/types/column_list/index.ts
@@ -0,0 +1 @@
+export * from "./column_list";
diff --git a/ts/src/models/generated/block/types/divider/divider.ts b/ts/src/models/generated/block/types/divider/divider.ts
new file mode 100644
index 0000000..dae6059
--- /dev/null
+++ b/ts/src/models/generated/block/types/divider/divider.ts
@@ -0,0 +1,8 @@
+export type DividerBlock = BlockBase & {
+ type: "divider";
+ divider: {};
+};
+/**
+ * Reference to block.base.BlockBase
+ */
+export type BlockBase = BlockBase;
diff --git a/ts/src/models/generated/block/types/divider/index.ts b/ts/src/models/generated/block/types/divider/index.ts
new file mode 100644
index 0000000..43f46a1
--- /dev/null
+++ b/ts/src/models/generated/block/types/divider/index.ts
@@ -0,0 +1 @@
+export * from "./divider";
diff --git a/ts/src/models/generated/block/types/equation/equation.ts b/ts/src/models/generated/block/types/equation/equation.ts
new file mode 100644
index 0000000..e2fe111
--- /dev/null
+++ b/ts/src/models/generated/block/types/equation/equation.ts
@@ -0,0 +1,10 @@
+export type EquationBlock = BlockBase & {
+ type: "equation";
+ equation: {
+ expression: string;
+ };
+};
+/**
+ * Reference to block.base.BlockBase
+ */
+export type BlockBase = BlockBase;
diff --git a/ts/src/models/generated/block/types/equation/index.ts b/ts/src/models/generated/block/types/equation/index.ts
new file mode 100644
index 0000000..18e4e75
--- /dev/null
+++ b/ts/src/models/generated/block/types/equation/index.ts
@@ -0,0 +1 @@
+export * from "./equation";
diff --git a/ts/src/models/generated/block/types/heading_1/heading_1.ts b/ts/src/models/generated/block/types/heading_1/heading_1.ts
new file mode 100644
index 0000000..916348d
--- /dev/null
+++ b/ts/src/models/generated/block/types/heading_1/heading_1.ts
@@ -0,0 +1,33 @@
+export type Heading1Block = BlockBase & {
+ type: "heading_1";
+ heading_1: {
+ rich_text: {
+ [k: string]: unknown;
+ }[];
+ color?:
+ | "blue"
+ | "blue_background"
+ | "brown"
+ | "brown_background"
+ | "default"
+ | "gray"
+ | "gray_background"
+ | "green"
+ | "green_background"
+ | "orange"
+ | "orange_background"
+ | "yellow"
+ | "pink"
+ | "pink_background"
+ | "purple"
+ | "purple_background"
+ | "red"
+ | "red_background"
+ | "yellow_background";
+ is_toggleable?: boolean;
+ };
+};
+/**
+ * Reference to block.base.BlockBase
+ */
+export type BlockBase = BlockBase;
diff --git a/ts/src/models/generated/block/types/heading_1/index.ts b/ts/src/models/generated/block/types/heading_1/index.ts
new file mode 100644
index 0000000..58f8b8a
--- /dev/null
+++ b/ts/src/models/generated/block/types/heading_1/index.ts
@@ -0,0 +1 @@
+export * from "./heading_1";
diff --git a/ts/src/models/generated/block/types/heading_2/heading_2.ts b/ts/src/models/generated/block/types/heading_2/heading_2.ts
new file mode 100644
index 0000000..a83fa6c
--- /dev/null
+++ b/ts/src/models/generated/block/types/heading_2/heading_2.ts
@@ -0,0 +1,33 @@
+export type Heading2Block = BlockBase & {
+ type: "heading_2";
+ heading_2: {
+ rich_text: {
+ [k: string]: unknown;
+ }[];
+ color?:
+ | "blue"
+ | "blue_background"
+ | "brown"
+ | "brown_background"
+ | "default"
+ | "gray"
+ | "gray_background"
+ | "green"
+ | "green_background"
+ | "orange"
+ | "orange_background"
+ | "yellow"
+ | "pink"
+ | "pink_background"
+ | "purple"
+ | "purple_background"
+ | "red"
+ | "red_background"
+ | "yellow_background";
+ is_toggleable?: boolean;
+ };
+};
+/**
+ * Reference to block.base.BlockBase
+ */
+export type BlockBase = BlockBase;
diff --git a/ts/src/models/generated/block/types/heading_2/index.ts b/ts/src/models/generated/block/types/heading_2/index.ts
new file mode 100644
index 0000000..50dbe71
--- /dev/null
+++ b/ts/src/models/generated/block/types/heading_2/index.ts
@@ -0,0 +1 @@
+export * from "./heading_2";
diff --git a/ts/src/models/generated/block/types/heading_3/heading_3.ts b/ts/src/models/generated/block/types/heading_3/heading_3.ts
new file mode 100644
index 0000000..d1b6b49
--- /dev/null
+++ b/ts/src/models/generated/block/types/heading_3/heading_3.ts
@@ -0,0 +1,33 @@
+export type Heading3Block = BlockBase & {
+ type: "heading_3";
+ heading_3: {
+ rich_text: {
+ [k: string]: unknown;
+ }[];
+ color?:
+ | "blue"
+ | "blue_background"
+ | "brown"
+ | "brown_background"
+ | "default"
+ | "gray"
+ | "gray_background"
+ | "green"
+ | "green_background"
+ | "orange"
+ | "orange_background"
+ | "yellow"
+ | "pink"
+ | "pink_background"
+ | "purple"
+ | "purple_background"
+ | "red"
+ | "red_background"
+ | "yellow_background";
+ is_toggleable?: boolean;
+ };
+};
+/**
+ * Reference to block.base.BlockBase
+ */
+export type BlockBase = BlockBase;
diff --git a/ts/src/models/generated/block/types/heading_3/index.ts b/ts/src/models/generated/block/types/heading_3/index.ts
new file mode 100644
index 0000000..05a67e6
--- /dev/null
+++ b/ts/src/models/generated/block/types/heading_3/index.ts
@@ -0,0 +1 @@
+export * from "./heading_3";
diff --git a/ts/src/models/generated/block/types/image/external_image/external_image.ts b/ts/src/models/generated/block/types/image/external_image/external_image.ts
new file mode 100644
index 0000000..4d17974
--- /dev/null
+++ b/ts/src/models/generated/block/types/image/external_image/external_image.ts
@@ -0,0 +1,9 @@
+export type ExternalImage = FileExternal & {
+ caption?: {
+ [k: string]: unknown;
+ }[];
+};
+/**
+ * Reference to file.external.FileExternal
+ */
+export type FileExternal = FileExternal;
diff --git a/ts/src/models/generated/block/types/image/external_image/index.ts b/ts/src/models/generated/block/types/image/external_image/index.ts
new file mode 100644
index 0000000..66fc2fe
--- /dev/null
+++ b/ts/src/models/generated/block/types/image/external_image/index.ts
@@ -0,0 +1 @@
+export * from "./external_image";
diff --git a/ts/src/models/generated/block/types/image/file_image/file_image.ts b/ts/src/models/generated/block/types/image/file_image/file_image.ts
new file mode 100644
index 0000000..ffc445a
--- /dev/null
+++ b/ts/src/models/generated/block/types/image/file_image/file_image.ts
@@ -0,0 +1,9 @@
+export type FileImage = FileFile & {
+ caption?: {
+ [k: string]: unknown;
+ }[];
+};
+/**
+ * Reference to file.file.FileFile
+ */
+export type FileFile = FileFile;
diff --git a/ts/src/models/generated/block/types/image/file_image/index.ts b/ts/src/models/generated/block/types/image/file_image/index.ts
new file mode 100644
index 0000000..4872ef3
--- /dev/null
+++ b/ts/src/models/generated/block/types/image/file_image/index.ts
@@ -0,0 +1 @@
+export * from "./file_image";
diff --git a/ts/src/models/generated/block/types/image/image.ts b/ts/src/models/generated/block/types/image/image.ts
new file mode 100644
index 0000000..e04e98b
--- /dev/null
+++ b/ts/src/models/generated/block/types/image/image.ts
@@ -0,0 +1,10 @@
+export type ImageBlock = BlockBase & {
+ type: "image";
+ image: {
+ [k: string]: unknown;
+ };
+};
+/**
+ * Reference to block.base.BlockBase
+ */
+export type BlockBase = BlockBase;
diff --git a/ts/src/models/generated/block/types/image/index.ts b/ts/src/models/generated/block/types/image/index.ts
new file mode 100644
index 0000000..1bfda23
--- /dev/null
+++ b/ts/src/models/generated/block/types/image/index.ts
@@ -0,0 +1,3 @@
+export * from "./external_image";
+export * from "./file_image";
+export * from "./image";
diff --git a/ts/src/models/generated/block/types/index.ts b/ts/src/models/generated/block/types/index.ts
new file mode 100644
index 0000000..661474d
--- /dev/null
+++ b/ts/src/models/generated/block/types/index.ts
@@ -0,0 +1,18 @@
+export * from "./bulleted_list_item";
+export * from "./code";
+export * from "./column";
+export * from "./column_list";
+export * from "./divider";
+export * from "./equation";
+export * from "./heading_1";
+export * from "./heading_2";
+export * from "./heading_3";
+export * from "./image";
+export * from "./numbered_list_item";
+export * from "./paragraph";
+export * from "./quote";
+export * from "./rich_text";
+export * from "./table";
+export * from "./table_row";
+export * from "./to_do";
+export * from "./toggle";
diff --git a/ts/src/models/generated/block/types/numbered_list_item/index.ts b/ts/src/models/generated/block/types/numbered_list_item/index.ts
new file mode 100644
index 0000000..30017d6
--- /dev/null
+++ b/ts/src/models/generated/block/types/numbered_list_item/index.ts
@@ -0,0 +1 @@
+export * from "./numbered_list_item";
diff --git a/ts/src/models/generated/block/types/numbered_list_item/numbered_list_item.ts b/ts/src/models/generated/block/types/numbered_list_item/numbered_list_item.ts
new file mode 100644
index 0000000..9c581c1
--- /dev/null
+++ b/ts/src/models/generated/block/types/numbered_list_item/numbered_list_item.ts
@@ -0,0 +1,37 @@
+export type NumberedListItemBlock = BlockBase & {
+ type: "numbered_list_item";
+ numbered_list_item: {
+ rich_text: {
+ [k: string]: unknown;
+ }[];
+ color?:
+ | "blue"
+ | "blue_background"
+ | "brown"
+ | "brown_background"
+ | "default"
+ | "gray"
+ | "gray_background"
+ | "green"
+ | "green_background"
+ | "orange"
+ | "orange_background"
+ | "yellow"
+ | "pink"
+ | "pink_background"
+ | "purple"
+ | "purple_background"
+ | "red"
+ | "red_background"
+ | "yellow_background";
+ };
+ children?: Block[];
+};
+/**
+ * Reference to block.base.BlockBase
+ */
+export type BlockBase = BlockBase;
+/**
+ * Reference to jsondoc.models.block.base.BlockBase
+ */
+export type Block = BlockBase;
diff --git a/ts/src/models/generated/block/types/paragraph/index.ts b/ts/src/models/generated/block/types/paragraph/index.ts
new file mode 100644
index 0000000..ed5fa62
--- /dev/null
+++ b/ts/src/models/generated/block/types/paragraph/index.ts
@@ -0,0 +1 @@
+export * from "./paragraph";
diff --git a/ts/src/models/generated/block/types/paragraph/paragraph.ts b/ts/src/models/generated/block/types/paragraph/paragraph.ts
new file mode 100644
index 0000000..18888b3
--- /dev/null
+++ b/ts/src/models/generated/block/types/paragraph/paragraph.ts
@@ -0,0 +1,37 @@
+export type ParagraphBlock = BlockBase & {
+ type: "paragraph";
+ paragraph: {
+ rich_text: {
+ [k: string]: unknown;
+ }[];
+ color?:
+ | "blue"
+ | "blue_background"
+ | "brown"
+ | "brown_background"
+ | "default"
+ | "gray"
+ | "gray_background"
+ | "green"
+ | "green_background"
+ | "orange"
+ | "orange_background"
+ | "yellow"
+ | "pink"
+ | "pink_background"
+ | "purple"
+ | "purple_background"
+ | "red"
+ | "red_background"
+ | "yellow_background";
+ };
+ children?: Block[];
+};
+/**
+ * Reference to block.base.BlockBase
+ */
+export type BlockBase = BlockBase;
+/**
+ * Reference to jsondoc.models.block.base.BlockBase
+ */
+export type Block = BlockBase;
diff --git a/ts/src/models/generated/block/types/quote/index.ts b/ts/src/models/generated/block/types/quote/index.ts
new file mode 100644
index 0000000..fb8f2f0
--- /dev/null
+++ b/ts/src/models/generated/block/types/quote/index.ts
@@ -0,0 +1 @@
+export * from "./quote";
diff --git a/ts/src/models/generated/block/types/quote/quote.ts b/ts/src/models/generated/block/types/quote/quote.ts
new file mode 100644
index 0000000..23f481d
--- /dev/null
+++ b/ts/src/models/generated/block/types/quote/quote.ts
@@ -0,0 +1,37 @@
+export type QuoteBlock = BlockBase & {
+ type: "quote";
+ quote: {
+ rich_text: {
+ [k: string]: unknown;
+ }[];
+ color?:
+ | "blue"
+ | "blue_background"
+ | "brown"
+ | "brown_background"
+ | "default"
+ | "gray"
+ | "gray_background"
+ | "green"
+ | "green_background"
+ | "orange"
+ | "orange_background"
+ | "yellow"
+ | "pink"
+ | "pink_background"
+ | "purple"
+ | "purple_background"
+ | "red"
+ | "red_background"
+ | "yellow_background";
+ };
+ children?: Block[];
+};
+/**
+ * Reference to block.base.BlockBase
+ */
+export type BlockBase = BlockBase;
+/**
+ * Reference to jsondoc.models.block.base.BlockBase
+ */
+export type Block = BlockBase;
diff --git a/ts/src/models/generated/block/types/rich_text/base/base.ts b/ts/src/models/generated/block/types/rich_text/base/base.ts
new file mode 100644
index 0000000..6922098
--- /dev/null
+++ b/ts/src/models/generated/block/types/rich_text/base/base.ts
@@ -0,0 +1 @@
+export interface RichTextBase {}
diff --git a/ts/src/models/generated/block/types/rich_text/base/index.ts b/ts/src/models/generated/block/types/rich_text/base/index.ts
new file mode 100644
index 0000000..955fdd1
--- /dev/null
+++ b/ts/src/models/generated/block/types/rich_text/base/index.ts
@@ -0,0 +1 @@
+export * from "./base";
diff --git a/ts/src/models/generated/block/types/rich_text/equation/equation.ts b/ts/src/models/generated/block/types/rich_text/equation/equation.ts
new file mode 100644
index 0000000..1120a98
--- /dev/null
+++ b/ts/src/models/generated/block/types/rich_text/equation/equation.ts
@@ -0,0 +1,16 @@
+export interface RichTextEquation {
+ type: "equation";
+ equation: {
+ expression: string;
+ };
+ annotations: {
+ bold?: boolean;
+ italic?: boolean;
+ strikethrough?: boolean;
+ underline?: boolean;
+ code?: boolean;
+ color?: string;
+ };
+ plain_text: string;
+ href: string | null;
+}
diff --git a/ts/src/models/generated/block/types/rich_text/equation/index.ts b/ts/src/models/generated/block/types/rich_text/equation/index.ts
new file mode 100644
index 0000000..18e4e75
--- /dev/null
+++ b/ts/src/models/generated/block/types/rich_text/equation/index.ts
@@ -0,0 +1 @@
+export * from "./equation";
diff --git a/ts/src/models/generated/block/types/rich_text/index.ts b/ts/src/models/generated/block/types/rich_text/index.ts
new file mode 100644
index 0000000..1094752
--- /dev/null
+++ b/ts/src/models/generated/block/types/rich_text/index.ts
@@ -0,0 +1,4 @@
+export * from "./base";
+export * from "./equation";
+export * from "./text";
+export * from "./rich_text";
diff --git a/ts/src/models/generated/block/types/rich_text/rich_text.ts b/ts/src/models/generated/block/types/rich_text/rich_text.ts
new file mode 100644
index 0000000..d99d219
--- /dev/null
+++ b/ts/src/models/generated/block/types/rich_text/rich_text.ts
@@ -0,0 +1,5 @@
+export type RichText = {
+ [k: string]: unknown;
+} & {
+ type: "text" | "equation";
+};
diff --git a/ts/src/models/generated/block/types/rich_text/text/index.ts b/ts/src/models/generated/block/types/rich_text/text/index.ts
new file mode 100644
index 0000000..e20cd3f
--- /dev/null
+++ b/ts/src/models/generated/block/types/rich_text/text/index.ts
@@ -0,0 +1 @@
+export * from "./text";
diff --git a/ts/src/models/generated/block/types/rich_text/text/text.ts b/ts/src/models/generated/block/types/rich_text/text/text.ts
new file mode 100644
index 0000000..34e8894
--- /dev/null
+++ b/ts/src/models/generated/block/types/rich_text/text/text.ts
@@ -0,0 +1,19 @@
+export interface RichTextText {
+ type: "text";
+ text: {
+ content: string;
+ link: {
+ url: string;
+ } | null;
+ };
+ annotations: {
+ bold?: boolean;
+ italic?: boolean;
+ strikethrough?: boolean;
+ underline?: boolean;
+ code?: boolean;
+ color?: string;
+ };
+ plain_text: string;
+ href: string | null;
+}
diff --git a/ts/src/models/generated/block/types/table/index.ts b/ts/src/models/generated/block/types/table/index.ts
new file mode 100644
index 0000000..0e948df
--- /dev/null
+++ b/ts/src/models/generated/block/types/table/index.ts
@@ -0,0 +1 @@
+export * from "./table";
diff --git a/ts/src/models/generated/block/types/table/table.ts b/ts/src/models/generated/block/types/table/table.ts
new file mode 100644
index 0000000..35181ad
--- /dev/null
+++ b/ts/src/models/generated/block/types/table/table.ts
@@ -0,0 +1,17 @@
+export type TableBlock = BlockBase & {
+ type: "table";
+ table: {
+ table_width?: number;
+ has_column_header: boolean;
+ has_row_header: boolean;
+ };
+ children?: TableRowBlock[];
+};
+/**
+ * Reference to block.base.BlockBase
+ */
+export type BlockBase = BlockBase;
+/**
+ * Reference to block.types.table_row.TableRowBlock
+ */
+export type TableRowBlock = TableRowBlock;
diff --git a/ts/src/models/generated/block/types/table_row/index.ts b/ts/src/models/generated/block/types/table_row/index.ts
new file mode 100644
index 0000000..9dc983c
--- /dev/null
+++ b/ts/src/models/generated/block/types/table_row/index.ts
@@ -0,0 +1 @@
+export * from "./table_row";
diff --git a/ts/src/models/generated/block/types/table_row/table_row.ts b/ts/src/models/generated/block/types/table_row/table_row.ts
new file mode 100644
index 0000000..c6e7cce
--- /dev/null
+++ b/ts/src/models/generated/block/types/table_row/table_row.ts
@@ -0,0 +1,12 @@
+export type TableRowBlock = BlockBase & {
+ type: "table_row";
+ table_row: {
+ cells: {
+ [k: string]: unknown;
+ }[][];
+ };
+};
+/**
+ * Reference to block.base.BlockBase
+ */
+export type BlockBase = BlockBase;
diff --git a/ts/src/models/generated/block/types/to_do/index.ts b/ts/src/models/generated/block/types/to_do/index.ts
new file mode 100644
index 0000000..5284e71
--- /dev/null
+++ b/ts/src/models/generated/block/types/to_do/index.ts
@@ -0,0 +1 @@
+export * from "./to_do";
diff --git a/ts/src/models/generated/block/types/to_do/to_do.ts b/ts/src/models/generated/block/types/to_do/to_do.ts
new file mode 100644
index 0000000..651c7c5
--- /dev/null
+++ b/ts/src/models/generated/block/types/to_do/to_do.ts
@@ -0,0 +1,38 @@
+export type ToDoBlock = BlockBase & {
+ type: "to_do";
+ to_do: {
+ rich_text: {
+ [k: string]: unknown;
+ }[];
+ checked: boolean;
+ color?:
+ | "blue"
+ | "blue_background"
+ | "brown"
+ | "brown_background"
+ | "default"
+ | "gray"
+ | "gray_background"
+ | "green"
+ | "green_background"
+ | "orange"
+ | "orange_background"
+ | "yellow"
+ | "pink"
+ | "pink_background"
+ | "purple"
+ | "purple_background"
+ | "red"
+ | "red_background"
+ | "yellow_background";
+ };
+ children?: Block[];
+};
+/**
+ * Reference to block.base.BlockBase
+ */
+export type BlockBase = BlockBase;
+/**
+ * Reference to jsondoc.models.block.base.BlockBase
+ */
+export type Block = BlockBase;
diff --git a/ts/src/models/generated/block/types/toggle/index.ts b/ts/src/models/generated/block/types/toggle/index.ts
new file mode 100644
index 0000000..934fd73
--- /dev/null
+++ b/ts/src/models/generated/block/types/toggle/index.ts
@@ -0,0 +1 @@
+export * from "./toggle";
diff --git a/ts/src/models/generated/block/types/toggle/toggle.ts b/ts/src/models/generated/block/types/toggle/toggle.ts
new file mode 100644
index 0000000..fbc9dbe
--- /dev/null
+++ b/ts/src/models/generated/block/types/toggle/toggle.ts
@@ -0,0 +1,37 @@
+export type ToggleBlock = BlockBase & {
+ type: "toggle";
+ toggle: {
+ rich_text: {
+ [k: string]: unknown;
+ }[];
+ color?:
+ | "blue"
+ | "blue_background"
+ | "brown"
+ | "brown_background"
+ | "default"
+ | "gray"
+ | "gray_background"
+ | "green"
+ | "green_background"
+ | "orange"
+ | "orange_background"
+ | "yellow"
+ | "pink"
+ | "pink_background"
+ | "purple"
+ | "purple_background"
+ | "red"
+ | "red_background"
+ | "yellow_background";
+ };
+ children?: Block[];
+};
+/**
+ * Reference to block.base.BlockBase
+ */
+export type BlockBase = BlockBase;
+/**
+ * Reference to jsondoc.models.block.base.BlockBase
+ */
+export type Block = BlockBase;
diff --git a/ts/src/models/generated/essential-types.ts b/ts/src/models/generated/essential-types.ts
new file mode 100644
index 0000000..4d5b2b7
--- /dev/null
+++ b/ts/src/models/generated/essential-types.ts
@@ -0,0 +1,130 @@
+// Object types
+export enum ObjectType {
+ Block = "block",
+ Page = "page",
+}
+
+// Block types
+export enum BlockType {
+ Paragraph = "paragraph",
+ ToDo = "to_do",
+ BulletedListItem = "bulleted_list_item",
+ NumberedListItem = "numbered_list_item",
+ Code = "code",
+ Column = "column",
+ ColumnList = "column_list",
+ Divider = "divider",
+ Equation = "equation",
+ Heading1 = "heading_1",
+ Heading2 = "heading_2",
+ Heading3 = "heading_3",
+ Image = "image",
+ Quote = "quote",
+ Table = "table",
+ TableRow = "table_row",
+ Toggle = "toggle",
+}
+
+// Rich text types
+export enum RichTextType {
+ Text = "text",
+ Equation = "equation",
+}
+
+// File types
+export enum FileType {
+ External = "external",
+ File = "file",
+}
+
+// Parent types
+export enum ParentType {
+ DatabaseId = "database_id",
+ PageId = "page_id",
+ Workspace = "workspace",
+ BlockId = "block_id",
+}
+
+// Base types
+export type JsonValue =
+ | string
+ | number
+ | boolean
+ | null
+ | JsonObject
+ | JsonArray;
+export interface JsonObject {
+ [key: string]: JsonValue;
+}
+export type JsonArray = JsonValue[];
+
+// Type guards
+export function isBlock(obj: any): obj is any {
+ return obj && obj.object === ObjectType.Block;
+}
+export function isPage(obj: any): obj is any {
+ return obj && obj.object === ObjectType.Page;
+}
+export function isParagraphBlock(obj: any): obj is any {
+ return obj && obj.type === BlockType.Paragraph;
+}
+export function isToDoBlock(obj: any): obj is any {
+ return obj && obj.type === BlockType.ToDo;
+}
+export function isBulletedListItemBlock(obj: any): obj is any {
+ return obj && obj.type === BlockType.BulletedListItem;
+}
+export function isNumberedListItemBlock(obj: any): obj is any {
+ return obj && obj.type === BlockType.NumberedListItem;
+}
+export function isCodeBlock(obj: any): obj is any {
+ return obj && obj.type === BlockType.Code;
+}
+export function isColumnBlock(obj: any): obj is any {
+ return obj && obj.type === BlockType.Column;
+}
+export function isColumnListBlock(obj: any): obj is any {
+ return obj && obj.type === BlockType.ColumnList;
+}
+export function isDividerBlock(obj: any): obj is any {
+ return obj && obj.type === BlockType.Divider;
+}
+export function isEquationBlock(obj: any): obj is any {
+ return obj && obj.type === BlockType.Equation;
+}
+export function isHeading1Block(obj: any): obj is any {
+ return obj && obj.type === BlockType.Heading1;
+}
+export function isHeading2Block(obj: any): obj is any {
+ return obj && obj.type === BlockType.Heading2;
+}
+export function isHeading3Block(obj: any): obj is any {
+ return obj && obj.type === BlockType.Heading3;
+}
+export function isImageBlock(obj: any): obj is any {
+ return obj && obj.type === BlockType.Image;
+}
+export function isQuoteBlock(obj: any): obj is any {
+ return obj && obj.type === BlockType.Quote;
+}
+export function isTableBlock(obj: any): obj is any {
+ return obj && obj.type === BlockType.Table;
+}
+export function isTableRowBlock(obj: any): obj is any {
+ return obj && obj.type === BlockType.TableRow;
+}
+export function isToggleBlock(obj: any): obj is any {
+ return obj && obj.type === BlockType.Toggle;
+}
+export function isRichTextText(obj: any): obj is any {
+ return obj && obj.type === RichTextType.Text;
+}
+export function isRichTextEquation(obj: any): obj is any {
+ return obj && obj.type === RichTextType.Equation;
+}
+export function isExternalFile(obj: any): obj is any {
+ return obj && obj.type === FileType.External;
+}
+export function isFileFile(obj: any): obj is any {
+ return obj && obj.type === FileType.File;
+}
diff --git a/ts/src/models/generated/file/base/base.ts b/ts/src/models/generated/file/base/base.ts
new file mode 100644
index 0000000..dc1ebac
--- /dev/null
+++ b/ts/src/models/generated/file/base/base.ts
@@ -0,0 +1 @@
+export interface FileBase {}
diff --git a/ts/src/models/generated/file/base/index.ts b/ts/src/models/generated/file/base/index.ts
new file mode 100644
index 0000000..955fdd1
--- /dev/null
+++ b/ts/src/models/generated/file/base/index.ts
@@ -0,0 +1 @@
+export * from "./base";
diff --git a/ts/src/models/generated/file/external/external.ts b/ts/src/models/generated/file/external/external.ts
new file mode 100644
index 0000000..2bdd81f
--- /dev/null
+++ b/ts/src/models/generated/file/external/external.ts
@@ -0,0 +1,6 @@
+export interface FileExternal {
+ type?: "external";
+ external: {
+ url: string;
+ };
+}
diff --git a/ts/src/models/generated/file/external/index.ts b/ts/src/models/generated/file/external/index.ts
new file mode 100644
index 0000000..df530b9
--- /dev/null
+++ b/ts/src/models/generated/file/external/index.ts
@@ -0,0 +1 @@
+export * from "./external";
diff --git a/ts/src/models/generated/file/file.ts b/ts/src/models/generated/file/file.ts
new file mode 100644
index 0000000..01abb6e
--- /dev/null
+++ b/ts/src/models/generated/file/file.ts
@@ -0,0 +1,5 @@
+export type File = {
+ [k: string]: unknown;
+} & {
+ type: "external" | "file";
+};
diff --git a/ts/src/models/generated/file/file/file.ts b/ts/src/models/generated/file/file/file.ts
new file mode 100644
index 0000000..ee33722
--- /dev/null
+++ b/ts/src/models/generated/file/file/file.ts
@@ -0,0 +1,7 @@
+export interface FileFile {
+ type?: "file";
+ file: {
+ url: string;
+ expiry_time?: string;
+ };
+}
diff --git a/ts/src/models/generated/file/file/index.ts b/ts/src/models/generated/file/file/index.ts
new file mode 100644
index 0000000..375123f
--- /dev/null
+++ b/ts/src/models/generated/file/file/index.ts
@@ -0,0 +1 @@
+export * from "./file";
diff --git a/ts/src/models/generated/file/index.ts b/ts/src/models/generated/file/index.ts
new file mode 100644
index 0000000..cbcbc24
--- /dev/null
+++ b/ts/src/models/generated/file/index.ts
@@ -0,0 +1,4 @@
+export * from "./base";
+export * from "./external";
+export * from "./file";
+export * from "./file";
diff --git a/ts/src/models/generated/index.ts b/ts/src/models/generated/index.ts
new file mode 100644
index 0000000..1c5e661
--- /dev/null
+++ b/ts/src/models/generated/index.ts
@@ -0,0 +1,5 @@
+export * from "./block";
+export * from "./file";
+export * from "./page";
+export * from "./shared_definitions";
+export * from "./essential-types";
diff --git a/ts/src/models/generated/page/index.ts b/ts/src/models/generated/page/index.ts
new file mode 100644
index 0000000..4962a1f
--- /dev/null
+++ b/ts/src/models/generated/page/index.ts
@@ -0,0 +1 @@
+export * from "./page";
diff --git a/ts/src/models/generated/page/page.ts b/ts/src/models/generated/page/page.ts
new file mode 100644
index 0000000..496fd58
--- /dev/null
+++ b/ts/src/models/generated/page/page.ts
@@ -0,0 +1,41 @@
+/**
+ * Reference to block.types.rich_text.text.RichTextText
+ */
+export type RichTextText = RichTextText;
+/**
+ * Reference to jsondoc.models.block.base.BlockBase
+ */
+export type Block = BlockBase;
+
+export interface Page {
+ object: "page";
+ id: string;
+ parent?: {
+ type: string;
+ page_id?: string;
+ };
+ created_time: string;
+ created_by?: {
+ object: "user";
+ id: string;
+ };
+ last_edited_time?: string;
+ last_edited_by?: {
+ object: "user";
+ id: string;
+ };
+ icon?: {
+ type: "emoji";
+ emoji: string;
+ };
+ archived?: boolean;
+ in_trash?: boolean;
+ properties: {
+ title?: {
+ id?: string;
+ type?: "title";
+ title?: RichTextText[];
+ };
+ };
+ children: Block[];
+}
diff --git a/ts/src/models/generated/shared_definitions/index.ts b/ts/src/models/generated/shared_definitions/index.ts
new file mode 100644
index 0000000..656a0bb
--- /dev/null
+++ b/ts/src/models/generated/shared_definitions/index.ts
@@ -0,0 +1 @@
+export * from "./shared_definitions";
diff --git a/ts/src/models/generated/shared_definitions/shared_definitions.ts b/ts/src/models/generated/shared_definitions/shared_definitions.ts
new file mode 100644
index 0000000..5956f1b
--- /dev/null
+++ b/ts/src/models/generated/shared_definitions/shared_definitions.ts
@@ -0,0 +1,3 @@
+export interface SharedDefinitions {
+ [k: string]: unknown;
+}
diff --git a/ts/src/serialization/loader.ts b/ts/src/serialization/loader.ts
new file mode 100644
index 0000000..5b09990
--- /dev/null
+++ b/ts/src/serialization/loader.ts
@@ -0,0 +1,385 @@
+import {
+ BlockType,
+ FileType,
+ Page,
+ RichText,
+ RichTextEquation,
+ RichTextText,
+ RichTextType,
+ ExternalFile,
+ FileFile,
+ ObjectType,
+ Block,
+ isPage,
+ isBlock,
+ ParagraphBlock,
+ BulletedListItemBlock,
+ NumberedListItemBlock,
+ CodeBlock,
+ ColumnBlock,
+ ColumnListBlock,
+ DividerBlock,
+ EquationBlock,
+ Heading1Block,
+ Heading2Block,
+ Heading3Block,
+ ImageBlock,
+ QuoteBlock,
+ TableBlock,
+ TableRowBlock,
+ ToDoBlock,
+ ToggleBlock,
+ isExternalFile,
+ isFileFile,
+} from "../models/generated";
+
+import {
+ deepClone,
+ getNestedValue,
+ loadJson,
+ setNestedValue,
+} from "../utils/json";
+
+// Block type to factory function mapping
+const BLOCK_TYPE_FACTORIES: Record Block> = {
+ [BlockType.Paragraph]: createParagraphBlock,
+ [BlockType.ToDo]: createToDoBlock,
+ [BlockType.BulletedListItem]: createBulletedListItemBlock,
+ [BlockType.NumberedListItem]: createNumberedListItemBlock,
+ [BlockType.Code]: createCodeBlock,
+ [BlockType.Column]: createColumnBlock,
+ [BlockType.ColumnList]: createColumnListBlock,
+ [BlockType.Divider]: createDividerBlock,
+ [BlockType.Equation]: createEquationBlock,
+ [BlockType.Heading1]: createHeading1Block,
+ [BlockType.Heading2]: createHeading2Block,
+ [BlockType.Heading3]: createHeading3Block,
+ [BlockType.Image]: createImageBlock,
+ [BlockType.Quote]: createQuoteBlock,
+ [BlockType.Table]: createTableBlock,
+ [BlockType.TableRow]: createTableRowBlock,
+ [BlockType.Toggle]: createToggleBlock,
+};
+
+// Rich text type to factory function mapping
+const RICH_TEXT_FACTORIES: Record RichText> = {
+ [RichTextType.Text]: createRichTextText,
+ [RichTextType.Equation]: createRichTextEquation,
+};
+
+// File type to factory function mapping
+const FILE_FACTORIES: Record ExternalFile | FileFile> =
+ {
+ [FileType.File]: createFileFile,
+ [FileType.External]: createExternalFile,
+ };
+
+// Other rich text fields in specific block types
+const OTHER_RICH_TEXT_FIELDS: Partial> = {
+ [BlockType.Code]: [".code.caption"],
+ [BlockType.Image]: [".image.caption"],
+};
+
+// Nested rich text fields in specific block types
+const NESTED_RICH_TEXT_FIELDS: Partial> = {
+ [BlockType.TableRow]: [".table_row.cells"],
+};
+
+/**
+ * Load a rich text object
+ * @param obj Rich text object
+ * @returns Processed rich text object
+ */
+export function loadRichText(obj: any): RichText {
+ obj = deepClone(obj);
+
+ // Extract and validate rich text type
+ const currentType = obj.type as RichTextType;
+
+ // Find the corresponding rich text factory
+ const richTextFactory = RICH_TEXT_FACTORIES[currentType];
+ if (!richTextFactory) {
+ throw new Error(`Unsupported rich text type: ${currentType}`);
+ }
+
+ // Create the rich text with all properties
+ return richTextFactory(obj);
+}
+
+/**
+ * Load an image file
+ * @param obj Image file object
+ * @returns Processed file object
+ */
+export function loadImage(obj: any): ExternalFile | FileFile {
+ obj = deepClone(obj);
+
+ // Extract and validate file type
+ const currentType = obj.type as FileType;
+
+ // Find the corresponding file factory
+ const fileFactory = FILE_FACTORIES[currentType];
+ if (!fileFactory) {
+ throw new Error(`Unsupported file type: ${currentType}`);
+ }
+
+ // Create the file with all properties
+ return fileFactory(obj);
+}
+
+/**
+ * Load a block object
+ * @param obj Block object
+ * @returns Processed block object
+ */
+export function loadBlock(obj: any): Block {
+ obj = deepClone(obj);
+
+ // Extract children before processing
+ const children = obj.children;
+ delete obj.children;
+
+ // Extract and validate block type
+ const currentType = obj.type as BlockType;
+
+ // Find the corresponding block factory
+ const blockFactory = BLOCK_TYPE_FACTORIES[currentType];
+ if (!blockFactory) {
+ throw new Error(`Unsupported block type: ${currentType}`);
+ }
+
+ // Process children recursively if present
+ if (children) {
+ obj.children = children.map((child: any) => loadBlock(child));
+ }
+
+ // Process rich text
+ // First get sub object field
+ const objFieldKey = currentType;
+ const objField = obj[objFieldKey] || {};
+
+ // Check if there is a rich text field
+ if (objField.rich_text) {
+ // Must be a list
+ if (!Array.isArray(objField.rich_text)) {
+ throw new Error(
+ `Rich text field must be a list: ${JSON.stringify(objField.rich_text)}`,
+ );
+ }
+
+ // Load rich text field
+ objField.rich_text = objField.rich_text.map((richText: any) =>
+ loadRichText(richText),
+ );
+ }
+
+ // Process caption field
+ if (currentType in OTHER_RICH_TEXT_FIELDS) {
+ const rtFields = OTHER_RICH_TEXT_FIELDS[currentType] || [];
+ for (const rtField of rtFields) {
+ const val = getNestedValue(obj, rtField);
+
+ if (!val) continue;
+
+ if (!Array.isArray(val)) {
+ throw new Error(
+ `Field ${rtField} must be a list: ${JSON.stringify(val)}`,
+ );
+ }
+
+ const newVal = val.map((richText: any) => loadRichText(richText));
+ setNestedValue(obj, rtField, newVal);
+ }
+ }
+
+ // Process cell field
+ if (currentType in NESTED_RICH_TEXT_FIELDS) {
+ const rtFields = NESTED_RICH_TEXT_FIELDS[currentType] || [];
+ for (const rtField of rtFields) {
+ const val = getNestedValue(obj, rtField);
+
+ if (!val) continue;
+
+ if (!Array.isArray(val)) {
+ throw new Error(
+ `Field ${rtField} must be a list: ${JSON.stringify(val)}`,
+ );
+ }
+
+ const newVal: RichText[][] = [];
+ for (const row of val) {
+ const newRow = row.map((richText: any) => loadRichText(richText));
+ newVal.push(newRow);
+ }
+ setNestedValue(obj, rtField, newVal);
+ }
+ }
+
+ // Process image field
+ if (currentType === BlockType.Image) {
+ if (obj.image?.file) {
+ const val = obj.image.file;
+ const fileObj = loadImage({ type: FileType.File, file: val });
+
+ if (isFileFile(fileObj)) {
+ obj.image.file = fileObj.file;
+ }
+ } else if (obj.image?.external) {
+ const val = obj.image.external;
+ const externalObj = loadImage({ type: FileType.External, external: val });
+
+ if (isExternalFile(externalObj)) {
+ obj.image.external = externalObj.external;
+ }
+ }
+ }
+
+ // Create the block with all properties
+ return blockFactory(obj);
+}
+
+/**
+ * Load a page object
+ * @param obj Page object
+ * @returns Processed page object
+ */
+export function loadPage(obj: any): Page {
+ obj = deepClone(obj);
+
+ // Process children
+ if (obj.children && Array.isArray(obj.children)) {
+ obj.children = obj.children.map((child: any) => loadBlock(child));
+ }
+
+ return obj as Page;
+}
+
+/**
+ * Load a JSON-DOC object
+ * @param obj JSON-DOC object
+ * @returns Processed JSON-DOC object (Page or Block or Block[])
+ */
+export function loadJsonDoc(obj: any): Page | Block | Block[] {
+ obj = loadJson(obj);
+
+ if (Array.isArray(obj)) {
+ return obj.map((block) => loadJsonDoc(block) as Block) as Block[];
+ }
+
+ const objectType = obj.object;
+ if (objectType === ObjectType.Page || objectType === "page") {
+ return loadPage(obj);
+ } else if (objectType === ObjectType.Block || objectType === "block") {
+ return loadBlock(obj);
+ } else {
+ throw new Error(
+ `Invalid object type: ${objectType}. Must be either 'page' or 'block'`,
+ );
+ }
+}
+
+/**
+ * Serialize a JSON-DOC object to a JSON string
+ * @param obj JSON-DOC object
+ * @param indent Indentation level
+ * @returns JSON string
+ */
+export function jsonDocDumpJson(
+ obj: Block | Block[] | Page,
+ indent?: number,
+): string {
+ if (Array.isArray(obj)) {
+ // Serialize array of blocks
+ return JSON.stringify(obj, null, indent);
+ } else {
+ // Serialize single object
+ return JSON.stringify(obj, null, indent);
+ }
+}
+
+// Factory functions for different block types
+function createParagraphBlock(obj: any): ParagraphBlock {
+ return { ...obj, object: "block" } as ParagraphBlock;
+}
+
+function createToDoBlock(obj: any): ToDoBlock {
+ return { ...obj, object: "block" } as ToDoBlock;
+}
+
+function createBulletedListItemBlock(obj: any): BulletedListItemBlock {
+ return { ...obj, object: "block" } as BulletedListItemBlock;
+}
+
+function createNumberedListItemBlock(obj: any): NumberedListItemBlock {
+ return { ...obj, object: "block" } as NumberedListItemBlock;
+}
+
+function createCodeBlock(obj: any): CodeBlock {
+ return { ...obj, object: "block" } as CodeBlock;
+}
+
+function createColumnBlock(obj: any): ColumnBlock {
+ return { ...obj, object: "block" } as ColumnBlock;
+}
+
+function createColumnListBlock(obj: any): ColumnListBlock {
+ return { ...obj, object: "block" } as ColumnListBlock;
+}
+
+function createDividerBlock(obj: any): DividerBlock {
+ return { ...obj, object: "block" } as DividerBlock;
+}
+
+function createEquationBlock(obj: any): EquationBlock {
+ return { ...obj, object: "block" } as EquationBlock;
+}
+
+function createHeading1Block(obj: any): Heading1Block {
+ return { ...obj, object: "block" } as Heading1Block;
+}
+
+function createHeading2Block(obj: any): Heading2Block {
+ return { ...obj, object: "block" } as Heading2Block;
+}
+
+function createHeading3Block(obj: any): Heading3Block {
+ return { ...obj, object: "block" } as Heading3Block;
+}
+
+function createImageBlock(obj: any): ImageBlock {
+ return { ...obj, object: "block" } as ImageBlock;
+}
+
+function createQuoteBlock(obj: any): QuoteBlock {
+ return { ...obj, object: "block" } as QuoteBlock;
+}
+
+function createTableBlock(obj: any): TableBlock {
+ return { ...obj, object: "block" } as TableBlock;
+}
+
+function createTableRowBlock(obj: any): TableRowBlock {
+ return { ...obj, object: "block" } as TableRowBlock;
+}
+
+function createToggleBlock(obj: any): ToggleBlock {
+ return { ...obj, object: "block" } as ToggleBlock;
+}
+
+// Factory functions for rich text types
+function createRichTextText(obj: any): RichTextText {
+ return obj as RichTextText;
+}
+
+function createRichTextEquation(obj: any): RichTextEquation {
+ return obj as RichTextEquation;
+}
+
+// Factory functions for file types
+function createExternalFile(obj: any): ExternalFile {
+ return obj as ExternalFile;
+}
+
+function createFileFile(obj: any): FileFile {
+ return obj as FileFile;
+}
diff --git a/ts/src/utils/json.ts b/ts/src/utils/json.ts
new file mode 100644
index 0000000..b521f4f
--- /dev/null
+++ b/ts/src/utils/json.ts
@@ -0,0 +1,74 @@
+/**
+ * Utilities for JSON handling
+ */
+
+/**
+ * Load JSON from a string or parse a JSON object
+ * @param input String or object to parse
+ * @returns Parsed JSON object
+ */
+export function loadJson(input: string | object): T {
+ if (typeof input === "string") {
+ return JSON.parse(input) as T;
+ }
+ return input as T;
+}
+
+/**
+ * Get a nested value from an object using a dot-separated path
+ * @param obj Object to get value from
+ * @param path Dot-separated path to the value
+ * @returns Value at the path or undefined if not found
+ */
+export function getNestedValue(obj: any, path: string): any {
+ if (!path || !obj) return undefined;
+
+ // Remove leading dot if present
+ const normalizedPath = path.startsWith(".") ? path.substring(1) : path;
+
+ // Navigate through object properties
+ return normalizedPath.split(".").reduce((current, key) => {
+ return current && current[key] !== undefined ? current[key] : undefined;
+ }, obj);
+}
+
+/**
+ * Set a nested value in an object using a dot-separated path
+ * @param obj Object to set value in
+ * @param path Dot-separated path to the value
+ * @param value Value to set
+ * @returns Modified object
+ */
+export function setNestedValue(obj: any, path: string, value: any): any {
+ if (!path) return obj;
+
+ // Remove leading dot if present
+ const normalizedPath = path.startsWith(".") ? path.substring(1) : path;
+
+ const parts = normalizedPath.split(".");
+ let current = obj;
+
+ // Navigate to the second-to-last part
+ for (let i = 0; i < parts.length - 1; i++) {
+ const key = parts[i];
+ if (!(key in current)) {
+ current[key] = {};
+ }
+ current = current[key];
+ }
+
+ // Set the value
+ const lastKey = parts[parts.length - 1];
+ current[lastKey] = value;
+
+ return obj;
+}
+
+/**
+ * Deep clone an object
+ * @param obj Object to clone
+ * @returns Cloned object
+ */
+export function deepClone(obj: T): T {
+ return JSON.parse(JSON.stringify(obj));
+}
diff --git a/ts/src/validation/validator.ts b/ts/src/validation/validator.ts
new file mode 100644
index 0000000..79bdc87
--- /dev/null
+++ b/ts/src/validation/validator.ts
@@ -0,0 +1,89 @@
+import Ajv, { ErrorObject } from "ajv";
+import addFormats from "ajv-formats";
+import { deepClone } from "../utils/json";
+
+// Initialize AJV
+const ajv = new Ajv({
+ allErrors: true,
+ strict: false,
+ strictTypes: false,
+ strictTuples: false,
+});
+
+// Add formats
+addFormats(ajv);
+
+// Cache compiled validators
+const validatorCache: Record> = {};
+
+/**
+ * ValidationError class for JSON-DOC validation errors
+ */
+export class ValidationError extends Error {
+ public errors: ErrorObject[];
+
+ constructor(message: string, errors: ErrorObject[]) {
+ super(message);
+ this.name = "ValidationError";
+ this.errors = errors;
+ }
+}
+
+/**
+ * Load a JSON schema from a file or URL
+ * @param schemaPath Path to the schema file
+ * @returns Loaded schema
+ */
+export async function loadSchema(schemaPath: string): Promise {
+ try {
+ const schemaResponse = await fetch(schemaPath);
+
+ if (!schemaResponse.ok) {
+ throw new Error(`Failed to load schema: ${schemaResponse.statusText}`);
+ }
+
+ return await schemaResponse.json();
+ } catch (error) {
+ throw new Error(`Error loading schema ${schemaPath}: ${error}`);
+ }
+}
+
+/**
+ * Validate data against a JSON schema
+ * @param data Data to validate
+ * @param schema JSON schema to validate against
+ * @returns Validation result (true if valid)
+ * @throws ValidationError if validation fails
+ */
+export function validateAgainstSchema(data: any, schema: any): boolean {
+ // Create a unique key for the schema
+ const schemaKey = JSON.stringify(schema);
+
+ // Get or create a validator
+ if (!validatorCache[schemaKey]) {
+ validatorCache[schemaKey] = ajv.compile(schema);
+ }
+
+ const validate = validatorCache[schemaKey];
+
+ // Validate the data
+ const isValid = validate(deepClone(data));
+
+ if (!isValid && validate.errors) {
+ throw new ValidationError("Validation failed", validate.errors);
+ }
+
+ return true;
+}
+
+/**
+ * Register a schema with AJV
+ * @param schema Schema to register
+ * @param id Schema ID
+ */
+export function registerSchema(schema: any, id: string): void {
+ if (!schema.$id) {
+ schema = { ...schema, $id: id };
+ }
+ ajv.addSchema(schema, id);
+}
diff --git a/ts/tests/serialization.test.ts b/ts/tests/serialization.test.ts
new file mode 100644
index 0000000..a9cd11c
--- /dev/null
+++ b/ts/tests/serialization.test.ts
@@ -0,0 +1,257 @@
+import * as fs from "fs";
+import * as path from "path";
+import * as JSON5 from "json5";
+import { loadJsonDoc, jsonDocDumpJson, Block, Page } from "../src";
+
+// Path to the example page JSON file
+const PAGE_PATH = path.resolve(__dirname, "../../schema/page/ex1_success.json");
+
+describe("JSON-DOC Serialization", () => {
+ // For test 1, we won't use the example page since it has comments that can't be parsed
+
+ // Helper function to load a JSON file with comment handling
+ function loadJsonFile(filePath: string): any {
+ try {
+ const content = fs.readFileSync(filePath, "utf8");
+
+ // Function to strip comments from JSON
+ function stripJsonComments(json: string): string {
+ // Remove single-line comments
+ let result = json.replace(/\/\/.*$/gm, "");
+
+ // Remove multi-line comments
+ result = result.replace(/\/\*[\s\S]*?\*\//g, "");
+
+ // Fix trailing commas
+ result = result.replace(/,\s*([}\]])/g, "$1");
+
+ return result;
+ }
+
+ try {
+ // Try using JSON5 first, which handles comments
+ return JSON5.parse(content);
+ } catch (parseError) {
+ // Fall back to manual comment stripping if JSON5 fails
+ return JSON.parse(stripJsonComments(content));
+ }
+ } catch (error) {
+ console.error(`Error reading file ${filePath}:`, error);
+ // Return empty object for test fallback
+ return {};
+ }
+ }
+
+ // Helper function to normalize JSON for comparison
+ function normalizeJson(obj: any): any {
+ // Function to remove null fields
+ const removeNulls = (obj: any): any => {
+ if (obj === null) return null;
+ if (typeof obj !== "object") return obj;
+
+ if (Array.isArray(obj)) {
+ return obj.map((item) => removeNulls(item));
+ }
+
+ const result: Record = {};
+ for (const [key, value] of Object.entries(obj)) {
+ // Skip keys we want to exclude
+ const keysToExclude = ["link", "href"];
+ if (keysToExclude.includes(key) && value === null) {
+ continue;
+ }
+
+ if (value !== null) {
+ result[key] = removeNulls(value);
+ }
+ }
+ return result;
+ };
+
+ // Clone and remove nulls
+ return removeNulls(JSON.parse(JSON.stringify(obj)));
+ }
+
+ // Format JSON with sorted keys for consistent comparison
+ function canonicalizeJson(obj: any): string {
+ return JSON.stringify(obj, null, 2);
+ }
+
+ test("should handle rich text properly", () => {
+ // Create a simple paragraph block with rich text
+ const block = {
+ object: "block",
+ id: "test-block-id",
+ type: "paragraph",
+ paragraph: {
+ rich_text: [
+ {
+ type: "text",
+ text: {
+ content: "Hello, world!",
+ link: null,
+ },
+ annotations: {
+ bold: false,
+ italic: true,
+ strikethrough: false,
+ underline: false,
+ code: false,
+ color: "default",
+ },
+ plain_text: "Hello, world!",
+ href: null,
+ },
+ ],
+ color: "default",
+ },
+ };
+
+ // Load the block using our loader
+ const loadedBlock = loadJsonDoc(block) as Block;
+
+ // Serialize back to JSON
+ const serialized = JSON.parse(jsonDocDumpJson(loadedBlock));
+
+ // Normalize for comparison
+ const normalizedBlock = normalizeJson(block);
+ const normalizedSerialized = normalizeJson(serialized);
+
+ // Compare
+ expect(normalizedSerialized).toEqual(normalizedBlock);
+ });
+
+ test("should handle nested blocks", () => {
+ // Create a block with children
+ const block = {
+ object: "block",
+ id: "parent-block-id",
+ type: "toggle",
+ toggle: {
+ rich_text: [
+ {
+ type: "text",
+ text: {
+ content: "Toggle header",
+ link: null,
+ },
+ plain_text: "Toggle header",
+ href: null,
+ },
+ ],
+ color: "default",
+ },
+ children: [
+ {
+ object: "block",
+ id: "child-block-id",
+ type: "paragraph",
+ paragraph: {
+ rich_text: [
+ {
+ type: "text",
+ text: {
+ content: "Toggle content",
+ link: null,
+ },
+ plain_text: "Toggle content",
+ href: null,
+ },
+ ],
+ color: "default",
+ },
+ },
+ ],
+ };
+
+ // Load the block using our loader
+ const loadedBlock = loadJsonDoc(block) as Block;
+
+ // Serialize back to JSON
+ const serialized = JSON.parse(jsonDocDumpJson(loadedBlock));
+
+ // Normalize for comparison
+ const normalizedBlock = normalizeJson(block);
+ const normalizedSerialized = normalizeJson(serialized);
+
+ // Compare
+ expect(normalizedSerialized).toEqual(normalizedBlock);
+ });
+
+ test("should load and serialize a page with children", () => {
+ // Create a simple page with a paragraph child
+ const page = {
+ object: "page",
+ id: "test-page-id",
+ created_time: "2024-08-01T15:27:00.000Z",
+ last_edited_time: "2024-08-01T15:27:00.000Z",
+ parent: {
+ type: "workspace",
+ workspace: true,
+ },
+ children: [
+ {
+ object: "block",
+ id: "child-block-id",
+ type: "paragraph",
+ paragraph: {
+ rich_text: [
+ {
+ type: "text",
+ text: {
+ content: "Page content",
+ link: null,
+ },
+ plain_text: "Page content",
+ href: null,
+ },
+ ],
+ color: "default",
+ },
+ },
+ ],
+ };
+
+ // Load the page using our loader
+ const loadedPage = loadJsonDoc(page) as Page;
+
+ // Serialize back to JSON
+ const serialized = JSON.parse(jsonDocDumpJson(loadedPage));
+
+ // Normalize for comparison
+ const normalizedPage = normalizeJson(page);
+ const normalizedSerialized = normalizeJson(serialized);
+
+ // Compare
+ expect(normalizedSerialized).toEqual(normalizedPage);
+ });
+
+ test("should load and serialize the example page from schema", () => {
+ // Load the example page from the schema
+ const content = loadJsonFile(PAGE_PATH);
+
+ // Load the page using our loader
+ console.time("loadJsonDoc");
+ const loadedPage = loadJsonDoc(content) as Page;
+ console.timeEnd("loadJsonDoc");
+
+ // Ensure the page was loaded
+ expect(loadedPage).not.toBeNull();
+
+ // Serialize back to JSON
+ const serialized = JSON.parse(jsonDocDumpJson(loadedPage));
+
+ // Normalize both objects for comparison
+ const normalizedContent = normalizeJson(content);
+ const normalizedSerialized = normalizeJson(serialized);
+
+ // Sort keys for canonical representation
+ const canonicalContent = JSON.parse(canonicalizeJson(normalizedContent));
+ const canonicalSerialized = JSON.parse(
+ canonicalizeJson(normalizedSerialized),
+ );
+
+ // Compare the objects
+ expect(canonicalSerialized).toEqual(canonicalContent);
+ });
+});
diff --git a/ts/tsconfig.json b/ts/tsconfig.json
new file mode 100644
index 0000000..da2eb7e
--- /dev/null
+++ b/ts/tsconfig.json
@@ -0,0 +1,17 @@
+{
+ "compilerOptions": {
+ "target": "ES2020",
+ "module": "NodeNext",
+ "moduleResolution": "NodeNext",
+ "strict": true,
+ "esModuleInterop": true,
+ "skipLibCheck": true,
+ "forceConsistentCasingInFileNames": true,
+ "outDir": "./dist",
+ "declaration": true,
+ "rootDir": ".",
+ "isolatedModules": true
+ },
+ "include": ["src/**/*.ts", "tests/**/*.ts", "scripts/**/*.ts"],
+ "exclude": ["node_modules", "dist"]
+}
From d87079b379344e31f858fc8eaa0a67e46a11f08d Mon Sep 17 00:00:00 2001
From: Onur Solmaz <2453968+osolmaz@users.noreply.github.com>
Date: Thu, 22 May 2025 15:25:30 +0200
Subject: [PATCH 07/11] Rename ts -> typescript
---
{ts => typescript}/.github/workflows/build.yml | 0
{ts => typescript}/.github/workflows/publish.yml | 0
{ts => typescript}/.gitignore | 0
{ts => typescript}/README.md | 0
{ts => typescript}/jest.config.js | 0
{ts => typescript}/package-lock.json | 0
{ts => typescript}/package.json | 0
{ts => typescript}/scripts/generate-types.ts | 0
{ts => typescript}/src/index.ts | 0
{ts => typescript}/src/models/generated/block/base/base.ts | 0
{ts => typescript}/src/models/generated/block/base/index.ts | 0
{ts => typescript}/src/models/generated/block/block.ts | 0
{ts => typescript}/src/models/generated/block/index.ts | 0
.../block/types/bulleted_list_item/bulleted_list_item.ts | 0
.../src/models/generated/block/types/bulleted_list_item/index.ts | 0
{ts => typescript}/src/models/generated/block/types/code/code.ts | 0
{ts => typescript}/src/models/generated/block/types/code/index.ts | 0
.../src/models/generated/block/types/column/column.ts | 0
.../src/models/generated/block/types/column/index.ts | 0
.../src/models/generated/block/types/column_list/column_list.ts | 0
.../src/models/generated/block/types/column_list/index.ts | 0
.../src/models/generated/block/types/divider/divider.ts | 0
.../src/models/generated/block/types/divider/index.ts | 0
.../src/models/generated/block/types/equation/equation.ts | 0
.../src/models/generated/block/types/equation/index.ts | 0
.../src/models/generated/block/types/heading_1/heading_1.ts | 0
.../src/models/generated/block/types/heading_1/index.ts | 0
.../src/models/generated/block/types/heading_2/heading_2.ts | 0
.../src/models/generated/block/types/heading_2/index.ts | 0
.../src/models/generated/block/types/heading_3/heading_3.ts | 0
.../src/models/generated/block/types/heading_3/index.ts | 0
.../generated/block/types/image/external_image/external_image.ts | 0
.../models/generated/block/types/image/external_image/index.ts | 0
.../models/generated/block/types/image/file_image/file_image.ts | 0
.../src/models/generated/block/types/image/file_image/index.ts | 0
.../src/models/generated/block/types/image/image.ts | 0
.../src/models/generated/block/types/image/index.ts | 0
{ts => typescript}/src/models/generated/block/types/index.ts | 0
.../src/models/generated/block/types/numbered_list_item/index.ts | 0
.../block/types/numbered_list_item/numbered_list_item.ts | 0
.../src/models/generated/block/types/paragraph/index.ts | 0
.../src/models/generated/block/types/paragraph/paragraph.ts | 0
.../src/models/generated/block/types/quote/index.ts | 0
.../src/models/generated/block/types/quote/quote.ts | 0
.../src/models/generated/block/types/rich_text/base/base.ts | 0
.../src/models/generated/block/types/rich_text/base/index.ts | 0
.../models/generated/block/types/rich_text/equation/equation.ts | 0
.../src/models/generated/block/types/rich_text/equation/index.ts | 0
.../src/models/generated/block/types/rich_text/index.ts | 0
.../src/models/generated/block/types/rich_text/rich_text.ts | 0
.../src/models/generated/block/types/rich_text/text/index.ts | 0
.../src/models/generated/block/types/rich_text/text/text.ts | 0
.../src/models/generated/block/types/table/index.ts | 0
.../src/models/generated/block/types/table/table.ts | 0
.../src/models/generated/block/types/table_row/index.ts | 0
.../src/models/generated/block/types/table_row/table_row.ts | 0
.../src/models/generated/block/types/to_do/index.ts | 0
.../src/models/generated/block/types/to_do/to_do.ts | 0
.../src/models/generated/block/types/toggle/index.ts | 0
.../src/models/generated/block/types/toggle/toggle.ts | 0
{ts => typescript}/src/models/generated/essential-types.ts | 0
{ts => typescript}/src/models/generated/file/base/base.ts | 0
{ts => typescript}/src/models/generated/file/base/index.ts | 0
{ts => typescript}/src/models/generated/file/external/external.ts | 0
{ts => typescript}/src/models/generated/file/external/index.ts | 0
{ts => typescript}/src/models/generated/file/file.ts | 0
{ts => typescript}/src/models/generated/file/file/file.ts | 0
{ts => typescript}/src/models/generated/file/file/index.ts | 0
{ts => typescript}/src/models/generated/file/index.ts | 0
{ts => typescript}/src/models/generated/index.ts | 0
{ts => typescript}/src/models/generated/page/index.ts | 0
{ts => typescript}/src/models/generated/page/page.ts | 0
.../src/models/generated/shared_definitions/index.ts | 0
.../src/models/generated/shared_definitions/shared_definitions.ts | 0
{ts => typescript}/src/serialization/loader.ts | 0
{ts => typescript}/src/utils/json.ts | 0
{ts => typescript}/src/validation/validator.ts | 0
{ts => typescript}/tests/serialization.test.ts | 0
{ts => typescript}/tsconfig.json | 0
79 files changed, 0 insertions(+), 0 deletions(-)
rename {ts => typescript}/.github/workflows/build.yml (100%)
rename {ts => typescript}/.github/workflows/publish.yml (100%)
rename {ts => typescript}/.gitignore (100%)
rename {ts => typescript}/README.md (100%)
rename {ts => typescript}/jest.config.js (100%)
rename {ts => typescript}/package-lock.json (100%)
rename {ts => typescript}/package.json (100%)
rename {ts => typescript}/scripts/generate-types.ts (100%)
rename {ts => typescript}/src/index.ts (100%)
rename {ts => typescript}/src/models/generated/block/base/base.ts (100%)
rename {ts => typescript}/src/models/generated/block/base/index.ts (100%)
rename {ts => typescript}/src/models/generated/block/block.ts (100%)
rename {ts => typescript}/src/models/generated/block/index.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/bulleted_list_item/bulleted_list_item.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/bulleted_list_item/index.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/code/code.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/code/index.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/column/column.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/column/index.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/column_list/column_list.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/column_list/index.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/divider/divider.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/divider/index.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/equation/equation.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/equation/index.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/heading_1/heading_1.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/heading_1/index.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/heading_2/heading_2.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/heading_2/index.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/heading_3/heading_3.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/heading_3/index.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/image/external_image/external_image.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/image/external_image/index.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/image/file_image/file_image.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/image/file_image/index.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/image/image.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/image/index.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/index.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/numbered_list_item/index.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/numbered_list_item/numbered_list_item.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/paragraph/index.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/paragraph/paragraph.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/quote/index.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/quote/quote.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/rich_text/base/base.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/rich_text/base/index.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/rich_text/equation/equation.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/rich_text/equation/index.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/rich_text/index.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/rich_text/rich_text.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/rich_text/text/index.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/rich_text/text/text.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/table/index.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/table/table.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/table_row/index.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/table_row/table_row.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/to_do/index.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/to_do/to_do.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/toggle/index.ts (100%)
rename {ts => typescript}/src/models/generated/block/types/toggle/toggle.ts (100%)
rename {ts => typescript}/src/models/generated/essential-types.ts (100%)
rename {ts => typescript}/src/models/generated/file/base/base.ts (100%)
rename {ts => typescript}/src/models/generated/file/base/index.ts (100%)
rename {ts => typescript}/src/models/generated/file/external/external.ts (100%)
rename {ts => typescript}/src/models/generated/file/external/index.ts (100%)
rename {ts => typescript}/src/models/generated/file/file.ts (100%)
rename {ts => typescript}/src/models/generated/file/file/file.ts (100%)
rename {ts => typescript}/src/models/generated/file/file/index.ts (100%)
rename {ts => typescript}/src/models/generated/file/index.ts (100%)
rename {ts => typescript}/src/models/generated/index.ts (100%)
rename {ts => typescript}/src/models/generated/page/index.ts (100%)
rename {ts => typescript}/src/models/generated/page/page.ts (100%)
rename {ts => typescript}/src/models/generated/shared_definitions/index.ts (100%)
rename {ts => typescript}/src/models/generated/shared_definitions/shared_definitions.ts (100%)
rename {ts => typescript}/src/serialization/loader.ts (100%)
rename {ts => typescript}/src/utils/json.ts (100%)
rename {ts => typescript}/src/validation/validator.ts (100%)
rename {ts => typescript}/tests/serialization.test.ts (100%)
rename {ts => typescript}/tsconfig.json (100%)
diff --git a/ts/.github/workflows/build.yml b/typescript/.github/workflows/build.yml
similarity index 100%
rename from ts/.github/workflows/build.yml
rename to typescript/.github/workflows/build.yml
diff --git a/ts/.github/workflows/publish.yml b/typescript/.github/workflows/publish.yml
similarity index 100%
rename from ts/.github/workflows/publish.yml
rename to typescript/.github/workflows/publish.yml
diff --git a/ts/.gitignore b/typescript/.gitignore
similarity index 100%
rename from ts/.gitignore
rename to typescript/.gitignore
diff --git a/ts/README.md b/typescript/README.md
similarity index 100%
rename from ts/README.md
rename to typescript/README.md
diff --git a/ts/jest.config.js b/typescript/jest.config.js
similarity index 100%
rename from ts/jest.config.js
rename to typescript/jest.config.js
diff --git a/ts/package-lock.json b/typescript/package-lock.json
similarity index 100%
rename from ts/package-lock.json
rename to typescript/package-lock.json
diff --git a/ts/package.json b/typescript/package.json
similarity index 100%
rename from ts/package.json
rename to typescript/package.json
diff --git a/ts/scripts/generate-types.ts b/typescript/scripts/generate-types.ts
similarity index 100%
rename from ts/scripts/generate-types.ts
rename to typescript/scripts/generate-types.ts
diff --git a/ts/src/index.ts b/typescript/src/index.ts
similarity index 100%
rename from ts/src/index.ts
rename to typescript/src/index.ts
diff --git a/ts/src/models/generated/block/base/base.ts b/typescript/src/models/generated/block/base/base.ts
similarity index 100%
rename from ts/src/models/generated/block/base/base.ts
rename to typescript/src/models/generated/block/base/base.ts
diff --git a/ts/src/models/generated/block/base/index.ts b/typescript/src/models/generated/block/base/index.ts
similarity index 100%
rename from ts/src/models/generated/block/base/index.ts
rename to typescript/src/models/generated/block/base/index.ts
diff --git a/ts/src/models/generated/block/block.ts b/typescript/src/models/generated/block/block.ts
similarity index 100%
rename from ts/src/models/generated/block/block.ts
rename to typescript/src/models/generated/block/block.ts
diff --git a/ts/src/models/generated/block/index.ts b/typescript/src/models/generated/block/index.ts
similarity index 100%
rename from ts/src/models/generated/block/index.ts
rename to typescript/src/models/generated/block/index.ts
diff --git a/ts/src/models/generated/block/types/bulleted_list_item/bulleted_list_item.ts b/typescript/src/models/generated/block/types/bulleted_list_item/bulleted_list_item.ts
similarity index 100%
rename from ts/src/models/generated/block/types/bulleted_list_item/bulleted_list_item.ts
rename to typescript/src/models/generated/block/types/bulleted_list_item/bulleted_list_item.ts
diff --git a/ts/src/models/generated/block/types/bulleted_list_item/index.ts b/typescript/src/models/generated/block/types/bulleted_list_item/index.ts
similarity index 100%
rename from ts/src/models/generated/block/types/bulleted_list_item/index.ts
rename to typescript/src/models/generated/block/types/bulleted_list_item/index.ts
diff --git a/ts/src/models/generated/block/types/code/code.ts b/typescript/src/models/generated/block/types/code/code.ts
similarity index 100%
rename from ts/src/models/generated/block/types/code/code.ts
rename to typescript/src/models/generated/block/types/code/code.ts
diff --git a/ts/src/models/generated/block/types/code/index.ts b/typescript/src/models/generated/block/types/code/index.ts
similarity index 100%
rename from ts/src/models/generated/block/types/code/index.ts
rename to typescript/src/models/generated/block/types/code/index.ts
diff --git a/ts/src/models/generated/block/types/column/column.ts b/typescript/src/models/generated/block/types/column/column.ts
similarity index 100%
rename from ts/src/models/generated/block/types/column/column.ts
rename to typescript/src/models/generated/block/types/column/column.ts
diff --git a/ts/src/models/generated/block/types/column/index.ts b/typescript/src/models/generated/block/types/column/index.ts
similarity index 100%
rename from ts/src/models/generated/block/types/column/index.ts
rename to typescript/src/models/generated/block/types/column/index.ts
diff --git a/ts/src/models/generated/block/types/column_list/column_list.ts b/typescript/src/models/generated/block/types/column_list/column_list.ts
similarity index 100%
rename from ts/src/models/generated/block/types/column_list/column_list.ts
rename to typescript/src/models/generated/block/types/column_list/column_list.ts
diff --git a/ts/src/models/generated/block/types/column_list/index.ts b/typescript/src/models/generated/block/types/column_list/index.ts
similarity index 100%
rename from ts/src/models/generated/block/types/column_list/index.ts
rename to typescript/src/models/generated/block/types/column_list/index.ts
diff --git a/ts/src/models/generated/block/types/divider/divider.ts b/typescript/src/models/generated/block/types/divider/divider.ts
similarity index 100%
rename from ts/src/models/generated/block/types/divider/divider.ts
rename to typescript/src/models/generated/block/types/divider/divider.ts
diff --git a/ts/src/models/generated/block/types/divider/index.ts b/typescript/src/models/generated/block/types/divider/index.ts
similarity index 100%
rename from ts/src/models/generated/block/types/divider/index.ts
rename to typescript/src/models/generated/block/types/divider/index.ts
diff --git a/ts/src/models/generated/block/types/equation/equation.ts b/typescript/src/models/generated/block/types/equation/equation.ts
similarity index 100%
rename from ts/src/models/generated/block/types/equation/equation.ts
rename to typescript/src/models/generated/block/types/equation/equation.ts
diff --git a/ts/src/models/generated/block/types/equation/index.ts b/typescript/src/models/generated/block/types/equation/index.ts
similarity index 100%
rename from ts/src/models/generated/block/types/equation/index.ts
rename to typescript/src/models/generated/block/types/equation/index.ts
diff --git a/ts/src/models/generated/block/types/heading_1/heading_1.ts b/typescript/src/models/generated/block/types/heading_1/heading_1.ts
similarity index 100%
rename from ts/src/models/generated/block/types/heading_1/heading_1.ts
rename to typescript/src/models/generated/block/types/heading_1/heading_1.ts
diff --git a/ts/src/models/generated/block/types/heading_1/index.ts b/typescript/src/models/generated/block/types/heading_1/index.ts
similarity index 100%
rename from ts/src/models/generated/block/types/heading_1/index.ts
rename to typescript/src/models/generated/block/types/heading_1/index.ts
diff --git a/ts/src/models/generated/block/types/heading_2/heading_2.ts b/typescript/src/models/generated/block/types/heading_2/heading_2.ts
similarity index 100%
rename from ts/src/models/generated/block/types/heading_2/heading_2.ts
rename to typescript/src/models/generated/block/types/heading_2/heading_2.ts
diff --git a/ts/src/models/generated/block/types/heading_2/index.ts b/typescript/src/models/generated/block/types/heading_2/index.ts
similarity index 100%
rename from ts/src/models/generated/block/types/heading_2/index.ts
rename to typescript/src/models/generated/block/types/heading_2/index.ts
diff --git a/ts/src/models/generated/block/types/heading_3/heading_3.ts b/typescript/src/models/generated/block/types/heading_3/heading_3.ts
similarity index 100%
rename from ts/src/models/generated/block/types/heading_3/heading_3.ts
rename to typescript/src/models/generated/block/types/heading_3/heading_3.ts
diff --git a/ts/src/models/generated/block/types/heading_3/index.ts b/typescript/src/models/generated/block/types/heading_3/index.ts
similarity index 100%
rename from ts/src/models/generated/block/types/heading_3/index.ts
rename to typescript/src/models/generated/block/types/heading_3/index.ts
diff --git a/ts/src/models/generated/block/types/image/external_image/external_image.ts b/typescript/src/models/generated/block/types/image/external_image/external_image.ts
similarity index 100%
rename from ts/src/models/generated/block/types/image/external_image/external_image.ts
rename to typescript/src/models/generated/block/types/image/external_image/external_image.ts
diff --git a/ts/src/models/generated/block/types/image/external_image/index.ts b/typescript/src/models/generated/block/types/image/external_image/index.ts
similarity index 100%
rename from ts/src/models/generated/block/types/image/external_image/index.ts
rename to typescript/src/models/generated/block/types/image/external_image/index.ts
diff --git a/ts/src/models/generated/block/types/image/file_image/file_image.ts b/typescript/src/models/generated/block/types/image/file_image/file_image.ts
similarity index 100%
rename from ts/src/models/generated/block/types/image/file_image/file_image.ts
rename to typescript/src/models/generated/block/types/image/file_image/file_image.ts
diff --git a/ts/src/models/generated/block/types/image/file_image/index.ts b/typescript/src/models/generated/block/types/image/file_image/index.ts
similarity index 100%
rename from ts/src/models/generated/block/types/image/file_image/index.ts
rename to typescript/src/models/generated/block/types/image/file_image/index.ts
diff --git a/ts/src/models/generated/block/types/image/image.ts b/typescript/src/models/generated/block/types/image/image.ts
similarity index 100%
rename from ts/src/models/generated/block/types/image/image.ts
rename to typescript/src/models/generated/block/types/image/image.ts
diff --git a/ts/src/models/generated/block/types/image/index.ts b/typescript/src/models/generated/block/types/image/index.ts
similarity index 100%
rename from ts/src/models/generated/block/types/image/index.ts
rename to typescript/src/models/generated/block/types/image/index.ts
diff --git a/ts/src/models/generated/block/types/index.ts b/typescript/src/models/generated/block/types/index.ts
similarity index 100%
rename from ts/src/models/generated/block/types/index.ts
rename to typescript/src/models/generated/block/types/index.ts
diff --git a/ts/src/models/generated/block/types/numbered_list_item/index.ts b/typescript/src/models/generated/block/types/numbered_list_item/index.ts
similarity index 100%
rename from ts/src/models/generated/block/types/numbered_list_item/index.ts
rename to typescript/src/models/generated/block/types/numbered_list_item/index.ts
diff --git a/ts/src/models/generated/block/types/numbered_list_item/numbered_list_item.ts b/typescript/src/models/generated/block/types/numbered_list_item/numbered_list_item.ts
similarity index 100%
rename from ts/src/models/generated/block/types/numbered_list_item/numbered_list_item.ts
rename to typescript/src/models/generated/block/types/numbered_list_item/numbered_list_item.ts
diff --git a/ts/src/models/generated/block/types/paragraph/index.ts b/typescript/src/models/generated/block/types/paragraph/index.ts
similarity index 100%
rename from ts/src/models/generated/block/types/paragraph/index.ts
rename to typescript/src/models/generated/block/types/paragraph/index.ts
diff --git a/ts/src/models/generated/block/types/paragraph/paragraph.ts b/typescript/src/models/generated/block/types/paragraph/paragraph.ts
similarity index 100%
rename from ts/src/models/generated/block/types/paragraph/paragraph.ts
rename to typescript/src/models/generated/block/types/paragraph/paragraph.ts
diff --git a/ts/src/models/generated/block/types/quote/index.ts b/typescript/src/models/generated/block/types/quote/index.ts
similarity index 100%
rename from ts/src/models/generated/block/types/quote/index.ts
rename to typescript/src/models/generated/block/types/quote/index.ts
diff --git a/ts/src/models/generated/block/types/quote/quote.ts b/typescript/src/models/generated/block/types/quote/quote.ts
similarity index 100%
rename from ts/src/models/generated/block/types/quote/quote.ts
rename to typescript/src/models/generated/block/types/quote/quote.ts
diff --git a/ts/src/models/generated/block/types/rich_text/base/base.ts b/typescript/src/models/generated/block/types/rich_text/base/base.ts
similarity index 100%
rename from ts/src/models/generated/block/types/rich_text/base/base.ts
rename to typescript/src/models/generated/block/types/rich_text/base/base.ts
diff --git a/ts/src/models/generated/block/types/rich_text/base/index.ts b/typescript/src/models/generated/block/types/rich_text/base/index.ts
similarity index 100%
rename from ts/src/models/generated/block/types/rich_text/base/index.ts
rename to typescript/src/models/generated/block/types/rich_text/base/index.ts
diff --git a/ts/src/models/generated/block/types/rich_text/equation/equation.ts b/typescript/src/models/generated/block/types/rich_text/equation/equation.ts
similarity index 100%
rename from ts/src/models/generated/block/types/rich_text/equation/equation.ts
rename to typescript/src/models/generated/block/types/rich_text/equation/equation.ts
diff --git a/ts/src/models/generated/block/types/rich_text/equation/index.ts b/typescript/src/models/generated/block/types/rich_text/equation/index.ts
similarity index 100%
rename from ts/src/models/generated/block/types/rich_text/equation/index.ts
rename to typescript/src/models/generated/block/types/rich_text/equation/index.ts
diff --git a/ts/src/models/generated/block/types/rich_text/index.ts b/typescript/src/models/generated/block/types/rich_text/index.ts
similarity index 100%
rename from ts/src/models/generated/block/types/rich_text/index.ts
rename to typescript/src/models/generated/block/types/rich_text/index.ts
diff --git a/ts/src/models/generated/block/types/rich_text/rich_text.ts b/typescript/src/models/generated/block/types/rich_text/rich_text.ts
similarity index 100%
rename from ts/src/models/generated/block/types/rich_text/rich_text.ts
rename to typescript/src/models/generated/block/types/rich_text/rich_text.ts
diff --git a/ts/src/models/generated/block/types/rich_text/text/index.ts b/typescript/src/models/generated/block/types/rich_text/text/index.ts
similarity index 100%
rename from ts/src/models/generated/block/types/rich_text/text/index.ts
rename to typescript/src/models/generated/block/types/rich_text/text/index.ts
diff --git a/ts/src/models/generated/block/types/rich_text/text/text.ts b/typescript/src/models/generated/block/types/rich_text/text/text.ts
similarity index 100%
rename from ts/src/models/generated/block/types/rich_text/text/text.ts
rename to typescript/src/models/generated/block/types/rich_text/text/text.ts
diff --git a/ts/src/models/generated/block/types/table/index.ts b/typescript/src/models/generated/block/types/table/index.ts
similarity index 100%
rename from ts/src/models/generated/block/types/table/index.ts
rename to typescript/src/models/generated/block/types/table/index.ts
diff --git a/ts/src/models/generated/block/types/table/table.ts b/typescript/src/models/generated/block/types/table/table.ts
similarity index 100%
rename from ts/src/models/generated/block/types/table/table.ts
rename to typescript/src/models/generated/block/types/table/table.ts
diff --git a/ts/src/models/generated/block/types/table_row/index.ts b/typescript/src/models/generated/block/types/table_row/index.ts
similarity index 100%
rename from ts/src/models/generated/block/types/table_row/index.ts
rename to typescript/src/models/generated/block/types/table_row/index.ts
diff --git a/ts/src/models/generated/block/types/table_row/table_row.ts b/typescript/src/models/generated/block/types/table_row/table_row.ts
similarity index 100%
rename from ts/src/models/generated/block/types/table_row/table_row.ts
rename to typescript/src/models/generated/block/types/table_row/table_row.ts
diff --git a/ts/src/models/generated/block/types/to_do/index.ts b/typescript/src/models/generated/block/types/to_do/index.ts
similarity index 100%
rename from ts/src/models/generated/block/types/to_do/index.ts
rename to typescript/src/models/generated/block/types/to_do/index.ts
diff --git a/ts/src/models/generated/block/types/to_do/to_do.ts b/typescript/src/models/generated/block/types/to_do/to_do.ts
similarity index 100%
rename from ts/src/models/generated/block/types/to_do/to_do.ts
rename to typescript/src/models/generated/block/types/to_do/to_do.ts
diff --git a/ts/src/models/generated/block/types/toggle/index.ts b/typescript/src/models/generated/block/types/toggle/index.ts
similarity index 100%
rename from ts/src/models/generated/block/types/toggle/index.ts
rename to typescript/src/models/generated/block/types/toggle/index.ts
diff --git a/ts/src/models/generated/block/types/toggle/toggle.ts b/typescript/src/models/generated/block/types/toggle/toggle.ts
similarity index 100%
rename from ts/src/models/generated/block/types/toggle/toggle.ts
rename to typescript/src/models/generated/block/types/toggle/toggle.ts
diff --git a/ts/src/models/generated/essential-types.ts b/typescript/src/models/generated/essential-types.ts
similarity index 100%
rename from ts/src/models/generated/essential-types.ts
rename to typescript/src/models/generated/essential-types.ts
diff --git a/ts/src/models/generated/file/base/base.ts b/typescript/src/models/generated/file/base/base.ts
similarity index 100%
rename from ts/src/models/generated/file/base/base.ts
rename to typescript/src/models/generated/file/base/base.ts
diff --git a/ts/src/models/generated/file/base/index.ts b/typescript/src/models/generated/file/base/index.ts
similarity index 100%
rename from ts/src/models/generated/file/base/index.ts
rename to typescript/src/models/generated/file/base/index.ts
diff --git a/ts/src/models/generated/file/external/external.ts b/typescript/src/models/generated/file/external/external.ts
similarity index 100%
rename from ts/src/models/generated/file/external/external.ts
rename to typescript/src/models/generated/file/external/external.ts
diff --git a/ts/src/models/generated/file/external/index.ts b/typescript/src/models/generated/file/external/index.ts
similarity index 100%
rename from ts/src/models/generated/file/external/index.ts
rename to typescript/src/models/generated/file/external/index.ts
diff --git a/ts/src/models/generated/file/file.ts b/typescript/src/models/generated/file/file.ts
similarity index 100%
rename from ts/src/models/generated/file/file.ts
rename to typescript/src/models/generated/file/file.ts
diff --git a/ts/src/models/generated/file/file/file.ts b/typescript/src/models/generated/file/file/file.ts
similarity index 100%
rename from ts/src/models/generated/file/file/file.ts
rename to typescript/src/models/generated/file/file/file.ts
diff --git a/ts/src/models/generated/file/file/index.ts b/typescript/src/models/generated/file/file/index.ts
similarity index 100%
rename from ts/src/models/generated/file/file/index.ts
rename to typescript/src/models/generated/file/file/index.ts
diff --git a/ts/src/models/generated/file/index.ts b/typescript/src/models/generated/file/index.ts
similarity index 100%
rename from ts/src/models/generated/file/index.ts
rename to typescript/src/models/generated/file/index.ts
diff --git a/ts/src/models/generated/index.ts b/typescript/src/models/generated/index.ts
similarity index 100%
rename from ts/src/models/generated/index.ts
rename to typescript/src/models/generated/index.ts
diff --git a/ts/src/models/generated/page/index.ts b/typescript/src/models/generated/page/index.ts
similarity index 100%
rename from ts/src/models/generated/page/index.ts
rename to typescript/src/models/generated/page/index.ts
diff --git a/ts/src/models/generated/page/page.ts b/typescript/src/models/generated/page/page.ts
similarity index 100%
rename from ts/src/models/generated/page/page.ts
rename to typescript/src/models/generated/page/page.ts
diff --git a/ts/src/models/generated/shared_definitions/index.ts b/typescript/src/models/generated/shared_definitions/index.ts
similarity index 100%
rename from ts/src/models/generated/shared_definitions/index.ts
rename to typescript/src/models/generated/shared_definitions/index.ts
diff --git a/ts/src/models/generated/shared_definitions/shared_definitions.ts b/typescript/src/models/generated/shared_definitions/shared_definitions.ts
similarity index 100%
rename from ts/src/models/generated/shared_definitions/shared_definitions.ts
rename to typescript/src/models/generated/shared_definitions/shared_definitions.ts
diff --git a/ts/src/serialization/loader.ts b/typescript/src/serialization/loader.ts
similarity index 100%
rename from ts/src/serialization/loader.ts
rename to typescript/src/serialization/loader.ts
diff --git a/ts/src/utils/json.ts b/typescript/src/utils/json.ts
similarity index 100%
rename from ts/src/utils/json.ts
rename to typescript/src/utils/json.ts
diff --git a/ts/src/validation/validator.ts b/typescript/src/validation/validator.ts
similarity index 100%
rename from ts/src/validation/validator.ts
rename to typescript/src/validation/validator.ts
diff --git a/ts/tests/serialization.test.ts b/typescript/tests/serialization.test.ts
similarity index 100%
rename from ts/tests/serialization.test.ts
rename to typescript/tests/serialization.test.ts
diff --git a/ts/tsconfig.json b/typescript/tsconfig.json
similarity index 100%
rename from ts/tsconfig.json
rename to typescript/tsconfig.json
From 8934539663b453e806ab58a8f057d674fb115db2 Mon Sep 17 00:00:00 2001
From: Onur Solmaz <2453968+osolmaz@users.noreply.github.com>
Date: Thu, 22 May 2025 16:30:55 +0200
Subject: [PATCH 08/11] Add script to reduce example html
---
examples/notion/frontend/reduce_html.py | 90 +++
python/pyproject.toml | 1 +
python/uv.lock | 841 +++++++++++++-----------
3 files changed, 545 insertions(+), 387 deletions(-)
create mode 100644 examples/notion/frontend/reduce_html.py
diff --git a/examples/notion/frontend/reduce_html.py b/examples/notion/frontend/reduce_html.py
new file mode 100644
index 0000000..3af25b8
--- /dev/null
+++ b/examples/notion/frontend/reduce_html.py
@@ -0,0 +1,90 @@
+import argparse
+import re
+from pathlib import Path
+
+from bs4 import BeautifulSoup, NavigableString, Tag
+
+# ---------- Argument Parsing ----------
+DATA_URI_RE = re.compile(r"^\s*data:", re.I)
+
+
+# ---------- Helper functions ----------
+def redact_binary_attrs(tag: Tag) -> None:
+ """Replace base64‐encoded `src` / `srcset` with a placeholder."""
+ if tag.name == "img" and tag.has_attr("src") and DATA_URI_RE.match(tag["src"]):
+ tag["src"] = "redacted"
+ if (
+ tag.name == "source"
+ and tag.has_attr("srcset")
+ and DATA_URI_RE.match(tag["srcset"])
+ ):
+ tag["srcset"] = "redacted"
+
+
+def is_leaf(tag: Tag) -> bool:
+ """Returns True if `tag` has no child *elements* (text is allowed)."""
+ return not any(isinstance(c, Tag) for c in tag.contents)
+
+
+def clean_node(tag: Tag) -> None:
+ """Recursively clean a BeautifulSoup element in-place."""
+ if isinstance(tag, NavigableString):
+ return
+
+ # 1. strip style attributes
+ tag.attrs.pop("style", None)
+
+ # 2. redact binary embeds
+ redact_binary_attrs(tag)
+
+ # 3. special-case SVG: keep the wrapper to preserve structure
+ if tag.name == "svg":
+ tag.clear()
+ tag.append("")
+
+ # 4. recurse
+ for child in list(tag.children):
+ clean_node(child)
+
+
+def prune_top_level(soup: BeautifulSoup) -> None:
+ """Remove high-volume, low-value nodes entirely."""
+ for n in soup.find_all(["script", "style", "noscript"]):
+ n.decompose()
+ for link in soup.find_all("link", rel=lambda x: x and "stylesheet" in x):
+ link.decompose()
+
+
+def clean_html(raw_html: str) -> str:
+ soup = BeautifulSoup(raw_html, "lxml")
+ prune_top_level(soup)
+ clean_node(soup)
+ # Pretty formatting keeps the tree readable yet compact
+ return soup.prettify(formatter="minimal")
+
+
+# ---------- Execute cleaning ----------
+def main():
+ parser = argparse.ArgumentParser(
+ description="Clean and reduce HTML files by removing unnecessary content."
+ )
+ parser.add_argument("input_path", help="Path to the input HTML file")
+ parser.add_argument("output_path", help="Path where the cleaned HTML will be saved")
+ args = parser.parse_args()
+ raw_html = Path(args.input_path).read_text(encoding="utf-8", errors="ignore")
+
+ # Update MAX_LEAF_CHARS based on command line argument
+
+ cleaned_html = clean_html(raw_html)
+
+ # Save to disk
+ Path(args.output_path).write_text(cleaned_html, encoding="utf-8")
+
+ # Show a short preview to the user
+ print(f"Saved cleaned HTML to {args.output_path}")
+ print(f"Original size: {len(raw_html):,} characters")
+ print(f"Cleaned size : {len(cleaned_html):,} characters")
+
+
+if __name__ == "__main__":
+ main()
diff --git a/python/pyproject.toml b/python/pyproject.toml
index aa17bcd..6258e7d 100644
--- a/python/pyproject.toml
+++ b/python/pyproject.toml
@@ -21,6 +21,7 @@ convert_jsondoc = "jsondoc.bin.convert_jsondoc:main"
dev = [
"datamodel-code-generator>=0.25.9,<0.26",
"ipdb>=0.13.13",
+ "lxml>=5.4.0",
"pre-commit>=4.1.0",
"pytest>=8.3.5",
"python-dotenv>=1.0.1",
diff --git a/python/uv.lock b/python/uv.lock
index 1f5d494..d7542cb 100644
--- a/python/uv.lock
+++ b/python/uv.lock
@@ -1,5 +1,5 @@
version = 1
-revision = 1
+revision = 2
requires-python = ">=3.10, <3.13"
resolution-markers = [
"python_full_version >= '3.12'",
@@ -11,36 +11,36 @@ resolution-markers = [
name = "annotated-types"
version = "0.7.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081 }
+sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643 },
+ { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" },
]
[[package]]
name = "argcomplete"
version = "3.6.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/ee/be/29abccb5d9f61a92886a2fba2ac22bf74326b5c4f55d36d0a56094630589/argcomplete-3.6.0.tar.gz", hash = "sha256:2e4e42ec0ba2fff54b0d244d0b1623e86057673e57bafe72dda59c64bd5dee8b", size = 73135 }
+sdist = { url = "https://files.pythonhosted.org/packages/ee/be/29abccb5d9f61a92886a2fba2ac22bf74326b5c4f55d36d0a56094630589/argcomplete-3.6.0.tar.gz", hash = "sha256:2e4e42ec0ba2fff54b0d244d0b1623e86057673e57bafe72dda59c64bd5dee8b", size = 73135, upload-time = "2025-03-05T21:31:36.887Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/08/94/e786d91ccc3a1fc664c20332825b73da20928eb067cdc984b821948a1acc/argcomplete-3.6.0-py3-none-any.whl", hash = "sha256:4e3e4e10beb20e06444dbac0ac8dda650cb6349caeefe980208d3c548708bedd", size = 43769 },
+ { url = "https://files.pythonhosted.org/packages/08/94/e786d91ccc3a1fc664c20332825b73da20928eb067cdc984b821948a1acc/argcomplete-3.6.0-py3-none-any.whl", hash = "sha256:4e3e4e10beb20e06444dbac0ac8dda650cb6349caeefe980208d3c548708bedd", size = 43769, upload-time = "2025-03-05T21:31:35.219Z" },
]
[[package]]
name = "asttokens"
version = "3.0.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/4a/e7/82da0a03e7ba5141f05cce0d302e6eed121ae055e0456ca228bf693984bc/asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7", size = 61978 }
+sdist = { url = "https://files.pythonhosted.org/packages/4a/e7/82da0a03e7ba5141f05cce0d302e6eed121ae055e0456ca228bf693984bc/asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7", size = 61978, upload-time = "2024-11-30T04:30:14.439Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2", size = 26918 },
+ { url = "https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2", size = 26918, upload-time = "2024-11-30T04:30:10.946Z" },
]
[[package]]
name = "attrs"
version = "25.2.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/69/82/3c4e1d44f3cbaa2a578127d641fe385ba3bff6c38b789447ae11a21fa413/attrs-25.2.0.tar.gz", hash = "sha256:18a06db706db43ac232cce80443fcd9f2500702059ecf53489e3c5a3f417acaf", size = 812038 }
+sdist = { url = "https://files.pythonhosted.org/packages/69/82/3c4e1d44f3cbaa2a578127d641fe385ba3bff6c38b789447ae11a21fa413/attrs-25.2.0.tar.gz", hash = "sha256:18a06db706db43ac232cce80443fcd9f2500702059ecf53489e3c5a3f417acaf", size = 812038, upload-time = "2025-03-12T10:02:24.562Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/03/33/7a7388b9ef94aab40539939d94461ec682afbd895458945ed25be07f03f6/attrs-25.2.0-py3-none-any.whl", hash = "sha256:611344ff0a5fed735d86d7784610c84f8126b95e549bcad9ff61b4242f2d386b", size = 64016 },
+ { url = "https://files.pythonhosted.org/packages/03/33/7a7388b9ef94aab40539939d94461ec682afbd895458945ed25be07f03f6/attrs-25.2.0-py3-none-any.whl", hash = "sha256:611344ff0a5fed735d86d7784610c84f8126b95e549bcad9ff61b4242f2d386b", size = 64016, upload-time = "2025-03-12T10:02:22.569Z" },
]
[[package]]
@@ -51,9 +51,9 @@ dependencies = [
{ name = "soupsieve" },
{ name = "typing-extensions" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/f0/3c/adaf39ce1fb4afdd21b611e3d530b183bb7759c9b673d60db0e347fd4439/beautifulsoup4-4.13.3.tar.gz", hash = "sha256:1bd32405dacc920b42b83ba01644747ed77456a65760e285fbc47633ceddaf8b", size = 619516 }
+sdist = { url = "https://files.pythonhosted.org/packages/f0/3c/adaf39ce1fb4afdd21b611e3d530b183bb7759c9b673d60db0e347fd4439/beautifulsoup4-4.13.3.tar.gz", hash = "sha256:1bd32405dacc920b42b83ba01644747ed77456a65760e285fbc47633ceddaf8b", size = 619516, upload-time = "2025-02-04T20:05:01.681Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/f9/49/6abb616eb3cbab6a7cca303dc02fdf3836de2e0b834bf966a7f5271a34d8/beautifulsoup4-4.13.3-py3-none-any.whl", hash = "sha256:99045d7d3f08f91f0d656bc9b7efbae189426cd913d830294a15eefa0ea4df16", size = 186015 },
+ { url = "https://files.pythonhosted.org/packages/f9/49/6abb616eb3cbab6a7cca303dc02fdf3836de2e0b834bf966a7f5271a34d8/beautifulsoup4-4.13.3-py3-none-any.whl", hash = "sha256:99045d7d3f08f91f0d656bc9b7efbae189426cd913d830294a15eefa0ea4df16", size = 186015, upload-time = "2025-02-04T20:05:03.729Z" },
]
[[package]]
@@ -69,87 +69,87 @@ dependencies = [
{ name = "tomli", marker = "python_full_version < '3.11'" },
{ name = "typing-extensions", marker = "python_full_version < '3.11'" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/94/49/26a7b0f3f35da4b5a65f081943b7bcd22d7002f5f0fb8098ec1ff21cb6ef/black-25.1.0.tar.gz", hash = "sha256:33496d5cd1222ad73391352b4ae8da15253c5de89b93a80b3e2c8d9a19ec2666", size = 649449 }
+sdist = { url = "https://files.pythonhosted.org/packages/94/49/26a7b0f3f35da4b5a65f081943b7bcd22d7002f5f0fb8098ec1ff21cb6ef/black-25.1.0.tar.gz", hash = "sha256:33496d5cd1222ad73391352b4ae8da15253c5de89b93a80b3e2c8d9a19ec2666", size = 649449, upload-time = "2025-01-29T04:15:40.373Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/4d/3b/4ba3f93ac8d90410423fdd31d7541ada9bcee1df32fb90d26de41ed40e1d/black-25.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:759e7ec1e050a15f89b770cefbf91ebee8917aac5c20483bc2d80a6c3a04df32", size = 1629419 },
- { url = "https://files.pythonhosted.org/packages/b4/02/0bde0485146a8a5e694daed47561785e8b77a0466ccc1f3e485d5ef2925e/black-25.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e519ecf93120f34243e6b0054db49c00a35f84f195d5bce7e9f5cfc578fc2da", size = 1461080 },
- { url = "https://files.pythonhosted.org/packages/52/0e/abdf75183c830eaca7589144ff96d49bce73d7ec6ad12ef62185cc0f79a2/black-25.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:055e59b198df7ac0b7efca5ad7ff2516bca343276c466be72eb04a3bcc1f82d7", size = 1766886 },
- { url = "https://files.pythonhosted.org/packages/dc/a6/97d8bb65b1d8a41f8a6736222ba0a334db7b7b77b8023ab4568288f23973/black-25.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:db8ea9917d6f8fc62abd90d944920d95e73c83a5ee3383493e35d271aca872e9", size = 1419404 },
- { url = "https://files.pythonhosted.org/packages/7e/4f/87f596aca05c3ce5b94b8663dbfe242a12843caaa82dd3f85f1ffdc3f177/black-25.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a39337598244de4bae26475f77dda852ea00a93bd4c728e09eacd827ec929df0", size = 1614372 },
- { url = "https://files.pythonhosted.org/packages/e7/d0/2c34c36190b741c59c901e56ab7f6e54dad8df05a6272a9747ecef7c6036/black-25.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:96c1c7cd856bba8e20094e36e0f948718dc688dba4a9d78c3adde52b9e6c2299", size = 1442865 },
- { url = "https://files.pythonhosted.org/packages/21/d4/7518c72262468430ead45cf22bd86c883a6448b9eb43672765d69a8f1248/black-25.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bce2e264d59c91e52d8000d507eb20a9aca4a778731a08cfff7e5ac4a4bb7096", size = 1749699 },
- { url = "https://files.pythonhosted.org/packages/58/db/4f5beb989b547f79096e035c4981ceb36ac2b552d0ac5f2620e941501c99/black-25.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:172b1dbff09f86ce6f4eb8edf9dede08b1fce58ba194c87d7a4f1a5aa2f5b3c2", size = 1428028 },
- { url = "https://files.pythonhosted.org/packages/83/71/3fe4741df7adf015ad8dfa082dd36c94ca86bb21f25608eb247b4afb15b2/black-25.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4b60580e829091e6f9238c848ea6750efed72140b91b048770b64e74fe04908b", size = 1650988 },
- { url = "https://files.pythonhosted.org/packages/13/f3/89aac8a83d73937ccd39bbe8fc6ac8860c11cfa0af5b1c96d081facac844/black-25.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1e2978f6df243b155ef5fa7e558a43037c3079093ed5d10fd84c43900f2d8ecc", size = 1453985 },
- { url = "https://files.pythonhosted.org/packages/6f/22/b99efca33f1f3a1d2552c714b1e1b5ae92efac6c43e790ad539a163d1754/black-25.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b48735872ec535027d979e8dcb20bf4f70b5ac75a8ea99f127c106a7d7aba9f", size = 1783816 },
- { url = "https://files.pythonhosted.org/packages/18/7e/a27c3ad3822b6f2e0e00d63d58ff6299a99a5b3aee69fa77cd4b0076b261/black-25.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:ea0213189960bda9cf99be5b8c8ce66bb054af5e9e861249cd23471bd7b0b3ba", size = 1440860 },
- { url = "https://files.pythonhosted.org/packages/09/71/54e999902aed72baf26bca0d50781b01838251a462612966e9fc4891eadd/black-25.1.0-py3-none-any.whl", hash = "sha256:95e8176dae143ba9097f351d174fdaf0ccd29efb414b362ae3fd72bf0f710717", size = 207646 },
+ { url = "https://files.pythonhosted.org/packages/4d/3b/4ba3f93ac8d90410423fdd31d7541ada9bcee1df32fb90d26de41ed40e1d/black-25.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:759e7ec1e050a15f89b770cefbf91ebee8917aac5c20483bc2d80a6c3a04df32", size = 1629419, upload-time = "2025-01-29T05:37:06.642Z" },
+ { url = "https://files.pythonhosted.org/packages/b4/02/0bde0485146a8a5e694daed47561785e8b77a0466ccc1f3e485d5ef2925e/black-25.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e519ecf93120f34243e6b0054db49c00a35f84f195d5bce7e9f5cfc578fc2da", size = 1461080, upload-time = "2025-01-29T05:37:09.321Z" },
+ { url = "https://files.pythonhosted.org/packages/52/0e/abdf75183c830eaca7589144ff96d49bce73d7ec6ad12ef62185cc0f79a2/black-25.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:055e59b198df7ac0b7efca5ad7ff2516bca343276c466be72eb04a3bcc1f82d7", size = 1766886, upload-time = "2025-01-29T04:18:24.432Z" },
+ { url = "https://files.pythonhosted.org/packages/dc/a6/97d8bb65b1d8a41f8a6736222ba0a334db7b7b77b8023ab4568288f23973/black-25.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:db8ea9917d6f8fc62abd90d944920d95e73c83a5ee3383493e35d271aca872e9", size = 1419404, upload-time = "2025-01-29T04:19:04.296Z" },
+ { url = "https://files.pythonhosted.org/packages/7e/4f/87f596aca05c3ce5b94b8663dbfe242a12843caaa82dd3f85f1ffdc3f177/black-25.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a39337598244de4bae26475f77dda852ea00a93bd4c728e09eacd827ec929df0", size = 1614372, upload-time = "2025-01-29T05:37:11.71Z" },
+ { url = "https://files.pythonhosted.org/packages/e7/d0/2c34c36190b741c59c901e56ab7f6e54dad8df05a6272a9747ecef7c6036/black-25.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:96c1c7cd856bba8e20094e36e0f948718dc688dba4a9d78c3adde52b9e6c2299", size = 1442865, upload-time = "2025-01-29T05:37:14.309Z" },
+ { url = "https://files.pythonhosted.org/packages/21/d4/7518c72262468430ead45cf22bd86c883a6448b9eb43672765d69a8f1248/black-25.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bce2e264d59c91e52d8000d507eb20a9aca4a778731a08cfff7e5ac4a4bb7096", size = 1749699, upload-time = "2025-01-29T04:18:17.688Z" },
+ { url = "https://files.pythonhosted.org/packages/58/db/4f5beb989b547f79096e035c4981ceb36ac2b552d0ac5f2620e941501c99/black-25.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:172b1dbff09f86ce6f4eb8edf9dede08b1fce58ba194c87d7a4f1a5aa2f5b3c2", size = 1428028, upload-time = "2025-01-29T04:18:51.711Z" },
+ { url = "https://files.pythonhosted.org/packages/83/71/3fe4741df7adf015ad8dfa082dd36c94ca86bb21f25608eb247b4afb15b2/black-25.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4b60580e829091e6f9238c848ea6750efed72140b91b048770b64e74fe04908b", size = 1650988, upload-time = "2025-01-29T05:37:16.707Z" },
+ { url = "https://files.pythonhosted.org/packages/13/f3/89aac8a83d73937ccd39bbe8fc6ac8860c11cfa0af5b1c96d081facac844/black-25.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1e2978f6df243b155ef5fa7e558a43037c3079093ed5d10fd84c43900f2d8ecc", size = 1453985, upload-time = "2025-01-29T05:37:18.273Z" },
+ { url = "https://files.pythonhosted.org/packages/6f/22/b99efca33f1f3a1d2552c714b1e1b5ae92efac6c43e790ad539a163d1754/black-25.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b48735872ec535027d979e8dcb20bf4f70b5ac75a8ea99f127c106a7d7aba9f", size = 1783816, upload-time = "2025-01-29T04:18:33.823Z" },
+ { url = "https://files.pythonhosted.org/packages/18/7e/a27c3ad3822b6f2e0e00d63d58ff6299a99a5b3aee69fa77cd4b0076b261/black-25.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:ea0213189960bda9cf99be5b8c8ce66bb054af5e9e861249cd23471bd7b0b3ba", size = 1440860, upload-time = "2025-01-29T04:19:12.944Z" },
+ { url = "https://files.pythonhosted.org/packages/09/71/54e999902aed72baf26bca0d50781b01838251a462612966e9fc4891eadd/black-25.1.0-py3-none-any.whl", hash = "sha256:95e8176dae143ba9097f351d174fdaf0ccd29efb414b362ae3fd72bf0f710717", size = 207646, upload-time = "2025-01-29T04:15:38.082Z" },
]
[[package]]
name = "certifi"
version = "2025.1.31"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/1c/ab/c9f1e32b7b1bf505bf26f0ef697775960db7932abeb7b516de930ba2705f/certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651", size = 167577 }
+sdist = { url = "https://files.pythonhosted.org/packages/1c/ab/c9f1e32b7b1bf505bf26f0ef697775960db7932abeb7b516de930ba2705f/certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651", size = 167577, upload-time = "2025-01-31T02:16:47.166Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe", size = 166393 },
+ { url = "https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe", size = 166393, upload-time = "2025-01-31T02:16:45.015Z" },
]
[[package]]
name = "cfgv"
version = "3.4.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/11/74/539e56497d9bd1d484fd863dd69cbbfa653cd2aa27abfe35653494d85e94/cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560", size = 7114 }
+sdist = { url = "https://files.pythonhosted.org/packages/11/74/539e56497d9bd1d484fd863dd69cbbfa653cd2aa27abfe35653494d85e94/cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560", size = 7114, upload-time = "2023-08-12T20:38:17.776Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/c5/55/51844dd50c4fc7a33b653bfaba4c2456f06955289ca770a5dbd5fd267374/cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", size = 7249 },
+ { url = "https://files.pythonhosted.org/packages/c5/55/51844dd50c4fc7a33b653bfaba4c2456f06955289ca770a5dbd5fd267374/cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", size = 7249, upload-time = "2023-08-12T20:38:16.269Z" },
]
[[package]]
name = "charset-normalizer"
version = "3.4.1"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/16/b0/572805e227f01586461c80e0fd25d65a2115599cc9dad142fee4b747c357/charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3", size = 123188 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/0d/58/5580c1716040bc89206c77d8f74418caf82ce519aae06450393ca73475d1/charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de", size = 198013 },
- { url = "https://files.pythonhosted.org/packages/d0/11/00341177ae71c6f5159a08168bcb98c6e6d196d372c94511f9f6c9afe0c6/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176", size = 141285 },
- { url = "https://files.pythonhosted.org/packages/01/09/11d684ea5819e5a8f5100fb0b38cf8d02b514746607934134d31233e02c8/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037", size = 151449 },
- { url = "https://files.pythonhosted.org/packages/08/06/9f5a12939db324d905dc1f70591ae7d7898d030d7662f0d426e2286f68c9/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f", size = 143892 },
- { url = "https://files.pythonhosted.org/packages/93/62/5e89cdfe04584cb7f4d36003ffa2936681b03ecc0754f8e969c2becb7e24/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a", size = 146123 },
- { url = "https://files.pythonhosted.org/packages/a9/ac/ab729a15c516da2ab70a05f8722ecfccc3f04ed7a18e45c75bbbaa347d61/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a", size = 147943 },
- { url = "https://files.pythonhosted.org/packages/03/d2/3f392f23f042615689456e9a274640c1d2e5dd1d52de36ab8f7955f8f050/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247", size = 142063 },
- { url = "https://files.pythonhosted.org/packages/f2/e3/e20aae5e1039a2cd9b08d9205f52142329f887f8cf70da3650326670bddf/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408", size = 150578 },
- { url = "https://files.pythonhosted.org/packages/8d/af/779ad72a4da0aed925e1139d458adc486e61076d7ecdcc09e610ea8678db/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb", size = 153629 },
- { url = "https://files.pythonhosted.org/packages/c2/b6/7aa450b278e7aa92cf7732140bfd8be21f5f29d5bf334ae987c945276639/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d", size = 150778 },
- { url = "https://files.pythonhosted.org/packages/39/f4/d9f4f712d0951dcbfd42920d3db81b00dd23b6ab520419626f4023334056/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807", size = 146453 },
- { url = "https://files.pythonhosted.org/packages/49/2b/999d0314e4ee0cff3cb83e6bc9aeddd397eeed693edb4facb901eb8fbb69/charset_normalizer-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f", size = 95479 },
- { url = "https://files.pythonhosted.org/packages/2d/ce/3cbed41cff67e455a386fb5e5dd8906cdda2ed92fbc6297921f2e4419309/charset_normalizer-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f", size = 102790 },
- { url = "https://files.pythonhosted.org/packages/72/80/41ef5d5a7935d2d3a773e3eaebf0a9350542f2cab4eac59a7a4741fbbbbe/charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125", size = 194995 },
- { url = "https://files.pythonhosted.org/packages/7a/28/0b9fefa7b8b080ec492110af6d88aa3dea91c464b17d53474b6e9ba5d2c5/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1", size = 139471 },
- { url = "https://files.pythonhosted.org/packages/71/64/d24ab1a997efb06402e3fc07317e94da358e2585165930d9d59ad45fcae2/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3", size = 149831 },
- { url = "https://files.pythonhosted.org/packages/37/ed/be39e5258e198655240db5e19e0b11379163ad7070962d6b0c87ed2c4d39/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd", size = 142335 },
- { url = "https://files.pythonhosted.org/packages/88/83/489e9504711fa05d8dde1574996408026bdbdbd938f23be67deebb5eca92/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00", size = 143862 },
- { url = "https://files.pythonhosted.org/packages/c6/c7/32da20821cf387b759ad24627a9aca289d2822de929b8a41b6241767b461/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12", size = 145673 },
- { url = "https://files.pythonhosted.org/packages/68/85/f4288e96039abdd5aeb5c546fa20a37b50da71b5cf01e75e87f16cd43304/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77", size = 140211 },
- { url = "https://files.pythonhosted.org/packages/28/a3/a42e70d03cbdabc18997baf4f0227c73591a08041c149e710045c281f97b/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146", size = 148039 },
- { url = "https://files.pythonhosted.org/packages/85/e4/65699e8ab3014ecbe6f5c71d1a55d810fb716bbfd74f6283d5c2aa87febf/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd", size = 151939 },
- { url = "https://files.pythonhosted.org/packages/b1/82/8e9fe624cc5374193de6860aba3ea8070f584c8565ee77c168ec13274bd2/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6", size = 149075 },
- { url = "https://files.pythonhosted.org/packages/3d/7b/82865ba54c765560c8433f65e8acb9217cb839a9e32b42af4aa8e945870f/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8", size = 144340 },
- { url = "https://files.pythonhosted.org/packages/b5/b6/9674a4b7d4d99a0d2df9b215da766ee682718f88055751e1e5e753c82db0/charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b", size = 95205 },
- { url = "https://files.pythonhosted.org/packages/1e/ab/45b180e175de4402dcf7547e4fb617283bae54ce35c27930a6f35b6bef15/charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76", size = 102441 },
- { url = "https://files.pythonhosted.org/packages/0a/9a/dd1e1cdceb841925b7798369a09279bd1cf183cef0f9ddf15a3a6502ee45/charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545", size = 196105 },
- { url = "https://files.pythonhosted.org/packages/d3/8c/90bfabf8c4809ecb648f39794cf2a84ff2e7d2a6cf159fe68d9a26160467/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7", size = 140404 },
- { url = "https://files.pythonhosted.org/packages/ad/8f/e410d57c721945ea3b4f1a04b74f70ce8fa800d393d72899f0a40526401f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757", size = 150423 },
- { url = "https://files.pythonhosted.org/packages/f0/b8/e6825e25deb691ff98cf5c9072ee0605dc2acfca98af70c2d1b1bc75190d/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa", size = 143184 },
- { url = "https://files.pythonhosted.org/packages/3e/a2/513f6cbe752421f16d969e32f3583762bfd583848b763913ddab8d9bfd4f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d", size = 145268 },
- { url = "https://files.pythonhosted.org/packages/74/94/8a5277664f27c3c438546f3eb53b33f5b19568eb7424736bdc440a88a31f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616", size = 147601 },
- { url = "https://files.pythonhosted.org/packages/7c/5f/6d352c51ee763623a98e31194823518e09bfa48be2a7e8383cf691bbb3d0/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b", size = 141098 },
- { url = "https://files.pythonhosted.org/packages/78/d4/f5704cb629ba5ab16d1d3d741396aec6dc3ca2b67757c45b0599bb010478/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d", size = 149520 },
- { url = "https://files.pythonhosted.org/packages/c5/96/64120b1d02b81785f222b976c0fb79a35875457fa9bb40827678e54d1bc8/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a", size = 152852 },
- { url = "https://files.pythonhosted.org/packages/84/c9/98e3732278a99f47d487fd3468bc60b882920cef29d1fa6ca460a1fdf4e6/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9", size = 150488 },
- { url = "https://files.pythonhosted.org/packages/13/0e/9c8d4cb99c98c1007cc11eda969ebfe837bbbd0acdb4736d228ccaabcd22/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1", size = 146192 },
- { url = "https://files.pythonhosted.org/packages/b2/21/2b6b5b860781a0b49427309cb8670785aa543fb2178de875b87b9cc97746/charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35", size = 95550 },
- { url = "https://files.pythonhosted.org/packages/21/5b/1b390b03b1d16c7e382b561c5329f83cc06623916aab983e8ab9239c7d5c/charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f", size = 102785 },
- { url = "https://files.pythonhosted.org/packages/0e/f6/65ecc6878a89bb1c23a086ea335ad4bf21a588990c3f535a227b9eea9108/charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", size = 49767 },
+sdist = { url = "https://files.pythonhosted.org/packages/16/b0/572805e227f01586461c80e0fd25d65a2115599cc9dad142fee4b747c357/charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3", size = 123188, upload-time = "2024-12-24T18:12:35.43Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/0d/58/5580c1716040bc89206c77d8f74418caf82ce519aae06450393ca73475d1/charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de", size = 198013, upload-time = "2024-12-24T18:09:43.671Z" },
+ { url = "https://files.pythonhosted.org/packages/d0/11/00341177ae71c6f5159a08168bcb98c6e6d196d372c94511f9f6c9afe0c6/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176", size = 141285, upload-time = "2024-12-24T18:09:48.113Z" },
+ { url = "https://files.pythonhosted.org/packages/01/09/11d684ea5819e5a8f5100fb0b38cf8d02b514746607934134d31233e02c8/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037", size = 151449, upload-time = "2024-12-24T18:09:50.845Z" },
+ { url = "https://files.pythonhosted.org/packages/08/06/9f5a12939db324d905dc1f70591ae7d7898d030d7662f0d426e2286f68c9/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f", size = 143892, upload-time = "2024-12-24T18:09:52.078Z" },
+ { url = "https://files.pythonhosted.org/packages/93/62/5e89cdfe04584cb7f4d36003ffa2936681b03ecc0754f8e969c2becb7e24/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a", size = 146123, upload-time = "2024-12-24T18:09:54.575Z" },
+ { url = "https://files.pythonhosted.org/packages/a9/ac/ab729a15c516da2ab70a05f8722ecfccc3f04ed7a18e45c75bbbaa347d61/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a", size = 147943, upload-time = "2024-12-24T18:09:57.324Z" },
+ { url = "https://files.pythonhosted.org/packages/03/d2/3f392f23f042615689456e9a274640c1d2e5dd1d52de36ab8f7955f8f050/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247", size = 142063, upload-time = "2024-12-24T18:09:59.794Z" },
+ { url = "https://files.pythonhosted.org/packages/f2/e3/e20aae5e1039a2cd9b08d9205f52142329f887f8cf70da3650326670bddf/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408", size = 150578, upload-time = "2024-12-24T18:10:02.357Z" },
+ { url = "https://files.pythonhosted.org/packages/8d/af/779ad72a4da0aed925e1139d458adc486e61076d7ecdcc09e610ea8678db/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb", size = 153629, upload-time = "2024-12-24T18:10:03.678Z" },
+ { url = "https://files.pythonhosted.org/packages/c2/b6/7aa450b278e7aa92cf7732140bfd8be21f5f29d5bf334ae987c945276639/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d", size = 150778, upload-time = "2024-12-24T18:10:06.197Z" },
+ { url = "https://files.pythonhosted.org/packages/39/f4/d9f4f712d0951dcbfd42920d3db81b00dd23b6ab520419626f4023334056/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807", size = 146453, upload-time = "2024-12-24T18:10:08.848Z" },
+ { url = "https://files.pythonhosted.org/packages/49/2b/999d0314e4ee0cff3cb83e6bc9aeddd397eeed693edb4facb901eb8fbb69/charset_normalizer-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f", size = 95479, upload-time = "2024-12-24T18:10:10.044Z" },
+ { url = "https://files.pythonhosted.org/packages/2d/ce/3cbed41cff67e455a386fb5e5dd8906cdda2ed92fbc6297921f2e4419309/charset_normalizer-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f", size = 102790, upload-time = "2024-12-24T18:10:11.323Z" },
+ { url = "https://files.pythonhosted.org/packages/72/80/41ef5d5a7935d2d3a773e3eaebf0a9350542f2cab4eac59a7a4741fbbbbe/charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125", size = 194995, upload-time = "2024-12-24T18:10:12.838Z" },
+ { url = "https://files.pythonhosted.org/packages/7a/28/0b9fefa7b8b080ec492110af6d88aa3dea91c464b17d53474b6e9ba5d2c5/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1", size = 139471, upload-time = "2024-12-24T18:10:14.101Z" },
+ { url = "https://files.pythonhosted.org/packages/71/64/d24ab1a997efb06402e3fc07317e94da358e2585165930d9d59ad45fcae2/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3", size = 149831, upload-time = "2024-12-24T18:10:15.512Z" },
+ { url = "https://files.pythonhosted.org/packages/37/ed/be39e5258e198655240db5e19e0b11379163ad7070962d6b0c87ed2c4d39/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd", size = 142335, upload-time = "2024-12-24T18:10:18.369Z" },
+ { url = "https://files.pythonhosted.org/packages/88/83/489e9504711fa05d8dde1574996408026bdbdbd938f23be67deebb5eca92/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00", size = 143862, upload-time = "2024-12-24T18:10:19.743Z" },
+ { url = "https://files.pythonhosted.org/packages/c6/c7/32da20821cf387b759ad24627a9aca289d2822de929b8a41b6241767b461/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12", size = 145673, upload-time = "2024-12-24T18:10:21.139Z" },
+ { url = "https://files.pythonhosted.org/packages/68/85/f4288e96039abdd5aeb5c546fa20a37b50da71b5cf01e75e87f16cd43304/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77", size = 140211, upload-time = "2024-12-24T18:10:22.382Z" },
+ { url = "https://files.pythonhosted.org/packages/28/a3/a42e70d03cbdabc18997baf4f0227c73591a08041c149e710045c281f97b/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146", size = 148039, upload-time = "2024-12-24T18:10:24.802Z" },
+ { url = "https://files.pythonhosted.org/packages/85/e4/65699e8ab3014ecbe6f5c71d1a55d810fb716bbfd74f6283d5c2aa87febf/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd", size = 151939, upload-time = "2024-12-24T18:10:26.124Z" },
+ { url = "https://files.pythonhosted.org/packages/b1/82/8e9fe624cc5374193de6860aba3ea8070f584c8565ee77c168ec13274bd2/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6", size = 149075, upload-time = "2024-12-24T18:10:30.027Z" },
+ { url = "https://files.pythonhosted.org/packages/3d/7b/82865ba54c765560c8433f65e8acb9217cb839a9e32b42af4aa8e945870f/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8", size = 144340, upload-time = "2024-12-24T18:10:32.679Z" },
+ { url = "https://files.pythonhosted.org/packages/b5/b6/9674a4b7d4d99a0d2df9b215da766ee682718f88055751e1e5e753c82db0/charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b", size = 95205, upload-time = "2024-12-24T18:10:34.724Z" },
+ { url = "https://files.pythonhosted.org/packages/1e/ab/45b180e175de4402dcf7547e4fb617283bae54ce35c27930a6f35b6bef15/charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76", size = 102441, upload-time = "2024-12-24T18:10:37.574Z" },
+ { url = "https://files.pythonhosted.org/packages/0a/9a/dd1e1cdceb841925b7798369a09279bd1cf183cef0f9ddf15a3a6502ee45/charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545", size = 196105, upload-time = "2024-12-24T18:10:38.83Z" },
+ { url = "https://files.pythonhosted.org/packages/d3/8c/90bfabf8c4809ecb648f39794cf2a84ff2e7d2a6cf159fe68d9a26160467/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7", size = 140404, upload-time = "2024-12-24T18:10:44.272Z" },
+ { url = "https://files.pythonhosted.org/packages/ad/8f/e410d57c721945ea3b4f1a04b74f70ce8fa800d393d72899f0a40526401f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757", size = 150423, upload-time = "2024-12-24T18:10:45.492Z" },
+ { url = "https://files.pythonhosted.org/packages/f0/b8/e6825e25deb691ff98cf5c9072ee0605dc2acfca98af70c2d1b1bc75190d/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa", size = 143184, upload-time = "2024-12-24T18:10:47.898Z" },
+ { url = "https://files.pythonhosted.org/packages/3e/a2/513f6cbe752421f16d969e32f3583762bfd583848b763913ddab8d9bfd4f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d", size = 145268, upload-time = "2024-12-24T18:10:50.589Z" },
+ { url = "https://files.pythonhosted.org/packages/74/94/8a5277664f27c3c438546f3eb53b33f5b19568eb7424736bdc440a88a31f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616", size = 147601, upload-time = "2024-12-24T18:10:52.541Z" },
+ { url = "https://files.pythonhosted.org/packages/7c/5f/6d352c51ee763623a98e31194823518e09bfa48be2a7e8383cf691bbb3d0/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b", size = 141098, upload-time = "2024-12-24T18:10:53.789Z" },
+ { url = "https://files.pythonhosted.org/packages/78/d4/f5704cb629ba5ab16d1d3d741396aec6dc3ca2b67757c45b0599bb010478/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d", size = 149520, upload-time = "2024-12-24T18:10:55.048Z" },
+ { url = "https://files.pythonhosted.org/packages/c5/96/64120b1d02b81785f222b976c0fb79a35875457fa9bb40827678e54d1bc8/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a", size = 152852, upload-time = "2024-12-24T18:10:57.647Z" },
+ { url = "https://files.pythonhosted.org/packages/84/c9/98e3732278a99f47d487fd3468bc60b882920cef29d1fa6ca460a1fdf4e6/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9", size = 150488, upload-time = "2024-12-24T18:10:59.43Z" },
+ { url = "https://files.pythonhosted.org/packages/13/0e/9c8d4cb99c98c1007cc11eda969ebfe837bbbd0acdb4736d228ccaabcd22/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1", size = 146192, upload-time = "2024-12-24T18:11:00.676Z" },
+ { url = "https://files.pythonhosted.org/packages/b2/21/2b6b5b860781a0b49427309cb8670785aa543fb2178de875b87b9cc97746/charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35", size = 95550, upload-time = "2024-12-24T18:11:01.952Z" },
+ { url = "https://files.pythonhosted.org/packages/21/5b/1b390b03b1d16c7e382b561c5329f83cc06623916aab983e8ab9239c7d5c/charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f", size = 102785, upload-time = "2024-12-24T18:11:03.142Z" },
+ { url = "https://files.pythonhosted.org/packages/0e/f6/65ecc6878a89bb1c23a086ea335ad4bf21a588990c3f535a227b9eea9108/charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", size = 49767, upload-time = "2024-12-24T18:12:32.852Z" },
]
[[package]]
@@ -159,18 +159,18 @@ source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "colorama", marker = "sys_platform == 'win32'" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593 }
+sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593, upload-time = "2024-12-21T18:38:44.339Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188 },
+ { url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188, upload-time = "2024-12-21T18:38:41.666Z" },
]
[[package]]
name = "colorama"
version = "0.4.6"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 }
+sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 },
+ { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" },
]
[[package]]
@@ -189,36 +189,36 @@ dependencies = [
{ name = "pyyaml" },
{ name = "toml", marker = "python_full_version < '3.11'" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/ad/0e/391ae42ecb8db5d19236e802b2fba9ee1e583405e9d134f96695a49d1bf6/datamodel_code_generator-0.25.9.tar.gz", hash = "sha256:65ca9807d8edbd88a7f7931c10f4bc1c08bd9bbc5bb0508418a2b6a16590eb65", size = 88831 }
+sdist = { url = "https://files.pythonhosted.org/packages/ad/0e/391ae42ecb8db5d19236e802b2fba9ee1e583405e9d134f96695a49d1bf6/datamodel_code_generator-0.25.9.tar.gz", hash = "sha256:65ca9807d8edbd88a7f7931c10f4bc1c08bd9bbc5bb0508418a2b6a16590eb65", size = 88831, upload-time = "2024-08-07T03:11:05.444Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/b9/68/b3ade2468b649a78561ec2f64222a32d27c83d2e3612cc1846703d489ffd/datamodel_code_generator-0.25.9-py3-none-any.whl", hash = "sha256:9e0324233123d6e39a35bc0004771956935889a974aacfd7a0651de11d2219a9", size = 110721 },
+ { url = "https://files.pythonhosted.org/packages/b9/68/b3ade2468b649a78561ec2f64222a32d27c83d2e3612cc1846703d489ffd/datamodel_code_generator-0.25.9-py3-none-any.whl", hash = "sha256:9e0324233123d6e39a35bc0004771956935889a974aacfd7a0651de11d2219a9", size = 110721, upload-time = "2024-08-07T03:11:02.237Z" },
]
[[package]]
name = "decorator"
version = "5.2.1"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711 }
+sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711, upload-time = "2025-02-24T04:41:34.073Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190 },
+ { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190, upload-time = "2025-02-24T04:41:32.565Z" },
]
[[package]]
name = "distlib"
version = "0.3.9"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/0d/dd/1bec4c5ddb504ca60fc29472f3d27e8d4da1257a854e1d96742f15c1d02d/distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403", size = 613923 }
+sdist = { url = "https://files.pythonhosted.org/packages/0d/dd/1bec4c5ddb504ca60fc29472f3d27e8d4da1257a854e1d96742f15c1d02d/distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403", size = 613923, upload-time = "2024-10-09T18:35:47.551Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87", size = 468973 },
+ { url = "https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87", size = 468973, upload-time = "2024-10-09T18:35:44.272Z" },
]
[[package]]
name = "dnspython"
version = "2.7.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/b5/4a/263763cb2ba3816dd94b08ad3a33d5fdae34ecb856678773cc40a3605829/dnspython-2.7.0.tar.gz", hash = "sha256:ce9c432eda0dc91cf618a5cedf1a4e142651196bbcd2c80e89ed5a907e5cfaf1", size = 345197 }
+sdist = { url = "https://files.pythonhosted.org/packages/b5/4a/263763cb2ba3816dd94b08ad3a33d5fdae34ecb856678773cc40a3605829/dnspython-2.7.0.tar.gz", hash = "sha256:ce9c432eda0dc91cf618a5cedf1a4e142651196bbcd2c80e89ed5a907e5cfaf1", size = 345197, upload-time = "2024-10-05T20:14:59.362Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/68/1b/e0a87d256e40e8c888847551b20a017a6b98139178505dc7ffb96f04e954/dnspython-2.7.0-py3-none-any.whl", hash = "sha256:b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86", size = 313632 },
+ { url = "https://files.pythonhosted.org/packages/68/1b/e0a87d256e40e8c888847551b20a017a6b98139178505dc7ffb96f04e954/dnspython-2.7.0-py3-none-any.whl", hash = "sha256:b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86", size = 313632, upload-time = "2024-10-05T20:14:57.687Z" },
]
[[package]]
@@ -229,81 +229,81 @@ dependencies = [
{ name = "dnspython" },
{ name = "idna" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/48/ce/13508a1ec3f8bb981ae4ca79ea40384becc868bfae97fd1c942bb3a001b1/email_validator-2.2.0.tar.gz", hash = "sha256:cb690f344c617a714f22e66ae771445a1ceb46821152df8e165c5f9a364582b7", size = 48967 }
+sdist = { url = "https://files.pythonhosted.org/packages/48/ce/13508a1ec3f8bb981ae4ca79ea40384becc868bfae97fd1c942bb3a001b1/email_validator-2.2.0.tar.gz", hash = "sha256:cb690f344c617a714f22e66ae771445a1ceb46821152df8e165c5f9a364582b7", size = 48967, upload-time = "2024-06-20T11:30:30.034Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/d7/ee/bf0adb559ad3c786f12bcbc9296b3f5675f529199bef03e2df281fa1fadb/email_validator-2.2.0-py3-none-any.whl", hash = "sha256:561977c2d73ce3611850a06fa56b414621e0c8faa9d66f2611407d87465da631", size = 33521 },
+ { url = "https://files.pythonhosted.org/packages/d7/ee/bf0adb559ad3c786f12bcbc9296b3f5675f529199bef03e2df281fa1fadb/email_validator-2.2.0-py3-none-any.whl", hash = "sha256:561977c2d73ce3611850a06fa56b414621e0c8faa9d66f2611407d87465da631", size = 33521, upload-time = "2024-06-20T11:30:28.248Z" },
]
[[package]]
name = "exceptiongroup"
version = "1.2.2"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/09/35/2495c4ac46b980e4ca1f6ad6db102322ef3ad2410b79fdde159a4b0f3b92/exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc", size = 28883 }
+sdist = { url = "https://files.pythonhosted.org/packages/09/35/2495c4ac46b980e4ca1f6ad6db102322ef3ad2410b79fdde159a4b0f3b92/exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc", size = 28883, upload-time = "2024-07-12T22:26:00.161Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/02/cc/b7e31358aac6ed1ef2bb790a9746ac2c69bcb3c8588b41616914eb106eaf/exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b", size = 16453 },
+ { url = "https://files.pythonhosted.org/packages/02/cc/b7e31358aac6ed1ef2bb790a9746ac2c69bcb3c8588b41616914eb106eaf/exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b", size = 16453, upload-time = "2024-07-12T22:25:58.476Z" },
]
[[package]]
name = "executing"
version = "2.2.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/91/50/a9d80c47ff289c611ff12e63f7c5d13942c65d68125160cefd768c73e6e4/executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755", size = 978693 }
+sdist = { url = "https://files.pythonhosted.org/packages/91/50/a9d80c47ff289c611ff12e63f7c5d13942c65d68125160cefd768c73e6e4/executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755", size = 978693, upload-time = "2025-01-22T15:41:29.403Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/7b/8f/c4d9bafc34ad7ad5d8dc16dd1347ee0e507a52c3adb6bfa8887e1c6a26ba/executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa", size = 26702 },
+ { url = "https://files.pythonhosted.org/packages/7b/8f/c4d9bafc34ad7ad5d8dc16dd1347ee0e507a52c3adb6bfa8887e1c6a26ba/executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa", size = 26702, upload-time = "2025-01-22T15:41:25.929Z" },
]
[[package]]
name = "filelock"
version = "3.17.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/dc/9c/0b15fb47b464e1b663b1acd1253a062aa5feecb07d4e597daea542ebd2b5/filelock-3.17.0.tar.gz", hash = "sha256:ee4e77401ef576ebb38cd7f13b9b28893194acc20a8e68e18730ba9c0e54660e", size = 18027 }
+sdist = { url = "https://files.pythonhosted.org/packages/dc/9c/0b15fb47b464e1b663b1acd1253a062aa5feecb07d4e597daea542ebd2b5/filelock-3.17.0.tar.gz", hash = "sha256:ee4e77401ef576ebb38cd7f13b9b28893194acc20a8e68e18730ba9c0e54660e", size = 18027, upload-time = "2025-01-21T20:04:49.099Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/89/ec/00d68c4ddfedfe64159999e5f8a98fb8442729a63e2077eb9dcd89623d27/filelock-3.17.0-py3-none-any.whl", hash = "sha256:533dc2f7ba78dc2f0f531fc6c4940addf7b70a481e269a5a3b93be94ffbe8338", size = 16164 },
+ { url = "https://files.pythonhosted.org/packages/89/ec/00d68c4ddfedfe64159999e5f8a98fb8442729a63e2077eb9dcd89623d27/filelock-3.17.0-py3-none-any.whl", hash = "sha256:533dc2f7ba78dc2f0f531fc6c4940addf7b70a481e269a5a3b93be94ffbe8338", size = 16164, upload-time = "2025-01-21T20:04:47.734Z" },
]
[[package]]
name = "genson"
version = "1.3.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/c5/cf/2303c8ad276dcf5ee2ad6cf69c4338fd86ef0f471a5207b069adf7a393cf/genson-1.3.0.tar.gz", hash = "sha256:e02db9ac2e3fd29e65b5286f7135762e2cd8a986537c075b06fc5f1517308e37", size = 34919 }
+sdist = { url = "https://files.pythonhosted.org/packages/c5/cf/2303c8ad276dcf5ee2ad6cf69c4338fd86ef0f471a5207b069adf7a393cf/genson-1.3.0.tar.gz", hash = "sha256:e02db9ac2e3fd29e65b5286f7135762e2cd8a986537c075b06fc5f1517308e37", size = 34919, upload-time = "2024-05-15T22:08:49.123Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/f8/5c/e226de133afd8bb267ec27eead9ae3d784b95b39a287ed404caab39a5f50/genson-1.3.0-py3-none-any.whl", hash = "sha256:468feccd00274cc7e4c09e84b08704270ba8d95232aa280f65b986139cec67f7", size = 21470 },
+ { url = "https://files.pythonhosted.org/packages/f8/5c/e226de133afd8bb267ec27eead9ae3d784b95b39a287ed404caab39a5f50/genson-1.3.0-py3-none-any.whl", hash = "sha256:468feccd00274cc7e4c09e84b08704270ba8d95232aa280f65b986139cec67f7", size = 21470, upload-time = "2024-05-15T22:08:47.056Z" },
]
[[package]]
name = "identify"
version = "2.6.9"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/9b/98/a71ab060daec766acc30fb47dfca219d03de34a70d616a79a38c6066c5bf/identify-2.6.9.tar.gz", hash = "sha256:d40dfe3142a1421d8518e3d3985ef5ac42890683e32306ad614a29490abeb6bf", size = 99249 }
+sdist = { url = "https://files.pythonhosted.org/packages/9b/98/a71ab060daec766acc30fb47dfca219d03de34a70d616a79a38c6066c5bf/identify-2.6.9.tar.gz", hash = "sha256:d40dfe3142a1421d8518e3d3985ef5ac42890683e32306ad614a29490abeb6bf", size = 99249, upload-time = "2025-03-08T15:54:13.632Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/07/ce/0845144ed1f0e25db5e7a79c2354c1da4b5ce392b8966449d5db8dca18f1/identify-2.6.9-py2.py3-none-any.whl", hash = "sha256:c98b4322da415a8e5a70ff6e51fbc2d2932c015532d77e9f8537b4ba7813b150", size = 99101 },
+ { url = "https://files.pythonhosted.org/packages/07/ce/0845144ed1f0e25db5e7a79c2354c1da4b5ce392b8966449d5db8dca18f1/identify-2.6.9-py2.py3-none-any.whl", hash = "sha256:c98b4322da415a8e5a70ff6e51fbc2d2932c015532d77e9f8537b4ba7813b150", size = 99101, upload-time = "2025-03-08T15:54:12.026Z" },
]
[[package]]
name = "idna"
version = "3.10"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 }
+sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490, upload-time = "2024-09-15T18:07:39.745Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 },
+ { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442, upload-time = "2024-09-15T18:07:37.964Z" },
]
[[package]]
name = "inflect"
version = "5.6.2"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/cb/db/cae5d8524c4b5e574c281895b212062f3b06d0e14186904ed71c538b4e90/inflect-5.6.2.tar.gz", hash = "sha256:aadc7ed73928f5e014129794bbac03058cca35d0a973a5fc4eb45c7fa26005f9", size = 69378 }
+sdist = { url = "https://files.pythonhosted.org/packages/cb/db/cae5d8524c4b5e574c281895b212062f3b06d0e14186904ed71c538b4e90/inflect-5.6.2.tar.gz", hash = "sha256:aadc7ed73928f5e014129794bbac03058cca35d0a973a5fc4eb45c7fa26005f9", size = 69378, upload-time = "2022-07-15T15:47:42.794Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/df/d8/3e1a32d305215166f5c32652c473aa766bd7809cd10b34c544dbc31facb5/inflect-5.6.2-py3-none-any.whl", hash = "sha256:b45d91a4a28a4e617ff1821117439b06eaa86e2a4573154af0149e9be6687238", size = 33704 },
+ { url = "https://files.pythonhosted.org/packages/df/d8/3e1a32d305215166f5c32652c473aa766bd7809cd10b34c544dbc31facb5/inflect-5.6.2-py3-none-any.whl", hash = "sha256:b45d91a4a28a4e617ff1821117439b06eaa86e2a4573154af0149e9be6687238", size = 33704, upload-time = "2022-07-15T15:47:40.578Z" },
]
[[package]]
name = "iniconfig"
version = "2.0.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/d7/4b/cbd8e699e64a6f16ca3a8220661b5f83792b3017d0f79807cb8708d33913/iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", size = 4646 }
+sdist = { url = "https://files.pythonhosted.org/packages/d7/4b/cbd8e699e64a6f16ca3a8220661b5f83792b3017d0f79807cb8708d33913/iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", size = 4646, upload-time = "2023-01-07T11:08:11.254Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374", size = 5892 },
+ { url = "https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374", size = 5892, upload-time = "2023-01-07T11:08:09.864Z" },
]
[[package]]
@@ -316,9 +316,9 @@ dependencies = [
{ name = "ipython", version = "9.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" },
{ name = "tomli", marker = "python_full_version < '3.11'" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/3d/1b/7e07e7b752017f7693a0f4d41c13e5ca29ce8cbcfdcc1fd6c4ad8c0a27a0/ipdb-0.13.13.tar.gz", hash = "sha256:e3ac6018ef05126d442af680aad863006ec19d02290561ac88b8b1c0b0cfc726", size = 17042 }
+sdist = { url = "https://files.pythonhosted.org/packages/3d/1b/7e07e7b752017f7693a0f4d41c13e5ca29ce8cbcfdcc1fd6c4ad8c0a27a0/ipdb-0.13.13.tar.gz", hash = "sha256:e3ac6018ef05126d442af680aad863006ec19d02290561ac88b8b1c0b0cfc726", size = 17042, upload-time = "2023-03-09T15:40:57.487Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/0c/4c/b075da0092003d9a55cf2ecc1cae9384a1ca4f650d51b00fc59875fe76f6/ipdb-0.13.13-py3-none-any.whl", hash = "sha256:45529994741c4ab6d2388bfa5d7b725c2cf7fe9deffabdb8a6113aa5ed449ed4", size = 12130 },
+ { url = "https://files.pythonhosted.org/packages/0c/4c/b075da0092003d9a55cf2ecc1cae9384a1ca4f650d51b00fc59875fe76f6/ipdb-0.13.13-py3-none-any.whl", hash = "sha256:45529994741c4ab6d2388bfa5d7b725c2cf7fe9deffabdb8a6113aa5ed449ed4", size = 12130, upload-time = "2023-03-09T15:40:55.021Z" },
]
[[package]]
@@ -341,9 +341,9 @@ dependencies = [
{ name = "traitlets", marker = "python_full_version < '3.11'" },
{ name = "typing-extensions", marker = "python_full_version < '3.11'" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/13/18/1a60aa62e9d272fcd7e658a89e1c148da10e1a5d38edcbcd834b52ca7492/ipython-8.34.0.tar.gz", hash = "sha256:c31d658e754673ecc6514583e7dda8069e47136eb62458816b7d1e6625948b5a", size = 5508477 }
+sdist = { url = "https://files.pythonhosted.org/packages/13/18/1a60aa62e9d272fcd7e658a89e1c148da10e1a5d38edcbcd834b52ca7492/ipython-8.34.0.tar.gz", hash = "sha256:c31d658e754673ecc6514583e7dda8069e47136eb62458816b7d1e6625948b5a", size = 5508477, upload-time = "2025-03-08T13:43:17.591Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/04/78/45615356bb973904856808183ae2a5fba1f360e9d682314d79766f4b88f2/ipython-8.34.0-py3-none-any.whl", hash = "sha256:0419883fa46e0baa182c5d50ebb8d6b49df1889fdb70750ad6d8cfe678eda6e3", size = 826731 },
+ { url = "https://files.pythonhosted.org/packages/04/78/45615356bb973904856808183ae2a5fba1f360e9d682314d79766f4b88f2/ipython-8.34.0-py3-none-any.whl", hash = "sha256:0419883fa46e0baa182c5d50ebb8d6b49df1889fdb70750ad6d8cfe678eda6e3", size = 826731, upload-time = "2025-03-08T13:43:15.004Z" },
]
[[package]]
@@ -367,9 +367,9 @@ dependencies = [
{ name = "traitlets", marker = "python_full_version >= '3.11'" },
{ name = "typing-extensions", marker = "python_full_version == '3.11.*'" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/7d/ce/012a0f40ca58a966f87a6e894d6828e2817657cbdf522b02a5d3a87d92ce/ipython-9.0.2.tar.gz", hash = "sha256:ec7b479e3e5656bf4f58c652c120494df1820f4f28f522fb7ca09e213c2aab52", size = 4366102 }
+sdist = { url = "https://files.pythonhosted.org/packages/7d/ce/012a0f40ca58a966f87a6e894d6828e2817657cbdf522b02a5d3a87d92ce/ipython-9.0.2.tar.gz", hash = "sha256:ec7b479e3e5656bf4f58c652c120494df1820f4f28f522fb7ca09e213c2aab52", size = 4366102, upload-time = "2025-03-08T15:04:52.885Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/20/3a/917cb9e72f4e1a4ea13c862533205ae1319bd664119189ee5cc9e4e95ebf/ipython-9.0.2-py3-none-any.whl", hash = "sha256:143ef3ea6fb1e1bffb4c74b114051de653ffb7737a3f7ab1670e657ca6ae8c44", size = 600524 },
+ { url = "https://files.pythonhosted.org/packages/20/3a/917cb9e72f4e1a4ea13c862533205ae1319bd664119189ee5cc9e4e95ebf/ipython-9.0.2-py3-none-any.whl", hash = "sha256:143ef3ea6fb1e1bffb4c74b114051de653ffb7737a3f7ab1670e657ca6ae8c44", size = 600524, upload-time = "2025-03-08T15:04:50.667Z" },
]
[[package]]
@@ -379,18 +379,18 @@ source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "pygments", marker = "python_full_version >= '3.11'" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393 }
+sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393, upload-time = "2025-01-17T11:24:34.505Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074 },
+ { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074, upload-time = "2025-01-17T11:24:33.271Z" },
]
[[package]]
name = "isort"
version = "5.13.2"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/87/f9/c1eb8635a24e87ade2efce21e3ce8cd6b8630bb685ddc9cdaca1349b2eb5/isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109", size = 175303 }
+sdist = { url = "https://files.pythonhosted.org/packages/87/f9/c1eb8635a24e87ade2efce21e3ce8cd6b8630bb685ddc9cdaca1349b2eb5/isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109", size = 175303, upload-time = "2023-12-13T20:37:26.124Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/d1/b3/8def84f539e7d2289a02f0524b944b15d7c75dab7628bedf1c4f0992029c/isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6", size = 92310 },
+ { url = "https://files.pythonhosted.org/packages/d1/b3/8def84f539e7d2289a02f0524b944b15d7c75dab7628bedf1c4f0992029c/isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6", size = 92310, upload-time = "2023-12-13T20:37:23.244Z" },
]
[[package]]
@@ -400,9 +400,9 @@ source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "parso" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", size = 1231287 }
+sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", size = 1231287, upload-time = "2024-11-11T01:41:42.873Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9", size = 1572278 },
+ { url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9", size = 1572278, upload-time = "2024-11-11T01:41:40.175Z" },
]
[[package]]
@@ -412,9 +412,9 @@ source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "markupsafe" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115 }
+sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899 },
+ { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" },
]
[[package]]
@@ -427,9 +427,9 @@ dependencies = [
{ name = "referencing" },
{ name = "rpds-py" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/38/2e/03362ee4034a4c917f697890ccd4aec0800ccf9ded7f511971c75451deec/jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4", size = 325778 }
+sdist = { url = "https://files.pythonhosted.org/packages/38/2e/03362ee4034a4c917f697890ccd4aec0800ccf9ded7f511971c75451deec/jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4", size = 325778, upload-time = "2024-07-08T18:40:05.546Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/69/4a/4f9dbeb84e8850557c02365a0eee0649abe5eb1d84af92a25731c6c0f922/jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566", size = 88462 },
+ { url = "https://files.pythonhosted.org/packages/69/4a/4f9dbeb84e8850557c02365a0eee0649abe5eb1d84af92a25731c6c0f922/jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566", size = 88462, upload-time = "2024-07-08T18:40:00.165Z" },
]
[[package]]
@@ -439,47 +439,112 @@ source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "referencing" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/10/db/58f950c996c793472e336ff3655b13fbcf1e3b359dcf52dcf3ed3b52c352/jsonschema_specifications-2024.10.1.tar.gz", hash = "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272", size = 15561 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/d1/0f/8910b19ac0670a0f80ce1008e5e751c4a57e14d2c4c13a482aa6079fa9d6/jsonschema_specifications-2024.10.1-py3-none-any.whl", hash = "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf", size = 18459 },
+sdist = { url = "https://files.pythonhosted.org/packages/10/db/58f950c996c793472e336ff3655b13fbcf1e3b359dcf52dcf3ed3b52c352/jsonschema_specifications-2024.10.1.tar.gz", hash = "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272", size = 15561, upload-time = "2024-10-08T12:29:32.068Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/d1/0f/8910b19ac0670a0f80ce1008e5e751c4a57e14d2c4c13a482aa6079fa9d6/jsonschema_specifications-2024.10.1-py3-none-any.whl", hash = "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf", size = 18459, upload-time = "2024-10-08T12:29:30.439Z" },
+]
+
+[[package]]
+name = "lxml"
+version = "5.4.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/76/3d/14e82fc7c8fb1b7761f7e748fd47e2ec8276d137b6acfe5a4bb73853e08f/lxml-5.4.0.tar.gz", hash = "sha256:d12832e1dbea4be280b22fd0ea7c9b87f0d8fc51ba06e92dc62d52f804f78ebd", size = 3679479, upload-time = "2025-04-23T01:50:29.322Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f5/1f/a3b6b74a451ceb84b471caa75c934d2430a4d84395d38ef201d539f38cd1/lxml-5.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e7bc6df34d42322c5289e37e9971d6ed114e3776b45fa879f734bded9d1fea9c", size = 8076838, upload-time = "2025-04-23T01:44:29.325Z" },
+ { url = "https://files.pythonhosted.org/packages/36/af/a567a55b3e47135b4d1f05a1118c24529104c003f95851374b3748139dc1/lxml-5.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6854f8bd8a1536f8a1d9a3655e6354faa6406621cf857dc27b681b69860645c7", size = 4381827, upload-time = "2025-04-23T01:44:33.345Z" },
+ { url = "https://files.pythonhosted.org/packages/50/ba/4ee47d24c675932b3eb5b6de77d0f623c2db6dc466e7a1f199792c5e3e3a/lxml-5.4.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:696ea9e87442467819ac22394ca36cb3d01848dad1be6fac3fb612d3bd5a12cf", size = 5204098, upload-time = "2025-04-23T01:44:35.809Z" },
+ { url = "https://files.pythonhosted.org/packages/f2/0f/b4db6dfebfefe3abafe360f42a3d471881687fd449a0b86b70f1f2683438/lxml-5.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ef80aeac414f33c24b3815ecd560cee272786c3adfa5f31316d8b349bfade28", size = 4930261, upload-time = "2025-04-23T01:44:38.271Z" },
+ { url = "https://files.pythonhosted.org/packages/0b/1f/0bb1bae1ce056910f8db81c6aba80fec0e46c98d77c0f59298c70cd362a3/lxml-5.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b9c2754cef6963f3408ab381ea55f47dabc6f78f4b8ebb0f0b25cf1ac1f7609", size = 5529621, upload-time = "2025-04-23T01:44:40.921Z" },
+ { url = "https://files.pythonhosted.org/packages/21/f5/e7b66a533fc4a1e7fa63dd22a1ab2ec4d10319b909211181e1ab3e539295/lxml-5.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7a62cc23d754bb449d63ff35334acc9f5c02e6dae830d78dab4dd12b78a524f4", size = 4983231, upload-time = "2025-04-23T01:44:43.871Z" },
+ { url = "https://files.pythonhosted.org/packages/11/39/a38244b669c2d95a6a101a84d3c85ba921fea827e9e5483e93168bf1ccb2/lxml-5.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f82125bc7203c5ae8633a7d5d20bcfdff0ba33e436e4ab0abc026a53a8960b7", size = 5084279, upload-time = "2025-04-23T01:44:46.632Z" },
+ { url = "https://files.pythonhosted.org/packages/db/64/48cac242347a09a07740d6cee7b7fd4663d5c1abd65f2e3c60420e231b27/lxml-5.4.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:b67319b4aef1a6c56576ff544b67a2a6fbd7eaee485b241cabf53115e8908b8f", size = 4927405, upload-time = "2025-04-23T01:44:49.843Z" },
+ { url = "https://files.pythonhosted.org/packages/98/89/97442835fbb01d80b72374f9594fe44f01817d203fa056e9906128a5d896/lxml-5.4.0-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:a8ef956fce64c8551221f395ba21d0724fed6b9b6242ca4f2f7beb4ce2f41997", size = 5550169, upload-time = "2025-04-23T01:44:52.791Z" },
+ { url = "https://files.pythonhosted.org/packages/f1/97/164ca398ee654eb21f29c6b582685c6c6b9d62d5213abc9b8380278e9c0a/lxml-5.4.0-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:0a01ce7d8479dce84fc03324e3b0c9c90b1ece9a9bb6a1b6c9025e7e4520e78c", size = 5062691, upload-time = "2025-04-23T01:44:56.108Z" },
+ { url = "https://files.pythonhosted.org/packages/d0/bc/712b96823d7feb53482d2e4f59c090fb18ec7b0d0b476f353b3085893cda/lxml-5.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:91505d3ddebf268bb1588eb0f63821f738d20e1e7f05d3c647a5ca900288760b", size = 5133503, upload-time = "2025-04-23T01:44:59.222Z" },
+ { url = "https://files.pythonhosted.org/packages/d4/55/a62a39e8f9da2a8b6002603475e3c57c870cd9c95fd4b94d4d9ac9036055/lxml-5.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a3bcdde35d82ff385f4ede021df801b5c4a5bcdfb61ea87caabcebfc4945dc1b", size = 4999346, upload-time = "2025-04-23T01:45:02.088Z" },
+ { url = "https://files.pythonhosted.org/packages/ea/47/a393728ae001b92bb1a9e095e570bf71ec7f7fbae7688a4792222e56e5b9/lxml-5.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:aea7c06667b987787c7d1f5e1dfcd70419b711cdb47d6b4bb4ad4b76777a0563", size = 5627139, upload-time = "2025-04-23T01:45:04.582Z" },
+ { url = "https://files.pythonhosted.org/packages/5e/5f/9dcaaad037c3e642a7ea64b479aa082968de46dd67a8293c541742b6c9db/lxml-5.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:a7fb111eef4d05909b82152721a59c1b14d0f365e2be4c742a473c5d7372f4f5", size = 5465609, upload-time = "2025-04-23T01:45:07.649Z" },
+ { url = "https://files.pythonhosted.org/packages/a7/0a/ebcae89edf27e61c45023005171d0ba95cb414ee41c045ae4caf1b8487fd/lxml-5.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:43d549b876ce64aa18b2328faff70f5877f8c6dede415f80a2f799d31644d776", size = 5192285, upload-time = "2025-04-23T01:45:10.456Z" },
+ { url = "https://files.pythonhosted.org/packages/42/ad/cc8140ca99add7d85c92db8b2354638ed6d5cc0e917b21d36039cb15a238/lxml-5.4.0-cp310-cp310-win32.whl", hash = "sha256:75133890e40d229d6c5837b0312abbe5bac1c342452cf0e12523477cd3aa21e7", size = 3477507, upload-time = "2025-04-23T01:45:12.474Z" },
+ { url = "https://files.pythonhosted.org/packages/e9/39/597ce090da1097d2aabd2f9ef42187a6c9c8546d67c419ce61b88b336c85/lxml-5.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:de5b4e1088523e2b6f730d0509a9a813355b7f5659d70eb4f319c76beea2e250", size = 3805104, upload-time = "2025-04-23T01:45:15.104Z" },
+ { url = "https://files.pythonhosted.org/packages/81/2d/67693cc8a605a12e5975380d7ff83020dcc759351b5a066e1cced04f797b/lxml-5.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:98a3912194c079ef37e716ed228ae0dcb960992100461b704aea4e93af6b0bb9", size = 8083240, upload-time = "2025-04-23T01:45:18.566Z" },
+ { url = "https://files.pythonhosted.org/packages/73/53/b5a05ab300a808b72e848efd152fe9c022c0181b0a70b8bca1199f1bed26/lxml-5.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0ea0252b51d296a75f6118ed0d8696888e7403408ad42345d7dfd0d1e93309a7", size = 4387685, upload-time = "2025-04-23T01:45:21.387Z" },
+ { url = "https://files.pythonhosted.org/packages/d8/cb/1a3879c5f512bdcd32995c301886fe082b2edd83c87d41b6d42d89b4ea4d/lxml-5.4.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b92b69441d1bd39f4940f9eadfa417a25862242ca2c396b406f9272ef09cdcaa", size = 4991164, upload-time = "2025-04-23T01:45:23.849Z" },
+ { url = "https://files.pythonhosted.org/packages/f9/94/bbc66e42559f9d04857071e3b3d0c9abd88579367fd2588a4042f641f57e/lxml-5.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20e16c08254b9b6466526bc1828d9370ee6c0d60a4b64836bc3ac2917d1e16df", size = 4746206, upload-time = "2025-04-23T01:45:26.361Z" },
+ { url = "https://files.pythonhosted.org/packages/66/95/34b0679bee435da2d7cae895731700e519a8dfcab499c21662ebe671603e/lxml-5.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7605c1c32c3d6e8c990dd28a0970a3cbbf1429d5b92279e37fda05fb0c92190e", size = 5342144, upload-time = "2025-04-23T01:45:28.939Z" },
+ { url = "https://files.pythonhosted.org/packages/e0/5d/abfcc6ab2fa0be72b2ba938abdae1f7cad4c632f8d552683ea295d55adfb/lxml-5.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ecf4c4b83f1ab3d5a7ace10bafcb6f11df6156857a3c418244cef41ca9fa3e44", size = 4825124, upload-time = "2025-04-23T01:45:31.361Z" },
+ { url = "https://files.pythonhosted.org/packages/5a/78/6bd33186c8863b36e084f294fc0a5e5eefe77af95f0663ef33809cc1c8aa/lxml-5.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0cef4feae82709eed352cd7e97ae062ef6ae9c7b5dbe3663f104cd2c0e8d94ba", size = 4876520, upload-time = "2025-04-23T01:45:34.191Z" },
+ { url = "https://files.pythonhosted.org/packages/3b/74/4d7ad4839bd0fc64e3d12da74fc9a193febb0fae0ba6ebd5149d4c23176a/lxml-5.4.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:df53330a3bff250f10472ce96a9af28628ff1f4efc51ccba351a8820bca2a8ba", size = 4765016, upload-time = "2025-04-23T01:45:36.7Z" },
+ { url = "https://files.pythonhosted.org/packages/24/0d/0a98ed1f2471911dadfc541003ac6dd6879fc87b15e1143743ca20f3e973/lxml-5.4.0-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:aefe1a7cb852fa61150fcb21a8c8fcea7b58c4cb11fbe59c97a0a4b31cae3c8c", size = 5362884, upload-time = "2025-04-23T01:45:39.291Z" },
+ { url = "https://files.pythonhosted.org/packages/48/de/d4f7e4c39740a6610f0f6959052b547478107967362e8424e1163ec37ae8/lxml-5.4.0-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:ef5a7178fcc73b7d8c07229e89f8eb45b2908a9238eb90dcfc46571ccf0383b8", size = 4902690, upload-time = "2025-04-23T01:45:42.386Z" },
+ { url = "https://files.pythonhosted.org/packages/07/8c/61763abd242af84f355ca4ef1ee096d3c1b7514819564cce70fd18c22e9a/lxml-5.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d2ed1b3cb9ff1c10e6e8b00941bb2e5bb568b307bfc6b17dffbbe8be5eecba86", size = 4944418, upload-time = "2025-04-23T01:45:46.051Z" },
+ { url = "https://files.pythonhosted.org/packages/f9/c5/6d7e3b63e7e282619193961a570c0a4c8a57fe820f07ca3fe2f6bd86608a/lxml-5.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:72ac9762a9f8ce74c9eed4a4e74306f2f18613a6b71fa065495a67ac227b3056", size = 4827092, upload-time = "2025-04-23T01:45:48.943Z" },
+ { url = "https://files.pythonhosted.org/packages/71/4a/e60a306df54680b103348545706a98a7514a42c8b4fbfdcaa608567bb065/lxml-5.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f5cb182f6396706dc6cc1896dd02b1c889d644c081b0cdec38747573db88a7d7", size = 5418231, upload-time = "2025-04-23T01:45:51.481Z" },
+ { url = "https://files.pythonhosted.org/packages/27/f2/9754aacd6016c930875854f08ac4b192a47fe19565f776a64004aa167521/lxml-5.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:3a3178b4873df8ef9457a4875703488eb1622632a9cee6d76464b60e90adbfcd", size = 5261798, upload-time = "2025-04-23T01:45:54.146Z" },
+ { url = "https://files.pythonhosted.org/packages/38/a2/0c49ec6941428b1bd4f280650d7b11a0f91ace9db7de32eb7aa23bcb39ff/lxml-5.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e094ec83694b59d263802ed03a8384594fcce477ce484b0cbcd0008a211ca751", size = 4988195, upload-time = "2025-04-23T01:45:56.685Z" },
+ { url = "https://files.pythonhosted.org/packages/7a/75/87a3963a08eafc46a86c1131c6e28a4de103ba30b5ae903114177352a3d7/lxml-5.4.0-cp311-cp311-win32.whl", hash = "sha256:4329422de653cdb2b72afa39b0aa04252fca9071550044904b2e7036d9d97fe4", size = 3474243, upload-time = "2025-04-23T01:45:58.863Z" },
+ { url = "https://files.pythonhosted.org/packages/fa/f9/1f0964c4f6c2be861c50db380c554fb8befbea98c6404744ce243a3c87ef/lxml-5.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:fd3be6481ef54b8cfd0e1e953323b7aa9d9789b94842d0e5b142ef4bb7999539", size = 3815197, upload-time = "2025-04-23T01:46:01.096Z" },
+ { url = "https://files.pythonhosted.org/packages/f8/4c/d101ace719ca6a4ec043eb516fcfcb1b396a9fccc4fcd9ef593df34ba0d5/lxml-5.4.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b5aff6f3e818e6bdbbb38e5967520f174b18f539c2b9de867b1e7fde6f8d95a4", size = 8127392, upload-time = "2025-04-23T01:46:04.09Z" },
+ { url = "https://files.pythonhosted.org/packages/11/84/beddae0cec4dd9ddf46abf156f0af451c13019a0fa25d7445b655ba5ccb7/lxml-5.4.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:942a5d73f739ad7c452bf739a62a0f83e2578afd6b8e5406308731f4ce78b16d", size = 4415103, upload-time = "2025-04-23T01:46:07.227Z" },
+ { url = "https://files.pythonhosted.org/packages/d0/25/d0d93a4e763f0462cccd2b8a665bf1e4343dd788c76dcfefa289d46a38a9/lxml-5.4.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:460508a4b07364d6abf53acaa0a90b6d370fafde5693ef37602566613a9b0779", size = 5024224, upload-time = "2025-04-23T01:46:10.237Z" },
+ { url = "https://files.pythonhosted.org/packages/31/ce/1df18fb8f7946e7f3388af378b1f34fcf253b94b9feedb2cec5969da8012/lxml-5.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:529024ab3a505fed78fe3cc5ddc079464e709f6c892733e3f5842007cec8ac6e", size = 4769913, upload-time = "2025-04-23T01:46:12.757Z" },
+ { url = "https://files.pythonhosted.org/packages/4e/62/f4a6c60ae7c40d43657f552f3045df05118636be1165b906d3423790447f/lxml-5.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ca56ebc2c474e8f3d5761debfd9283b8b18c76c4fc0967b74aeafba1f5647f9", size = 5290441, upload-time = "2025-04-23T01:46:16.037Z" },
+ { url = "https://files.pythonhosted.org/packages/9e/aa/04f00009e1e3a77838c7fc948f161b5d2d5de1136b2b81c712a263829ea4/lxml-5.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a81e1196f0a5b4167a8dafe3a66aa67c4addac1b22dc47947abd5d5c7a3f24b5", size = 4820165, upload-time = "2025-04-23T01:46:19.137Z" },
+ { url = "https://files.pythonhosted.org/packages/c9/1f/e0b2f61fa2404bf0f1fdf1898377e5bd1b74cc9b2cf2c6ba8509b8f27990/lxml-5.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00b8686694423ddae324cf614e1b9659c2edb754de617703c3d29ff568448df5", size = 4932580, upload-time = "2025-04-23T01:46:21.963Z" },
+ { url = "https://files.pythonhosted.org/packages/24/a2/8263f351b4ffe0ed3e32ea7b7830f845c795349034f912f490180d88a877/lxml-5.4.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:c5681160758d3f6ac5b4fea370495c48aac0989d6a0f01bb9a72ad8ef5ab75c4", size = 4759493, upload-time = "2025-04-23T01:46:24.316Z" },
+ { url = "https://files.pythonhosted.org/packages/05/00/41db052f279995c0e35c79d0f0fc9f8122d5b5e9630139c592a0b58c71b4/lxml-5.4.0-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:2dc191e60425ad70e75a68c9fd90ab284df64d9cd410ba8d2b641c0c45bc006e", size = 5324679, upload-time = "2025-04-23T01:46:27.097Z" },
+ { url = "https://files.pythonhosted.org/packages/1d/be/ee99e6314cdef4587617d3b3b745f9356d9b7dd12a9663c5f3b5734b64ba/lxml-5.4.0-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:67f779374c6b9753ae0a0195a892a1c234ce8416e4448fe1e9f34746482070a7", size = 4890691, upload-time = "2025-04-23T01:46:30.009Z" },
+ { url = "https://files.pythonhosted.org/packages/ad/36/239820114bf1d71f38f12208b9c58dec033cbcf80101cde006b9bde5cffd/lxml-5.4.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:79d5bfa9c1b455336f52343130b2067164040604e41f6dc4d8313867ed540079", size = 4955075, upload-time = "2025-04-23T01:46:32.33Z" },
+ { url = "https://files.pythonhosted.org/packages/d4/e1/1b795cc0b174efc9e13dbd078a9ff79a58728a033142bc6d70a1ee8fc34d/lxml-5.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3d3c30ba1c9b48c68489dc1829a6eede9873f52edca1dda900066542528d6b20", size = 4838680, upload-time = "2025-04-23T01:46:34.852Z" },
+ { url = "https://files.pythonhosted.org/packages/72/48/3c198455ca108cec5ae3662ae8acd7fd99476812fd712bb17f1b39a0b589/lxml-5.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1af80c6316ae68aded77e91cd9d80648f7dd40406cef73df841aa3c36f6907c8", size = 5391253, upload-time = "2025-04-23T01:46:37.608Z" },
+ { url = "https://files.pythonhosted.org/packages/d6/10/5bf51858971c51ec96cfc13e800a9951f3fd501686f4c18d7d84fe2d6352/lxml-5.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4d885698f5019abe0de3d352caf9466d5de2baded00a06ef3f1216c1a58ae78f", size = 5261651, upload-time = "2025-04-23T01:46:40.183Z" },
+ { url = "https://files.pythonhosted.org/packages/2b/11/06710dd809205377da380546f91d2ac94bad9ff735a72b64ec029f706c85/lxml-5.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:aea53d51859b6c64e7c51d522c03cc2c48b9b5d6172126854cc7f01aa11f52bc", size = 5024315, upload-time = "2025-04-23T01:46:43.333Z" },
+ { url = "https://files.pythonhosted.org/packages/f5/b0/15b6217834b5e3a59ebf7f53125e08e318030e8cc0d7310355e6edac98ef/lxml-5.4.0-cp312-cp312-win32.whl", hash = "sha256:d90b729fd2732df28130c064aac9bb8aff14ba20baa4aee7bd0795ff1187545f", size = 3486149, upload-time = "2025-04-23T01:46:45.684Z" },
+ { url = "https://files.pythonhosted.org/packages/91/1e/05ddcb57ad2f3069101611bd5f5084157d90861a2ef460bf42f45cced944/lxml-5.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:1dc4ca99e89c335a7ed47d38964abcb36c5910790f9bd106f2a8fa2ee0b909d2", size = 3817095, upload-time = "2025-04-23T01:46:48.521Z" },
+ { url = "https://files.pythonhosted.org/packages/c6/b0/e4d1cbb8c078bc4ae44de9c6a79fec4e2b4151b1b4d50af71d799e76b177/lxml-5.4.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1b717b00a71b901b4667226bba282dd462c42ccf618ade12f9ba3674e1fabc55", size = 3892319, upload-time = "2025-04-23T01:49:22.069Z" },
+ { url = "https://files.pythonhosted.org/packages/5b/aa/e2bdefba40d815059bcb60b371a36fbfcce970a935370e1b367ba1cc8f74/lxml-5.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27a9ded0f0b52098ff89dd4c418325b987feed2ea5cc86e8860b0f844285d740", size = 4211614, upload-time = "2025-04-23T01:49:24.599Z" },
+ { url = "https://files.pythonhosted.org/packages/3c/5f/91ff89d1e092e7cfdd8453a939436ac116db0a665e7f4be0cd8e65c7dc5a/lxml-5.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b7ce10634113651d6f383aa712a194179dcd496bd8c41e191cec2099fa09de5", size = 4306273, upload-time = "2025-04-23T01:49:27.355Z" },
+ { url = "https://files.pythonhosted.org/packages/be/7c/8c3f15df2ca534589717bfd19d1e3482167801caedfa4d90a575facf68a6/lxml-5.4.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:53370c26500d22b45182f98847243efb518d268374a9570409d2e2276232fd37", size = 4208552, upload-time = "2025-04-23T01:49:29.949Z" },
+ { url = "https://files.pythonhosted.org/packages/7d/d8/9567afb1665f64d73fc54eb904e418d1138d7f011ed00647121b4dd60b38/lxml-5.4.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c6364038c519dffdbe07e3cf42e6a7f8b90c275d4d1617a69bb59734c1a2d571", size = 4331091, upload-time = "2025-04-23T01:49:32.842Z" },
+ { url = "https://files.pythonhosted.org/packages/f1/ab/fdbbd91d8d82bf1a723ba88ec3e3d76c022b53c391b0c13cad441cdb8f9e/lxml-5.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b12cb6527599808ada9eb2cd6e0e7d3d8f13fe7bbb01c6311255a15ded4c7ab4", size = 3487862, upload-time = "2025-04-23T01:49:36.296Z" },
]
[[package]]
name = "markupsafe"
version = "3.0.2"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/04/90/d08277ce111dd22f77149fd1a5d4653eeb3b3eaacbdfcbae5afb2600eebd/MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8", size = 14357 },
- { url = "https://files.pythonhosted.org/packages/04/e1/6e2194baeae0bca1fae6629dc0cbbb968d4d941469cbab11a3872edff374/MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158", size = 12393 },
- { url = "https://files.pythonhosted.org/packages/1d/69/35fa85a8ece0a437493dc61ce0bb6d459dcba482c34197e3efc829aa357f/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579", size = 21732 },
- { url = "https://files.pythonhosted.org/packages/22/35/137da042dfb4720b638d2937c38a9c2df83fe32d20e8c8f3185dbfef05f7/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d", size = 20866 },
- { url = "https://files.pythonhosted.org/packages/29/28/6d029a903727a1b62edb51863232152fd335d602def598dade38996887f0/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb", size = 20964 },
- { url = "https://files.pythonhosted.org/packages/cc/cd/07438f95f83e8bc028279909d9c9bd39e24149b0d60053a97b2bc4f8aa51/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b", size = 21977 },
- { url = "https://files.pythonhosted.org/packages/29/01/84b57395b4cc062f9c4c55ce0df7d3108ca32397299d9df00fedd9117d3d/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c", size = 21366 },
- { url = "https://files.pythonhosted.org/packages/bd/6e/61ebf08d8940553afff20d1fb1ba7294b6f8d279df9fd0c0db911b4bbcfd/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171", size = 21091 },
- { url = "https://files.pythonhosted.org/packages/11/23/ffbf53694e8c94ebd1e7e491de185124277964344733c45481f32ede2499/MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50", size = 15065 },
- { url = "https://files.pythonhosted.org/packages/44/06/e7175d06dd6e9172d4a69a72592cb3f7a996a9c396eee29082826449bbc3/MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a", size = 15514 },
- { url = "https://files.pythonhosted.org/packages/6b/28/bbf83e3f76936960b850435576dd5e67034e200469571be53f69174a2dfd/MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", size = 14353 },
- { url = "https://files.pythonhosted.org/packages/6c/30/316d194b093cde57d448a4c3209f22e3046c5bb2fb0820b118292b334be7/MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93", size = 12392 },
- { url = "https://files.pythonhosted.org/packages/f2/96/9cdafba8445d3a53cae530aaf83c38ec64c4d5427d975c974084af5bc5d2/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", size = 23984 },
- { url = "https://files.pythonhosted.org/packages/f1/a4/aefb044a2cd8d7334c8a47d3fb2c9f328ac48cb349468cc31c20b539305f/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84", size = 23120 },
- { url = "https://files.pythonhosted.org/packages/8d/21/5e4851379f88f3fad1de30361db501300d4f07bcad047d3cb0449fc51f8c/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca", size = 23032 },
- { url = "https://files.pythonhosted.org/packages/00/7b/e92c64e079b2d0d7ddf69899c98842f3f9a60a1ae72657c89ce2655c999d/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798", size = 24057 },
- { url = "https://files.pythonhosted.org/packages/f9/ac/46f960ca323037caa0a10662ef97d0a4728e890334fc156b9f9e52bcc4ca/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e", size = 23359 },
- { url = "https://files.pythonhosted.org/packages/69/84/83439e16197337b8b14b6a5b9c2105fff81d42c2a7c5b58ac7b62ee2c3b1/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4", size = 23306 },
- { url = "https://files.pythonhosted.org/packages/9a/34/a15aa69f01e2181ed8d2b685c0d2f6655d5cca2c4db0ddea775e631918cd/MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d", size = 15094 },
- { url = "https://files.pythonhosted.org/packages/da/b8/3a3bd761922d416f3dc5d00bfbed11f66b1ab89a0c2b6e887240a30b0f6b/MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b", size = 15521 },
- { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274 },
- { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348 },
- { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149 },
- { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118 },
- { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993 },
- { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178 },
- { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319 },
- { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352 },
- { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097 },
- { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601 },
+sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537, upload-time = "2024-10-18T15:21:54.129Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/04/90/d08277ce111dd22f77149fd1a5d4653eeb3b3eaacbdfcbae5afb2600eebd/MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8", size = 14357, upload-time = "2024-10-18T15:20:51.44Z" },
+ { url = "https://files.pythonhosted.org/packages/04/e1/6e2194baeae0bca1fae6629dc0cbbb968d4d941469cbab11a3872edff374/MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158", size = 12393, upload-time = "2024-10-18T15:20:52.426Z" },
+ { url = "https://files.pythonhosted.org/packages/1d/69/35fa85a8ece0a437493dc61ce0bb6d459dcba482c34197e3efc829aa357f/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579", size = 21732, upload-time = "2024-10-18T15:20:53.578Z" },
+ { url = "https://files.pythonhosted.org/packages/22/35/137da042dfb4720b638d2937c38a9c2df83fe32d20e8c8f3185dbfef05f7/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d", size = 20866, upload-time = "2024-10-18T15:20:55.06Z" },
+ { url = "https://files.pythonhosted.org/packages/29/28/6d029a903727a1b62edb51863232152fd335d602def598dade38996887f0/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb", size = 20964, upload-time = "2024-10-18T15:20:55.906Z" },
+ { url = "https://files.pythonhosted.org/packages/cc/cd/07438f95f83e8bc028279909d9c9bd39e24149b0d60053a97b2bc4f8aa51/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b", size = 21977, upload-time = "2024-10-18T15:20:57.189Z" },
+ { url = "https://files.pythonhosted.org/packages/29/01/84b57395b4cc062f9c4c55ce0df7d3108ca32397299d9df00fedd9117d3d/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c", size = 21366, upload-time = "2024-10-18T15:20:58.235Z" },
+ { url = "https://files.pythonhosted.org/packages/bd/6e/61ebf08d8940553afff20d1fb1ba7294b6f8d279df9fd0c0db911b4bbcfd/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171", size = 21091, upload-time = "2024-10-18T15:20:59.235Z" },
+ { url = "https://files.pythonhosted.org/packages/11/23/ffbf53694e8c94ebd1e7e491de185124277964344733c45481f32ede2499/MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50", size = 15065, upload-time = "2024-10-18T15:21:00.307Z" },
+ { url = "https://files.pythonhosted.org/packages/44/06/e7175d06dd6e9172d4a69a72592cb3f7a996a9c396eee29082826449bbc3/MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a", size = 15514, upload-time = "2024-10-18T15:21:01.122Z" },
+ { url = "https://files.pythonhosted.org/packages/6b/28/bbf83e3f76936960b850435576dd5e67034e200469571be53f69174a2dfd/MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", size = 14353, upload-time = "2024-10-18T15:21:02.187Z" },
+ { url = "https://files.pythonhosted.org/packages/6c/30/316d194b093cde57d448a4c3209f22e3046c5bb2fb0820b118292b334be7/MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93", size = 12392, upload-time = "2024-10-18T15:21:02.941Z" },
+ { url = "https://files.pythonhosted.org/packages/f2/96/9cdafba8445d3a53cae530aaf83c38ec64c4d5427d975c974084af5bc5d2/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", size = 23984, upload-time = "2024-10-18T15:21:03.953Z" },
+ { url = "https://files.pythonhosted.org/packages/f1/a4/aefb044a2cd8d7334c8a47d3fb2c9f328ac48cb349468cc31c20b539305f/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84", size = 23120, upload-time = "2024-10-18T15:21:06.495Z" },
+ { url = "https://files.pythonhosted.org/packages/8d/21/5e4851379f88f3fad1de30361db501300d4f07bcad047d3cb0449fc51f8c/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca", size = 23032, upload-time = "2024-10-18T15:21:07.295Z" },
+ { url = "https://files.pythonhosted.org/packages/00/7b/e92c64e079b2d0d7ddf69899c98842f3f9a60a1ae72657c89ce2655c999d/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798", size = 24057, upload-time = "2024-10-18T15:21:08.073Z" },
+ { url = "https://files.pythonhosted.org/packages/f9/ac/46f960ca323037caa0a10662ef97d0a4728e890334fc156b9f9e52bcc4ca/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e", size = 23359, upload-time = "2024-10-18T15:21:09.318Z" },
+ { url = "https://files.pythonhosted.org/packages/69/84/83439e16197337b8b14b6a5b9c2105fff81d42c2a7c5b58ac7b62ee2c3b1/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4", size = 23306, upload-time = "2024-10-18T15:21:10.185Z" },
+ { url = "https://files.pythonhosted.org/packages/9a/34/a15aa69f01e2181ed8d2b685c0d2f6655d5cca2c4db0ddea775e631918cd/MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d", size = 15094, upload-time = "2024-10-18T15:21:11.005Z" },
+ { url = "https://files.pythonhosted.org/packages/da/b8/3a3bd761922d416f3dc5d00bfbed11f66b1ab89a0c2b6e887240a30b0f6b/MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b", size = 15521, upload-time = "2024-10-18T15:21:12.911Z" },
+ { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274, upload-time = "2024-10-18T15:21:13.777Z" },
+ { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348, upload-time = "2024-10-18T15:21:14.822Z" },
+ { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149, upload-time = "2024-10-18T15:21:15.642Z" },
+ { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118, upload-time = "2024-10-18T15:21:17.133Z" },
+ { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993, upload-time = "2024-10-18T15:21:18.064Z" },
+ { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178, upload-time = "2024-10-18T15:21:18.859Z" },
+ { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319, upload-time = "2024-10-18T15:21:19.671Z" },
+ { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352, upload-time = "2024-10-18T15:21:20.971Z" },
+ { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097, upload-time = "2024-10-18T15:21:22.646Z" },
+ { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601, upload-time = "2024-10-18T15:21:23.499Z" },
]
[[package]]
@@ -489,54 +554,54 @@ source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "traitlets" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/99/5b/a36a337438a14116b16480db471ad061c36c3694df7c2084a0da7ba538b7/matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", size = 8159 }
+sdist = { url = "https://files.pythonhosted.org/packages/99/5b/a36a337438a14116b16480db471ad061c36c3694df7c2084a0da7ba538b7/matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", size = 8159, upload-time = "2024-04-15T13:44:44.803Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899 },
+ { url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899, upload-time = "2024-04-15T13:44:43.265Z" },
]
[[package]]
name = "mypy-extensions"
version = "1.0.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/98/a4/1ab47638b92648243faf97a5aeb6ea83059cc3624972ab6b8d2316078d3f/mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782", size = 4433 }
+sdist = { url = "https://files.pythonhosted.org/packages/98/a4/1ab47638b92648243faf97a5aeb6ea83059cc3624972ab6b8d2316078d3f/mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782", size = 4433, upload-time = "2023-02-04T12:11:27.157Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/2a/e2/5d3f6ada4297caebe1a2add3b126fe800c96f56dbe5d1988a2cbe0b267aa/mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d", size = 4695 },
+ { url = "https://files.pythonhosted.org/packages/2a/e2/5d3f6ada4297caebe1a2add3b126fe800c96f56dbe5d1988a2cbe0b267aa/mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d", size = 4695, upload-time = "2023-02-04T12:11:25.002Z" },
]
[[package]]
name = "nodeenv"
version = "1.9.1"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/43/16/fc88b08840de0e0a72a2f9d8c6bae36be573e475a6326ae854bcc549fc45/nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f", size = 47437 }
+sdist = { url = "https://files.pythonhosted.org/packages/43/16/fc88b08840de0e0a72a2f9d8c6bae36be573e475a6326ae854bcc549fc45/nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f", size = 47437, upload-time = "2024-06-04T18:44:11.171Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9", size = 22314 },
+ { url = "https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9", size = 22314, upload-time = "2024-06-04T18:44:08.352Z" },
]
[[package]]
name = "packaging"
version = "24.2"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950 }
+sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950, upload-time = "2024-11-08T09:47:47.202Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451 },
+ { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451, upload-time = "2024-11-08T09:47:44.722Z" },
]
[[package]]
name = "parso"
version = "0.8.4"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/66/94/68e2e17afaa9169cf6412ab0f28623903be73d1b32e208d9e8e541bb086d/parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d", size = 400609 }
+sdist = { url = "https://files.pythonhosted.org/packages/66/94/68e2e17afaa9169cf6412ab0f28623903be73d1b32e208d9e8e541bb086d/parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d", size = 400609, upload-time = "2024-04-05T09:43:55.897Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/c6/ac/dac4a63f978e4dcb3c6d3a78c4d8e0192a113d288502a1216950c41b1027/parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18", size = 103650 },
+ { url = "https://files.pythonhosted.org/packages/c6/ac/dac4a63f978e4dcb3c6d3a78c4d8e0192a113d288502a1216950c41b1027/parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18", size = 103650, upload-time = "2024-04-05T09:43:53.299Z" },
]
[[package]]
name = "pathspec"
version = "0.12.1"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712", size = 51043 }
+sdist = { url = "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712", size = 51043, upload-time = "2023-12-10T22:30:45Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191 },
+ { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191, upload-time = "2023-12-10T22:30:43.14Z" },
]
[[package]]
@@ -546,27 +611,27 @@ source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "ptyprocess" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450 }
+sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450, upload-time = "2023-11-25T09:07:26.339Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772 },
+ { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772, upload-time = "2023-11-25T06:56:14.81Z" },
]
[[package]]
name = "platformdirs"
version = "4.3.6"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/13/fc/128cc9cb8f03208bdbf93d3aa862e16d376844a14f9a0ce5cf4507372de4/platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907", size = 21302 }
+sdist = { url = "https://files.pythonhosted.org/packages/13/fc/128cc9cb8f03208bdbf93d3aa862e16d376844a14f9a0ce5cf4507372de4/platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907", size = 21302, upload-time = "2024-09-17T19:06:50.688Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb", size = 18439 },
+ { url = "https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb", size = 18439, upload-time = "2024-09-17T19:06:49.212Z" },
]
[[package]]
name = "pluggy"
version = "1.5.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/96/2d/02d4312c973c6050a18b314a5ad0b3210edb65a906f868e31c111dede4a6/pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1", size = 67955 }
+sdist = { url = "https://files.pythonhosted.org/packages/96/2d/02d4312c973c6050a18b314a5ad0b3210edb65a906f868e31c111dede4a6/pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1", size = 67955, upload-time = "2024-04-20T21:34:42.531Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669", size = 20556 },
+ { url = "https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669", size = 20556, upload-time = "2024-04-20T21:34:40.434Z" },
]
[[package]]
@@ -580,9 +645,9 @@ dependencies = [
{ name = "pyyaml" },
{ name = "virtualenv" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/2a/13/b62d075317d8686071eb843f0bb1f195eb332f48869d3c31a4c6f1e063ac/pre_commit-4.1.0.tar.gz", hash = "sha256:ae3f018575a588e30dfddfab9a05448bfbd6b73d78709617b5a2b853549716d4", size = 193330 }
+sdist = { url = "https://files.pythonhosted.org/packages/2a/13/b62d075317d8686071eb843f0bb1f195eb332f48869d3c31a4c6f1e063ac/pre_commit-4.1.0.tar.gz", hash = "sha256:ae3f018575a588e30dfddfab9a05448bfbd6b73d78709617b5a2b853549716d4", size = 193330, upload-time = "2025-01-20T18:31:48.681Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/43/b3/df14c580d82b9627d173ceea305ba898dca135feb360b6d84019d0803d3b/pre_commit-4.1.0-py2.py3-none-any.whl", hash = "sha256:d29e7cb346295bcc1cc75fc3e92e343495e3ea0196c9ec6ba53f49f10ab6ae7b", size = 220560 },
+ { url = "https://files.pythonhosted.org/packages/43/b3/df14c580d82b9627d173ceea305ba898dca135feb360b6d84019d0803d3b/pre_commit-4.1.0-py2.py3-none-any.whl", hash = "sha256:d29e7cb346295bcc1cc75fc3e92e343495e3ea0196c9ec6ba53f49f10ab6ae7b", size = 220560, upload-time = "2025-01-20T18:31:47.319Z" },
]
[[package]]
@@ -592,27 +657,27 @@ source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "wcwidth" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/a1/e1/bd15cb8ffdcfeeb2bdc215de3c3cffca11408d829e4b8416dcfe71ba8854/prompt_toolkit-3.0.50.tar.gz", hash = "sha256:544748f3860a2623ca5cd6d2795e7a14f3d0e1c3c9728359013f79877fc89bab", size = 429087 }
+sdist = { url = "https://files.pythonhosted.org/packages/a1/e1/bd15cb8ffdcfeeb2bdc215de3c3cffca11408d829e4b8416dcfe71ba8854/prompt_toolkit-3.0.50.tar.gz", hash = "sha256:544748f3860a2623ca5cd6d2795e7a14f3d0e1c3c9728359013f79877fc89bab", size = 429087, upload-time = "2025-01-20T15:55:35.072Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/e4/ea/d836f008d33151c7a1f62caf3d8dd782e4d15f6a43897f64480c2b8de2ad/prompt_toolkit-3.0.50-py3-none-any.whl", hash = "sha256:9b6427eb19e479d98acff65196a307c555eb567989e6d88ebbb1b509d9779198", size = 387816 },
+ { url = "https://files.pythonhosted.org/packages/e4/ea/d836f008d33151c7a1f62caf3d8dd782e4d15f6a43897f64480c2b8de2ad/prompt_toolkit-3.0.50-py3-none-any.whl", hash = "sha256:9b6427eb19e479d98acff65196a307c555eb567989e6d88ebbb1b509d9779198", size = 387816, upload-time = "2025-01-20T15:55:29.98Z" },
]
[[package]]
name = "ptyprocess"
version = "0.7.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762 }
+sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762, upload-time = "2020-12-28T15:15:30.155Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993 },
+ { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993, upload-time = "2020-12-28T15:15:28.35Z" },
]
[[package]]
name = "pure-eval"
version = "0.2.3"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752 }
+sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752, upload-time = "2024-07-21T12:58:21.801Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842 },
+ { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842, upload-time = "2024-07-21T12:58:20.04Z" },
]
[[package]]
@@ -624,9 +689,9 @@ dependencies = [
{ name = "pydantic-core" },
{ name = "typing-extensions" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/b7/ae/d5220c5c52b158b1de7ca89fc5edb72f304a70a4c540c84c8844bf4008de/pydantic-2.10.6.tar.gz", hash = "sha256:ca5daa827cce33de7a42be142548b0096bf05a7e7b365aebfa5f8eeec7128236", size = 761681 }
+sdist = { url = "https://files.pythonhosted.org/packages/b7/ae/d5220c5c52b158b1de7ca89fc5edb72f304a70a4c540c84c8844bf4008de/pydantic-2.10.6.tar.gz", hash = "sha256:ca5daa827cce33de7a42be142548b0096bf05a7e7b365aebfa5f8eeec7128236", size = 761681, upload-time = "2025-01-24T01:42:12.693Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/f4/3c/8cc1cc84deffa6e25d2d0c688ebb80635dfdbf1dbea3e30c541c8cf4d860/pydantic-2.10.6-py3-none-any.whl", hash = "sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584", size = 431696 },
+ { url = "https://files.pythonhosted.org/packages/f4/3c/8cc1cc84deffa6e25d2d0c688ebb80635dfdbf1dbea3e30c541c8cf4d860/pydantic-2.10.6-py3-none-any.whl", hash = "sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584", size = 431696, upload-time = "2025-01-24T01:42:10.371Z" },
]
[package.optional-dependencies]
@@ -641,76 +706,76 @@ source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "typing-extensions" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/fc/01/f3e5ac5e7c25833db5eb555f7b7ab24cd6f8c322d3a3ad2d67a952dc0abc/pydantic_core-2.27.2.tar.gz", hash = "sha256:eb026e5a4c1fee05726072337ff51d1efb6f59090b7da90d30ea58625b1ffb39", size = 413443 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/3a/bc/fed5f74b5d802cf9a03e83f60f18864e90e3aed7223adaca5ffb7a8d8d64/pydantic_core-2.27.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2d367ca20b2f14095a8f4fa1210f5a7b78b8a20009ecced6b12818f455b1e9fa", size = 1895938 },
- { url = "https://files.pythonhosted.org/packages/71/2a/185aff24ce844e39abb8dd680f4e959f0006944f4a8a0ea372d9f9ae2e53/pydantic_core-2.27.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:491a2b73db93fab69731eaee494f320faa4e093dbed776be1a829c2eb222c34c", size = 1815684 },
- { url = "https://files.pythonhosted.org/packages/c3/43/fafabd3d94d159d4f1ed62e383e264f146a17dd4d48453319fd782e7979e/pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7969e133a6f183be60e9f6f56bfae753585680f3b7307a8e555a948d443cc05a", size = 1829169 },
- { url = "https://files.pythonhosted.org/packages/a2/d1/f2dfe1a2a637ce6800b799aa086d079998959f6f1215eb4497966efd2274/pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3de9961f2a346257caf0aa508a4da705467f53778e9ef6fe744c038119737ef5", size = 1867227 },
- { url = "https://files.pythonhosted.org/packages/7d/39/e06fcbcc1c785daa3160ccf6c1c38fea31f5754b756e34b65f74e99780b5/pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e2bb4d3e5873c37bb3dd58714d4cd0b0e6238cebc4177ac8fe878f8b3aa8e74c", size = 2037695 },
- { url = "https://files.pythonhosted.org/packages/7a/67/61291ee98e07f0650eb756d44998214231f50751ba7e13f4f325d95249ab/pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:280d219beebb0752699480fe8f1dc61ab6615c2046d76b7ab7ee38858de0a4e7", size = 2741662 },
- { url = "https://files.pythonhosted.org/packages/32/90/3b15e31b88ca39e9e626630b4c4a1f5a0dfd09076366f4219429e6786076/pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47956ae78b6422cbd46f772f1746799cbb862de838fd8d1fbd34a82e05b0983a", size = 1993370 },
- { url = "https://files.pythonhosted.org/packages/ff/83/c06d333ee3a67e2e13e07794995c1535565132940715931c1c43bfc85b11/pydantic_core-2.27.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:14d4a5c49d2f009d62a2a7140d3064f686d17a5d1a268bc641954ba181880236", size = 1996813 },
- { url = "https://files.pythonhosted.org/packages/7c/f7/89be1c8deb6e22618a74f0ca0d933fdcb8baa254753b26b25ad3acff8f74/pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:337b443af21d488716f8d0b6164de833e788aa6bd7e3a39c005febc1284f4962", size = 2005287 },
- { url = "https://files.pythonhosted.org/packages/b7/7d/8eb3e23206c00ef7feee17b83a4ffa0a623eb1a9d382e56e4aa46fd15ff2/pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:03d0f86ea3184a12f41a2d23f7ccb79cdb5a18e06993f8a45baa8dfec746f0e9", size = 2128414 },
- { url = "https://files.pythonhosted.org/packages/4e/99/fe80f3ff8dd71a3ea15763878d464476e6cb0a2db95ff1c5c554133b6b83/pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7041c36f5680c6e0f08d922aed302e98b3745d97fe1589db0a3eebf6624523af", size = 2155301 },
- { url = "https://files.pythonhosted.org/packages/2b/a3/e50460b9a5789ca1451b70d4f52546fa9e2b420ba3bfa6100105c0559238/pydantic_core-2.27.2-cp310-cp310-win32.whl", hash = "sha256:50a68f3e3819077be2c98110c1f9dcb3817e93f267ba80a2c05bb4f8799e2ff4", size = 1816685 },
- { url = "https://files.pythonhosted.org/packages/57/4c/a8838731cb0f2c2a39d3535376466de6049034d7b239c0202a64aaa05533/pydantic_core-2.27.2-cp310-cp310-win_amd64.whl", hash = "sha256:e0fd26b16394ead34a424eecf8a31a1f5137094cabe84a1bcb10fa6ba39d3d31", size = 1982876 },
- { url = "https://files.pythonhosted.org/packages/c2/89/f3450af9d09d44eea1f2c369f49e8f181d742f28220f88cc4dfaae91ea6e/pydantic_core-2.27.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8e10c99ef58cfdf2a66fc15d66b16c4a04f62bca39db589ae8cba08bc55331bc", size = 1893421 },
- { url = "https://files.pythonhosted.org/packages/9e/e3/71fe85af2021f3f386da42d291412e5baf6ce7716bd7101ea49c810eda90/pydantic_core-2.27.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:26f32e0adf166a84d0cb63be85c562ca8a6fa8de28e5f0d92250c6b7e9e2aff7", size = 1814998 },
- { url = "https://files.pythonhosted.org/packages/a6/3c/724039e0d848fd69dbf5806894e26479577316c6f0f112bacaf67aa889ac/pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c19d1ea0673cd13cc2f872f6c9ab42acc4e4f492a7ca9d3795ce2b112dd7e15", size = 1826167 },
- { url = "https://files.pythonhosted.org/packages/2b/5b/1b29e8c1fb5f3199a9a57c1452004ff39f494bbe9bdbe9a81e18172e40d3/pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e68c4446fe0810e959cdff46ab0a41ce2f2c86d227d96dc3847af0ba7def306", size = 1865071 },
- { url = "https://files.pythonhosted.org/packages/89/6c/3985203863d76bb7d7266e36970d7e3b6385148c18a68cc8915fd8c84d57/pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d9640b0059ff4f14d1f37321b94061c6db164fbe49b334b31643e0528d100d99", size = 2036244 },
- { url = "https://files.pythonhosted.org/packages/0e/41/f15316858a246b5d723f7d7f599f79e37493b2e84bfc789e58d88c209f8a/pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40d02e7d45c9f8af700f3452f329ead92da4c5f4317ca9b896de7ce7199ea459", size = 2737470 },
- { url = "https://files.pythonhosted.org/packages/a8/7c/b860618c25678bbd6d1d99dbdfdf0510ccb50790099b963ff78a124b754f/pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c1fd185014191700554795c99b347d64f2bb637966c4cfc16998a0ca700d048", size = 1992291 },
- { url = "https://files.pythonhosted.org/packages/bf/73/42c3742a391eccbeab39f15213ecda3104ae8682ba3c0c28069fbcb8c10d/pydantic_core-2.27.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d81d2068e1c1228a565af076598f9e7451712700b673de8f502f0334f281387d", size = 1994613 },
- { url = "https://files.pythonhosted.org/packages/94/7a/941e89096d1175d56f59340f3a8ebaf20762fef222c298ea96d36a6328c5/pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1a4207639fb02ec2dbb76227d7c751a20b1a6b4bc52850568e52260cae64ca3b", size = 2002355 },
- { url = "https://files.pythonhosted.org/packages/6e/95/2359937a73d49e336a5a19848713555605d4d8d6940c3ec6c6c0ca4dcf25/pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:3de3ce3c9ddc8bbd88f6e0e304dea0e66d843ec9de1b0042b0911c1663ffd474", size = 2126661 },
- { url = "https://files.pythonhosted.org/packages/2b/4c/ca02b7bdb6012a1adef21a50625b14f43ed4d11f1fc237f9d7490aa5078c/pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:30c5f68ded0c36466acede341551106821043e9afaad516adfb6e8fa80a4e6a6", size = 2153261 },
- { url = "https://files.pythonhosted.org/packages/72/9d/a241db83f973049a1092a079272ffe2e3e82e98561ef6214ab53fe53b1c7/pydantic_core-2.27.2-cp311-cp311-win32.whl", hash = "sha256:c70c26d2c99f78b125a3459f8afe1aed4d9687c24fd677c6a4436bc042e50d6c", size = 1812361 },
- { url = "https://files.pythonhosted.org/packages/e8/ef/013f07248041b74abd48a385e2110aa3a9bbfef0fbd97d4e6d07d2f5b89a/pydantic_core-2.27.2-cp311-cp311-win_amd64.whl", hash = "sha256:08e125dbdc505fa69ca7d9c499639ab6407cfa909214d500897d02afb816e7cc", size = 1982484 },
- { url = "https://files.pythonhosted.org/packages/10/1c/16b3a3e3398fd29dca77cea0a1d998d6bde3902fa2706985191e2313cc76/pydantic_core-2.27.2-cp311-cp311-win_arm64.whl", hash = "sha256:26f0d68d4b235a2bae0c3fc585c585b4ecc51382db0e3ba402a22cbc440915e4", size = 1867102 },
- { url = "https://files.pythonhosted.org/packages/d6/74/51c8a5482ca447871c93e142d9d4a92ead74de6c8dc5e66733e22c9bba89/pydantic_core-2.27.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9e0c8cfefa0ef83b4da9588448b6d8d2a2bf1a53c3f1ae5fca39eb3061e2f0b0", size = 1893127 },
- { url = "https://files.pythonhosted.org/packages/d3/f3/c97e80721735868313c58b89d2de85fa80fe8dfeeed84dc51598b92a135e/pydantic_core-2.27.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:83097677b8e3bd7eaa6775720ec8e0405f1575015a463285a92bfdfe254529ef", size = 1811340 },
- { url = "https://files.pythonhosted.org/packages/9e/91/840ec1375e686dbae1bd80a9e46c26a1e0083e1186abc610efa3d9a36180/pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:172fce187655fece0c90d90a678424b013f8fbb0ca8b036ac266749c09438cb7", size = 1822900 },
- { url = "https://files.pythonhosted.org/packages/f6/31/4240bc96025035500c18adc149aa6ffdf1a0062a4b525c932065ceb4d868/pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:519f29f5213271eeeeb3093f662ba2fd512b91c5f188f3bb7b27bc5973816934", size = 1869177 },
- { url = "https://files.pythonhosted.org/packages/fa/20/02fbaadb7808be578317015c462655c317a77a7c8f0ef274bc016a784c54/pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05e3a55d124407fffba0dd6b0c0cd056d10e983ceb4e5dbd10dda135c31071d6", size = 2038046 },
- { url = "https://files.pythonhosted.org/packages/06/86/7f306b904e6c9eccf0668248b3f272090e49c275bc488a7b88b0823444a4/pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c3ed807c7b91de05e63930188f19e921d1fe90de6b4f5cd43ee7fcc3525cb8c", size = 2685386 },
- { url = "https://files.pythonhosted.org/packages/8d/f0/49129b27c43396581a635d8710dae54a791b17dfc50c70164866bbf865e3/pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fb4aadc0b9a0c063206846d603b92030eb6f03069151a625667f982887153e2", size = 1997060 },
- { url = "https://files.pythonhosted.org/packages/0d/0f/943b4af7cd416c477fd40b187036c4f89b416a33d3cc0ab7b82708a667aa/pydantic_core-2.27.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:28ccb213807e037460326424ceb8b5245acb88f32f3d2777427476e1b32c48c4", size = 2004870 },
- { url = "https://files.pythonhosted.org/packages/35/40/aea70b5b1a63911c53a4c8117c0a828d6790483f858041f47bab0b779f44/pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:de3cd1899e2c279b140adde9357c4495ed9d47131b4a4eaff9052f23398076b3", size = 1999822 },
- { url = "https://files.pythonhosted.org/packages/f2/b3/807b94fd337d58effc5498fd1a7a4d9d59af4133e83e32ae39a96fddec9d/pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:220f892729375e2d736b97d0e51466252ad84c51857d4d15f5e9692f9ef12be4", size = 2130364 },
- { url = "https://files.pythonhosted.org/packages/fc/df/791c827cd4ee6efd59248dca9369fb35e80a9484462c33c6649a8d02b565/pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a0fcd29cd6b4e74fe8ddd2c90330fd8edf2e30cb52acda47f06dd615ae72da57", size = 2158303 },
- { url = "https://files.pythonhosted.org/packages/9b/67/4e197c300976af185b7cef4c02203e175fb127e414125916bf1128b639a9/pydantic_core-2.27.2-cp312-cp312-win32.whl", hash = "sha256:1e2cb691ed9834cd6a8be61228471d0a503731abfb42f82458ff27be7b2186fc", size = 1834064 },
- { url = "https://files.pythonhosted.org/packages/1f/ea/cd7209a889163b8dcca139fe32b9687dd05249161a3edda62860430457a5/pydantic_core-2.27.2-cp312-cp312-win_amd64.whl", hash = "sha256:cc3f1a99a4f4f9dd1de4fe0312c114e740b5ddead65bb4102884b384c15d8bc9", size = 1989046 },
- { url = "https://files.pythonhosted.org/packages/bc/49/c54baab2f4658c26ac633d798dab66b4c3a9bbf47cff5284e9c182f4137a/pydantic_core-2.27.2-cp312-cp312-win_arm64.whl", hash = "sha256:3911ac9284cd8a1792d3cb26a2da18f3ca26c6908cc434a18f730dc0db7bfa3b", size = 1885092 },
- { url = "https://files.pythonhosted.org/packages/46/72/af70981a341500419e67d5cb45abe552a7c74b66326ac8877588488da1ac/pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:2bf14caea37e91198329b828eae1618c068dfb8ef17bb33287a7ad4b61ac314e", size = 1891159 },
- { url = "https://files.pythonhosted.org/packages/ad/3d/c5913cccdef93e0a6a95c2d057d2c2cba347815c845cda79ddd3c0f5e17d/pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b0cb791f5b45307caae8810c2023a184c74605ec3bcbb67d13846c28ff731ff8", size = 1768331 },
- { url = "https://files.pythonhosted.org/packages/f6/f0/a3ae8fbee269e4934f14e2e0e00928f9346c5943174f2811193113e58252/pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:688d3fd9fcb71f41c4c015c023d12a79d1c4c0732ec9eb35d96e3388a120dcf3", size = 1822467 },
- { url = "https://files.pythonhosted.org/packages/d7/7a/7bbf241a04e9f9ea24cd5874354a83526d639b02674648af3f350554276c/pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d591580c34f4d731592f0e9fe40f9cc1b430d297eecc70b962e93c5c668f15f", size = 1979797 },
- { url = "https://files.pythonhosted.org/packages/4f/5f/4784c6107731f89e0005a92ecb8a2efeafdb55eb992b8e9d0a2be5199335/pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:82f986faf4e644ffc189a7f1aafc86e46ef70372bb153e7001e8afccc6e54133", size = 1987839 },
- { url = "https://files.pythonhosted.org/packages/6d/a7/61246562b651dff00de86a5f01b6e4befb518df314c54dec187a78d81c84/pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:bec317a27290e2537f922639cafd54990551725fc844249e64c523301d0822fc", size = 1998861 },
- { url = "https://files.pythonhosted.org/packages/86/aa/837821ecf0c022bbb74ca132e117c358321e72e7f9702d1b6a03758545e2/pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:0296abcb83a797db256b773f45773da397da75a08f5fcaef41f2044adec05f50", size = 2116582 },
- { url = "https://files.pythonhosted.org/packages/81/b0/5e74656e95623cbaa0a6278d16cf15e10a51f6002e3ec126541e95c29ea3/pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:0d75070718e369e452075a6017fbf187f788e17ed67a3abd47fa934d001863d9", size = 2151985 },
- { url = "https://files.pythonhosted.org/packages/63/37/3e32eeb2a451fddaa3898e2163746b0cffbbdbb4740d38372db0490d67f3/pydantic_core-2.27.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7e17b560be3c98a8e3aa66ce828bdebb9e9ac6ad5466fba92eb74c4c95cb1151", size = 2004715 },
+sdist = { url = "https://files.pythonhosted.org/packages/fc/01/f3e5ac5e7c25833db5eb555f7b7ab24cd6f8c322d3a3ad2d67a952dc0abc/pydantic_core-2.27.2.tar.gz", hash = "sha256:eb026e5a4c1fee05726072337ff51d1efb6f59090b7da90d30ea58625b1ffb39", size = 413443, upload-time = "2024-12-18T11:31:54.917Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/3a/bc/fed5f74b5d802cf9a03e83f60f18864e90e3aed7223adaca5ffb7a8d8d64/pydantic_core-2.27.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2d367ca20b2f14095a8f4fa1210f5a7b78b8a20009ecced6b12818f455b1e9fa", size = 1895938, upload-time = "2024-12-18T11:27:14.406Z" },
+ { url = "https://files.pythonhosted.org/packages/71/2a/185aff24ce844e39abb8dd680f4e959f0006944f4a8a0ea372d9f9ae2e53/pydantic_core-2.27.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:491a2b73db93fab69731eaee494f320faa4e093dbed776be1a829c2eb222c34c", size = 1815684, upload-time = "2024-12-18T11:27:16.489Z" },
+ { url = "https://files.pythonhosted.org/packages/c3/43/fafabd3d94d159d4f1ed62e383e264f146a17dd4d48453319fd782e7979e/pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7969e133a6f183be60e9f6f56bfae753585680f3b7307a8e555a948d443cc05a", size = 1829169, upload-time = "2024-12-18T11:27:22.16Z" },
+ { url = "https://files.pythonhosted.org/packages/a2/d1/f2dfe1a2a637ce6800b799aa086d079998959f6f1215eb4497966efd2274/pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3de9961f2a346257caf0aa508a4da705467f53778e9ef6fe744c038119737ef5", size = 1867227, upload-time = "2024-12-18T11:27:25.097Z" },
+ { url = "https://files.pythonhosted.org/packages/7d/39/e06fcbcc1c785daa3160ccf6c1c38fea31f5754b756e34b65f74e99780b5/pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e2bb4d3e5873c37bb3dd58714d4cd0b0e6238cebc4177ac8fe878f8b3aa8e74c", size = 2037695, upload-time = "2024-12-18T11:27:28.656Z" },
+ { url = "https://files.pythonhosted.org/packages/7a/67/61291ee98e07f0650eb756d44998214231f50751ba7e13f4f325d95249ab/pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:280d219beebb0752699480fe8f1dc61ab6615c2046d76b7ab7ee38858de0a4e7", size = 2741662, upload-time = "2024-12-18T11:27:30.798Z" },
+ { url = "https://files.pythonhosted.org/packages/32/90/3b15e31b88ca39e9e626630b4c4a1f5a0dfd09076366f4219429e6786076/pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47956ae78b6422cbd46f772f1746799cbb862de838fd8d1fbd34a82e05b0983a", size = 1993370, upload-time = "2024-12-18T11:27:33.692Z" },
+ { url = "https://files.pythonhosted.org/packages/ff/83/c06d333ee3a67e2e13e07794995c1535565132940715931c1c43bfc85b11/pydantic_core-2.27.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:14d4a5c49d2f009d62a2a7140d3064f686d17a5d1a268bc641954ba181880236", size = 1996813, upload-time = "2024-12-18T11:27:37.111Z" },
+ { url = "https://files.pythonhosted.org/packages/7c/f7/89be1c8deb6e22618a74f0ca0d933fdcb8baa254753b26b25ad3acff8f74/pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:337b443af21d488716f8d0b6164de833e788aa6bd7e3a39c005febc1284f4962", size = 2005287, upload-time = "2024-12-18T11:27:40.566Z" },
+ { url = "https://files.pythonhosted.org/packages/b7/7d/8eb3e23206c00ef7feee17b83a4ffa0a623eb1a9d382e56e4aa46fd15ff2/pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:03d0f86ea3184a12f41a2d23f7ccb79cdb5a18e06993f8a45baa8dfec746f0e9", size = 2128414, upload-time = "2024-12-18T11:27:43.757Z" },
+ { url = "https://files.pythonhosted.org/packages/4e/99/fe80f3ff8dd71a3ea15763878d464476e6cb0a2db95ff1c5c554133b6b83/pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7041c36f5680c6e0f08d922aed302e98b3745d97fe1589db0a3eebf6624523af", size = 2155301, upload-time = "2024-12-18T11:27:47.36Z" },
+ { url = "https://files.pythonhosted.org/packages/2b/a3/e50460b9a5789ca1451b70d4f52546fa9e2b420ba3bfa6100105c0559238/pydantic_core-2.27.2-cp310-cp310-win32.whl", hash = "sha256:50a68f3e3819077be2c98110c1f9dcb3817e93f267ba80a2c05bb4f8799e2ff4", size = 1816685, upload-time = "2024-12-18T11:27:50.508Z" },
+ { url = "https://files.pythonhosted.org/packages/57/4c/a8838731cb0f2c2a39d3535376466de6049034d7b239c0202a64aaa05533/pydantic_core-2.27.2-cp310-cp310-win_amd64.whl", hash = "sha256:e0fd26b16394ead34a424eecf8a31a1f5137094cabe84a1bcb10fa6ba39d3d31", size = 1982876, upload-time = "2024-12-18T11:27:53.54Z" },
+ { url = "https://files.pythonhosted.org/packages/c2/89/f3450af9d09d44eea1f2c369f49e8f181d742f28220f88cc4dfaae91ea6e/pydantic_core-2.27.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8e10c99ef58cfdf2a66fc15d66b16c4a04f62bca39db589ae8cba08bc55331bc", size = 1893421, upload-time = "2024-12-18T11:27:55.409Z" },
+ { url = "https://files.pythonhosted.org/packages/9e/e3/71fe85af2021f3f386da42d291412e5baf6ce7716bd7101ea49c810eda90/pydantic_core-2.27.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:26f32e0adf166a84d0cb63be85c562ca8a6fa8de28e5f0d92250c6b7e9e2aff7", size = 1814998, upload-time = "2024-12-18T11:27:57.252Z" },
+ { url = "https://files.pythonhosted.org/packages/a6/3c/724039e0d848fd69dbf5806894e26479577316c6f0f112bacaf67aa889ac/pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c19d1ea0673cd13cc2f872f6c9ab42acc4e4f492a7ca9d3795ce2b112dd7e15", size = 1826167, upload-time = "2024-12-18T11:27:59.146Z" },
+ { url = "https://files.pythonhosted.org/packages/2b/5b/1b29e8c1fb5f3199a9a57c1452004ff39f494bbe9bdbe9a81e18172e40d3/pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e68c4446fe0810e959cdff46ab0a41ce2f2c86d227d96dc3847af0ba7def306", size = 1865071, upload-time = "2024-12-18T11:28:02.625Z" },
+ { url = "https://files.pythonhosted.org/packages/89/6c/3985203863d76bb7d7266e36970d7e3b6385148c18a68cc8915fd8c84d57/pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d9640b0059ff4f14d1f37321b94061c6db164fbe49b334b31643e0528d100d99", size = 2036244, upload-time = "2024-12-18T11:28:04.442Z" },
+ { url = "https://files.pythonhosted.org/packages/0e/41/f15316858a246b5d723f7d7f599f79e37493b2e84bfc789e58d88c209f8a/pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40d02e7d45c9f8af700f3452f329ead92da4c5f4317ca9b896de7ce7199ea459", size = 2737470, upload-time = "2024-12-18T11:28:07.679Z" },
+ { url = "https://files.pythonhosted.org/packages/a8/7c/b860618c25678bbd6d1d99dbdfdf0510ccb50790099b963ff78a124b754f/pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c1fd185014191700554795c99b347d64f2bb637966c4cfc16998a0ca700d048", size = 1992291, upload-time = "2024-12-18T11:28:10.297Z" },
+ { url = "https://files.pythonhosted.org/packages/bf/73/42c3742a391eccbeab39f15213ecda3104ae8682ba3c0c28069fbcb8c10d/pydantic_core-2.27.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d81d2068e1c1228a565af076598f9e7451712700b673de8f502f0334f281387d", size = 1994613, upload-time = "2024-12-18T11:28:13.362Z" },
+ { url = "https://files.pythonhosted.org/packages/94/7a/941e89096d1175d56f59340f3a8ebaf20762fef222c298ea96d36a6328c5/pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1a4207639fb02ec2dbb76227d7c751a20b1a6b4bc52850568e52260cae64ca3b", size = 2002355, upload-time = "2024-12-18T11:28:16.587Z" },
+ { url = "https://files.pythonhosted.org/packages/6e/95/2359937a73d49e336a5a19848713555605d4d8d6940c3ec6c6c0ca4dcf25/pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:3de3ce3c9ddc8bbd88f6e0e304dea0e66d843ec9de1b0042b0911c1663ffd474", size = 2126661, upload-time = "2024-12-18T11:28:18.407Z" },
+ { url = "https://files.pythonhosted.org/packages/2b/4c/ca02b7bdb6012a1adef21a50625b14f43ed4d11f1fc237f9d7490aa5078c/pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:30c5f68ded0c36466acede341551106821043e9afaad516adfb6e8fa80a4e6a6", size = 2153261, upload-time = "2024-12-18T11:28:21.471Z" },
+ { url = "https://files.pythonhosted.org/packages/72/9d/a241db83f973049a1092a079272ffe2e3e82e98561ef6214ab53fe53b1c7/pydantic_core-2.27.2-cp311-cp311-win32.whl", hash = "sha256:c70c26d2c99f78b125a3459f8afe1aed4d9687c24fd677c6a4436bc042e50d6c", size = 1812361, upload-time = "2024-12-18T11:28:23.53Z" },
+ { url = "https://files.pythonhosted.org/packages/e8/ef/013f07248041b74abd48a385e2110aa3a9bbfef0fbd97d4e6d07d2f5b89a/pydantic_core-2.27.2-cp311-cp311-win_amd64.whl", hash = "sha256:08e125dbdc505fa69ca7d9c499639ab6407cfa909214d500897d02afb816e7cc", size = 1982484, upload-time = "2024-12-18T11:28:25.391Z" },
+ { url = "https://files.pythonhosted.org/packages/10/1c/16b3a3e3398fd29dca77cea0a1d998d6bde3902fa2706985191e2313cc76/pydantic_core-2.27.2-cp311-cp311-win_arm64.whl", hash = "sha256:26f0d68d4b235a2bae0c3fc585c585b4ecc51382db0e3ba402a22cbc440915e4", size = 1867102, upload-time = "2024-12-18T11:28:28.593Z" },
+ { url = "https://files.pythonhosted.org/packages/d6/74/51c8a5482ca447871c93e142d9d4a92ead74de6c8dc5e66733e22c9bba89/pydantic_core-2.27.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9e0c8cfefa0ef83b4da9588448b6d8d2a2bf1a53c3f1ae5fca39eb3061e2f0b0", size = 1893127, upload-time = "2024-12-18T11:28:30.346Z" },
+ { url = "https://files.pythonhosted.org/packages/d3/f3/c97e80721735868313c58b89d2de85fa80fe8dfeeed84dc51598b92a135e/pydantic_core-2.27.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:83097677b8e3bd7eaa6775720ec8e0405f1575015a463285a92bfdfe254529ef", size = 1811340, upload-time = "2024-12-18T11:28:32.521Z" },
+ { url = "https://files.pythonhosted.org/packages/9e/91/840ec1375e686dbae1bd80a9e46c26a1e0083e1186abc610efa3d9a36180/pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:172fce187655fece0c90d90a678424b013f8fbb0ca8b036ac266749c09438cb7", size = 1822900, upload-time = "2024-12-18T11:28:34.507Z" },
+ { url = "https://files.pythonhosted.org/packages/f6/31/4240bc96025035500c18adc149aa6ffdf1a0062a4b525c932065ceb4d868/pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:519f29f5213271eeeeb3093f662ba2fd512b91c5f188f3bb7b27bc5973816934", size = 1869177, upload-time = "2024-12-18T11:28:36.488Z" },
+ { url = "https://files.pythonhosted.org/packages/fa/20/02fbaadb7808be578317015c462655c317a77a7c8f0ef274bc016a784c54/pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05e3a55d124407fffba0dd6b0c0cd056d10e983ceb4e5dbd10dda135c31071d6", size = 2038046, upload-time = "2024-12-18T11:28:39.409Z" },
+ { url = "https://files.pythonhosted.org/packages/06/86/7f306b904e6c9eccf0668248b3f272090e49c275bc488a7b88b0823444a4/pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c3ed807c7b91de05e63930188f19e921d1fe90de6b4f5cd43ee7fcc3525cb8c", size = 2685386, upload-time = "2024-12-18T11:28:41.221Z" },
+ { url = "https://files.pythonhosted.org/packages/8d/f0/49129b27c43396581a635d8710dae54a791b17dfc50c70164866bbf865e3/pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fb4aadc0b9a0c063206846d603b92030eb6f03069151a625667f982887153e2", size = 1997060, upload-time = "2024-12-18T11:28:44.709Z" },
+ { url = "https://files.pythonhosted.org/packages/0d/0f/943b4af7cd416c477fd40b187036c4f89b416a33d3cc0ab7b82708a667aa/pydantic_core-2.27.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:28ccb213807e037460326424ceb8b5245acb88f32f3d2777427476e1b32c48c4", size = 2004870, upload-time = "2024-12-18T11:28:46.839Z" },
+ { url = "https://files.pythonhosted.org/packages/35/40/aea70b5b1a63911c53a4c8117c0a828d6790483f858041f47bab0b779f44/pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:de3cd1899e2c279b140adde9357c4495ed9d47131b4a4eaff9052f23398076b3", size = 1999822, upload-time = "2024-12-18T11:28:48.896Z" },
+ { url = "https://files.pythonhosted.org/packages/f2/b3/807b94fd337d58effc5498fd1a7a4d9d59af4133e83e32ae39a96fddec9d/pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:220f892729375e2d736b97d0e51466252ad84c51857d4d15f5e9692f9ef12be4", size = 2130364, upload-time = "2024-12-18T11:28:50.755Z" },
+ { url = "https://files.pythonhosted.org/packages/fc/df/791c827cd4ee6efd59248dca9369fb35e80a9484462c33c6649a8d02b565/pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a0fcd29cd6b4e74fe8ddd2c90330fd8edf2e30cb52acda47f06dd615ae72da57", size = 2158303, upload-time = "2024-12-18T11:28:54.122Z" },
+ { url = "https://files.pythonhosted.org/packages/9b/67/4e197c300976af185b7cef4c02203e175fb127e414125916bf1128b639a9/pydantic_core-2.27.2-cp312-cp312-win32.whl", hash = "sha256:1e2cb691ed9834cd6a8be61228471d0a503731abfb42f82458ff27be7b2186fc", size = 1834064, upload-time = "2024-12-18T11:28:56.074Z" },
+ { url = "https://files.pythonhosted.org/packages/1f/ea/cd7209a889163b8dcca139fe32b9687dd05249161a3edda62860430457a5/pydantic_core-2.27.2-cp312-cp312-win_amd64.whl", hash = "sha256:cc3f1a99a4f4f9dd1de4fe0312c114e740b5ddead65bb4102884b384c15d8bc9", size = 1989046, upload-time = "2024-12-18T11:28:58.107Z" },
+ { url = "https://files.pythonhosted.org/packages/bc/49/c54baab2f4658c26ac633d798dab66b4c3a9bbf47cff5284e9c182f4137a/pydantic_core-2.27.2-cp312-cp312-win_arm64.whl", hash = "sha256:3911ac9284cd8a1792d3cb26a2da18f3ca26c6908cc434a18f730dc0db7bfa3b", size = 1885092, upload-time = "2024-12-18T11:29:01.335Z" },
+ { url = "https://files.pythonhosted.org/packages/46/72/af70981a341500419e67d5cb45abe552a7c74b66326ac8877588488da1ac/pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:2bf14caea37e91198329b828eae1618c068dfb8ef17bb33287a7ad4b61ac314e", size = 1891159, upload-time = "2024-12-18T11:30:54.382Z" },
+ { url = "https://files.pythonhosted.org/packages/ad/3d/c5913cccdef93e0a6a95c2d057d2c2cba347815c845cda79ddd3c0f5e17d/pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b0cb791f5b45307caae8810c2023a184c74605ec3bcbb67d13846c28ff731ff8", size = 1768331, upload-time = "2024-12-18T11:30:58.178Z" },
+ { url = "https://files.pythonhosted.org/packages/f6/f0/a3ae8fbee269e4934f14e2e0e00928f9346c5943174f2811193113e58252/pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:688d3fd9fcb71f41c4c015c023d12a79d1c4c0732ec9eb35d96e3388a120dcf3", size = 1822467, upload-time = "2024-12-18T11:31:00.6Z" },
+ { url = "https://files.pythonhosted.org/packages/d7/7a/7bbf241a04e9f9ea24cd5874354a83526d639b02674648af3f350554276c/pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d591580c34f4d731592f0e9fe40f9cc1b430d297eecc70b962e93c5c668f15f", size = 1979797, upload-time = "2024-12-18T11:31:07.243Z" },
+ { url = "https://files.pythonhosted.org/packages/4f/5f/4784c6107731f89e0005a92ecb8a2efeafdb55eb992b8e9d0a2be5199335/pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:82f986faf4e644ffc189a7f1aafc86e46ef70372bb153e7001e8afccc6e54133", size = 1987839, upload-time = "2024-12-18T11:31:09.775Z" },
+ { url = "https://files.pythonhosted.org/packages/6d/a7/61246562b651dff00de86a5f01b6e4befb518df314c54dec187a78d81c84/pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:bec317a27290e2537f922639cafd54990551725fc844249e64c523301d0822fc", size = 1998861, upload-time = "2024-12-18T11:31:13.469Z" },
+ { url = "https://files.pythonhosted.org/packages/86/aa/837821ecf0c022bbb74ca132e117c358321e72e7f9702d1b6a03758545e2/pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:0296abcb83a797db256b773f45773da397da75a08f5fcaef41f2044adec05f50", size = 2116582, upload-time = "2024-12-18T11:31:17.423Z" },
+ { url = "https://files.pythonhosted.org/packages/81/b0/5e74656e95623cbaa0a6278d16cf15e10a51f6002e3ec126541e95c29ea3/pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:0d75070718e369e452075a6017fbf187f788e17ed67a3abd47fa934d001863d9", size = 2151985, upload-time = "2024-12-18T11:31:19.901Z" },
+ { url = "https://files.pythonhosted.org/packages/63/37/3e32eeb2a451fddaa3898e2163746b0cffbbdbb4740d38372db0490d67f3/pydantic_core-2.27.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7e17b560be3c98a8e3aa66ce828bdebb9e9ac6ad5466fba92eb74c4c95cb1151", size = 2004715, upload-time = "2024-12-18T11:31:22.821Z" },
]
[[package]]
name = "pygments"
version = "2.19.1"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/7c/2d/c3338d48ea6cc0feb8446d8e6937e1408088a72a39937982cc6111d17f84/pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f", size = 4968581 }
+sdist = { url = "https://files.pythonhosted.org/packages/7c/2d/c3338d48ea6cc0feb8446d8e6937e1408088a72a39937982cc6111d17f84/pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f", size = 4968581, upload-time = "2025-01-06T17:26:30.443Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293 },
+ { url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293, upload-time = "2025-01-06T17:26:25.553Z" },
]
[[package]]
name = "pypandoc"
version = "1.15"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/e1/88/26e650d053df5f3874aa3c05901a14166ce3271f58bfe114fd776987efbd/pypandoc-1.15.tar.gz", hash = "sha256:ea25beebe712ae41d63f7410c08741a3cab0e420f6703f95bc9b3a749192ce13", size = 32940 }
+sdist = { url = "https://files.pythonhosted.org/packages/e1/88/26e650d053df5f3874aa3c05901a14166ce3271f58bfe114fd776987efbd/pypandoc-1.15.tar.gz", hash = "sha256:ea25beebe712ae41d63f7410c08741a3cab0e420f6703f95bc9b3a749192ce13", size = 32940, upload-time = "2025-01-08T17:39:58.705Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/61/06/0763e0ccc81754d3eadb21b2cb86cf21bdedc9b52698c2ad6785db7f0a4e/pypandoc-1.15-py3-none-any.whl", hash = "sha256:4ededcc76c8770f27aaca6dff47724578428eca84212a31479403a9731fc2b16", size = 21321 },
+ { url = "https://files.pythonhosted.org/packages/61/06/0763e0ccc81754d3eadb21b2cb86cf21bdedc9b52698c2ad6785db7f0a4e/pypandoc-1.15-py3-none-any.whl", hash = "sha256:4ededcc76c8770f27aaca6dff47724578428eca84212a31479403a9731fc2b16", size = 21321, upload-time = "2025-01-08T17:39:09.928Z" },
]
[[package]]
@@ -725,18 +790,18 @@ dependencies = [
{ name = "pluggy" },
{ name = "tomli", marker = "python_full_version < '3.11'" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/ae/3c/c9d525a414d506893f0cd8a8d0de7706446213181570cdbd766691164e40/pytest-8.3.5.tar.gz", hash = "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845", size = 1450891 }
+sdist = { url = "https://files.pythonhosted.org/packages/ae/3c/c9d525a414d506893f0cd8a8d0de7706446213181570cdbd766691164e40/pytest-8.3.5.tar.gz", hash = "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845", size = 1450891, upload-time = "2025-03-02T12:54:54.503Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/30/3d/64ad57c803f1fa1e963a7946b6e0fea4a70df53c1a7fed304586539c2bac/pytest-8.3.5-py3-none-any.whl", hash = "sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820", size = 343634 },
+ { url = "https://files.pythonhosted.org/packages/30/3d/64ad57c803f1fa1e963a7946b6e0fea4a70df53c1a7fed304586539c2bac/pytest-8.3.5-py3-none-any.whl", hash = "sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820", size = 343634, upload-time = "2025-03-02T12:54:52.069Z" },
]
[[package]]
name = "python-dotenv"
version = "1.0.1"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/bc/57/e84d88dfe0aec03b7a2d4327012c1627ab5f03652216c63d49846d7a6c58/python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca", size = 39115 }
+sdist = { url = "https://files.pythonhosted.org/packages/bc/57/e84d88dfe0aec03b7a2d4327012c1627ab5f03652216c63d49846d7a6c58/python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca", size = 39115, upload-time = "2024-01-23T06:33:00.505Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/6a/3e/b68c118422ec867fa7ab88444e1274aa40681c606d59ac27de5a5588f082/python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a", size = 19863 },
+ { url = "https://files.pythonhosted.org/packages/6a/3e/b68c118422ec867fa7ab88444e1274aa40681c606d59ac27de5a5588f082/python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a", size = 19863, upload-time = "2024-01-23T06:32:58.246Z" },
]
[[package]]
@@ -755,6 +820,7 @@ dependencies = [
dev = [
{ name = "datamodel-code-generator" },
{ name = "ipdb" },
+ { name = "lxml" },
{ name = "pre-commit" },
{ name = "pytest" },
{ name = "python-dotenv" },
@@ -775,6 +841,7 @@ requires-dist = [
dev = [
{ name = "datamodel-code-generator", specifier = ">=0.25.9,<0.26" },
{ name = "ipdb", specifier = ">=0.13.13" },
+ { name = "lxml", specifier = ">=5.4.0" },
{ name = "pre-commit", specifier = ">=4.1.0" },
{ name = "pytest", specifier = ">=8.3.5" },
{ name = "python-dotenv", specifier = ">=1.0.1" },
@@ -786,35 +853,35 @@ dev = [
name = "pyyaml"
version = "6.0.2"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/9b/95/a3fac87cb7158e231b5a6012e438c647e1a87f09f8e0d123acec8ab8bf71/PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086", size = 184199 },
- { url = "https://files.pythonhosted.org/packages/c7/7a/68bd47624dab8fd4afbfd3c48e3b79efe09098ae941de5b58abcbadff5cb/PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf", size = 171758 },
- { url = "https://files.pythonhosted.org/packages/49/ee/14c54df452143b9ee9f0f29074d7ca5516a36edb0b4cc40c3f280131656f/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237", size = 718463 },
- { url = "https://files.pythonhosted.org/packages/4d/61/de363a97476e766574650d742205be468921a7b532aa2499fcd886b62530/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b", size = 719280 },
- { url = "https://files.pythonhosted.org/packages/6b/4e/1523cb902fd98355e2e9ea5e5eb237cbc5f3ad5f3075fa65087aa0ecb669/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed", size = 751239 },
- { url = "https://files.pythonhosted.org/packages/b7/33/5504b3a9a4464893c32f118a9cc045190a91637b119a9c881da1cf6b7a72/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180", size = 695802 },
- { url = "https://files.pythonhosted.org/packages/5c/20/8347dcabd41ef3a3cdc4f7b7a2aff3d06598c8779faa189cdbf878b626a4/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68", size = 720527 },
- { url = "https://files.pythonhosted.org/packages/be/aa/5afe99233fb360d0ff37377145a949ae258aaab831bde4792b32650a4378/PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99", size = 144052 },
- { url = "https://files.pythonhosted.org/packages/b5/84/0fa4b06f6d6c958d207620fc60005e241ecedceee58931bb20138e1e5776/PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e", size = 161774 },
- { url = "https://files.pythonhosted.org/packages/f8/aa/7af4e81f7acba21a4c6be026da38fd2b872ca46226673c89a758ebdc4fd2/PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", size = 184612 },
- { url = "https://files.pythonhosted.org/packages/8b/62/b9faa998fd185f65c1371643678e4d58254add437edb764a08c5a98fb986/PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", size = 172040 },
- { url = "https://files.pythonhosted.org/packages/ad/0c/c804f5f922a9a6563bab712d8dcc70251e8af811fce4524d57c2c0fd49a4/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", size = 736829 },
- { url = "https://files.pythonhosted.org/packages/51/16/6af8d6a6b210c8e54f1406a6b9481febf9c64a3109c541567e35a49aa2e7/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", size = 764167 },
- { url = "https://files.pythonhosted.org/packages/75/e4/2c27590dfc9992f73aabbeb9241ae20220bd9452df27483b6e56d3975cc5/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", size = 762952 },
- { url = "https://files.pythonhosted.org/packages/9b/97/ecc1abf4a823f5ac61941a9c00fe501b02ac3ab0e373c3857f7d4b83e2b6/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4", size = 735301 },
- { url = "https://files.pythonhosted.org/packages/45/73/0f49dacd6e82c9430e46f4a027baa4ca205e8b0a9dce1397f44edc23559d/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", size = 756638 },
- { url = "https://files.pythonhosted.org/packages/22/5f/956f0f9fc65223a58fbc14459bf34b4cc48dec52e00535c79b8db361aabd/PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5", size = 143850 },
- { url = "https://files.pythonhosted.org/packages/ed/23/8da0bbe2ab9dcdd11f4f4557ccaf95c10b9811b13ecced089d43ce59c3c8/PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44", size = 161980 },
- { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873 },
- { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302 },
- { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154 },
- { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223 },
- { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542 },
- { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164 },
- { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611 },
- { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591 },
- { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338 },
+sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631, upload-time = "2024-08-06T20:33:50.674Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/9b/95/a3fac87cb7158e231b5a6012e438c647e1a87f09f8e0d123acec8ab8bf71/PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086", size = 184199, upload-time = "2024-08-06T20:31:40.178Z" },
+ { url = "https://files.pythonhosted.org/packages/c7/7a/68bd47624dab8fd4afbfd3c48e3b79efe09098ae941de5b58abcbadff5cb/PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf", size = 171758, upload-time = "2024-08-06T20:31:42.173Z" },
+ { url = "https://files.pythonhosted.org/packages/49/ee/14c54df452143b9ee9f0f29074d7ca5516a36edb0b4cc40c3f280131656f/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237", size = 718463, upload-time = "2024-08-06T20:31:44.263Z" },
+ { url = "https://files.pythonhosted.org/packages/4d/61/de363a97476e766574650d742205be468921a7b532aa2499fcd886b62530/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b", size = 719280, upload-time = "2024-08-06T20:31:50.199Z" },
+ { url = "https://files.pythonhosted.org/packages/6b/4e/1523cb902fd98355e2e9ea5e5eb237cbc5f3ad5f3075fa65087aa0ecb669/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed", size = 751239, upload-time = "2024-08-06T20:31:52.292Z" },
+ { url = "https://files.pythonhosted.org/packages/b7/33/5504b3a9a4464893c32f118a9cc045190a91637b119a9c881da1cf6b7a72/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180", size = 695802, upload-time = "2024-08-06T20:31:53.836Z" },
+ { url = "https://files.pythonhosted.org/packages/5c/20/8347dcabd41ef3a3cdc4f7b7a2aff3d06598c8779faa189cdbf878b626a4/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68", size = 720527, upload-time = "2024-08-06T20:31:55.565Z" },
+ { url = "https://files.pythonhosted.org/packages/be/aa/5afe99233fb360d0ff37377145a949ae258aaab831bde4792b32650a4378/PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99", size = 144052, upload-time = "2024-08-06T20:31:56.914Z" },
+ { url = "https://files.pythonhosted.org/packages/b5/84/0fa4b06f6d6c958d207620fc60005e241ecedceee58931bb20138e1e5776/PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e", size = 161774, upload-time = "2024-08-06T20:31:58.304Z" },
+ { url = "https://files.pythonhosted.org/packages/f8/aa/7af4e81f7acba21a4c6be026da38fd2b872ca46226673c89a758ebdc4fd2/PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", size = 184612, upload-time = "2024-08-06T20:32:03.408Z" },
+ { url = "https://files.pythonhosted.org/packages/8b/62/b9faa998fd185f65c1371643678e4d58254add437edb764a08c5a98fb986/PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", size = 172040, upload-time = "2024-08-06T20:32:04.926Z" },
+ { url = "https://files.pythonhosted.org/packages/ad/0c/c804f5f922a9a6563bab712d8dcc70251e8af811fce4524d57c2c0fd49a4/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", size = 736829, upload-time = "2024-08-06T20:32:06.459Z" },
+ { url = "https://files.pythonhosted.org/packages/51/16/6af8d6a6b210c8e54f1406a6b9481febf9c64a3109c541567e35a49aa2e7/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", size = 764167, upload-time = "2024-08-06T20:32:08.338Z" },
+ { url = "https://files.pythonhosted.org/packages/75/e4/2c27590dfc9992f73aabbeb9241ae20220bd9452df27483b6e56d3975cc5/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", size = 762952, upload-time = "2024-08-06T20:32:14.124Z" },
+ { url = "https://files.pythonhosted.org/packages/9b/97/ecc1abf4a823f5ac61941a9c00fe501b02ac3ab0e373c3857f7d4b83e2b6/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4", size = 735301, upload-time = "2024-08-06T20:32:16.17Z" },
+ { url = "https://files.pythonhosted.org/packages/45/73/0f49dacd6e82c9430e46f4a027baa4ca205e8b0a9dce1397f44edc23559d/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", size = 756638, upload-time = "2024-08-06T20:32:18.555Z" },
+ { url = "https://files.pythonhosted.org/packages/22/5f/956f0f9fc65223a58fbc14459bf34b4cc48dec52e00535c79b8db361aabd/PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5", size = 143850, upload-time = "2024-08-06T20:32:19.889Z" },
+ { url = "https://files.pythonhosted.org/packages/ed/23/8da0bbe2ab9dcdd11f4f4557ccaf95c10b9811b13ecced089d43ce59c3c8/PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44", size = 161980, upload-time = "2024-08-06T20:32:21.273Z" },
+ { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873, upload-time = "2024-08-06T20:32:25.131Z" },
+ { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302, upload-time = "2024-08-06T20:32:26.511Z" },
+ { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154, upload-time = "2024-08-06T20:32:28.363Z" },
+ { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223, upload-time = "2024-08-06T20:32:30.058Z" },
+ { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542, upload-time = "2024-08-06T20:32:31.881Z" },
+ { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164, upload-time = "2024-08-06T20:32:37.083Z" },
+ { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611, upload-time = "2024-08-06T20:32:38.898Z" },
+ { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591, upload-time = "2024-08-06T20:32:40.241Z" },
+ { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338, upload-time = "2024-08-06T20:32:41.93Z" },
]
[[package]]
@@ -826,9 +893,9 @@ dependencies = [
{ name = "rpds-py" },
{ name = "typing-extensions" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/2f/db/98b5c277be99dd18bfd91dd04e1b759cad18d1a338188c936e92f921c7e2/referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa", size = 74744 }
+sdist = { url = "https://files.pythonhosted.org/packages/2f/db/98b5c277be99dd18bfd91dd04e1b759cad18d1a338188c936e92f921c7e2/referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa", size = 74744, upload-time = "2025-01-25T08:48:16.138Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775 },
+ { url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775, upload-time = "2025-01-25T08:48:14.241Z" },
]
[[package]]
@@ -841,102 +908,102 @@ dependencies = [
{ name = "idna" },
{ name = "urllib3" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", size = 131218 }
+sdist = { url = "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", size = 131218, upload-time = "2024-05-29T15:37:49.536Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928 },
+ { url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928, upload-time = "2024-05-29T15:37:47.027Z" },
]
[[package]]
name = "rpds-py"
version = "0.23.1"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/0a/79/2ce611b18c4fd83d9e3aecb5cba93e1917c050f556db39842889fa69b79f/rpds_py-0.23.1.tar.gz", hash = "sha256:7f3240dcfa14d198dba24b8b9cb3b108c06b68d45b7babd9eefc1038fdf7e707", size = 26806 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/34/fe/e5326459863bd525122f4e9c80ac8d7c6cfa171b7518d04cc27c12c209b0/rpds_py-0.23.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2a54027554ce9b129fc3d633c92fa33b30de9f08bc61b32c053dc9b537266fed", size = 372123 },
- { url = "https://files.pythonhosted.org/packages/f9/db/f10a3795f7a89fb27594934012d21c61019bbeb516c5bdcfbbe9e9e617a7/rpds_py-0.23.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b5ef909a37e9738d146519657a1aab4584018746a18f71c692f2f22168ece40c", size = 356778 },
- { url = "https://files.pythonhosted.org/packages/21/27/0d3678ad7f432fa86f8fac5f5fc6496a4d2da85682a710d605219be20063/rpds_py-0.23.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ee9d6f0b38efb22ad94c3b68ffebe4c47865cdf4b17f6806d6c674e1feb4246", size = 385775 },
- { url = "https://files.pythonhosted.org/packages/99/a0/1786defa125b2ad228027f22dff26312ce7d1fee3c7c3c2682f403db2062/rpds_py-0.23.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f7356a6da0562190558c4fcc14f0281db191cdf4cb96e7604c06acfcee96df15", size = 391181 },
- { url = "https://files.pythonhosted.org/packages/f1/5c/1240934050a7ffd020a915486d0cc4c7f6e7a2442a77aedf13664db55d36/rpds_py-0.23.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9441af1d25aed96901f97ad83d5c3e35e6cd21a25ca5e4916c82d7dd0490a4fa", size = 444607 },
- { url = "https://files.pythonhosted.org/packages/b7/1b/cee6905b47817fd0a377716dbe4df35295de46df46ee2ff704538cc371b0/rpds_py-0.23.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d8abf7896a91fb97e7977d1aadfcc2c80415d6dc2f1d0fca5b8d0df247248f3", size = 445550 },
- { url = "https://files.pythonhosted.org/packages/54/f7/f0821ca34032892d7a67fcd5042f50074ff2de64e771e10df01085c88d47/rpds_py-0.23.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b08027489ba8fedde72ddd233a5ea411b85a6ed78175f40285bd401bde7466d", size = 386148 },
- { url = "https://files.pythonhosted.org/packages/eb/ef/2afe53bc857c4bcba336acfd2629883a5746e7291023e017ac7fc98d85aa/rpds_py-0.23.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fee513135b5a58f3bb6d89e48326cd5aa308e4bcdf2f7d59f67c861ada482bf8", size = 416780 },
- { url = "https://files.pythonhosted.org/packages/ae/9a/38d2236cf669789b8a3e1a014c9b6a8d7b8925b952c92e7839ae2749f9ac/rpds_py-0.23.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:35d5631ce0af26318dba0ae0ac941c534453e42f569011585cb323b7774502a5", size = 558265 },
- { url = "https://files.pythonhosted.org/packages/e6/0a/f2705530c42578f20ed0b5b90135eecb30eef6e2ba73e7ba69087fad2dba/rpds_py-0.23.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a20cb698c4a59c534c6701b1c24a968ff2768b18ea2991f886bd8985ce17a89f", size = 585270 },
- { url = "https://files.pythonhosted.org/packages/29/4e/3b597dc84ed82c3d757ac9aa620de224a94e06d2e102069795ae7e81c015/rpds_py-0.23.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e9c206a1abc27e0588cf8b7c8246e51f1a16a103734f7750830a1ccb63f557a", size = 553850 },
- { url = "https://files.pythonhosted.org/packages/00/cc/6498b6f79e4375e6737247661e52a2d18f6accf4910e0c8da978674b4241/rpds_py-0.23.1-cp310-cp310-win32.whl", hash = "sha256:d9f75a06ecc68f159d5d7603b734e1ff6daa9497a929150f794013aa9f6e3f12", size = 220660 },
- { url = "https://files.pythonhosted.org/packages/17/2b/08db023d23e8c7032c99d8d2a70d32e450a868ab73d16e3ff5290308a665/rpds_py-0.23.1-cp310-cp310-win_amd64.whl", hash = "sha256:f35eff113ad430b5272bbfc18ba111c66ff525828f24898b4e146eb479a2cdda", size = 232551 },
- { url = "https://files.pythonhosted.org/packages/1c/67/6e5d4234bb9dee062ffca2a5f3c7cd38716317d6760ec235b175eed4de2c/rpds_py-0.23.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:b79f5ced71efd70414a9a80bbbfaa7160da307723166f09b69773153bf17c590", size = 372264 },
- { url = "https://files.pythonhosted.org/packages/a7/0a/3dedb2daee8e783622427f5064e2d112751d8276ee73aa5409f000a132f4/rpds_py-0.23.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c9e799dac1ffbe7b10c1fd42fe4cd51371a549c6e108249bde9cd1200e8f59b4", size = 356883 },
- { url = "https://files.pythonhosted.org/packages/ed/fc/e1acef44f9c24b05fe5434b235f165a63a52959ac655e3f7a55726cee1a4/rpds_py-0.23.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:721f9c4011b443b6e84505fc00cc7aadc9d1743f1c988e4c89353e19c4a968ee", size = 385624 },
- { url = "https://files.pythonhosted.org/packages/97/0a/a05951f6465d01622720c03ef6ef31adfbe865653e05ed7c45837492f25e/rpds_py-0.23.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f88626e3f5e57432e6191cd0c5d6d6b319b635e70b40be2ffba713053e5147dd", size = 391500 },
- { url = "https://files.pythonhosted.org/packages/ea/2e/cca0583ec0690ea441dceae23c0673b99755710ea22f40bccf1e78f41481/rpds_py-0.23.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:285019078537949cecd0190f3690a0b0125ff743d6a53dfeb7a4e6787af154f5", size = 444869 },
- { url = "https://files.pythonhosted.org/packages/cc/e6/95cda68b33a6d814d1e96b0e406d231ed16629101460d1740e92f03365e6/rpds_py-0.23.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b92f5654157de1379c509b15acec9d12ecf6e3bc1996571b6cb82a4302060447", size = 444930 },
- { url = "https://files.pythonhosted.org/packages/5f/a7/e94cdb73411ae9c11414d3c7c9a6ad75d22ad4a8d094fb45a345ba9e3018/rpds_py-0.23.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e768267cbe051dd8d1c5305ba690bb153204a09bf2e3de3ae530de955f5b5580", size = 386254 },
- { url = "https://files.pythonhosted.org/packages/dd/c5/a4a943d90a39e85efd1e04b1ad5129936786f9a9aa27bb7be8fc5d9d50c9/rpds_py-0.23.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c5334a71f7dc1160382d45997e29f2637c02f8a26af41073189d79b95d3321f1", size = 417090 },
- { url = "https://files.pythonhosted.org/packages/0c/a0/80d0013b12428d1fce0ab4e71829400b0a32caec12733c79e6109f843342/rpds_py-0.23.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d6adb81564af0cd428910f83fa7da46ce9ad47c56c0b22b50872bc4515d91966", size = 557639 },
- { url = "https://files.pythonhosted.org/packages/a6/92/ec2e6980afb964a2cd7a99cbdef1f6c01116abe94b42cbe336ac93dd11c2/rpds_py-0.23.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:cafa48f2133d4daa028473ede7d81cd1b9f9e6925e9e4003ebdf77010ee02f35", size = 584572 },
- { url = "https://files.pythonhosted.org/packages/3d/ce/75b6054db34a390789a82523790717b27c1bd735e453abb429a87c4f0f26/rpds_py-0.23.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0fced9fd4a07a1ded1bac7e961ddd9753dd5d8b755ba8e05acba54a21f5f1522", size = 553028 },
- { url = "https://files.pythonhosted.org/packages/cc/24/f45abe0418c06a5cba0f846e967aa27bac765acd927aabd857c21319b8cc/rpds_py-0.23.1-cp311-cp311-win32.whl", hash = "sha256:243241c95174b5fb7204c04595852fe3943cc41f47aa14c3828bc18cd9d3b2d6", size = 220862 },
- { url = "https://files.pythonhosted.org/packages/2d/a6/3c0880e8bbfc36451ef30dc416266f6d2934705e468db5d21c8ba0ab6400/rpds_py-0.23.1-cp311-cp311-win_amd64.whl", hash = "sha256:11dd60b2ffddba85715d8a66bb39b95ddbe389ad2cfcf42c833f1bcde0878eaf", size = 232953 },
- { url = "https://files.pythonhosted.org/packages/f3/8c/d17efccb9f5b9137ddea706664aebae694384ae1d5997c0202093e37185a/rpds_py-0.23.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3902df19540e9af4cc0c3ae75974c65d2c156b9257e91f5101a51f99136d834c", size = 364369 },
- { url = "https://files.pythonhosted.org/packages/6e/c0/ab030f696b5c573107115a88d8d73d80f03309e60952b64c584c70c659af/rpds_py-0.23.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:66f8d2a17e5838dd6fb9be6baaba8e75ae2f5fa6b6b755d597184bfcd3cb0eba", size = 349965 },
- { url = "https://files.pythonhosted.org/packages/b3/55/b40170f5a079c4fb0b6a82b299689e66e744edca3c3375a8b160fb797660/rpds_py-0.23.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:112b8774b0b4ee22368fec42749b94366bd9b536f8f74c3d4175d4395f5cbd31", size = 389064 },
- { url = "https://files.pythonhosted.org/packages/ab/1c/b03a912c59ec7c1e16b26e587b9dfa8ddff3b07851e781e8c46e908a365a/rpds_py-0.23.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e0df046f2266e8586cf09d00588302a32923eb6386ced0ca5c9deade6af9a149", size = 397741 },
- { url = "https://files.pythonhosted.org/packages/52/6f/151b90792b62fb6f87099bcc9044c626881fdd54e31bf98541f830b15cea/rpds_py-0.23.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0f3288930b947cbebe767f84cf618d2cbe0b13be476e749da0e6a009f986248c", size = 448784 },
- { url = "https://files.pythonhosted.org/packages/71/2a/6de67c0c97ec7857e0e9e5cd7c52405af931b303eb1e5b9eff6c50fd9a2e/rpds_py-0.23.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ce473a2351c018b06dd8d30d5da8ab5a0831056cc53b2006e2a8028172c37ce5", size = 440203 },
- { url = "https://files.pythonhosted.org/packages/db/5e/e759cd1c276d98a4b1f464b17a9bf66c65d29f8f85754e27e1467feaa7c3/rpds_py-0.23.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d550d7e9e7d8676b183b37d65b5cd8de13676a738973d330b59dc8312df9c5dc", size = 391611 },
- { url = "https://files.pythonhosted.org/packages/1c/1e/2900358efcc0d9408c7289769cba4c0974d9db314aa884028ed7f7364f61/rpds_py-0.23.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e14f86b871ea74c3fddc9a40e947d6a5d09def5adc2076ee61fb910a9014fb35", size = 423306 },
- { url = "https://files.pythonhosted.org/packages/23/07/6c177e6d059f5d39689352d6c69a926ee4805ffdb6f06203570234d3d8f7/rpds_py-0.23.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1bf5be5ba34e19be579ae873da515a2836a2166d8d7ee43be6ff909eda42b72b", size = 562323 },
- { url = "https://files.pythonhosted.org/packages/70/e4/f9097fd1c02b516fff9850792161eb9fc20a2fd54762f3c69eae0bdb67cb/rpds_py-0.23.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:d7031d493c4465dbc8d40bd6cafefef4bd472b17db0ab94c53e7909ee781b9ef", size = 588351 },
- { url = "https://files.pythonhosted.org/packages/87/39/5db3c6f326bfbe4576ae2af6435bd7555867d20ae690c786ff33659f293b/rpds_py-0.23.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:55ff4151cfd4bc635e51cfb1c59ac9f7196b256b12e3a57deb9e5742e65941ad", size = 557252 },
- { url = "https://files.pythonhosted.org/packages/fd/14/2d5ad292f144fa79bafb78d2eb5b8a3a91c358b6065443cb9c49b5d1fedf/rpds_py-0.23.1-cp312-cp312-win32.whl", hash = "sha256:a9d3b728f5a5873d84cba997b9d617c6090ca5721caaa691f3b1a78c60adc057", size = 222181 },
- { url = "https://files.pythonhosted.org/packages/a3/4f/0fce63e0f5cdd658e71e21abd17ac1bc9312741ebb8b3f74eeed2ebdf771/rpds_py-0.23.1-cp312-cp312-win_amd64.whl", hash = "sha256:b03a8d50b137ee758e4c73638b10747b7c39988eb8e6cd11abb7084266455165", size = 237426 },
- { url = "https://files.pythonhosted.org/packages/95/a9/6fafd35fc6bac05f59bcbc800b57cef877911ff1c015397c519fec888642/rpds_py-0.23.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c1f8afa346ccd59e4e5630d5abb67aba6a9812fddf764fd7eb11f382a345f8cc", size = 373463 },
- { url = "https://files.pythonhosted.org/packages/5b/ac/44f00029b8fbe0903a19e9a87a9b86063bf8700df2cc58868373d378418c/rpds_py-0.23.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:fad784a31869747df4ac968a351e070c06ca377549e4ace94775aaa3ab33ee06", size = 358400 },
- { url = "https://files.pythonhosted.org/packages/5e/9c/3da199346c68d785f10dccab123b74c8c5f73be3f742c9e33d1116e07931/rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5a96fcac2f18e5a0a23a75cd27ce2656c66c11c127b0318e508aab436b77428", size = 386815 },
- { url = "https://files.pythonhosted.org/packages/d3/45/8f6533c33c0d33da8c2c8b2fb8f2ee90b23c05c679b86b0ac6aee4653749/rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3e77febf227a1dc3220159355dba68faa13f8dca9335d97504abf428469fb18b", size = 392974 },
- { url = "https://files.pythonhosted.org/packages/ca/56/6a9ac1bf0455ba07385d8fe98c571c519b4f2000cff6581487bf9fab9272/rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26bb3e8de93443d55e2e748e9fd87deb5f8075ca7bc0502cfc8be8687d69a2ec", size = 446019 },
- { url = "https://files.pythonhosted.org/packages/f4/83/5d9a3f9731cdccf49088bcc4ce821a5cf50bd1737cdad83e9959a7b9054d/rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:db7707dde9143a67b8812c7e66aeb2d843fe33cc8e374170f4d2c50bd8f2472d", size = 445811 },
- { url = "https://files.pythonhosted.org/packages/44/50/f2e0a98c62fc1fe68b176caca587714dc5c8bb2c3d1dd1eeb2bd4cc787ac/rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1eedaaccc9bb66581d4ae7c50e15856e335e57ef2734dbc5fd8ba3e2a4ab3cb6", size = 388070 },
- { url = "https://files.pythonhosted.org/packages/f2/d0/4981878f8f157e6dbea01d95e0119bf3d6b4c2c884fe64a9e6987f941104/rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:28358c54fffadf0ae893f6c1050e8f8853e45df22483b7fff2f6ab6152f5d8bf", size = 419173 },
- { url = "https://files.pythonhosted.org/packages/ce/13/fc971c470da96b270d2f64fedee987351bd935dc3016932a5cdcb1a88a2a/rpds_py-0.23.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:633462ef7e61d839171bf206551d5ab42b30b71cac8f10a64a662536e057fdef", size = 559048 },
- { url = "https://files.pythonhosted.org/packages/42/02/be91e1de139ec8b4f9fec4192fd779ba48af281cfc762c0ca4c15b945484/rpds_py-0.23.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:a98f510d86f689fcb486dc59e6e363af04151e5260ad1bdddb5625c10f1e95f8", size = 584773 },
- { url = "https://files.pythonhosted.org/packages/27/28/3af8a1956df3edc41d884267d766dc096496dafc83f02f764a475eca0b4a/rpds_py-0.23.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e0397dd0b3955c61ef9b22838144aa4bef6f0796ba5cc8edfc64d468b93798b4", size = 555153 },
- { url = "https://files.pythonhosted.org/packages/5e/bb/e45f51c4e1327dea3c72b846c6de129eebacb7a6cb309af7af35d0578c80/rpds_py-0.23.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:75307599f0d25bf6937248e5ac4e3bde5ea72ae6618623b86146ccc7845ed00b", size = 233827 },
+sdist = { url = "https://files.pythonhosted.org/packages/0a/79/2ce611b18c4fd83d9e3aecb5cba93e1917c050f556db39842889fa69b79f/rpds_py-0.23.1.tar.gz", hash = "sha256:7f3240dcfa14d198dba24b8b9cb3b108c06b68d45b7babd9eefc1038fdf7e707", size = 26806, upload-time = "2025-02-21T15:04:23.169Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/34/fe/e5326459863bd525122f4e9c80ac8d7c6cfa171b7518d04cc27c12c209b0/rpds_py-0.23.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2a54027554ce9b129fc3d633c92fa33b30de9f08bc61b32c053dc9b537266fed", size = 372123, upload-time = "2025-02-21T15:01:14.816Z" },
+ { url = "https://files.pythonhosted.org/packages/f9/db/f10a3795f7a89fb27594934012d21c61019bbeb516c5bdcfbbe9e9e617a7/rpds_py-0.23.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b5ef909a37e9738d146519657a1aab4584018746a18f71c692f2f22168ece40c", size = 356778, upload-time = "2025-02-21T15:01:16.788Z" },
+ { url = "https://files.pythonhosted.org/packages/21/27/0d3678ad7f432fa86f8fac5f5fc6496a4d2da85682a710d605219be20063/rpds_py-0.23.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ee9d6f0b38efb22ad94c3b68ffebe4c47865cdf4b17f6806d6c674e1feb4246", size = 385775, upload-time = "2025-02-21T15:01:18.192Z" },
+ { url = "https://files.pythonhosted.org/packages/99/a0/1786defa125b2ad228027f22dff26312ce7d1fee3c7c3c2682f403db2062/rpds_py-0.23.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f7356a6da0562190558c4fcc14f0281db191cdf4cb96e7604c06acfcee96df15", size = 391181, upload-time = "2025-02-21T15:01:20.214Z" },
+ { url = "https://files.pythonhosted.org/packages/f1/5c/1240934050a7ffd020a915486d0cc4c7f6e7a2442a77aedf13664db55d36/rpds_py-0.23.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9441af1d25aed96901f97ad83d5c3e35e6cd21a25ca5e4916c82d7dd0490a4fa", size = 444607, upload-time = "2025-02-21T15:01:22.221Z" },
+ { url = "https://files.pythonhosted.org/packages/b7/1b/cee6905b47817fd0a377716dbe4df35295de46df46ee2ff704538cc371b0/rpds_py-0.23.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d8abf7896a91fb97e7977d1aadfcc2c80415d6dc2f1d0fca5b8d0df247248f3", size = 445550, upload-time = "2025-02-21T15:01:24.742Z" },
+ { url = "https://files.pythonhosted.org/packages/54/f7/f0821ca34032892d7a67fcd5042f50074ff2de64e771e10df01085c88d47/rpds_py-0.23.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b08027489ba8fedde72ddd233a5ea411b85a6ed78175f40285bd401bde7466d", size = 386148, upload-time = "2025-02-21T15:01:26.23Z" },
+ { url = "https://files.pythonhosted.org/packages/eb/ef/2afe53bc857c4bcba336acfd2629883a5746e7291023e017ac7fc98d85aa/rpds_py-0.23.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fee513135b5a58f3bb6d89e48326cd5aa308e4bcdf2f7d59f67c861ada482bf8", size = 416780, upload-time = "2025-02-21T15:01:27.778Z" },
+ { url = "https://files.pythonhosted.org/packages/ae/9a/38d2236cf669789b8a3e1a014c9b6a8d7b8925b952c92e7839ae2749f9ac/rpds_py-0.23.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:35d5631ce0af26318dba0ae0ac941c534453e42f569011585cb323b7774502a5", size = 558265, upload-time = "2025-02-21T15:01:28.979Z" },
+ { url = "https://files.pythonhosted.org/packages/e6/0a/f2705530c42578f20ed0b5b90135eecb30eef6e2ba73e7ba69087fad2dba/rpds_py-0.23.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a20cb698c4a59c534c6701b1c24a968ff2768b18ea2991f886bd8985ce17a89f", size = 585270, upload-time = "2025-02-21T15:01:30.879Z" },
+ { url = "https://files.pythonhosted.org/packages/29/4e/3b597dc84ed82c3d757ac9aa620de224a94e06d2e102069795ae7e81c015/rpds_py-0.23.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e9c206a1abc27e0588cf8b7c8246e51f1a16a103734f7750830a1ccb63f557a", size = 553850, upload-time = "2025-02-21T15:01:32.269Z" },
+ { url = "https://files.pythonhosted.org/packages/00/cc/6498b6f79e4375e6737247661e52a2d18f6accf4910e0c8da978674b4241/rpds_py-0.23.1-cp310-cp310-win32.whl", hash = "sha256:d9f75a06ecc68f159d5d7603b734e1ff6daa9497a929150f794013aa9f6e3f12", size = 220660, upload-time = "2025-02-21T15:01:33.643Z" },
+ { url = "https://files.pythonhosted.org/packages/17/2b/08db023d23e8c7032c99d8d2a70d32e450a868ab73d16e3ff5290308a665/rpds_py-0.23.1-cp310-cp310-win_amd64.whl", hash = "sha256:f35eff113ad430b5272bbfc18ba111c66ff525828f24898b4e146eb479a2cdda", size = 232551, upload-time = "2025-02-21T15:01:35.529Z" },
+ { url = "https://files.pythonhosted.org/packages/1c/67/6e5d4234bb9dee062ffca2a5f3c7cd38716317d6760ec235b175eed4de2c/rpds_py-0.23.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:b79f5ced71efd70414a9a80bbbfaa7160da307723166f09b69773153bf17c590", size = 372264, upload-time = "2025-02-21T15:01:37.918Z" },
+ { url = "https://files.pythonhosted.org/packages/a7/0a/3dedb2daee8e783622427f5064e2d112751d8276ee73aa5409f000a132f4/rpds_py-0.23.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c9e799dac1ffbe7b10c1fd42fe4cd51371a549c6e108249bde9cd1200e8f59b4", size = 356883, upload-time = "2025-02-21T15:01:39.131Z" },
+ { url = "https://files.pythonhosted.org/packages/ed/fc/e1acef44f9c24b05fe5434b235f165a63a52959ac655e3f7a55726cee1a4/rpds_py-0.23.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:721f9c4011b443b6e84505fc00cc7aadc9d1743f1c988e4c89353e19c4a968ee", size = 385624, upload-time = "2025-02-21T15:01:40.589Z" },
+ { url = "https://files.pythonhosted.org/packages/97/0a/a05951f6465d01622720c03ef6ef31adfbe865653e05ed7c45837492f25e/rpds_py-0.23.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f88626e3f5e57432e6191cd0c5d6d6b319b635e70b40be2ffba713053e5147dd", size = 391500, upload-time = "2025-02-21T15:01:42.584Z" },
+ { url = "https://files.pythonhosted.org/packages/ea/2e/cca0583ec0690ea441dceae23c0673b99755710ea22f40bccf1e78f41481/rpds_py-0.23.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:285019078537949cecd0190f3690a0b0125ff743d6a53dfeb7a4e6787af154f5", size = 444869, upload-time = "2025-02-21T15:01:44.004Z" },
+ { url = "https://files.pythonhosted.org/packages/cc/e6/95cda68b33a6d814d1e96b0e406d231ed16629101460d1740e92f03365e6/rpds_py-0.23.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b92f5654157de1379c509b15acec9d12ecf6e3bc1996571b6cb82a4302060447", size = 444930, upload-time = "2025-02-21T15:01:46.191Z" },
+ { url = "https://files.pythonhosted.org/packages/5f/a7/e94cdb73411ae9c11414d3c7c9a6ad75d22ad4a8d094fb45a345ba9e3018/rpds_py-0.23.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e768267cbe051dd8d1c5305ba690bb153204a09bf2e3de3ae530de955f5b5580", size = 386254, upload-time = "2025-02-21T15:01:48.038Z" },
+ { url = "https://files.pythonhosted.org/packages/dd/c5/a4a943d90a39e85efd1e04b1ad5129936786f9a9aa27bb7be8fc5d9d50c9/rpds_py-0.23.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c5334a71f7dc1160382d45997e29f2637c02f8a26af41073189d79b95d3321f1", size = 417090, upload-time = "2025-02-21T15:01:50.252Z" },
+ { url = "https://files.pythonhosted.org/packages/0c/a0/80d0013b12428d1fce0ab4e71829400b0a32caec12733c79e6109f843342/rpds_py-0.23.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d6adb81564af0cd428910f83fa7da46ce9ad47c56c0b22b50872bc4515d91966", size = 557639, upload-time = "2025-02-21T15:01:51.488Z" },
+ { url = "https://files.pythonhosted.org/packages/a6/92/ec2e6980afb964a2cd7a99cbdef1f6c01116abe94b42cbe336ac93dd11c2/rpds_py-0.23.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:cafa48f2133d4daa028473ede7d81cd1b9f9e6925e9e4003ebdf77010ee02f35", size = 584572, upload-time = "2025-02-21T15:01:53.13Z" },
+ { url = "https://files.pythonhosted.org/packages/3d/ce/75b6054db34a390789a82523790717b27c1bd735e453abb429a87c4f0f26/rpds_py-0.23.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0fced9fd4a07a1ded1bac7e961ddd9753dd5d8b755ba8e05acba54a21f5f1522", size = 553028, upload-time = "2025-02-21T15:01:54.84Z" },
+ { url = "https://files.pythonhosted.org/packages/cc/24/f45abe0418c06a5cba0f846e967aa27bac765acd927aabd857c21319b8cc/rpds_py-0.23.1-cp311-cp311-win32.whl", hash = "sha256:243241c95174b5fb7204c04595852fe3943cc41f47aa14c3828bc18cd9d3b2d6", size = 220862, upload-time = "2025-02-21T15:01:56.966Z" },
+ { url = "https://files.pythonhosted.org/packages/2d/a6/3c0880e8bbfc36451ef30dc416266f6d2934705e468db5d21c8ba0ab6400/rpds_py-0.23.1-cp311-cp311-win_amd64.whl", hash = "sha256:11dd60b2ffddba85715d8a66bb39b95ddbe389ad2cfcf42c833f1bcde0878eaf", size = 232953, upload-time = "2025-02-21T15:02:00.297Z" },
+ { url = "https://files.pythonhosted.org/packages/f3/8c/d17efccb9f5b9137ddea706664aebae694384ae1d5997c0202093e37185a/rpds_py-0.23.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3902df19540e9af4cc0c3ae75974c65d2c156b9257e91f5101a51f99136d834c", size = 364369, upload-time = "2025-02-21T15:02:02.396Z" },
+ { url = "https://files.pythonhosted.org/packages/6e/c0/ab030f696b5c573107115a88d8d73d80f03309e60952b64c584c70c659af/rpds_py-0.23.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:66f8d2a17e5838dd6fb9be6baaba8e75ae2f5fa6b6b755d597184bfcd3cb0eba", size = 349965, upload-time = "2025-02-21T15:02:04.527Z" },
+ { url = "https://files.pythonhosted.org/packages/b3/55/b40170f5a079c4fb0b6a82b299689e66e744edca3c3375a8b160fb797660/rpds_py-0.23.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:112b8774b0b4ee22368fec42749b94366bd9b536f8f74c3d4175d4395f5cbd31", size = 389064, upload-time = "2025-02-21T15:02:06.633Z" },
+ { url = "https://files.pythonhosted.org/packages/ab/1c/b03a912c59ec7c1e16b26e587b9dfa8ddff3b07851e781e8c46e908a365a/rpds_py-0.23.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e0df046f2266e8586cf09d00588302a32923eb6386ced0ca5c9deade6af9a149", size = 397741, upload-time = "2025-02-21T15:02:08.195Z" },
+ { url = "https://files.pythonhosted.org/packages/52/6f/151b90792b62fb6f87099bcc9044c626881fdd54e31bf98541f830b15cea/rpds_py-0.23.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0f3288930b947cbebe767f84cf618d2cbe0b13be476e749da0e6a009f986248c", size = 448784, upload-time = "2025-02-21T15:02:09.473Z" },
+ { url = "https://files.pythonhosted.org/packages/71/2a/6de67c0c97ec7857e0e9e5cd7c52405af931b303eb1e5b9eff6c50fd9a2e/rpds_py-0.23.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ce473a2351c018b06dd8d30d5da8ab5a0831056cc53b2006e2a8028172c37ce5", size = 440203, upload-time = "2025-02-21T15:02:11.745Z" },
+ { url = "https://files.pythonhosted.org/packages/db/5e/e759cd1c276d98a4b1f464b17a9bf66c65d29f8f85754e27e1467feaa7c3/rpds_py-0.23.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d550d7e9e7d8676b183b37d65b5cd8de13676a738973d330b59dc8312df9c5dc", size = 391611, upload-time = "2025-02-21T15:02:13.76Z" },
+ { url = "https://files.pythonhosted.org/packages/1c/1e/2900358efcc0d9408c7289769cba4c0974d9db314aa884028ed7f7364f61/rpds_py-0.23.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e14f86b871ea74c3fddc9a40e947d6a5d09def5adc2076ee61fb910a9014fb35", size = 423306, upload-time = "2025-02-21T15:02:15.096Z" },
+ { url = "https://files.pythonhosted.org/packages/23/07/6c177e6d059f5d39689352d6c69a926ee4805ffdb6f06203570234d3d8f7/rpds_py-0.23.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1bf5be5ba34e19be579ae873da515a2836a2166d8d7ee43be6ff909eda42b72b", size = 562323, upload-time = "2025-02-21T15:02:17.379Z" },
+ { url = "https://files.pythonhosted.org/packages/70/e4/f9097fd1c02b516fff9850792161eb9fc20a2fd54762f3c69eae0bdb67cb/rpds_py-0.23.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:d7031d493c4465dbc8d40bd6cafefef4bd472b17db0ab94c53e7909ee781b9ef", size = 588351, upload-time = "2025-02-21T15:02:19.688Z" },
+ { url = "https://files.pythonhosted.org/packages/87/39/5db3c6f326bfbe4576ae2af6435bd7555867d20ae690c786ff33659f293b/rpds_py-0.23.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:55ff4151cfd4bc635e51cfb1c59ac9f7196b256b12e3a57deb9e5742e65941ad", size = 557252, upload-time = "2025-02-21T15:02:21.875Z" },
+ { url = "https://files.pythonhosted.org/packages/fd/14/2d5ad292f144fa79bafb78d2eb5b8a3a91c358b6065443cb9c49b5d1fedf/rpds_py-0.23.1-cp312-cp312-win32.whl", hash = "sha256:a9d3b728f5a5873d84cba997b9d617c6090ca5721caaa691f3b1a78c60adc057", size = 222181, upload-time = "2025-02-21T15:02:23.353Z" },
+ { url = "https://files.pythonhosted.org/packages/a3/4f/0fce63e0f5cdd658e71e21abd17ac1bc9312741ebb8b3f74eeed2ebdf771/rpds_py-0.23.1-cp312-cp312-win_amd64.whl", hash = "sha256:b03a8d50b137ee758e4c73638b10747b7c39988eb8e6cd11abb7084266455165", size = 237426, upload-time = "2025-02-21T15:02:25.326Z" },
+ { url = "https://files.pythonhosted.org/packages/95/a9/6fafd35fc6bac05f59bcbc800b57cef877911ff1c015397c519fec888642/rpds_py-0.23.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c1f8afa346ccd59e4e5630d5abb67aba6a9812fddf764fd7eb11f382a345f8cc", size = 373463, upload-time = "2025-02-21T15:03:37.242Z" },
+ { url = "https://files.pythonhosted.org/packages/5b/ac/44f00029b8fbe0903a19e9a87a9b86063bf8700df2cc58868373d378418c/rpds_py-0.23.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:fad784a31869747df4ac968a351e070c06ca377549e4ace94775aaa3ab33ee06", size = 358400, upload-time = "2025-02-21T15:03:38.752Z" },
+ { url = "https://files.pythonhosted.org/packages/5e/9c/3da199346c68d785f10dccab123b74c8c5f73be3f742c9e33d1116e07931/rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5a96fcac2f18e5a0a23a75cd27ce2656c66c11c127b0318e508aab436b77428", size = 386815, upload-time = "2025-02-21T15:03:40.216Z" },
+ { url = "https://files.pythonhosted.org/packages/d3/45/8f6533c33c0d33da8c2c8b2fb8f2ee90b23c05c679b86b0ac6aee4653749/rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3e77febf227a1dc3220159355dba68faa13f8dca9335d97504abf428469fb18b", size = 392974, upload-time = "2025-02-21T15:03:42.286Z" },
+ { url = "https://files.pythonhosted.org/packages/ca/56/6a9ac1bf0455ba07385d8fe98c571c519b4f2000cff6581487bf9fab9272/rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26bb3e8de93443d55e2e748e9fd87deb5f8075ca7bc0502cfc8be8687d69a2ec", size = 446019, upload-time = "2025-02-21T15:03:43.811Z" },
+ { url = "https://files.pythonhosted.org/packages/f4/83/5d9a3f9731cdccf49088bcc4ce821a5cf50bd1737cdad83e9959a7b9054d/rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:db7707dde9143a67b8812c7e66aeb2d843fe33cc8e374170f4d2c50bd8f2472d", size = 445811, upload-time = "2025-02-21T15:03:45.218Z" },
+ { url = "https://files.pythonhosted.org/packages/44/50/f2e0a98c62fc1fe68b176caca587714dc5c8bb2c3d1dd1eeb2bd4cc787ac/rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1eedaaccc9bb66581d4ae7c50e15856e335e57ef2734dbc5fd8ba3e2a4ab3cb6", size = 388070, upload-time = "2025-02-21T15:03:46.905Z" },
+ { url = "https://files.pythonhosted.org/packages/f2/d0/4981878f8f157e6dbea01d95e0119bf3d6b4c2c884fe64a9e6987f941104/rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:28358c54fffadf0ae893f6c1050e8f8853e45df22483b7fff2f6ab6152f5d8bf", size = 419173, upload-time = "2025-02-21T15:03:48.552Z" },
+ { url = "https://files.pythonhosted.org/packages/ce/13/fc971c470da96b270d2f64fedee987351bd935dc3016932a5cdcb1a88a2a/rpds_py-0.23.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:633462ef7e61d839171bf206551d5ab42b30b71cac8f10a64a662536e057fdef", size = 559048, upload-time = "2025-02-21T15:03:50.226Z" },
+ { url = "https://files.pythonhosted.org/packages/42/02/be91e1de139ec8b4f9fec4192fd779ba48af281cfc762c0ca4c15b945484/rpds_py-0.23.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:a98f510d86f689fcb486dc59e6e363af04151e5260ad1bdddb5625c10f1e95f8", size = 584773, upload-time = "2025-02-21T15:03:52.678Z" },
+ { url = "https://files.pythonhosted.org/packages/27/28/3af8a1956df3edc41d884267d766dc096496dafc83f02f764a475eca0b4a/rpds_py-0.23.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e0397dd0b3955c61ef9b22838144aa4bef6f0796ba5cc8edfc64d468b93798b4", size = 555153, upload-time = "2025-02-21T15:03:55.21Z" },
+ { url = "https://files.pythonhosted.org/packages/5e/bb/e45f51c4e1327dea3c72b846c6de129eebacb7a6cb309af7af35d0578c80/rpds_py-0.23.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:75307599f0d25bf6937248e5ac4e3bde5ea72ae6618623b86146ccc7845ed00b", size = 233827, upload-time = "2025-02-21T15:03:56.853Z" },
]
[[package]]
name = "ruff"
version = "0.9.10"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/20/8e/fafaa6f15c332e73425d9c44ada85360501045d5ab0b81400076aff27cf6/ruff-0.9.10.tar.gz", hash = "sha256:9bacb735d7bada9cfb0f2c227d3658fc443d90a727b47f206fb33f52f3c0eac7", size = 3759776 }
+sdist = { url = "https://files.pythonhosted.org/packages/20/8e/fafaa6f15c332e73425d9c44ada85360501045d5ab0b81400076aff27cf6/ruff-0.9.10.tar.gz", hash = "sha256:9bacb735d7bada9cfb0f2c227d3658fc443d90a727b47f206fb33f52f3c0eac7", size = 3759776, upload-time = "2025-03-07T15:27:44.363Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/73/b2/af7c2cc9e438cbc19fafeec4f20bfcd72165460fe75b2b6e9a0958c8c62b/ruff-0.9.10-py3-none-linux_armv6l.whl", hash = "sha256:eb4d25532cfd9fe461acc83498361ec2e2252795b4f40b17e80692814329e42d", size = 10049494 },
- { url = "https://files.pythonhosted.org/packages/6d/12/03f6dfa1b95ddd47e6969f0225d60d9d7437c91938a310835feb27927ca0/ruff-0.9.10-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:188a6638dab1aa9bb6228a7302387b2c9954e455fb25d6b4470cb0641d16759d", size = 10853584 },
- { url = "https://files.pythonhosted.org/packages/02/49/1c79e0906b6ff551fb0894168763f705bf980864739572b2815ecd3c9df0/ruff-0.9.10-py3-none-macosx_11_0_arm64.whl", hash = "sha256:5284dcac6b9dbc2fcb71fdfc26a217b2ca4ede6ccd57476f52a587451ebe450d", size = 10155692 },
- { url = "https://files.pythonhosted.org/packages/5b/01/85e8082e41585e0e1ceb11e41c054e9e36fed45f4b210991052d8a75089f/ruff-0.9.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47678f39fa2a3da62724851107f438c8229a3470f533894b5568a39b40029c0c", size = 10369760 },
- { url = "https://files.pythonhosted.org/packages/a1/90/0bc60bd4e5db051f12445046d0c85cc2c617095c0904f1aa81067dc64aea/ruff-0.9.10-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:99713a6e2766b7a17147b309e8c915b32b07a25c9efd12ada79f217c9c778b3e", size = 9912196 },
- { url = "https://files.pythonhosted.org/packages/66/ea/0b7e8c42b1ec608033c4d5a02939c82097ddcb0b3e393e4238584b7054ab/ruff-0.9.10-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:524ee184d92f7c7304aa568e2db20f50c32d1d0caa235d8ddf10497566ea1a12", size = 11434985 },
- { url = "https://files.pythonhosted.org/packages/d5/86/3171d1eff893db4f91755175a6e1163c5887be1f1e2f4f6c0c59527c2bfd/ruff-0.9.10-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:df92aeac30af821f9acf819fc01b4afc3dfb829d2782884f8739fb52a8119a16", size = 12155842 },
- { url = "https://files.pythonhosted.org/packages/89/9e/700ca289f172a38eb0bca752056d0a42637fa17b81649b9331786cb791d7/ruff-0.9.10-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de42e4edc296f520bb84954eb992a07a0ec5a02fecb834498415908469854a52", size = 11613804 },
- { url = "https://files.pythonhosted.org/packages/f2/92/648020b3b5db180f41a931a68b1c8575cca3e63cec86fd26807422a0dbad/ruff-0.9.10-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d257f95b65806104b6b1ffca0ea53f4ef98454036df65b1eda3693534813ecd1", size = 13823776 },
- { url = "https://files.pythonhosted.org/packages/5e/a6/cc472161cd04d30a09d5c90698696b70c169eeba2c41030344194242db45/ruff-0.9.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b60dec7201c0b10d6d11be00e8f2dbb6f40ef1828ee75ed739923799513db24c", size = 11302673 },
- { url = "https://files.pythonhosted.org/packages/6c/db/d31c361c4025b1b9102b4d032c70a69adb9ee6fde093f6c3bf29f831c85c/ruff-0.9.10-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:d838b60007da7a39c046fcdd317293d10b845001f38bcb55ba766c3875b01e43", size = 10235358 },
- { url = "https://files.pythonhosted.org/packages/d1/86/d6374e24a14d4d93ebe120f45edd82ad7dcf3ef999ffc92b197d81cdc2a5/ruff-0.9.10-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:ccaf903108b899beb8e09a63ffae5869057ab649c1e9231c05ae354ebc62066c", size = 9886177 },
- { url = "https://files.pythonhosted.org/packages/00/62/a61691f6eaaac1e945a1f3f59f1eea9a218513139d5b6c2b8f88b43b5b8f/ruff-0.9.10-py3-none-musllinux_1_2_i686.whl", hash = "sha256:f9567d135265d46e59d62dc60c0bfad10e9a6822e231f5b24032dba5a55be6b5", size = 10864747 },
- { url = "https://files.pythonhosted.org/packages/ee/94/2c7065e1d92a8a8a46d46d9c3cf07b0aa7e0a1e0153d74baa5e6620b4102/ruff-0.9.10-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5f202f0d93738c28a89f8ed9eaba01b7be339e5d8d642c994347eaa81c6d75b8", size = 11360441 },
- { url = "https://files.pythonhosted.org/packages/a7/8f/1f545ea6f9fcd7bf4368551fb91d2064d8f0577b3079bb3f0ae5779fb773/ruff-0.9.10-py3-none-win32.whl", hash = "sha256:bfb834e87c916521ce46b1788fbb8484966e5113c02df216680102e9eb960029", size = 10247401 },
- { url = "https://files.pythonhosted.org/packages/4f/18/fb703603ab108e5c165f52f5b86ee2aa9be43bb781703ec87c66a5f5d604/ruff-0.9.10-py3-none-win_amd64.whl", hash = "sha256:f2160eeef3031bf4b17df74e307d4c5fb689a6f3a26a2de3f7ef4044e3c484f1", size = 11366360 },
- { url = "https://files.pythonhosted.org/packages/35/85/338e603dc68e7d9994d5d84f24adbf69bae760ba5efd3e20f5ff2cec18da/ruff-0.9.10-py3-none-win_arm64.whl", hash = "sha256:5fd804c0327a5e5ea26615550e706942f348b197d5475ff34c19733aee4b2e69", size = 10436892 },
+ { url = "https://files.pythonhosted.org/packages/73/b2/af7c2cc9e438cbc19fafeec4f20bfcd72165460fe75b2b6e9a0958c8c62b/ruff-0.9.10-py3-none-linux_armv6l.whl", hash = "sha256:eb4d25532cfd9fe461acc83498361ec2e2252795b4f40b17e80692814329e42d", size = 10049494, upload-time = "2025-03-07T15:26:51.268Z" },
+ { url = "https://files.pythonhosted.org/packages/6d/12/03f6dfa1b95ddd47e6969f0225d60d9d7437c91938a310835feb27927ca0/ruff-0.9.10-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:188a6638dab1aa9bb6228a7302387b2c9954e455fb25d6b4470cb0641d16759d", size = 10853584, upload-time = "2025-03-07T15:26:56.104Z" },
+ { url = "https://files.pythonhosted.org/packages/02/49/1c79e0906b6ff551fb0894168763f705bf980864739572b2815ecd3c9df0/ruff-0.9.10-py3-none-macosx_11_0_arm64.whl", hash = "sha256:5284dcac6b9dbc2fcb71fdfc26a217b2ca4ede6ccd57476f52a587451ebe450d", size = 10155692, upload-time = "2025-03-07T15:27:01.385Z" },
+ { url = "https://files.pythonhosted.org/packages/5b/01/85e8082e41585e0e1ceb11e41c054e9e36fed45f4b210991052d8a75089f/ruff-0.9.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47678f39fa2a3da62724851107f438c8229a3470f533894b5568a39b40029c0c", size = 10369760, upload-time = "2025-03-07T15:27:04.023Z" },
+ { url = "https://files.pythonhosted.org/packages/a1/90/0bc60bd4e5db051f12445046d0c85cc2c617095c0904f1aa81067dc64aea/ruff-0.9.10-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:99713a6e2766b7a17147b309e8c915b32b07a25c9efd12ada79f217c9c778b3e", size = 9912196, upload-time = "2025-03-07T15:27:06.93Z" },
+ { url = "https://files.pythonhosted.org/packages/66/ea/0b7e8c42b1ec608033c4d5a02939c82097ddcb0b3e393e4238584b7054ab/ruff-0.9.10-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:524ee184d92f7c7304aa568e2db20f50c32d1d0caa235d8ddf10497566ea1a12", size = 11434985, upload-time = "2025-03-07T15:27:10.082Z" },
+ { url = "https://files.pythonhosted.org/packages/d5/86/3171d1eff893db4f91755175a6e1163c5887be1f1e2f4f6c0c59527c2bfd/ruff-0.9.10-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:df92aeac30af821f9acf819fc01b4afc3dfb829d2782884f8739fb52a8119a16", size = 12155842, upload-time = "2025-03-07T15:27:12.727Z" },
+ { url = "https://files.pythonhosted.org/packages/89/9e/700ca289f172a38eb0bca752056d0a42637fa17b81649b9331786cb791d7/ruff-0.9.10-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de42e4edc296f520bb84954eb992a07a0ec5a02fecb834498415908469854a52", size = 11613804, upload-time = "2025-03-07T15:27:15.944Z" },
+ { url = "https://files.pythonhosted.org/packages/f2/92/648020b3b5db180f41a931a68b1c8575cca3e63cec86fd26807422a0dbad/ruff-0.9.10-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d257f95b65806104b6b1ffca0ea53f4ef98454036df65b1eda3693534813ecd1", size = 13823776, upload-time = "2025-03-07T15:27:18.996Z" },
+ { url = "https://files.pythonhosted.org/packages/5e/a6/cc472161cd04d30a09d5c90698696b70c169eeba2c41030344194242db45/ruff-0.9.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b60dec7201c0b10d6d11be00e8f2dbb6f40ef1828ee75ed739923799513db24c", size = 11302673, upload-time = "2025-03-07T15:27:21.655Z" },
+ { url = "https://files.pythonhosted.org/packages/6c/db/d31c361c4025b1b9102b4d032c70a69adb9ee6fde093f6c3bf29f831c85c/ruff-0.9.10-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:d838b60007da7a39c046fcdd317293d10b845001f38bcb55ba766c3875b01e43", size = 10235358, upload-time = "2025-03-07T15:27:24.72Z" },
+ { url = "https://files.pythonhosted.org/packages/d1/86/d6374e24a14d4d93ebe120f45edd82ad7dcf3ef999ffc92b197d81cdc2a5/ruff-0.9.10-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:ccaf903108b899beb8e09a63ffae5869057ab649c1e9231c05ae354ebc62066c", size = 9886177, upload-time = "2025-03-07T15:27:27.282Z" },
+ { url = "https://files.pythonhosted.org/packages/00/62/a61691f6eaaac1e945a1f3f59f1eea9a218513139d5b6c2b8f88b43b5b8f/ruff-0.9.10-py3-none-musllinux_1_2_i686.whl", hash = "sha256:f9567d135265d46e59d62dc60c0bfad10e9a6822e231f5b24032dba5a55be6b5", size = 10864747, upload-time = "2025-03-07T15:27:30.637Z" },
+ { url = "https://files.pythonhosted.org/packages/ee/94/2c7065e1d92a8a8a46d46d9c3cf07b0aa7e0a1e0153d74baa5e6620b4102/ruff-0.9.10-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5f202f0d93738c28a89f8ed9eaba01b7be339e5d8d642c994347eaa81c6d75b8", size = 11360441, upload-time = "2025-03-07T15:27:33.356Z" },
+ { url = "https://files.pythonhosted.org/packages/a7/8f/1f545ea6f9fcd7bf4368551fb91d2064d8f0577b3079bb3f0ae5779fb773/ruff-0.9.10-py3-none-win32.whl", hash = "sha256:bfb834e87c916521ce46b1788fbb8484966e5113c02df216680102e9eb960029", size = 10247401, upload-time = "2025-03-07T15:27:35.994Z" },
+ { url = "https://files.pythonhosted.org/packages/4f/18/fb703603ab108e5c165f52f5b86ee2aa9be43bb781703ec87c66a5f5d604/ruff-0.9.10-py3-none-win_amd64.whl", hash = "sha256:f2160eeef3031bf4b17df74e307d4c5fb689a6f3a26a2de3f7ef4044e3c484f1", size = 11366360, upload-time = "2025-03-07T15:27:38.66Z" },
+ { url = "https://files.pythonhosted.org/packages/35/85/338e603dc68e7d9994d5d84f24adbf69bae760ba5efd3e20f5ff2cec18da/ruff-0.9.10-py3-none-win_arm64.whl", hash = "sha256:5fd804c0327a5e5ea26615550e706942f348b197d5475ff34c19733aee4b2e69", size = 10436892, upload-time = "2025-03-07T15:27:41.687Z" },
]
[[package]]
name = "soupsieve"
version = "2.6"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/d7/ce/fbaeed4f9fb8b2daa961f90591662df6a86c1abf25c548329a86920aedfb/soupsieve-2.6.tar.gz", hash = "sha256:e2e68417777af359ec65daac1057404a3c8a5455bb8abc36f1a9866ab1a51abb", size = 101569 }
+sdist = { url = "https://files.pythonhosted.org/packages/d7/ce/fbaeed4f9fb8b2daa961f90591662df6a86c1abf25c548329a86920aedfb/soupsieve-2.6.tar.gz", hash = "sha256:e2e68417777af359ec65daac1057404a3c8a5455bb8abc36f1a9866ab1a51abb", size = 101569, upload-time = "2024-08-13T13:39:12.166Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/d1/c2/fe97d779f3ef3b15f05c94a2f1e3d21732574ed441687474db9d342a7315/soupsieve-2.6-py3-none-any.whl", hash = "sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9", size = 36186 },
+ { url = "https://files.pythonhosted.org/packages/d1/c2/fe97d779f3ef3b15f05c94a2f1e3d21732574ed441687474db9d342a7315/soupsieve-2.6-py3-none-any.whl", hash = "sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9", size = 36186, upload-time = "2024-08-13T13:39:10.986Z" },
]
[[package]]
@@ -948,56 +1015,56 @@ dependencies = [
{ name = "executing" },
{ name = "pure-eval" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707 }
+sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707, upload-time = "2023-09-30T13:58:05.479Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521 },
+ { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521, upload-time = "2023-09-30T13:58:03.53Z" },
]
[[package]]
name = "toml"
version = "0.10.2"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/be/ba/1f744cdc819428fc6b5084ec34d9b30660f6f9daaf70eead706e3203ec3c/toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f", size = 22253 }
+sdist = { url = "https://files.pythonhosted.org/packages/be/ba/1f744cdc819428fc6b5084ec34d9b30660f6f9daaf70eead706e3203ec3c/toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f", size = 22253, upload-time = "2020-11-01T01:40:22.204Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/44/6f/7120676b6d73228c96e17f1f794d8ab046fc910d781c8d151120c3f1569e/toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", size = 16588 },
+ { url = "https://files.pythonhosted.org/packages/44/6f/7120676b6d73228c96e17f1f794d8ab046fc910d781c8d151120c3f1569e/toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", size = 16588, upload-time = "2020-11-01T01:40:20.672Z" },
]
[[package]]
name = "tomli"
version = "2.2.1"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/18/87/302344fed471e44a87289cf4967697d07e532f2421fdaf868a303cbae4ff/tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff", size = 17175 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/43/ca/75707e6efa2b37c77dadb324ae7d9571cb424e61ea73fad7c56c2d14527f/tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249", size = 131077 },
- { url = "https://files.pythonhosted.org/packages/c7/16/51ae563a8615d472fdbffc43a3f3d46588c264ac4f024f63f01283becfbb/tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6", size = 123429 },
- { url = "https://files.pythonhosted.org/packages/f1/dd/4f6cd1e7b160041db83c694abc78e100473c15d54620083dbd5aae7b990e/tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a", size = 226067 },
- { url = "https://files.pythonhosted.org/packages/a9/6b/c54ede5dc70d648cc6361eaf429304b02f2871a345bbdd51e993d6cdf550/tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee", size = 236030 },
- { url = "https://files.pythonhosted.org/packages/1f/47/999514fa49cfaf7a92c805a86c3c43f4215621855d151b61c602abb38091/tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e", size = 240898 },
- { url = "https://files.pythonhosted.org/packages/73/41/0a01279a7ae09ee1573b423318e7934674ce06eb33f50936655071d81a24/tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4", size = 229894 },
- { url = "https://files.pythonhosted.org/packages/55/18/5d8bc5b0a0362311ce4d18830a5d28943667599a60d20118074ea1b01bb7/tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106", size = 245319 },
- { url = "https://files.pythonhosted.org/packages/92/a3/7ade0576d17f3cdf5ff44d61390d4b3febb8a9fc2b480c75c47ea048c646/tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8", size = 238273 },
- { url = "https://files.pythonhosted.org/packages/72/6f/fa64ef058ac1446a1e51110c375339b3ec6be245af9d14c87c4a6412dd32/tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff", size = 98310 },
- { url = "https://files.pythonhosted.org/packages/6a/1c/4a2dcde4a51b81be3530565e92eda625d94dafb46dbeb15069df4caffc34/tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b", size = 108309 },
- { url = "https://files.pythonhosted.org/packages/52/e1/f8af4c2fcde17500422858155aeb0d7e93477a0d59a98e56cbfe75070fd0/tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea", size = 132762 },
- { url = "https://files.pythonhosted.org/packages/03/b8/152c68bb84fc00396b83e7bbddd5ec0bd3dd409db4195e2a9b3e398ad2e3/tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8", size = 123453 },
- { url = "https://files.pythonhosted.org/packages/c8/d6/fc9267af9166f79ac528ff7e8c55c8181ded34eb4b0e93daa767b8841573/tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192", size = 233486 },
- { url = "https://files.pythonhosted.org/packages/5c/51/51c3f2884d7bab89af25f678447ea7d297b53b5a3b5730a7cb2ef6069f07/tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222", size = 242349 },
- { url = "https://files.pythonhosted.org/packages/ab/df/bfa89627d13a5cc22402e441e8a931ef2108403db390ff3345c05253935e/tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77", size = 252159 },
- { url = "https://files.pythonhosted.org/packages/9e/6e/fa2b916dced65763a5168c6ccb91066f7639bdc88b48adda990db10c8c0b/tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6", size = 237243 },
- { url = "https://files.pythonhosted.org/packages/b4/04/885d3b1f650e1153cbb93a6a9782c58a972b94ea4483ae4ac5cedd5e4a09/tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd", size = 259645 },
- { url = "https://files.pythonhosted.org/packages/9c/de/6b432d66e986e501586da298e28ebeefd3edc2c780f3ad73d22566034239/tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e", size = 244584 },
- { url = "https://files.pythonhosted.org/packages/1c/9a/47c0449b98e6e7d1be6cbac02f93dd79003234ddc4aaab6ba07a9a7482e2/tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98", size = 98875 },
- { url = "https://files.pythonhosted.org/packages/ef/60/9b9638f081c6f1261e2688bd487625cd1e660d0a85bd469e91d8db969734/tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4", size = 109418 },
- { url = "https://files.pythonhosted.org/packages/6e/c2/61d3e0f47e2b74ef40a68b9e6ad5984f6241a942f7cd3bbfbdbd03861ea9/tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc", size = 14257 },
+sdist = { url = "https://files.pythonhosted.org/packages/18/87/302344fed471e44a87289cf4967697d07e532f2421fdaf868a303cbae4ff/tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff", size = 17175, upload-time = "2024-11-27T22:38:36.873Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/43/ca/75707e6efa2b37c77dadb324ae7d9571cb424e61ea73fad7c56c2d14527f/tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249", size = 131077, upload-time = "2024-11-27T22:37:54.956Z" },
+ { url = "https://files.pythonhosted.org/packages/c7/16/51ae563a8615d472fdbffc43a3f3d46588c264ac4f024f63f01283becfbb/tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6", size = 123429, upload-time = "2024-11-27T22:37:56.698Z" },
+ { url = "https://files.pythonhosted.org/packages/f1/dd/4f6cd1e7b160041db83c694abc78e100473c15d54620083dbd5aae7b990e/tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a", size = 226067, upload-time = "2024-11-27T22:37:57.63Z" },
+ { url = "https://files.pythonhosted.org/packages/a9/6b/c54ede5dc70d648cc6361eaf429304b02f2871a345bbdd51e993d6cdf550/tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee", size = 236030, upload-time = "2024-11-27T22:37:59.344Z" },
+ { url = "https://files.pythonhosted.org/packages/1f/47/999514fa49cfaf7a92c805a86c3c43f4215621855d151b61c602abb38091/tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e", size = 240898, upload-time = "2024-11-27T22:38:00.429Z" },
+ { url = "https://files.pythonhosted.org/packages/73/41/0a01279a7ae09ee1573b423318e7934674ce06eb33f50936655071d81a24/tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4", size = 229894, upload-time = "2024-11-27T22:38:02.094Z" },
+ { url = "https://files.pythonhosted.org/packages/55/18/5d8bc5b0a0362311ce4d18830a5d28943667599a60d20118074ea1b01bb7/tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106", size = 245319, upload-time = "2024-11-27T22:38:03.206Z" },
+ { url = "https://files.pythonhosted.org/packages/92/a3/7ade0576d17f3cdf5ff44d61390d4b3febb8a9fc2b480c75c47ea048c646/tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8", size = 238273, upload-time = "2024-11-27T22:38:04.217Z" },
+ { url = "https://files.pythonhosted.org/packages/72/6f/fa64ef058ac1446a1e51110c375339b3ec6be245af9d14c87c4a6412dd32/tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff", size = 98310, upload-time = "2024-11-27T22:38:05.908Z" },
+ { url = "https://files.pythonhosted.org/packages/6a/1c/4a2dcde4a51b81be3530565e92eda625d94dafb46dbeb15069df4caffc34/tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b", size = 108309, upload-time = "2024-11-27T22:38:06.812Z" },
+ { url = "https://files.pythonhosted.org/packages/52/e1/f8af4c2fcde17500422858155aeb0d7e93477a0d59a98e56cbfe75070fd0/tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea", size = 132762, upload-time = "2024-11-27T22:38:07.731Z" },
+ { url = "https://files.pythonhosted.org/packages/03/b8/152c68bb84fc00396b83e7bbddd5ec0bd3dd409db4195e2a9b3e398ad2e3/tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8", size = 123453, upload-time = "2024-11-27T22:38:09.384Z" },
+ { url = "https://files.pythonhosted.org/packages/c8/d6/fc9267af9166f79ac528ff7e8c55c8181ded34eb4b0e93daa767b8841573/tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192", size = 233486, upload-time = "2024-11-27T22:38:10.329Z" },
+ { url = "https://files.pythonhosted.org/packages/5c/51/51c3f2884d7bab89af25f678447ea7d297b53b5a3b5730a7cb2ef6069f07/tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222", size = 242349, upload-time = "2024-11-27T22:38:11.443Z" },
+ { url = "https://files.pythonhosted.org/packages/ab/df/bfa89627d13a5cc22402e441e8a931ef2108403db390ff3345c05253935e/tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77", size = 252159, upload-time = "2024-11-27T22:38:13.099Z" },
+ { url = "https://files.pythonhosted.org/packages/9e/6e/fa2b916dced65763a5168c6ccb91066f7639bdc88b48adda990db10c8c0b/tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6", size = 237243, upload-time = "2024-11-27T22:38:14.766Z" },
+ { url = "https://files.pythonhosted.org/packages/b4/04/885d3b1f650e1153cbb93a6a9782c58a972b94ea4483ae4ac5cedd5e4a09/tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd", size = 259645, upload-time = "2024-11-27T22:38:15.843Z" },
+ { url = "https://files.pythonhosted.org/packages/9c/de/6b432d66e986e501586da298e28ebeefd3edc2c780f3ad73d22566034239/tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e", size = 244584, upload-time = "2024-11-27T22:38:17.645Z" },
+ { url = "https://files.pythonhosted.org/packages/1c/9a/47c0449b98e6e7d1be6cbac02f93dd79003234ddc4aaab6ba07a9a7482e2/tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98", size = 98875, upload-time = "2024-11-27T22:38:19.159Z" },
+ { url = "https://files.pythonhosted.org/packages/ef/60/9b9638f081c6f1261e2688bd487625cd1e660d0a85bd469e91d8db969734/tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4", size = 109418, upload-time = "2024-11-27T22:38:20.064Z" },
+ { url = "https://files.pythonhosted.org/packages/6e/c2/61d3e0f47e2b74ef40a68b9e6ad5984f6241a942f7cd3bbfbdbd03861ea9/tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc", size = 14257, upload-time = "2024-11-27T22:38:35.385Z" },
]
[[package]]
name = "traitlets"
version = "5.14.3"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621 }
+sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621, upload-time = "2024-04-19T11:11:49.746Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359 },
+ { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359, upload-time = "2024-04-19T11:11:46.763Z" },
]
[[package]]
@@ -1007,36 +1074,36 @@ source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "uuid6" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/8d/09/b9b747c4f5f47e32fcb49d2a61c1235838df22bd02445507f60744bb6759/typeid_python-0.3.2.tar.gz", hash = "sha256:07d176af35ba75a10721ffd73f70e9582bc2705d3b4cb3d8df956e3221eaf2a6", size = 6934 }
+sdist = { url = "https://files.pythonhosted.org/packages/8d/09/b9b747c4f5f47e32fcb49d2a61c1235838df22bd02445507f60744bb6759/typeid_python-0.3.2.tar.gz", hash = "sha256:07d176af35ba75a10721ffd73f70e9582bc2705d3b4cb3d8df956e3221eaf2a6", size = 6934, upload-time = "2025-03-10T15:34:14.374Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/8a/24/f5f6373f168c362c861c89fc7f7b3750968784ab90b0162bdc6cf77ad0bf/typeid_python-0.3.2-py3-none-any.whl", hash = "sha256:d4fc91e12152df9f7a468655c5fbd1824fb1b706a19ffdce0e7fcef4520ed139", size = 7229 },
+ { url = "https://files.pythonhosted.org/packages/8a/24/f5f6373f168c362c861c89fc7f7b3750968784ab90b0162bdc6cf77ad0bf/typeid_python-0.3.2-py3-none-any.whl", hash = "sha256:d4fc91e12152df9f7a468655c5fbd1824fb1b706a19ffdce0e7fcef4520ed139", size = 7229, upload-time = "2025-03-10T15:34:10.876Z" },
]
[[package]]
name = "typing-extensions"
version = "4.12.2"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/df/db/f35a00659bc03fec321ba8bce9420de607a1d37f8342eee1863174c69557/typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8", size = 85321 }
+sdist = { url = "https://files.pythonhosted.org/packages/df/db/f35a00659bc03fec321ba8bce9420de607a1d37f8342eee1863174c69557/typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8", size = 85321, upload-time = "2024-06-07T18:52:15.995Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", size = 37438 },
+ { url = "https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", size = 37438, upload-time = "2024-06-07T18:52:13.582Z" },
]
[[package]]
name = "urllib3"
version = "2.3.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/aa/63/e53da845320b757bf29ef6a9062f5c669fe997973f966045cb019c3f4b66/urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d", size = 307268 }
+sdist = { url = "https://files.pythonhosted.org/packages/aa/63/e53da845320b757bf29ef6a9062f5c669fe997973f966045cb019c3f4b66/urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d", size = 307268, upload-time = "2024-12-22T07:47:30.032Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/c8/19/4ec628951a74043532ca2cf5d97b7b14863931476d117c471e8e2b1eb39f/urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", size = 128369 },
+ { url = "https://files.pythonhosted.org/packages/c8/19/4ec628951a74043532ca2cf5d97b7b14863931476d117c471e8e2b1eb39f/urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", size = 128369, upload-time = "2024-12-22T07:47:28.074Z" },
]
[[package]]
name = "uuid6"
version = "2024.7.10"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/2c/56/2560a9f1ccab9e12b1b3478a3c870796cf4d8ee5652bb19b61751cced14a/uuid6-2024.7.10.tar.gz", hash = "sha256:2d29d7f63f593caaeea0e0d0dd0ad8129c9c663b29e19bdf882e864bedf18fb0", size = 8705 }
+sdist = { url = "https://files.pythonhosted.org/packages/2c/56/2560a9f1ccab9e12b1b3478a3c870796cf4d8ee5652bb19b61751cced14a/uuid6-2024.7.10.tar.gz", hash = "sha256:2d29d7f63f593caaeea0e0d0dd0ad8129c9c663b29e19bdf882e864bedf18fb0", size = 8705, upload-time = "2024-07-10T16:39:37.592Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/d3/3e/4ae6af487ce5781ed71d5fe10aca72e7cbc4d4f45afc31b120287082a8dd/uuid6-2024.7.10-py3-none-any.whl", hash = "sha256:93432c00ba403751f722829ad21759ff9db051dea140bf81493271e8e4dd18b7", size = 6376 },
+ { url = "https://files.pythonhosted.org/packages/d3/3e/4ae6af487ce5781ed71d5fe10aca72e7cbc4d4f45afc31b120287082a8dd/uuid6-2024.7.10-py3-none-any.whl", hash = "sha256:93432c00ba403751f722829ad21759ff9db051dea140bf81493271e8e4dd18b7", size = 6376, upload-time = "2024-07-10T16:39:36.148Z" },
]
[[package]]
@@ -1048,16 +1115,16 @@ dependencies = [
{ name = "filelock" },
{ name = "platformdirs" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/c7/9c/57d19fa093bcf5ac61a48087dd44d00655f85421d1aa9722f8befbf3f40a/virtualenv-20.29.3.tar.gz", hash = "sha256:95e39403fcf3940ac45bc717597dba16110b74506131845d9b687d5e73d947ac", size = 4320280 }
+sdist = { url = "https://files.pythonhosted.org/packages/c7/9c/57d19fa093bcf5ac61a48087dd44d00655f85421d1aa9722f8befbf3f40a/virtualenv-20.29.3.tar.gz", hash = "sha256:95e39403fcf3940ac45bc717597dba16110b74506131845d9b687d5e73d947ac", size = 4320280, upload-time = "2025-03-06T19:54:19.055Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/c2/eb/c6db6e3001d58c6a9e67c74bb7b4206767caa3ccc28c6b9eaf4c23fb4e34/virtualenv-20.29.3-py3-none-any.whl", hash = "sha256:3e3d00f5807e83b234dfb6122bf37cfadf4be216c53a49ac059d02414f819170", size = 4301458 },
+ { url = "https://files.pythonhosted.org/packages/c2/eb/c6db6e3001d58c6a9e67c74bb7b4206767caa3ccc28c6b9eaf4c23fb4e34/virtualenv-20.29.3-py3-none-any.whl", hash = "sha256:3e3d00f5807e83b234dfb6122bf37cfadf4be216c53a49ac059d02414f819170", size = 4301458, upload-time = "2025-03-06T19:54:16.923Z" },
]
[[package]]
name = "wcwidth"
version = "0.2.13"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/6c/63/53559446a878410fc5a5974feb13d31d78d752eb18aeba59c7fef1af7598/wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5", size = 101301 }
+sdist = { url = "https://files.pythonhosted.org/packages/6c/63/53559446a878410fc5a5974feb13d31d78d752eb18aeba59c7fef1af7598/wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5", size = 101301, upload-time = "2024-01-06T02:10:57.829Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166 },
+ { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166, upload-time = "2024-01-06T02:10:55.763Z" },
]
From bf5a947d009ee4bc01f9367e23c5c60d9177914a Mon Sep 17 00:00:00 2001
From: Onur Solmaz <2453968+osolmaz@users.noreply.github.com>
Date: Thu, 22 May 2025 16:37:17 +0200
Subject: [PATCH 09/11] Add example html and css files over from notion
---
.../BlockPropertyRouter-5f55d314f6df5aa4.css | 17 +
.../CollectionViewBlock-5f55d314f6df5aa4.css | 17 +
...ecentsCachingListener-5f55d314f6df5aa4.css | 17 +
.../SidebarComponent-5f55d314f6df5aa4.css | 17 +
.../SidebarInboxButton-5f55d314f6df5aa4.css | 17 +
.../notion/frontend/app-1d44fd1ebc9a62fd.css | 2348 ++++
.../consoleHelpers-5f55d314f6df5aa4.css | 17 +
.../frontend/imageEdit-99425a3fac7fea0a.css | 298 +
.../frontend/mainApp-5f55d314f6df5aa4.css | 17 +
examples/notion/frontend/notion_frame1.html | 10977 ++++++++++++++++
.../frontend/notion_frame1_reduced.html | 2499 ++++
examples/notion/frontend/reduce_html.py | 8 +
.../frontend/sidebar-5f55d314f6df5aa4.css | 17 +
13 files changed, 16266 insertions(+)
create mode 100644 examples/notion/frontend/BlockPropertyRouter-5f55d314f6df5aa4.css
create mode 100644 examples/notion/frontend/CollectionViewBlock-5f55d314f6df5aa4.css
create mode 100644 examples/notion/frontend/RecentsCachingListener-5f55d314f6df5aa4.css
create mode 100644 examples/notion/frontend/SidebarComponent-5f55d314f6df5aa4.css
create mode 100644 examples/notion/frontend/SidebarInboxButton-5f55d314f6df5aa4.css
create mode 100644 examples/notion/frontend/app-1d44fd1ebc9a62fd.css
create mode 100644 examples/notion/frontend/consoleHelpers-5f55d314f6df5aa4.css
create mode 100644 examples/notion/frontend/imageEdit-99425a3fac7fea0a.css
create mode 100644 examples/notion/frontend/mainApp-5f55d314f6df5aa4.css
create mode 100644 examples/notion/frontend/notion_frame1.html
create mode 100644 examples/notion/frontend/notion_frame1_reduced.html
create mode 100644 examples/notion/frontend/sidebar-5f55d314f6df5aa4.css
diff --git a/examples/notion/frontend/BlockPropertyRouter-5f55d314f6df5aa4.css b/examples/notion/frontend/BlockPropertyRouter-5f55d314f6df5aa4.css
new file mode 100644
index 0000000..b79f970
--- /dev/null
+++ b/examples/notion/frontend/BlockPropertyRouter-5f55d314f6df5aa4.css
@@ -0,0 +1,17 @@
+.nds-shimmer-text {
+ -webkit-text-fill-color: #0000;
+ animation: nds-shimmer-text 1.5s linear infinite;
+ background-clip: text;
+ -webkit-background-clip: text;
+ background-repeat: repeat;
+ background-size: 200% 100%;
+ user-select: none;
+}
+@keyframes nds-shimmer-text {
+ 0% {
+ background-position: 200% 50%;
+ }
+ to {
+ background-position: 0 50%;
+ }
+}
diff --git a/examples/notion/frontend/CollectionViewBlock-5f55d314f6df5aa4.css b/examples/notion/frontend/CollectionViewBlock-5f55d314f6df5aa4.css
new file mode 100644
index 0000000..b79f970
--- /dev/null
+++ b/examples/notion/frontend/CollectionViewBlock-5f55d314f6df5aa4.css
@@ -0,0 +1,17 @@
+.nds-shimmer-text {
+ -webkit-text-fill-color: #0000;
+ animation: nds-shimmer-text 1.5s linear infinite;
+ background-clip: text;
+ -webkit-background-clip: text;
+ background-repeat: repeat;
+ background-size: 200% 100%;
+ user-select: none;
+}
+@keyframes nds-shimmer-text {
+ 0% {
+ background-position: 200% 50%;
+ }
+ to {
+ background-position: 0 50%;
+ }
+}
diff --git a/examples/notion/frontend/RecentsCachingListener-5f55d314f6df5aa4.css b/examples/notion/frontend/RecentsCachingListener-5f55d314f6df5aa4.css
new file mode 100644
index 0000000..b79f970
--- /dev/null
+++ b/examples/notion/frontend/RecentsCachingListener-5f55d314f6df5aa4.css
@@ -0,0 +1,17 @@
+.nds-shimmer-text {
+ -webkit-text-fill-color: #0000;
+ animation: nds-shimmer-text 1.5s linear infinite;
+ background-clip: text;
+ -webkit-background-clip: text;
+ background-repeat: repeat;
+ background-size: 200% 100%;
+ user-select: none;
+}
+@keyframes nds-shimmer-text {
+ 0% {
+ background-position: 200% 50%;
+ }
+ to {
+ background-position: 0 50%;
+ }
+}
diff --git a/examples/notion/frontend/SidebarComponent-5f55d314f6df5aa4.css b/examples/notion/frontend/SidebarComponent-5f55d314f6df5aa4.css
new file mode 100644
index 0000000..b79f970
--- /dev/null
+++ b/examples/notion/frontend/SidebarComponent-5f55d314f6df5aa4.css
@@ -0,0 +1,17 @@
+.nds-shimmer-text {
+ -webkit-text-fill-color: #0000;
+ animation: nds-shimmer-text 1.5s linear infinite;
+ background-clip: text;
+ -webkit-background-clip: text;
+ background-repeat: repeat;
+ background-size: 200% 100%;
+ user-select: none;
+}
+@keyframes nds-shimmer-text {
+ 0% {
+ background-position: 200% 50%;
+ }
+ to {
+ background-position: 0 50%;
+ }
+}
diff --git a/examples/notion/frontend/SidebarInboxButton-5f55d314f6df5aa4.css b/examples/notion/frontend/SidebarInboxButton-5f55d314f6df5aa4.css
new file mode 100644
index 0000000..b79f970
--- /dev/null
+++ b/examples/notion/frontend/SidebarInboxButton-5f55d314f6df5aa4.css
@@ -0,0 +1,17 @@
+.nds-shimmer-text {
+ -webkit-text-fill-color: #0000;
+ animation: nds-shimmer-text 1.5s linear infinite;
+ background-clip: text;
+ -webkit-background-clip: text;
+ background-repeat: repeat;
+ background-size: 200% 100%;
+ user-select: none;
+}
+@keyframes nds-shimmer-text {
+ 0% {
+ background-position: 200% 50%;
+ }
+ to {
+ background-position: 0 50%;
+ }
+}
diff --git a/examples/notion/frontend/app-1d44fd1ebc9a62fd.css b/examples/notion/frontend/app-1d44fd1ebc9a62fd.css
new file mode 100644
index 0000000..c32df60
--- /dev/null
+++ b/examples/notion/frontend/app-1d44fd1ebc9a62fd.css
@@ -0,0 +1,2348 @@
+@font-face {
+ font-family: Lyon-Text;
+ font-style: normal;
+ font-weight: 400;
+ src: url(/_assets/lyon-text-regular-3be84b20b1d9ff1e3456b0a220ae449b.woff)
+ format("woff");
+}
+@font-face {
+ font-family: Lyon-Text;
+ font-style: italic;
+ font-weight: 400;
+ src: url(/_assets/lyon-text-regular-italic-437d32a42fc5b8268bb4a1e0cc8b363f.woff)
+ format("woff");
+}
+@font-face {
+ font-family: Lyon-Text;
+ font-style: normal;
+ font-weight: 600;
+ src: url(/_assets/lyon-text-semibold-acb7f110189034ff6a1afa4b730be0ed.woff)
+ format("woff");
+}
+@font-face {
+ font-family: Lyon-Text;
+ font-style: italic;
+ font-weight: 600;
+ src: url(/_assets/lyon-text-semibold-italic-1f81a2f93060f05edd7f078ac91f25e6.woff)
+ format("woff");
+}
+@font-face {
+ font-family: iawriter-mono;
+ font-style: normal;
+ font-weight: 400;
+ src: url(/_assets/iawriter-mono-regular-4b73d071988a4f1cd2283524716ad970.woff)
+ format("woff");
+}
+@font-face {
+ font-family: iawriter-mono;
+ font-style: italic;
+ font-weight: 400;
+ src: url(/_assets/iawriter-mono-italic-d5d3224c1377168e261efc6aa0ce89c6.woff)
+ format("woff");
+}
+@font-face {
+ font-family: iawriter-mono;
+ font-style: normal;
+ font-weight: 600;
+ src: url(/_assets/iawriter-mono-bold-eb96a5e539892d26cf8b0cb2367e3580.woff)
+ format("woff");
+}
+@font-face {
+ font-family: iawriter-mono;
+ font-style: italic;
+ font-weight: 600;
+ src: url(/_assets/iawriter-mono-bold-italic-743b231fa82483406c79a00fa1f12fe8.woff)
+ format("woff");
+}
+@font-face {
+ font-family: inter;
+ font-style: normal;
+ font-weight: 400;
+ src: url(/_assets/inter-ui-regular-3ae6a7d3890c33d857fc00bd2e4c4820.woff)
+ format("woff");
+}
+@font-face {
+ font-family: inter;
+ font-style: normal;
+ font-weight: 500;
+ src: url(/_assets/inter-ui-medium-95b8a98959d1af9ab432d7ffe295ef94.woff)
+ format("woff");
+}
+@font-face {
+ font-family: inter;
+ font-style: normal;
+ font-weight: 600;
+ src: url(/_assets/inter-ui-semibold-19b57197b819695d334b9961ee41910e.woff)
+ format("woff");
+}
+@font-face {
+ font-family: inter;
+ font-style: normal;
+ font-weight: 700;
+ src: url(/_assets/inter-ui-bold-001893789f7f342b520f29ac8af7d6ca.woff)
+ format("woff");
+}
+@font-face {
+ font-family: permanent-marker;
+ font-style: normal;
+ font-weight: 400;
+ src: url(/_assets/permanent-marker-a6d62939e7c920a184ddddcf4149e62c.woff)
+ format("woff");
+}
+.notion-frame .katex-display .katex {
+ padding-right: 32px;
+}
+.notion-frame .katex > .katex-html {
+ white-space: normal;
+}
+.notion-frame .katex-display .base {
+ margin-bottom: 2px;
+ margin-top: 2px;
+}
+.notion-frame .notion-text-equation-token .katex {
+ line-height: 1;
+}
+
+/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
+html {
+ -ms-text-size-adjust: 100%;
+ -webkit-text-size-adjust: 100%;
+ font-family: sans-serif;
+}
+body {
+ margin: 0;
+}
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+menu,
+nav,
+section,
+summary {
+ display: block;
+}
+audio,
+canvas,
+progress,
+video {
+ display: inline-block;
+ vertical-align: initial;
+}
+audio:not([controls]) {
+ display: none;
+ height: 0;
+}
+[hidden],
+template {
+ display: none;
+}
+a {
+ background-color: initial;
+}
+a:active,
+a:hover {
+ outline: 0;
+}
+abbr[title] {
+ border-bottom: 1px dotted;
+}
+b,
+strong {
+ font-weight: 700;
+}
+dfn {
+ font-style: italic;
+}
+h1 {
+ font-size: 2em;
+ margin: 0.67em 0;
+}
+mark {
+ background: #ff0;
+ color: #000;
+}
+small {
+ font-size: 80%;
+}
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: initial;
+}
+sup {
+ top: -0.5em;
+}
+sub {
+ bottom: -0.25em;
+}
+img {
+ border: 0;
+}
+figure {
+ margin: 1em 40px;
+}
+hr {
+ -moz-box-sizing: content-box;
+ box-sizing: initial;
+ height: 0;
+}
+code,
+kbd,
+pre,
+samp {
+ font-family: inherit;
+}
+button,
+input,
+optgroup,
+select,
+textarea {
+ color: inherit;
+ font: inherit;
+ margin: 0;
+}
+button {
+ overflow: visible;
+}
+button,
+select {
+ text-transform: none;
+}
+button,
+html input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+ -webkit-appearance: button;
+ cursor: pointer;
+}
+button[disabled],
+html input[disabled] {
+ cursor: default;
+}
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+input[type="checkbox"],
+input[type="radio"] {
+ box-sizing: border-box;
+ padding: 0;
+}
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+input[type="search"] {
+ -webkit-appearance: textfield;
+ -moz-box-sizing: content-box;
+ -webkit-box-sizing: content-box;
+ box-sizing: initial;
+}
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+fieldset {
+ border: 1px solid silver;
+ margin: 0 2px;
+ padding: 0.35em 0.625em 0.75em;
+}
+legend {
+ border: 0;
+ padding: 0;
+}
+textarea {
+ overflow: auto;
+}
+optgroup {
+ font-weight: 700;
+}
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+td,
+th {
+ padding: 0;
+}
+.notion-link {
+ transition: 0.1s ease-in;
+}
+.notion-link:hover {
+ color: #eb5757 !important;
+}
+.notion-link-ai-version {
+ transition: 0.1s ease-in;
+}
+.notion-link-ai-version:hover {
+ color: #ca59ff !important;
+}
+.notion-link-blue:hover {
+ color: #2383e2 !important;
+}
+.notion-ai-icon {
+ transition: 0.1s ease-in;
+}
+.notion-ai-icon:hover {
+ filter: brightness(1.3);
+}
+.notion-mobile-tapping {
+ opacity: 0.6;
+}
+.notion-reminder.notion-enable-hover:hover {
+ text-decoration: underline;
+}
+.notion-token-remove-button:hover {
+ opacity: 0.8;
+}
+.notion-notion-external-object,
+.notion-page-mention-token,
+.notion-team-mention-token {
+ box-shadow: 0 0 0 3px #94949400;
+}
+.notion-external-object-token.notion-enable-hover:hover,
+.notion-link-mention-token.notion-enable-hover:hover,
+.notion-page-mention-token.notion-enable-hover:hover,
+.notion-team-mention-token.notion-enable-hover:hover {
+ background: #94949426;
+ border-radius: 1px;
+ box-shadow: 0 0 0 3px #94949426;
+ cursor: pointer !important;
+}
+.notion-external-object-token::selection,
+.notion-page-mention-token::selection,
+.notion-team-mention-token::selection {
+ background: #2383e224;
+}
+.notion-citation-mention-token {
+ background-color: initial;
+ border: 1px solid #0000001a;
+}
+.notion-dark-theme .notion-citation-mention-token {
+ background-color: initial;
+ border: 1px solid #ffffff1a;
+}
+.notion-citation-mention-token.notion-enable-hover:hover {
+ border: 1px solid #0000002e;
+}
+.notion-dark-theme .notion-citation-mention-token.notion-enable-hover:hover {
+ border: 1px solid #ffffff2e;
+}
+.notion-focusable-within:focus-within {
+ box-shadow:
+ inset 0 0 0 1px #2383e291,
+ 0 0 0 2px #2383e259 !important;
+}
+.notion-focusable-token:focus-visible {
+ box-shadow:
+ inset 0 0 0 1px #2383e291,
+ 0 0 0 2px #2383e259 !important;
+}
+.notion-cursor-default {
+ cursor: default;
+}
+.notion-cursor-pointer {
+ cursor: pointer;
+}
+.notion-sidebar-container,
+.notion-topbar {
+ cursor: default;
+}
+.notion-disable-local-cursor .notion-cursor-default,
+.notion-disable-local-cursor .notion-cursor-pointer,
+.notion-disable-local-cursor .notion-sidebar-container,
+.notion-disable-local-cursor .notion-topbar {
+ cursor: inherit;
+}
+.notion-disable-webkit-user-select,
+.notion-disable-webkit-user-select * {
+ -webkit-user-select: none;
+}
+#notion-app a {
+ cursor: inherit;
+}
+.notion-fadein {
+ animation: fadein 0.33s ease-in;
+}
+.notion-fadein-fast {
+ animation: fadein 0.23s ease-in;
+}
+.notion-fadein-slow {
+ animation: fadein 0.6s ease-in;
+}
+@keyframes fadein {
+ 0% {
+ opacity: 0;
+ }
+ to {
+ opacity: 1;
+ }
+}
+.line-numbers .line-numbers-rows {
+ border-right: none !important;
+}
+.line-numbers-rows > span:before {
+ color: #ccc !important;
+}
+.notion-desktop-drag-area {
+ app-region: drag;
+}
+.notion-desktop-drag-area [role="button"],
+.notion-desktop-drag-area [role="link"],
+.notion-desktop-drag-area input {
+ app-region: no-drag;
+}
+.notion-mobile * {
+ -webkit-tap-highlight-color: transparent;
+}
+.notion-subpixel-antialiasing-off * {
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+#notion-app,
+body.notion-body,
+html.notion-html {
+ background-color: initial;
+ height: 100vh;
+ overflow: hidden;
+ position: relative;
+}
+.notion-app-inner {
+ height: 100%;
+}
+html.notion-mobile:not(.notion-front-page) div:not([contenteditable]) {
+ -webkit-user-select: none;
+}
+html.notion-mobile:not(.notion-front-page)
+ body:not(.notion-disable-webkit-user-select)
+ [contenteditable] {
+ -webkit-user-select: text;
+}
+html.notion-front-page,
+html.notion-front-page #notion-app,
+html.notion-front-page body {
+ background: #fffefc;
+ overflow-x: initial;
+ overflow-y: auto;
+}
+html.notion-front-page body.disable-scroll {
+ overflow: hidden;
+}
+html.notion-front-page .notion-app-inner {
+ height: auto;
+}
+:root {
+ --full-viewport-height: 100vh;
+}
+[contenteditable]:empty:after {
+ content: attr(placeholder);
+}
+[contenteditable] .empty-content-editable-selection-target:before {
+ content: attr(placeholder);
+ left: 0;
+ position: absolute;
+ width: max-content;
+}
+.form-question-title .pseudoAfter[contenteditable]:empty:before {
+ content: attr(placeholder);
+}
+.form-question-title .pseudoAfter[contenteditable]:empty:after {
+ content: var(--pseudoAfter--content);
+}
+#intercom-container {
+ z-index: 1000 !important;
+}
+.token.operator.operator {
+ background: #0000;
+}
+#box-app-container > div {
+ align-items: center;
+ background: #ffffff80;
+ display: flex;
+ height: 100vh;
+ justify-content: center;
+ position: absolute;
+ top: 0;
+ width: 100vw;
+ z-index: 1000;
+}
+#box-app-container .be-app-element {
+ background: #fff;
+ box-shadow: 0 1px 4px #00000040;
+ height: calc(100% - 150px);
+ max-height: 620px;
+ max-width: 1150px;
+ width: calc(100% - 150px);
+}
+@keyframes snackbar-slide-in-top {
+ 0% {
+ opacity: 0;
+ transform: translateY(-50px);
+ }
+ to {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+@keyframes snackbar-slide-in-bottom {
+ 0% {
+ opacity: 0;
+ transform: translateY(50px);
+ }
+ to {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+@-webkit-keyframes rotate {
+ 0% {
+ -webkit-transform: rotate(0deg) translateZ(0);
+ transform: rotate(0deg) translateZ(0);
+ }
+ to {
+ -webkit-transform: rotate(1turn) translateZ(0);
+ transform: rotate(1turn) translateZ(0);
+ }
+}
+@keyframes rotate {
+ 0% {
+ -webkit-transform: rotate(0deg) translateZ(0);
+ transform: rotate(0deg) translateZ(0);
+ }
+ to {
+ -webkit-transform: rotate(1turn) translateZ(0);
+ transform: rotate(1turn) translateZ(0);
+ }
+}
+.loading-dots {
+ align-items: center;
+ display: flex;
+ gap: 2px;
+ height: 16px;
+ justify-content: center;
+ width: 16px;
+}
+.loading-dot {
+ animation-direction: alternate;
+ animation-duration: 0.5s;
+ animation-iteration-count: infinite;
+ animation-name: dotdance;
+ animation-timing-function: cubic-bezier(0.11, 0, 0.5, 0);
+ background-color: #a782c3;
+ border-radius: 100%;
+ height: 4px;
+ opacity: 0.6;
+ width: 4px;
+}
+.loading-dots .loading-dot:first-child {
+ animation-delay: 0.2s;
+}
+.loading-dots .loading-dot:nth-child(2) {
+ animation-delay: 0.4s;
+}
+.loading-dots .loading-dot:nth-child(3) {
+ animation-delay: 0.6s;
+}
+@keyframes dotdance {
+ 0% {
+ opacity: 0.6;
+ transform: translateY(0);
+ }
+ to {
+ opacity: 0.9;
+ transform: translateY(2px);
+ }
+}
+.sync-spinner {
+ -webkit-animation: rotate 2.5s linear infinite;
+ animation: rotate 2.5s linear infinite;
+ display: block;
+ pointer-events: none;
+ -webkit-transform-origin: center center;
+ transform-origin: center center;
+}
+.notion-shimmer {
+ overflow: hidden;
+ position: relative;
+ z-index: 0;
+}
+.notion-shimmer:before {
+ animation: shimmer 1s linear infinite;
+ content: "";
+ height: 100%;
+ position: absolute;
+ width: 100%;
+ z-index: 1;
+}
+.notion-light-theme .notion-shimmer:before {
+ background: linear-gradient(90deg, #0000, #00000008 50%, #0000);
+}
+.notion-dark-theme .notion-shimmer:before {
+ background: linear-gradient(90deg, #56565600, #5656561a 50%, #56565600);
+}
+@keyframes shimmer {
+ 0% {
+ transform: translateX(-100%);
+ }
+ to {
+ transform: translateX(100%);
+ }
+}
+@keyframes shimmer-calendar-transition {
+ 0% {
+ opacity: 0.4;
+ }
+ to {
+ opacity: 1;
+ }
+}
+.notion-shimmer-calendar-transition {
+ animation-duration: 0.7s;
+ animation-iteration-count: 1;
+ animation-name: shimmer-calendar-transition;
+ animation-timing-function: ease-in-out;
+}
+@keyframes text-shimmer-fade-in {
+ 0% {
+ opacity: 0.1;
+ }
+ 25% {
+ opacity: 0.4;
+ }
+ 30% {
+ opacity: 0.4;
+ }
+ 55% {
+ opacity: 0.1;
+ }
+ to {
+ opacity: 0.1;
+ }
+}
+.notion-shimmer-text {
+ animation-duration: 3s;
+ animation-iteration-count: infinite;
+ animation-name: text-shimmer-fade-in;
+ animation-timing-function: ease-in-out;
+ opacity: 0.1;
+}
+@keyframes text-shimmer-fade-in-darker {
+ 0% {
+ opacity: 0.6;
+ }
+ 25% {
+ opacity: 1;
+ }
+ 30% {
+ opacity: 1;
+ }
+ 55% {
+ opacity: 0.6;
+ }
+ to {
+ opacity: 0.6;
+ }
+}
+.notion-shimmer-text-darker {
+ animation-duration: 3s;
+ animation-iteration-count: infinite;
+ animation-name: text-shimmer-fade-in-darker;
+ animation-timing-function: ease-in-out;
+ opacity: 0.1;
+}
+.animation-delay-1 {
+ animation-delay: 0s;
+}
+.animation-delay-2 {
+ animation-delay: 0.2s;
+}
+.animation-delay-3 {
+ animation-delay: 0.4s;
+}
+.animation-delay-4 {
+ animation-delay: 0.6s;
+}
+.animation-delay-5 {
+ animation-delay: 0.8s;
+}
+.animation-delay-6 {
+ animation-delay: 1s;
+}
+.animation-delay-7 {
+ animation-delay: 1.2s;
+}
+@keyframes shimmer-timeline-transition {
+ 0% {
+ opacity: 0.5;
+ }
+ to {
+ opacity: 1;
+ }
+}
+.notion-shimmer-timeline-transition {
+ animation-duration: 0.5s;
+ animation-iteration-count: 1;
+ animation-name: shimmer-timeline-transition;
+ animation-timing-function: ease-in-out;
+}
+@keyframes shimmer-timeline-fade-in {
+ 0% {
+ opacity: 0.15;
+ }
+ 40% {
+ opacity: 0.5;
+ }
+ 50% {
+ opacity: 0.5;
+ }
+ 60% {
+ opacity: 0.5;
+ }
+ to {
+ opacity: 0.15;
+ }
+}
+.notion-shimmer-timeline {
+ animation-duration: 2.5s;
+ animation-iteration-count: infinite;
+ animation-name: shimmer-timeline-fade-in;
+ animation-timing-function: ease-in-out;
+ opacity: 0.15;
+}
+.column-chart-loading svg line {
+ stroke-dasharray: 300 300;
+ stroke-dashoffset: -10;
+ animation: grow 2s cubic-bezier(0.45, 0, 0.55, 1) infinite reverse;
+ animation-delay: 0.2s;
+ opacity: 0.3;
+}
+@keyframes grow {
+ 0% {
+ stroke-dasharray: 300 300;
+ stroke-dashoffset: -10;
+ opacity: 0.3;
+ }
+ 50% {
+ stroke-dasharray: 300 300;
+ stroke-dashoffset: 0;
+ opacity: 1;
+ }
+ to {
+ stroke-dasharray: 300 300;
+ stroke-dashoffset: -10;
+ opacity: 0.3;
+ }
+}
+.column-chart-loading svg line.column-loader-1 {
+ animation-delay: 0s;
+}
+.column-chart-loading svg line.column-loader-2 {
+ animation-delay: 0.1s;
+}
+.column-chart-loading svg line.column-loader-3 {
+ animation-delay: 0.2s;
+}
+.column-chart-loading svg line.column-loader-4 {
+ animation-delay: 0.3s;
+}
+.column-chart-loading svg line.column-loader-5 {
+ animation-delay: 0.4s;
+}
+.line-chart-loading svg {
+ stroke-dasharray: 0 300;
+ stroke-dashoffset: -150;
+ animation: dash 2.5s linear infinite reverse;
+ opacity: 0.3;
+}
+@keyframes dash {
+ 0% {
+ stroke-dasharray: 0 300;
+ stroke-dashoffset: -150;
+ opacity: 0.3;
+ }
+ 50% {
+ stroke-dasharray: 300 300;
+ stroke-dashoffset: 0;
+ opacity: 1;
+ }
+ to {
+ stroke-dasharray: 0 300;
+ stroke-dashoffset: 0;
+ opacity: 0.3;
+ }
+}
+.donut-chart-loading svg circle.outer-loader {
+ animation: pulse-outer 2s cubic-bezier(0.45, 0, 0.55, 1) infinite reverse;
+ opacity: 0.3;
+}
+.donut-chart-loading svg circle.inner-loader {
+ animation: pulse-inner 2s cubic-bezier(0.45, 0, 0.55, 1) 0.5s infinite reverse;
+ opacity: 0.3;
+}
+@keyframes pulse-outer {
+ 0% {
+ r: 24;
+ opacity: 0.3;
+ }
+ 50% {
+ r: 25;
+ opacity: 0.8;
+ }
+ to {
+ r: 24;
+ opacity: 0.3;
+ }
+}
+@keyframes pulse-inner {
+ 0% {
+ r: 12;
+ opacity: 0.3;
+ }
+ 50% {
+ r: 14;
+ opacity: 0.8;
+ }
+ to {
+ r: 12;
+ opacity: 0.3;
+ }
+}
+.highcharts-legend-item > span {
+ max-width: 200px;
+}
+.notion-chart-clickable .highcharts-tooltip {
+ cursor: pointer !important;
+}
+.notion-chart-clickable .highcharts-crosshair {
+ cursor: pointer !important;
+ pointer-events: auto !important;
+}
+.notion-chart-clickable .highcharts-plot-background {
+ cursor: pointer !important;
+ pointer-events: all !important;
+}
+:root {
+ --safe-area-inset-top: env(safe-area-inset-top, 0px);
+ --safe-area-inset-right: env(safe-area-inset-right, 0px);
+ --safe-area-inset-left: env(safe-area-inset-left, 0px);
+ --safe-area-inset-bottom: env(safe-area-inset-bottom, 0px);
+}
+input[type="range"] {
+ -webkit-appearance: none;
+ background: #0000;
+}
+input[type="range"]::-webkit-slider-thumb {
+ -webkit-appearance: none;
+ background: var(--inputRangeThumb--background);
+ border: 0.5px solid var(--inputRangeThumb--borderColor);
+ border-radius: 50%;
+ box-shadow: 0 1px 4px #00000040;
+ cursor: pointer;
+ height: 14px;
+ margin-top: -4px;
+ width: 14px;
+}
+input[type="range"]::-moz-range-thumb {
+ -webkit-appearance: none;
+ background: var(--inputRangeThumb--background);
+ border: 0.5px solid var(--inputRangeThumb--border-color);
+ border-radius: 50%;
+ box-shadow: 0 1px 4px #00000040;
+ cursor: pointer;
+ height: 14px;
+ margin-top: -4px;
+ width: 14px;
+}
+input[type="range"]::-webkit-slider-runnable-track {
+ -webkit-appearance: none;
+ background: var(--inputRangeTrack--color);
+ border-radius: 10px;
+ cursor: pointer;
+ height: 6px;
+ width: 100%;
+}
+input[type="range"]::-moz-range-track {
+ background: var(--inputRangeTrack--color);
+ border-radius: 10px;
+ cursor: pointer;
+ height: 6px;
+ width: 100%;
+}
+.notion-quote {
+ position: relative;
+}
+.notion-quote:before {
+ content: "“";
+ left: -0.5em;
+ opacity: 0.6;
+ position: absolute;
+}
+.notion-quote:after {
+ content: "â€";
+ margin-left: 0.1em;
+ opacity: 0.6;
+}
+@media only screen and (max-width: 1020px) {
+ .br-desktop {
+ display: none;
+ }
+}
+.pretty-json-container .variable-value > * > * {
+ cursor: pointer !important;
+}
+.editor-force-select {
+ user-select: auto !important;
+ -webkit-user-select: auto !important;
+ -moz-user-select: auto !important;
+}
+.width-max-content {
+ width: max-content;
+ width: -moz-max-content;
+ width: -webkit-max-content;
+}
+.hidden {
+ display: none !important;
+}
+input.input-hide-arrows::-webkit-inner-spin-button,
+input.input-hide-arrows::-webkit-outer-spin-button {
+ -webkit-appearance: none;
+ margin: 0;
+}
+input[type="number"].input-hide-arrows {
+ -moz-appearance: textfield;
+}
+@keyframes leftOrRight {
+ 0% {
+ left: -50%;
+ }
+ to {
+ left: 250%;
+ }
+}
+.pseudoAfter:after {
+ background: var(--pseudoAfter--background);
+ border: var(--pseudoAfter--border);
+ color: var(--pseudoAfter--color);
+ content: var(--pseudoAfter--content);
+ display: var(--pseudoAfter--display);
+ font-family: var(--pseudoAfter--fontFamily);
+ font-size: var(--pseudoAfter--fontSize);
+ font-weight: var(--pseudoAfter--fontWeight);
+ height: var(--pseudoAfter--height);
+ width: var(--pseudoAfter--width);
+}
+.pseudoBefore:before {
+ background: var(--pseudoBefore--background);
+ border: var(--pseudoBefore--border);
+ color: var(--pseudoBefore--color);
+ content: var(--pseudoBefore--content);
+ display: var(--pseudoBefore--display) !important;
+ font-family: var(--pseudoBefore--fontFamily);
+ font-size: var(--pseudoBefore--fontSize);
+ font-weight: var(--pseudoBefore--fontWeight);
+ height: var(--pseudoBefore--height);
+ width: var(--pseudoBefore--width);
+}
+.pseudoHover:hover {
+ background: var(--pseudoHover--background);
+}
+.pseudoActive:active {
+ background: var(--pseudoActive--background);
+}
+.pseudoSelection ::selection,
+.pseudoSelection::selection {
+ -webkit-text-fill-color: var(--pseudoSelection--WebkitTextFillColor);
+ background: var(--pseudoSelection--background);
+ color: var(--pseudoSelection--color);
+ text-shadow: var(--pseudoSelection--textShadow);
+}
+.whenContentEditable[contenteditable="true"] {
+ -webkit-user-modify: var(--whenContentEditable--WebkitUserModify);
+ caret-color: var(--whenContentEditable--caretColor);
+}
+[data-content-editable-selecting="true"] .whenRootSelecting {
+ display: var(--whenRootSelecting--display) !important;
+}
+.whenFocusedEditable[contenteditable="true"]:focus,
+[contenteditable="true"]:focus-within .whenFocusedEditable {
+ -webkit-user-modify: var(--whenFocusedEditable--WebkitUserModify) !important;
+ -webkit-user-select: var(--whenFocusedEditable--WebkitUserSelect) !important;
+ user-select: var(--whenFocusedEditable--userSelect) !important;
+}
+[data-content-editable-composing="true"] .pseudoAfterWhenComposing:after {
+ display: var(--pseudoAfterWhenComposing--display) !important;
+}
+.autolayout-fill-width {
+ width: 100%;
+}
+.autolayout-fill-height {
+ height: 100%;
+}
+.autolayout-col > .autolayout-fill-width {
+ align-self: stretch;
+ width: unset;
+}
+.autolayout-col > .autolayout-fill-height {
+ flex: 1 0 0;
+ height: unset;
+}
+.autolayout-row > .autolayout-fill-width {
+ flex: 1 1 0;
+ width: unset;
+}
+.autolayout-row > .autolayout-fill-height {
+ align-self: stretch;
+ height: unset;
+}
+.autolayout-col {
+ display: flex;
+ flex-direction: column;
+ position: relative;
+}
+.autolayout-col.autolayout-start,
+.autolayout-col.autolayout-top-left {
+ align-items: flex-start;
+}
+.autolayout-col.autolayout-top-center {
+ align-items: center;
+}
+.autolayout-col.autolayout-end,
+.autolayout-col.autolayout-top-right {
+ align-items: flex-end;
+}
+.autolayout-col.autolayout-center-left {
+ align-items: flex-start;
+ justify-content: center;
+}
+.autolayout-col.autolayout-center {
+ align-items: center;
+ justify-content: center;
+}
+.autolayout-col.autolayout-center-right {
+ align-items: flex-end;
+ justify-content: center;
+}
+.autolayout-col.autolayout-bottom-left {
+ align-items: flex-start;
+ justify-content: flex-end;
+}
+.autolayout-col.autolayout-bottom-center {
+ align-items: center;
+ justify-content: flex-end;
+}
+.autolayout-col.autolayout-bottom-right {
+ align-items: flex-end;
+ justify-content: flex-end;
+}
+.autolayout-col.autolayout-space {
+ justify-content: space-between;
+}
+.autolayout-row {
+ display: flex;
+ flex-direction: row;
+ position: relative;
+}
+.autolayout-row.autolayout-start,
+.autolayout-row.autolayout-top-left {
+ align-items: flex-start;
+}
+.autolayout-row.autolayout-top-center {
+ align-items: flex-start;
+ justify-content: center;
+}
+.autolayout-row.autolayout-top-right {
+ align-items: flex-start;
+ justify-content: flex-end;
+}
+.autolayout-row.autolayout-center-left {
+ align-items: center;
+}
+.autolayout-row.autolayout-center {
+ align-items: center;
+ justify-content: center;
+}
+.autolayout-row.autolayout-center-right {
+ align-items: center;
+ justify-content: flex-end;
+}
+.autolayout-row.autolayout-bottom-left,
+.autolayout-row.autolayout-end {
+ align-items: flex-end;
+}
+.autolayout-row.autolayout-bottom-center {
+ align-items: flex-end;
+ justify-content: center;
+}
+.autolayout-row.autolayout-bottom-right {
+ align-items: flex-end;
+ justify-content: flex-end;
+}
+.autolayout-row.autolayout-space {
+ justify-content: space-between;
+}
+.formula-error-underline {
+ text-decoration: underline wavy red !important;
+ text-decoration-skip-ink: none !important;
+}
+.automation-list-item {
+ min-width: 50px;
+ padding-bottom: 8px;
+}
+.automation-list-item .automation-list-item-base-step {
+ border-radius: 10px;
+ width: 100%;
+}
+.automation-list-item-drag-handle,
+.automation-list-item-icon {
+ left: 0;
+ position: absolute;
+ top: 0;
+ transition: opacity 0.1s ease;
+}
+.automation-list-item-icon {
+ opacity: 1;
+}
+.automation-list-item-drag-handle {
+ cursor: grab;
+ opacity: 0;
+}
+.automation-list-item-base-step:not(
+ .automation-list-item-base-step--drag-disabled
+ ):hover
+ .automation-list-item-icon {
+ opacity: 0;
+}
+.automation-list-item-base-step:not(
+ .automation-list-item-base-step--drag-disabled
+ ):hover
+ .automation-list-item-drag-handle {
+ opacity: 1;
+}
+.automation-list-item-drag-handle:active {
+ cursor: grabbing;
+}
+.app-builder-notification-activity--light a {
+ color: #37352fa6;
+}
+.app-builder-notification-activity--dark a {
+ color: hsla(0, 0%, 100%, 0.445);
+}
+@keyframes selectedOutlineScale {
+ 0%,
+ to {
+ outline: 2px solid #ffcd38;
+ }
+ 50% {
+ outline-width: 5px;
+ }
+}
+.in-page-find-selected-highlight-match {
+ animation: selectedOutlineScale 0.15s ease-in-out;
+}
+.temporary-dictation-annotation {
+ opacity: 0.3;
+}
+.marketplace-checkout-email-element {
+ pointer-events: none;
+}
+@keyframes slideInFromLeft {
+ 0% {
+ opacity: 0;
+ transform: translateX(-4px);
+ }
+ to {
+ opacity: 1;
+ transform: translateX(0);
+ }
+}
+@keyframes template-preview-column-focus-in {
+ 0% {
+ filter: blur(6px);
+ opacity: 0;
+ }
+ to {
+ filter: blur(0);
+ opacity: 1;
+ }
+}
+@keyframes template-preview-column-focus-out {
+ 0% {
+ filter: blur(0.01);
+ opacity: 1;
+ }
+ to {
+ filter: blur(6px);
+ min-width: 0;
+ opacity: 0;
+ }
+}
+.quickActionContainer:empty {
+ visibility: hidden;
+}
+.popup-origin-wrapper:has(svg) > * {
+ transform: translateZ(0);
+}
+@property --shimmer-text-faded-color {
+ syntax: "";
+ inherits: false;
+ initial-value: #0f0;
+}
+@keyframes spin {
+ 0% {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(1turn);
+ }
+}
+.citation-annotation-token {
+ height: 12px !important;
+ width: 12px !important;
+}
+.inference-transcript-chat-step .citation-annotation-token {
+ height: 14px !important;
+ width: 14px !important;
+}
+.inference-transcript-chat-step .citation-annotation-anchor {
+ font-size: 12px;
+ height: 22px;
+ margin-bottom: -2px;
+ margin-left: 2px;
+ margin-right: 0;
+ min-width: 22px;
+}
+.citation-annotation-anchor {
+ font-size: 10px;
+ height: 18px;
+ margin-bottom: -2px;
+ margin-left: 2px;
+ margin-right: 1px;
+ min-width: 18px;
+}
+.inference-transcript-chat-step .citation-annotation-span {
+ font-size: 12px;
+ height: 20px;
+ margin-bottom: -3px;
+ margin-left: 2px;
+ min-width: 20px;
+}
+.citation-annotation-span {
+ font-size: 10px;
+ height: 16px;
+ margin-left: 4px;
+ min-width: 16px;
+}
+.layout {
+ --content-width: minmax(auto, 708px);
+ --margin-width: minmax(96px, 1fr);
+ display: grid;
+ grid-template-columns:
+ [full-start] var(--margin-left-width, var(--margin-width))
+ [content-start] var(--content-width) [content-end] var(
+ --margin-right-width,
+ var(--margin-width)
+ )
+ [full-end];
+ width: 100%;
+}
+.layout.layout-layout-editor-narrow {
+ --margin-width: minmax(24px, 1fr);
+}
+.layout.layout-layout-editor {
+ --margin-width: minmax(40px, 1fr);
+}
+.layout.layout-layout-editor-wide {
+ --content-width: 1fr;
+ --margin-width: 40px;
+}
+.layout.layout-wide {
+ --content-width: 1fr;
+ --margin-width: 96px;
+}
+.layout.layout-wide-right-margin-expanded {
+ --content-width: 1fr;
+ --margin-left-width: 96px;
+ --margin-right-width: 468px;
+}
+.layout.layout-side-peek {
+ --content-width: 1fr;
+ --margin-width: 76px;
+}
+.layout.layout-center-peek {
+ --content-width: 1fr;
+ --margin-width: 126px;
+ transition: grid-template-columns 0.2s ease-in-out;
+}
+.layout.layout-center-peek-with-layout-panel {
+ --content-width: 1fr;
+ --margin-width: 76px;
+ transition: grid-template-columns 0.2s ease-in-out;
+}
+.layout.layout-phone {
+ --content-width: 1fr;
+ --margin-width: 24px;
+}
+.layout.layout-tablet {
+ --content-width: 1fr;
+ --margin-width: 96px;
+ @media (min-width: 900px) {
+ --content-width: 708px;
+ --margin-width: 1fr;
+ }
+}
+.layout.layout-home-redesign-desktop {
+ --content-width: minmax(auto, 756px);
+ --margin-width: minmax(20px, 1fr);
+}
+.layout.layout-home {
+ --content-width: minmax(auto, 900px);
+ --margin-width: minmax(56px, 1fr);
+}
+.layout.layout-person-profile,
+.layout.layout-team-home {
+ --content-width: minmax(auto, 1044px);
+ --margin-width: minmax(96px, 1fr);
+}
+.layout.layout-marketplace {
+ --content-width: minmax(auto, 1248px);
+ --margin-width: minmax(96px, 1fr);
+ @media (max-width: 1123px) {
+ --margin-width: minmax(64px, 1fr);
+ }
+}
+.layout.layout-marketplace-mobile {
+ --content-width: minmax(auto, 1020px);
+ --margin-width: minmax(20px, 1fr);
+}
+.layout.layout-form,
+.layout.layout-form-viewer {
+ --content-width: minmax(auto, 600px);
+ --margin-right-width: minmax(40px, 1fr);
+ --margin-left-width: minmax(40px, 1fr);
+}
+.layout.layout-form-viewer-embed {
+ --content-width: auto;
+ --margin-right-width: 20px;
+ --margin-left-width: 20px;
+}
+.layout.layout-chat {
+ --content-width: minmax(auto, 100%);
+ --margin-left-width: minmax(auto, 1fr);
+ --margin-right-width: 0;
+}
+.layout.layout-fullscreen-ai {
+ --content-width: minmax(auto, 710px);
+ --margin-right-width: minmax(40px, 1fr);
+ --margin-left-width: minmax(40px, 1fr);
+ max-height: 100%;
+}
+.layout.layout-narrowscreen-ai {
+ --content-width: minmax(auto, 710px);
+ --margin-right-width: minmax(16px, 1fr);
+ --margin-left-width: minmax(16px, 1fr);
+ max-height: 100%;
+}
+.layout.layout-home-phone,
+.layout.layout-presentation-mode {
+ --content-width: 1fr;
+ --margin-width: 0px;
+}
+.home-content:before {
+ background: #00000005;
+ content: " ";
+ filter: blur(24px);
+ position: absolute;
+}
+.layout.layout-template-preview {
+ --content-width: minmax(auto, 900px);
+ --margin-width: minmax(20px, 1fr);
+}
+.layout.layout-create-post {
+ --margin-width: 0;
+}
+.layout.layout-suppress-left-margin {
+ --margin-left-width: 0;
+}
+.layout-content {
+ gap: inherit;
+ grid-column: content;
+}
+.layout-full {
+ gap: inherit;
+ grid-column: full;
+}
+.layout-margin-left {
+ gap: inherit;
+ grid-column: full-start/content-start;
+}
+.layout-margin-right {
+ gap: inherit;
+ grid-column: content-end/full-end;
+}
+.layout-nested-grid {
+ align-items: self-start;
+ display: grid;
+ gap: inherit;
+ grid-column: full;
+ grid-template-columns: inherit;
+}
+.layout-margin-scrollable {
+ gap: inherit;
+ overflow-x: scroll;
+ overscroll-behavior-x: contain;
+ scroll-snap-type: x proximity;
+ scrollbar-width: none;
+}
+.layout-content {
+ min-width: 0;
+}
+.layout-margin-scrollable > * {
+ min-width: auto;
+}
+.layout-column {
+ --min-column-width: 0;
+ display: grid;
+ gap: inherit;
+ grid-column: content;
+ grid-template-columns: repeat(auto-fit, minmax(var(--min-column-width), 1fr));
+}
+.layout-content-with-divider {
+ border-bottom: 1px solid #37352f17;
+}
+body.dark .layout-content-with-divider {
+ border-bottom: 1px solid hsla(0, 0%, 100%, 0.094);
+}
+.layout-editor {
+ padding-top: 5px;
+}
+.tx-agate-10-regular {
+ font-weight: 400;
+}
+.tx-agate-10-medium,
+.tx-agate-10-regular {
+ font-size: 10px;
+ letter-spacing: 0.12px;
+ line-height: 13px;
+}
+.tx-agate-10-medium {
+ font-weight: 500;
+}
+.tx-body-12-med {
+ font-size: 12px;
+ font-weight: 500;
+}
+.tx-body-12-reg {
+ font-size: 12px;
+ font-weight: 400;
+ line-height: 15px;
+}
+.tx-body-13-med {
+ font-size: 13px;
+ font-weight: 500;
+ line-height: 16px;
+}
+.tx-body-13-reg {
+ font-size: 13px;
+ font-weight: 400;
+ line-height: 16px;
+}
+.tx-body-13-semi {
+ font-size: 13px;
+ font-weight: 590;
+ line-height: 16px;
+}
+.tx-body-14-med {
+ font-size: 14px;
+ font-weight: 500;
+ line-height: 18px;
+}
+.tx-body-14-reg {
+ font-size: 14px;
+ font-weight: 400;
+ line-height: 20px;
+}
+.tx-body-14-semi {
+ font-size: 14px;
+ font-weight: 590;
+ line-height: 18px;
+}
+.tx-caption-12-reg {
+ font-size: 12px;
+ font-weight: 400;
+ line-height: 16px;
+}
+.tx-caption-12-med {
+ font-size: 12px;
+ font-weight: 500;
+ line-height: 16px;
+}
+.tx-caption-12-semi {
+ font-size: 12px;
+ font-weight: 590;
+ line-height: 15px;
+}
+.tx-heading-17-med {
+ font-size: 17px;
+ font-weight: 500;
+ line-height: 22px;
+}
+.tx-heading-17-reg {
+ font-size: 17px;
+ font-weight: 400;
+ line-height: 22px;
+}
+.tx-heading-17-semi {
+ font-size: 17px;
+ font-weight: 590;
+ line-height: 22px;
+}
+.tx-micro-10-med {
+ font-size: 10px;
+ font-weight: 500;
+ line-height: 13px;
+}
+.tx-micro-10-reg {
+ font-size: 10px;
+ font-weight: 400;
+ line-height: 13px;
+}
+.tx-micro-10-semi {
+ font-size: 10px;
+ font-weight: 590;
+ line-height: 13px;
+}
+.tx-ios-callout-16-reg {
+ font-size: 16px;
+ font-weight: 400;
+ line-height: 21px;
+}
+.tx-ios-footnote-13-reg {
+ font-size: 13px;
+ font-weight: 400;
+ letter-spacing: -0.08px;
+ line-height: 18px;
+}
+.tx-ios-caption-12-reg {
+ font-size: 12px;
+ font-weight: 400;
+ line-height: 16px;
+}
+.tx-ios-subhead-15-reg {
+ font-size: 15px;
+ font-weight: 400;
+ letter-spacing: -0.24px;
+ line-height: 20px;
+}
+.tx-ios-subhead-15-med-c {
+ font-size: 15px;
+ font-weight: 500;
+ letter-spacing: -0.24px;
+ line-height: normal;
+}
+.tx-ios-title-3-semibold {
+ font-size: 20px;
+ font-weight: 590;
+ line-height: 25px;
+}
+.tx-page-content-h2 {
+ font-size: 24px;
+ font-weight: 600;
+ line-height: 31.2px;
+}
+.tx-page-content-h3 {
+ font-size: 20px;
+ font-weight: 600;
+ line-height: 150%;
+}
+.tx-page-content-database {
+ font-size: 32px;
+ font-style: normal;
+ font-weight: 700;
+ line-height: 120%;
+}
+.tx-page-content-text-block {
+ font-size: 16px;
+ font-style: normal;
+ font-weight: 400;
+ line-height: 150%;
+}
+.tx-uititle-medium-20-semibold {
+ font-size: 20px;
+ font-style: normal;
+ font-weight: 590;
+ line-height: 25px;
+}
+.tx-uititle-22-semibold {
+ font-weight: 590;
+ letter-spacing: -0.26px;
+}
+.tx-title-22-bold,
+.tx-uititle-22-semibold {
+ font-size: 22px;
+ font-style: normal;
+ line-height: 26px;
+}
+.tx-title-22-bold {
+ font-weight: 700;
+ letter-spacing: -0.264px;
+}
+.tx-title-22-semi {
+ font-size: 22px;
+ font-style: normal;
+ font-weight: 590;
+ letter-spacing: -0.1px;
+ line-height: 26px;
+}
+.tx-title-24-bold {
+ font-size: 24px;
+ font-style: normal;
+ font-weight: 700;
+ letter-spacing: 0.208px;
+ line-height: 28px;
+}
+.tx-title-24-semi {
+ font-size: 24px;
+ font-style: normal;
+ font-weight: 590;
+ letter-spacing: 0.21px;
+ line-height: 32px;
+}
+.tx-title-26-bold {
+ font-size: 26px;
+ font-style: normal;
+ font-weight: 700;
+ line-height: 32px;
+}
+.tx-uimini-10-semi {
+ font-weight: 590;
+}
+.tx-uimini-10-med,
+.tx-uimini-10-semi {
+ font-size: 10px;
+ font-style: normal;
+ letter-spacing: 0.12px;
+ line-height: 13px;
+}
+.tx-uimini-10-med {
+ font-weight: 500;
+}
+.tx-uimini-10-reg {
+ font-size: 10px;
+ font-style: normal;
+ font-weight: 400;
+ letter-spacing: 0.12px;
+ line-height: 13px;
+}
+.tx-uimedium-13-reg {
+ font-weight: 400;
+}
+.tx-uimedium-13-med,
+.tx-uimedium-13-reg {
+ font-size: 13px;
+ font-style: normal;
+ line-height: 16px;
+}
+.tx-uimedium-13-med {
+ font-weight: 500;
+}
+.tx-uimedium-13-semi {
+ font-size: 13px;
+ font-style: normal;
+ font-weight: 590;
+ line-height: 16px;
+}
+.tx-uiheading-17-reg {
+ font-weight: 400;
+}
+.tx-uiheading-17-reg,
+.tx-uiheading-17-semi {
+ font-size: 17px;
+ font-style: normal;
+ line-height: 22px;
+}
+.tx-uiheading-17-semi {
+ font-weight: 590;
+}
+.tx-uiheading-17-med {
+ font-size: 17px;
+ font-style: normal;
+ font-weight: 500;
+ line-height: 22px;
+}
+.tx-uititle-26-bold {
+ font-size: 26px;
+ font-style: normal;
+ font-weight: 700;
+ line-height: 32px;
+}
+.tx-uititle-30-semibold {
+ font-size: 30px;
+ font-style: normal;
+ font-weight: 600;
+ line-height: 36px;
+}
+.tx-uiregular-14-med {
+ font-weight: 500;
+}
+.tx-uiregular-14-med,
+.tx-uiregular-14-reg {
+ font-size: 14px;
+ font-style: normal;
+ line-height: 20px;
+}
+.tx-uiregular-14-reg {
+ font-weight: 400;
+}
+.tx-uiregular-14-semi {
+ font-size: 14px;
+ font-style: normal;
+ font-weight: 590;
+ line-height: 20px;
+}
+.tx-uismall-12-med {
+ font-weight: 500;
+}
+.tx-uismall-12-med,
+.tx-uismall-12-reg {
+ font-size: 12px;
+ font-style: normal;
+ line-height: 15px;
+}
+.tx-uismall-12-reg {
+ font-weight: 400;
+}
+.tx-uismall-12-semi {
+ font-size: 12px;
+ font-style: normal;
+ font-weight: 590;
+ line-height: 16px;
+}
+.radio-button:checked + span:after {
+ opacity: 1;
+}
+.custom-radio-button:after {
+ background: var(--icon-contrast, #fff);
+ border-radius: var(--Default, 6px);
+ content: "";
+ flex-shrink: 0;
+ height: 6px;
+ opacity: 0;
+ transition: opacity 0.1s ease-out;
+ width: 6px;
+}
+
+/*!
+ * https://github.com/arqex/react-datetime
+ */
+.rdt {
+ position: relative;
+ -webkit-user-select: none;
+}
+.rdtPicker {
+ background: #fff;
+ box-shadow: 0 1px 3px #0000001a;
+ display: none;
+ margin-top: 1px;
+ position: absolute;
+ width: 100%;
+}
+.rdtOpen .rdtPicker {
+ display: block;
+}
+.rdtStatic .rdtPicker {
+ box-shadow: none;
+ position: static;
+}
+.rdtPicker .rdtTimeToggle {
+ text-align: center;
+}
+.rdtPicker table {
+ margin: 0;
+ width: 100%;
+}
+.rdtPicker td,
+.rdtPicker th {
+ height: 28px;
+ text-align: center;
+}
+.rdtPicker .rdtTimeToggle:hover,
+.rdtPicker td.rdtDay:hover,
+.rdtPicker td.rdtHour:hover,
+.rdtPicker td.rdtMinute:hover,
+.rdtPicker td.rdtSecond:hover,
+.rdtPicker td.rdtToday:hover {
+ background: #eee;
+ cursor: pointer;
+}
+.rdtPicker td.rdtNew,
+.rdtPicker td.rdtOld {
+ color: #999;
+}
+.rdtPicker td.rdtToday {
+ position: relative;
+}
+.rdtPicker td.rdtToday:before {
+ border-bottom: 7px solid #428bca;
+ border-left: 7px solid #0000;
+ border-top-color: #0003;
+ bottom: 4px;
+ content: "";
+ display: inline-block;
+ position: absolute;
+ right: 4px;
+}
+.rdtPicker td.rdtActive,
+.rdtPicker td.rdtActive:hover {
+ background-color: #428bca;
+ color: #fff;
+ text-shadow: 0 -1px 0 #00000040;
+}
+.rdtPicker td.rdtActive.rdtToday:before {
+ border-bottom-color: #fff;
+}
+.rdtPicker td.rdtDisabled,
+.rdtPicker td.rdtDisabled:hover {
+ background: none;
+ color: #999;
+ cursor: not-allowed;
+}
+.rdtPicker td span.rdtOld {
+ color: #999;
+}
+.rdtPicker td span.rdtDisabled,
+.rdtPicker td span.rdtDisabled:hover {
+ background: none;
+ color: #999;
+ cursor: not-allowed;
+}
+.rdtPicker .dow {
+ border-bottom: none;
+ width: 14.2857%;
+}
+.rdtPicker th.rdtSwitch {
+ width: 100px;
+}
+.rdtPicker th.rdtNext,
+.rdtPicker th.rdtPrev {
+ font-size: 21px;
+ vertical-align: top;
+}
+.rdtPicker th.rdtDisabled,
+.rdtPicker th.rdtDisabled:hover {
+ background: none;
+ color: #999;
+ cursor: not-allowed;
+}
+.rdtPicker thead tr:first-child th {
+ cursor: pointer;
+}
+.rdtPicker thead tr:first-child th:hover {
+ background: #eee;
+}
+.rdtPicker tfoot {
+ border-top: 1px solid #f9f9f9;
+}
+.rdtPicker button {
+ background: none;
+ border: none;
+ cursor: pointer;
+}
+.rdtPicker button:hover {
+ background-color: #eee;
+}
+.rdtPicker thead button {
+ height: 100%;
+ width: 100%;
+}
+td.rdtMonth,
+td.rdtYear {
+ cursor: pointer;
+ height: 50px;
+ width: 25%;
+}
+td.rdtMonth:hover,
+td.rdtYear:hover {
+ background: #eee;
+}
+.rdtCounters {
+ display: inline-block;
+}
+.rdtCounters > div {
+ float: left;
+}
+.rdtCounter {
+ height: 100px;
+ width: 40px;
+}
+.rdtCounterSeparator {
+ line-height: 100px;
+}
+.rdtCounter .rdtBtn {
+ cursor: pointer;
+ height: 40%;
+ line-height: 40px;
+}
+.rdtCounter .rdtBtn:hover {
+ background: #eee;
+}
+.rdtCounter .rdtCount {
+ font-size: 1.2em;
+ height: 20%;
+}
+.rdtMilli {
+ padding-left: 8px;
+ vertical-align: middle;
+ width: 48px;
+}
+.rdtMilli input {
+ font-size: 1.2em;
+ margin-top: 37px;
+ width: 100%;
+}
+*,
+:focus {
+ outline: 0;
+}
+* {
+ box-sizing: border-box;
+ isolation: isolate;
+}
+foreignObject * {
+ isolation: auto;
+}
+table > tr {
+ vertical-align: top;
+}
+::-webkit-input-placeholder {
+ color: inherit;
+ opacity: 0.375;
+}
+::-webkit-contacts-auto-fill-button {
+ display: none !important;
+ pointer-events: none;
+ position: absolute;
+ right: 0;
+ visibility: hidden;
+}
+:-moz-placeholder,
+::-moz-placeholder {
+ color: inherit;
+ opacity: 0.375;
+}
+:-ms-input-placeholder {
+ color: inherit;
+ opacity: 0.375;
+}
+::-ms-input-placeholder {
+ color: inherit;
+ opacity: 0.375;
+}
+::selection {
+ background: #2383e247;
+}
+.notion-selectable::selection {
+ background: #0000;
+}
+#notion-app b {
+ font-weight: 600;
+}
+[contenteditable] {
+ -webkit-tap-highlight-color: transparent;
+}
+fieldset {
+ border: none;
+ margin: 0;
+ padding: 0;
+}
+@keyframes pulse-ring {
+ 0% {
+ transform: scale(0.33);
+ }
+ 80%,
+ to {
+ opacity: 0;
+ }
+}
+@keyframes pulse-dot {
+ 0% {
+ transform: scale(0.8);
+ }
+ 50% {
+ transform: scale(1);
+ }
+ to {
+ transform: scale(0.8);
+ }
+}
+@keyframes bounce-left {
+ 0% {
+ transform: translateX(-200%);
+ }
+ 25% {
+ transform: translateX(-199%);
+ }
+ to {
+ transform: translateX(0);
+ }
+}
+@keyframes pulsing-button-border {
+ 0% {
+ border-color: #2383e2;
+ }
+ 50% {
+ border-color: #2383e200;
+ }
+ to {
+ border-color: #2383e2;
+ }
+}
+@keyframes pulsing-button {
+ 0% {
+ filter: brightness(1);
+ }
+ 50% {
+ filter: brightness(1.15);
+ }
+ to {
+ filter: brightness(1);
+ }
+}
+@keyframes shake {
+ 0% {
+ margin-left: 0;
+ }
+ 25% {
+ margin-left: 0.2rem;
+ }
+ 75% {
+ margin-left: -0.2rem;
+ }
+ to {
+ margin-left: 0;
+ }
+}
+@keyframes fadeIn {
+ 0% {
+ opacity: 0;
+ }
+ to {
+ opacity: 1;
+ }
+}
+@keyframes home-tile-slide-up {
+ 0% {
+ transform: translatey(calc((var(--depth) + 1) * 24px));
+ }
+ to {
+ transform: translatey(0);
+ }
+}
+@keyframes slide-up-small {
+ 0% {
+ transform: translateY(5px);
+ }
+ to {
+ transform: translateY(0);
+ }
+}
+.home-tile-fade-up-in {
+ animation-delay: calc(0.25s * var(--depth) + 0.5s);
+ animation-duration: 1.5s;
+ animation-fill-mode: both;
+ animation-name: home-tile-slide-up, fadeIn;
+ animation-timing-function: ease-in-out;
+}
+.slide-up-small {
+ animation-duration: 0.75s;
+ animation-fill-mode: both;
+ animation-name: slide-up-small;
+ animation-timing-function: cubic-bezier(0.02, 1.2, 0.2, 0.92);
+}
+@keyframes partialFadeIn {
+ 0% {
+ opacity: 0.5;
+ }
+ to {
+ opacity: 1;
+ }
+}
+@keyframes partialFadeOut {
+ 0% {
+ opacity: 1;
+ }
+ to {
+ opacity: 0.5;
+ }
+}
+.home-tile-fade-in {
+ animation: partialFadeIn 0.5s ease-in-out;
+}
+.home-tile-fade-out {
+ animation: partialFadeOut 0.5s ease-in-out;
+ opacity: 0.5;
+}
+.front-fadein-slow {
+ animation: fadein 0.5s ease-in;
+}
+.front-fadein-fast {
+ animation: fadein 0.15s ease-in;
+}
+.hide-scrollbar {
+ -ms-overflow-style: none;
+ scrollbar-width: none;
+}
+.hide-scrollbar::-webkit-scrollbar {
+ display: none;
+ height: 0 !important;
+ width: 0 !important;
+}
+.notion-light-theme code[class*="language-"],
+.notion-light-theme pre[class*="language-"] {
+ word-wrap: normal;
+ background: none;
+ color: #000;
+ font-family:
+ Consolas,
+ Monaco,
+ Andale Mono,
+ Ubuntu Mono,
+ monospace;
+ font-size: 1em;
+ -webkit-hyphens: none;
+ -moz-hyphens: none;
+ -ms-hyphens: none;
+ hyphens: none;
+ line-height: 1.5;
+ -moz-tab-size: 4;
+ -o-tab-size: 4;
+ tab-size: 4;
+ text-align: left;
+ text-shadow: 0 1px #fff;
+ white-space: pre;
+ word-break: normal;
+ word-spacing: normal;
+}
+.notion-light-theme code[class*="language-"] ::-moz-selection,
+.notion-light-theme code[class*="language-"]::-moz-selection,
+.notion-light-theme pre[class*="language-"] ::-moz-selection,
+.notion-light-theme pre[class*="language-"]::-moz-selection {
+ background: #b3d4fc;
+ text-shadow: none;
+}
+.notion-light-theme code[class*="language-"] ::selection,
+.notion-light-theme code[class*="language-"]::selection,
+.notion-light-theme pre[class*="language-"] ::selection,
+.notion-light-theme pre[class*="language-"]::selection {
+ background: #b3d4fc;
+ text-shadow: none;
+}
+@media print {
+ .notion-light-theme code[class*="language-"],
+ .notion-light-theme pre[class*="language-"] {
+ text-shadow: none;
+ }
+}
+.notion-light-theme pre[class*="language-"] {
+ margin: 0.5em 0;
+ overflow: auto;
+ padding: 1em;
+}
+.notion-light-theme :not(pre) > code[class*="language-"],
+.notion-light-theme pre[class*="language-"] {
+ background: #f5f2f0;
+}
+.notion-light-theme :not(pre) > code[class*="language-"] {
+ border-radius: 0.3em;
+ padding: 0.1em;
+ white-space: normal;
+}
+.notion-light-theme .token.cdata,
+.notion-light-theme .token.comment,
+.notion-light-theme .token.doctype,
+.notion-light-theme .token.prolog {
+ color: #708090;
+}
+.notion-light-theme .token.punctuation {
+ color: #999;
+}
+.notion-light-theme .token.namespace {
+ opacity: 0.7;
+}
+.notion-light-theme .token.boolean,
+.notion-light-theme .token.constant,
+.notion-light-theme .token.deleted,
+.notion-light-theme .token.number,
+.notion-light-theme .token.property,
+.notion-light-theme .token.symbol,
+.notion-light-theme .token.tag {
+ color: #905;
+}
+.notion-light-theme .token.attr-name,
+.notion-light-theme .token.builtin,
+.notion-light-theme .token.char,
+.notion-light-theme .token.inserted,
+.notion-light-theme .token.selector,
+.notion-light-theme .token.string {
+ color: #690;
+}
+.notion-light-theme .language-css .token.string,
+.notion-light-theme .style .token.string,
+.notion-light-theme .token.entity,
+.notion-light-theme .token.operator,
+.notion-light-theme .token.url {
+ background: #ffffff80;
+ color: #9a6e3a;
+}
+.notion-light-theme .token.atrule,
+.notion-light-theme .token.attr-value,
+.notion-light-theme .token.keyword {
+ color: #07a;
+}
+.notion-light-theme .token.class-name,
+.notion-light-theme .token.function {
+ color: #dd4a68;
+}
+.notion-light-theme .token.important,
+.notion-light-theme .token.regex,
+.notion-light-theme .token.variable {
+ color: #e90;
+}
+.notion-light-theme .token.bold,
+.notion-light-theme .token.important {
+ font-weight: 700;
+}
+.notion-light-theme .token.italic {
+ font-style: italic;
+}
+.notion-light-theme .token.entity {
+ cursor: help;
+}
+.notion-dark-theme code[class*="language-"],
+.notion-dark-theme pre[class*="language-"] {
+ word-wrap: normal;
+ background: none;
+ color: #fff;
+ font-family:
+ Consolas,
+ Monaco,
+ Andale Mono,
+ Ubuntu Mono,
+ monospace;
+ font-size: 1em;
+ -webkit-hyphens: none;
+ -moz-hyphens: none;
+ -ms-hyphens: none;
+ hyphens: none;
+ line-height: 1.5;
+ -moz-tab-size: 4;
+ -o-tab-size: 4;
+ tab-size: 4;
+ text-align: left;
+ text-shadow: 0 -0.1em 0.2em #000;
+ white-space: pre;
+ word-break: normal;
+ word-spacing: normal;
+}
+@media print {
+ .notion-dark-theme code[class*="language-"],
+ .notion-dark-theme pre[class*="language-"] {
+ text-shadow: none;
+ }
+}
+.notion-dark-theme :not(pre) > code[class*="language-"],
+.notion-dark-theme pre[class*="language-"] {
+ background: #4d4033;
+}
+.notion-dark-theme pre[class*="language-"] {
+ border: 0.3em solid #7a6652;
+ border-radius: 0.5em;
+ box-shadow: inset 1px 1px 0.5em #000;
+ margin: 0.5em 0;
+ overflow: auto;
+ padding: 1em;
+}
+.notion-dark-theme :not(pre) > code[class*="language-"] {
+ border: 0.13em solid #7a6652;
+ border-radius: 0.3em;
+ box-shadow: inset 1px 1px 0.3em -0.1em #000;
+ padding: 0.15em 0.2em 0.05em;
+ white-space: normal;
+}
+.notion-dark-theme .token.cdata,
+.notion-dark-theme .token.comment,
+.notion-dark-theme .token.doctype,
+.notion-dark-theme .token.prolog {
+ color: #998066;
+}
+.notion-dark-theme .token.namespace,
+.notion-dark-theme .token.punctuation {
+ opacity: 0.7;
+}
+.notion-dark-theme .token.boolean,
+.notion-dark-theme .token.constant,
+.notion-dark-theme .token.number,
+.notion-dark-theme .token.property,
+.notion-dark-theme .token.symbol,
+.notion-dark-theme .token.tag {
+ color: #d1949e;
+}
+.notion-dark-theme .token.attr-name,
+.notion-dark-theme .token.builtin,
+.notion-dark-theme .token.char,
+.notion-dark-theme .token.inserted,
+.notion-dark-theme .token.selector,
+.notion-dark-theme .token.string {
+ color: #bde052;
+}
+.notion-dark-theme .language-css .token.string,
+.notion-dark-theme .style .token.string,
+.notion-dark-theme .token.entity,
+.notion-dark-theme .token.operator,
+.notion-dark-theme .token.url,
+.notion-dark-theme .token.variable {
+ color: #f5b83d;
+}
+.notion-dark-theme .token.atrule,
+.notion-dark-theme .token.attr-value,
+.notion-dark-theme .token.keyword {
+ color: #66a2cc;
+}
+.notion-dark-theme .token.important,
+.notion-dark-theme .token.regex {
+ color: #e90;
+}
+.notion-dark-theme .token.bold,
+.notion-dark-theme .token.important {
+ font-weight: 700;
+}
+.notion-dark-theme .token.italic {
+ font-style: italic;
+}
+.notion-dark-theme .token.entity {
+ cursor: help;
+}
+.notion-dark-theme .token.deleted {
+ color: red;
+}
+.notion-dark-theme .token.class-name,
+.notion-dark-theme .token.function {
+ color: #ecec93;
+}
+.notion-gist-block .gist-data {
+ display: flex;
+}
+.notion-gist-block .gist,
+.notion-gist-block .gist-data div,
+.notion-gist-block .gist-file {
+ display: flex;
+ flex-direction: column;
+}
diff --git a/examples/notion/frontend/consoleHelpers-5f55d314f6df5aa4.css b/examples/notion/frontend/consoleHelpers-5f55d314f6df5aa4.css
new file mode 100644
index 0000000..b79f970
--- /dev/null
+++ b/examples/notion/frontend/consoleHelpers-5f55d314f6df5aa4.css
@@ -0,0 +1,17 @@
+.nds-shimmer-text {
+ -webkit-text-fill-color: #0000;
+ animation: nds-shimmer-text 1.5s linear infinite;
+ background-clip: text;
+ -webkit-background-clip: text;
+ background-repeat: repeat;
+ background-size: 200% 100%;
+ user-select: none;
+}
+@keyframes nds-shimmer-text {
+ 0% {
+ background-position: 200% 50%;
+ }
+ to {
+ background-position: 0 50%;
+ }
+}
diff --git a/examples/notion/frontend/imageEdit-99425a3fac7fea0a.css b/examples/notion/frontend/imageEdit-99425a3fac7fea0a.css
new file mode 100644
index 0000000..8e1398d
--- /dev/null
+++ b/examples/notion/frontend/imageEdit-99425a3fac7fea0a.css
@@ -0,0 +1,298 @@
+:root {
+ --rc-drag-handle-size: 12px;
+ --rc-drag-handle-mobile-size: 24px;
+ --rc-drag-handle-bg-colour: #0003;
+ --rc-drag-bar-size: 6px;
+ --rc-border-color: #fff0;
+ --rc-focus-color: #08f;
+ --drag-handle-offset: -6px;
+ --drag-handle-short-side: 6px;
+ --drag-handle-long-side: 48px;
+ --drag-handle-corner: 20px;
+ --drag-handle-border: 20px;
+ --drag-handle-color: #0009;
+ --drag-handle-opacity: 0.8;
+ --crop-mask-color: #fff;
+ --crop-mask-opacity: 0.8;
+ --corner-handle-svg: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' fill='none'%3E%3Cpath fill='%23000' stroke='%23fff' d='M15 .5A2.5 2.5 0 0 0 12.5 3v9.5H3a2.5 2.5 0 0 0 0 5h12a2.5 2.5 0 0 0 2.5-2.5V3A2.5 2.5 0 0 0 15 .5z'/%3E%3C/svg%3E");
+ --cardinal-handle-visibility: visible;
+}
+.ReactCrop {
+ cursor: crosshair;
+ display: inline-block;
+ max-width: 100%;
+ position: relative;
+}
+.ReactCrop *,
+.ReactCrop :after,
+.ReactCrop :before {
+ box-sizing: border-box;
+}
+.ReactCrop--disabled,
+.ReactCrop--locked {
+ cursor: inherit;
+}
+.ReactCrop__child-wrapper {
+ max-height: inherit;
+ overflow: visible;
+}
+.ReactCrop__child-wrapper img,
+.ReactCrop__child-wrapper video {
+ display: block;
+ max-height: inherit;
+ max-width: 100%;
+ transform-origin: center;
+ transition: transform 0.2s ease-out;
+ vertical-align: bottom;
+}
+.ReactCrop:not(.ReactCrop--disabled) .ReactCrop__child-wrapper > img,
+.ReactCrop:not(.ReactCrop--disabled) .ReactCrop__child-wrapper > video,
+.ReactCrop:not(.ReactCrop--disabled) .ReactCrop__crop-selection {
+ touch-action: none;
+}
+.ReactCrop__crop-mask {
+ bottom: 0;
+ left: 0;
+ pointer-events: none;
+ position: absolute;
+ right: 0;
+ top: 0;
+}
+.ReactCrop__crop-mask > rect {
+ fill: var(--crop-mask-color);
+ fill-opacity: var(--crop-mask-opacity);
+}
+.ReactCrop__crop-selection {
+ box-shadow:
+ inset 0 0 0 1px #0000001a,
+ 0 0 0 1px #ffffff80;
+ cursor: move;
+ left: 0;
+ position: absolute;
+ top: 0;
+ transform: translateZ(0);
+}
+.ReactCrop--disabled .ReactCrop__crop-selection {
+ cursor: inherit;
+}
+.ReactCrop--circular-crop .ReactCrop__crop-selection {
+ border-radius: 50%;
+}
+.ReactCrop--circular-crop .ReactCrop__crop-selection:after {
+ border: 1px solid var(--rc-border-color);
+ bottom: -1px;
+ content: "";
+ left: -1px;
+ opacity: 0.3;
+ pointer-events: none;
+ position: absolute;
+ right: -1px;
+ top: -1px;
+}
+.ReactCrop__crop-selection:not(
+ .ReactCrop--no-animate .ReactCrop__crop-selection
+ ) {
+ animation-iteration-count: infinite;
+ animation-play-state: running;
+ animation-timing-function: linear;
+ background-position:
+ 0 0,
+ 0 100%,
+ 0 0,
+ 100% 0;
+ background-repeat: repeat-x, repeat-x, repeat-y, repeat-y;
+ background-size:
+ 10px 1px,
+ 10px 1px,
+ 1px 10px,
+ 1px 10px;
+ color: #fff;
+}
+.ReactCrop__crop-selection:focus {
+ outline: 2px solid var(--rc-focus-color);
+ outline-offset: -1px;
+}
+.ReactCrop--invisible-crop .ReactCrop__crop-mask,
+.ReactCrop--invisible-crop .ReactCrop__crop-selection {
+ display: none;
+}
+.ReactCrop__rule-of-thirds-hz:after,
+.ReactCrop__rule-of-thirds-hz:before,
+.ReactCrop__rule-of-thirds-vt:after,
+.ReactCrop__rule-of-thirds-vt:before {
+ background-color: #fff6;
+ content: "";
+ display: block;
+ position: absolute;
+}
+.ReactCrop__rule-of-thirds-vt:after,
+.ReactCrop__rule-of-thirds-vt:before {
+ height: 100%;
+ width: 1px;
+}
+.ReactCrop__rule-of-thirds-vt:before {
+ left: 33.3333333333%;
+}
+.ReactCrop__rule-of-thirds-vt:after {
+ left: 66.6666666667%;
+}
+.ReactCrop__rule-of-thirds-hz:after,
+.ReactCrop__rule-of-thirds-hz:before {
+ height: 1px;
+ width: 100%;
+}
+.ReactCrop__rule-of-thirds-hz:before {
+ top: 33.3333333333%;
+}
+.ReactCrop__rule-of-thirds-hz:after {
+ top: 66.6666666667%;
+}
+.ReactCrop__drag-handle {
+ background-color: var(--drag-handle-color);
+ border-radius: var(--drag-handle-border);
+ height: var(--drag-handle-short-side);
+ opacity: var(--drag-handle-opacity);
+ position: absolute;
+ width: var(--drag-handle-short-side);
+}
+.ReactCrop__drag-handle:focus {
+ background: var(--rc-focus-color);
+}
+.ReactCrop__disabled .ReactCrop__drag-handle {
+ cursor: inherit;
+}
+.ReactCrop__drag-handle.ord-e,
+.ReactCrop__drag-handle.ord-n,
+.ReactCrop__drag-handle.ord-s,
+.ReactCrop__drag-handle.ord-w {
+ border: 1px solid #fff;
+ visibility: var(--cardinal-handle-visibility);
+}
+.ReactCrop .ord-n {
+ cursor: n-resize;
+ top: var(--drag-handle-offset);
+ transform: translate(-50%, -50%);
+}
+.ReactCrop .ord-n,
+.ReactCrop .ord-s {
+ height: var(--drag-handle-short-side);
+ left: 50%;
+ min-width: 20px;
+ width: var(--drag-handle-long-side);
+}
+.ReactCrop .ord-s {
+ bottom: var(--drag-handle-offset);
+ cursor: s-resize;
+ transform: translate(-50%, 50%);
+}
+.ReactCrop .ord-e {
+ cursor: e-resize;
+ right: var(--drag-handle-offset);
+ transform: translate(50%, -50%);
+}
+.ReactCrop .ord-e,
+.ReactCrop .ord-w {
+ height: var(--drag-handle-long-side);
+ min-height: 20px;
+ top: 50%;
+ width: var(--drag-handle-short-side);
+}
+.ReactCrop .ord-w {
+ cursor: w-resize;
+ left: var(--drag-handle-offset);
+ transform: translate(-50%, -50%);
+}
+.ReactCrop .ord-ne {
+ cursor: ne-resize;
+ top: 0;
+ transform: translate(10px, -10px) rotate(270deg);
+}
+.ReactCrop .ord-ne,
+.ReactCrop .ord-se {
+ background-color: initial;
+ background-image: var(--corner-handle-svg);
+ background-size: contain;
+ border-radius: 0;
+ height: 20px;
+ opacity: 0.5;
+ right: 0;
+ width: 20px;
+}
+.ReactCrop .ord-se {
+ bottom: 0;
+ cursor: se-resize;
+ transform: translate(10px, 10px);
+}
+.ReactCrop .ord-nw {
+ cursor: nw-resize;
+ top: 0;
+ transform: translate(-10px, -10px) rotate(180deg);
+}
+.ReactCrop .ord-nw,
+.ReactCrop .ord-sw {
+ background-color: initial;
+ background-image: var(--corner-handle-svg);
+ background-size: contain;
+ border-radius: 0;
+ height: 20px;
+ left: 0;
+ opacity: 0.5;
+ width: 20px;
+}
+.ReactCrop .ord-sw {
+ bottom: 0;
+ cursor: sw-resize;
+ transform: translate(-10px, 10px) rotate(90deg);
+}
+.ReactCrop__drag-bar {
+ position: absolute;
+}
+.ReactCrop__drag-bar.ord-n {
+ height: var(--rc-drag-bar-size);
+ left: 0;
+ top: 0;
+ transform: translateY(-50%);
+ width: 100%;
+}
+.ReactCrop__drag-bar.ord-e {
+ height: 100%;
+ right: 0;
+ top: 0;
+ transform: translate(50%);
+ width: var(--rc-drag-bar-size);
+}
+.ReactCrop__drag-bar.ord-s {
+ bottom: 0;
+ height: var(--rc-drag-bar-size);
+ left: 0;
+ transform: translateY(50%);
+ width: 100%;
+}
+.ReactCrop__drag-bar.ord-w {
+ height: 100%;
+ left: 0;
+ top: 0;
+ transform: translate(-50%);
+ width: var(--rc-drag-bar-size);
+}
+.ReactCrop--fixed-aspect .ReactCrop__drag-bar,
+.ReactCrop--fixed-aspect .ReactCrop__drag-handle.ord-e,
+.ReactCrop--fixed-aspect .ReactCrop__drag-handle.ord-n,
+.ReactCrop--fixed-aspect .ReactCrop__drag-handle.ord-s,
+.ReactCrop--fixed-aspect .ReactCrop__drag-handle.ord-w,
+.ReactCrop--new-crop .ReactCrop__drag-bar,
+.ReactCrop--new-crop .ReactCrop__drag-handle {
+ display: none;
+}
+@media (pointer: coarse) {
+ .ReactCrop .ord-e,
+ .ReactCrop .ord-n,
+ .ReactCrop .ord-s,
+ .ReactCrop .ord-w {
+ display: none;
+ }
+ .ReactCrop__drag-handle {
+ height: var(--rc-drag-handle-mobile-size);
+ width: var(--rc-drag-handle-mobile-size);
+ }
+}
diff --git a/examples/notion/frontend/mainApp-5f55d314f6df5aa4.css b/examples/notion/frontend/mainApp-5f55d314f6df5aa4.css
new file mode 100644
index 0000000..b79f970
--- /dev/null
+++ b/examples/notion/frontend/mainApp-5f55d314f6df5aa4.css
@@ -0,0 +1,17 @@
+.nds-shimmer-text {
+ -webkit-text-fill-color: #0000;
+ animation: nds-shimmer-text 1.5s linear infinite;
+ background-clip: text;
+ -webkit-background-clip: text;
+ background-repeat: repeat;
+ background-size: 200% 100%;
+ user-select: none;
+}
+@keyframes nds-shimmer-text {
+ 0% {
+ background-position: 200% 50%;
+ }
+ to {
+ background-position: 0 50%;
+ }
+}
diff --git a/examples/notion/frontend/notion_frame1.html b/examples/notion/frontend/notion_frame1.html
new file mode 100644
index 0000000..45b62af
--- /dev/null
+++ b/examples/notion/frontend/notion_frame1.html
@@ -0,0 +1,10977 @@
+
+
+
diff --git a/examples/notion/frontend/notion_frame1_reduced.html b/examples/notion/frontend/notion_frame1_reduced.html
new file mode 100644
index 0000000..a89b154
--- /dev/null
+++ b/examples/notion/frontend/notion_frame1_reduced.html
@@ -0,0 +1,2499 @@
+
+
+
diff --git a/examples/notion/frontend/reduce_html.py b/examples/notion/frontend/reduce_html.py
index 3af25b8..e63f182 100644
--- a/examples/notion/frontend/reduce_html.py
+++ b/examples/notion/frontend/reduce_html.py
@@ -59,6 +59,14 @@ def clean_html(raw_html: str) -> str:
soup = BeautifulSoup(raw_html, "lxml")
prune_top_level(soup)
clean_node(soup)
+
+ # If there are html/body tags that were added by BeautifulSoup, remove them
+ # but keep their contents
+ if soup.html:
+ soup.html.unwrap()
+ if soup.body:
+ soup.body.unwrap()
+
# Pretty formatting keeps the tree readable yet compact
return soup.prettify(formatter="minimal")
diff --git a/examples/notion/frontend/sidebar-5f55d314f6df5aa4.css b/examples/notion/frontend/sidebar-5f55d314f6df5aa4.css
new file mode 100644
index 0000000..b79f970
--- /dev/null
+++ b/examples/notion/frontend/sidebar-5f55d314f6df5aa4.css
@@ -0,0 +1,17 @@
+.nds-shimmer-text {
+ -webkit-text-fill-color: #0000;
+ animation: nds-shimmer-text 1.5s linear infinite;
+ background-clip: text;
+ -webkit-background-clip: text;
+ background-repeat: repeat;
+ background-size: 200% 100%;
+ user-select: none;
+}
+@keyframes nds-shimmer-text {
+ 0% {
+ background-position: 200% 50%;
+ }
+ to {
+ background-position: 0 50%;
+ }
+}
From 103f3f4c4e2070dd82837ea96fca2feda6e924b2 Mon Sep 17 00:00:00 2001
From: Onur Solmaz <2453968+osolmaz@users.noreply.github.com>
Date: Thu, 22 May 2025 16:43:27 +0200
Subject: [PATCH 10/11] Save context in CLAUDE.md
---
typescript/CLAUDE.md | 200 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 200 insertions(+)
create mode 100644 typescript/CLAUDE.md
diff --git a/typescript/CLAUDE.md b/typescript/CLAUDE.md
new file mode 100644
index 0000000..0fe7e7e
--- /dev/null
+++ b/typescript/CLAUDE.md
@@ -0,0 +1,200 @@
+# JSON-DOC TypeScript Implementation - Development Notes
+
+## Project Overview
+This is a TypeScript implementation of JSON-DOC, which is a JSON schema-based document format similar to Notion's block structure. The implementation programmatically generates TypeScript interfaces from JSON schemas and provides serialization/deserialization functionality.
+
+## Key Requirements and User Instructions
+
+### Primary Requirements
+1. **GENERATE TYPES PROGRAMMATICALLY**: All TypeScript interfaces must be generated from JSON schemas - NO hardcoded types allowed
+2. **Schema-First Approach**: Similar to Python implementation using datamodel-codegen, TypeScript interfaces are generated from JSON schema files
+3. **Full Serialization Support**: Load JSON-DOC objects, process them with proper typing, and serialize back to identical JSON
+4. **Test Compatibility**: Implementation must pass comprehensive tests using real example data from schema/page/ex1_success.json
+
+### Critical User Instructions
+- **NEVER hardcode enums or types** - everything must be extracted from JSON schemas
+- **Use proper libraries** like json-schema-to-typescript for programmatic generation
+- **Follow modern TypeScript conventions** with strict typing
+- **Ensure tests pass** with the large example file containing complex nested structures
+- **Handle JSON with comments** using appropriate parsing (JSON5)
+
+## Implementation Architecture
+
+### Core Files Structure
+```
+typescript/
+├── src/
+│ ├── models/
+│ │ └── generated/ # All generated TypeScript interfaces
+│ │ ├── essential-types.ts # Generated enums and type guards
+│ │ ├── block/ # Block-related interfaces
+│ │ ├── file/ # File-related interfaces
+│ │ ├── page/ # Page interfaces
+│ │ └── shared_definitions/
+│ ├── serialization/
+│ │ └── loader.ts # Serialization/deserialization logic
+│ └── utils/
+│ └── json.ts # JSON utility functions
+├── scripts/
+│ └── generate-types.ts # Type generation script
+├── tests/
+│ └── serialization.test.ts # Comprehensive tests
+└── package.json
+```
+
+## Type Generation System
+
+### Key Script: `scripts/generate-types.ts`
+This script is the heart of the implementation:
+
+1. **JSON Schema Parsing**: Uses JSON5 to handle schemas with comments
+2. **Enum Extraction**: Programmatically extracts enums from schema properties
+3. **Interface Generation**: Uses json-schema-to-typescript to create TypeScript interfaces
+4. **Reference Resolution**: Handles $ref links between schema files
+5. **Essential Types Generation**: Creates only necessary enums and type guards
+
+### Generated Types Categories
+- **ObjectType**: page, block, user (extracted from schema const values)
+- **BlockType**: paragraph, heading_1, etc. (extracted from block schema enums)
+- **RichTextType**: text, equation (extracted from rich text schema)
+- **FileType**: file, external (extracted from file schema)
+- **ParentType**: page_id, block_id, etc.
+
+### Type Guards
+Automatically generated type guard functions:
+- `isPage()`, `isBlock()` for object types
+- `isParagraphBlock()`, `isHeading1Block()` etc. for block types
+- `isRichTextText()`, `isRichTextEquation()` for rich text types
+- `isExternalFile()`, `isFileFile()` for file types
+
+## Serialization System
+
+### Core Functions in `loader.ts`
+- **`loadJsonDoc(obj)`**: Main entry point for loading JSON-DOC objects
+- **`loadPage(obj)`**: Processes page objects
+- **`loadBlock(obj)`**: Processes block objects with recursive children handling
+- **`loadRichText(obj)`**: Processes rich text elements
+- **`jsonDocDumpJson(obj)`**: Serializes objects back to JSON
+
+### Factory Pattern
+Uses factory functions for different block types:
+- `createParagraphBlock()`, `createHeading1Block()`, etc.
+- Each factory ensures proper object type assignment
+- Maintains type safety throughout the process
+
+## Testing Strategy
+
+### Test Files
+1. **Basic serialization tests**: Simple blocks with rich text
+2. **Nested block tests**: Complex hierarchical structures
+3. **Page serialization tests**: Full page objects with children
+4. **Example file test**: Uses real schema/page/ex1_success.json (40k+ tokens)
+
+### Test Requirements
+- Load example JSON with comments using JSON5
+- Process through loadJsonDoc() function
+- Serialize back using jsonDocDumpJson()
+- Compare normalized results (excluding null fields like 'link', 'href')
+- Must achieve perfect round-trip serialization
+
+## Build and Development
+
+### NPM Scripts
+```json
+{
+ "clean": "rm -rf dist",
+ "build": "tsc",
+ "generate-types": "ts-node scripts/generate-types.ts",
+ "test": "jest",
+ "prepublishOnly": "npm run clean && npm run generate-types && npm run build"
+}
+```
+
+### Dependencies
+- **Production**: ajv, ajv-formats, json5
+- **Development**: @types/jest, jest, ts-jest, ts-node, typescript, json-schema-to-typescript
+
+## Critical Implementation Details
+
+### JSON Schema Comment Handling
+- Many schema files contain comments (// and /* */)
+- Use JSON5.parse() for robust comment handling
+- Fallback to manual comment stripping if needed
+- Handle trailing commas and control characters
+
+### Enum Value Consistency
+- ObjectType enum values must match serialization strings ('block', 'page')
+- BlockType enum keys use PascalCase but values remain original ('paragraph', 'to_do')
+- Type guards use enum comparisons with fallback to string literals
+
+### Reference Resolution
+- Schema files use $ref to reference other schemas
+- Script resolves references recursively (max 4 iterations)
+- Handles both relative and absolute reference paths
+- Creates simplified reference objects for type generation
+
+### Error Handling
+- Graceful degradation when schemas can't be parsed
+- Fallback to empty objects rather than failing
+- Comprehensive error logging for debugging
+- Test fallbacks for missing files
+
+## Development Challenges Solved
+
+### 1. JSON Schema Parsing
+**Problem**: Schema files contain comments and control characters
+**Solution**: JSON5 parser with fallback to manual comment stripping
+
+### 2. Hardcoded Types
+**Problem**: User demanded no hardcoded enums
+**Solution**: Extract all enum values from JSON schemas programmatically
+
+### 3. Serialization Consistency
+**Problem**: Round-trip serialization must produce identical results
+**Solution**: Careful handling of null fields, proper factory functions, type normalization
+
+### 4. Complex Example File
+**Problem**: Must handle 40k+ token example file with deep nesting
+**Solution**: Robust recursive processing, proper memory management, comprehensive testing
+
+## User Feedback and Corrections
+
+### Major User Corrections
+1. **"GENERATE THE TYPES PROGRAMMATICALLY, OR ELSE!"** - Led to complete rewrite of type generation
+2. **"Use /schema/page/ex1_success.json"** - Required handling large, complex real-world data
+3. **"DO NOT FAIL"** - Emphasized importance of robust implementation
+
+### User Expectations
+- Zero tolerance for shortcuts or hardcoded values
+- Must match Python implementation's functionality
+- Comprehensive testing with real data
+- Modern TypeScript best practices
+
+## Future Maintenance
+
+### When Adding New Block Types
+1. Add schema file to appropriate directory
+2. Run `npm run generate-types` to regenerate interfaces
+3. Update factory function mapping in loader.ts if needed
+4. Add tests for new block type
+
+### When Modifying Schemas
+1. Ensure backward compatibility
+2. Regenerate types with `npm run generate-types`
+3. Run full test suite to verify compatibility
+4. Check serialization round-trip still works
+
+### Performance Considerations
+- Type generation is build-time, not runtime
+- Serialization uses factory pattern for efficiency
+- Recursive processing handles deep nesting gracefully
+- JSON5 parsing adds minimal overhead
+
+## Key Success Metrics
+✅ All types generated from schemas (no hardcoding)
+✅ Full test suite passing including example file
+✅ Perfect round-trip serialization
+✅ Handles complex nested structures
+✅ Modern TypeScript with strict typing
+✅ Proper error handling and fallbacks
+✅ Comprehensive documentation and maintainability
\ No newline at end of file
From 5a9dcf4e1ff916a680cb226e718fd5462e9a8cfb Mon Sep 17 00:00:00 2001
From: Onur Solmaz <2453968+osolmaz@users.noreply.github.com>
Date: Thu, 22 May 2025 17:01:00 +0200
Subject: [PATCH 11/11] Add prompt
---
docs/2025-05-22-ts-renderer-prompt.md | 37 +++++++++++++++++++++++++++
1 file changed, 37 insertions(+)
create mode 100644 docs/2025-05-22-ts-renderer-prompt.md
diff --git a/docs/2025-05-22-ts-renderer-prompt.md b/docs/2025-05-22-ts-renderer-prompt.md
new file mode 100644
index 0000000..2006c09
--- /dev/null
+++ b/docs/2025-05-22-ts-renderer-prompt.md
@@ -0,0 +1,37 @@
+---
+title: "Implementing JSON-DOC TypeScript parser"
+author: "Onur "
+date: "2025-05-21"
+---
+
+We have previously implemented a TypeScript renderer for JSON-DOC, a new JSON based file format for documents. The excerpt below shows our initial intentions.
+
+---
+
+Convert JSON Schemas into TS interfaces similar to what is in Python with datamodel-codegen. See https://github.com/bcherny/json-schema-to-typescript and https://github.com/ThomasAribart/json-schema-to-ts. Compare the two and choose the best option.
+
+The interfaces MUST BE generated programmatically, just as how we do in Python. Understand the directory structure first, list, navigate and read files. Look at the json schema files under /schema, and compare them with the generated files in the python directory
+
+We basically need to implement parsing of a JSON-DOC file into typed objects in typescript, similar to Python load_jsondoc() and similar functions
+
+Note that we use uv for running python. There are example json-doc files and tests under /tests and github actions that make sure that the parsing and validation logic in python is correct
+
+For a correct ts implementation, similar tests and checks need to be implemented. Make sure to use up-to-date typescript tooling and conventions. This library is supposed to be installed universally, keep that in mind. Do not use obscure or non-general tooling for packaging and distribution. Follow today's best practices
+
+---
+
+This was implemented successfully, and now the tests for serialization and parsing passes. The next step is to implement a React TypeScript renderer for this file format. Implement a React component that will receive a JSON-DOC object and render it in the same visual style as Notion documents. You need to write logic to map each JSON-DOC block into HTML elements.
+
+To aid your process, I have included HTML elements and CSS files from Notion under /examples/notion/frontend. notion_frame1.html contains a Notion page with a lot of different block types, and notion_frame1_reduced.html contains the same page, but with certain information truncated to make it easier to see the structure and fit into the context.
+
+You don't need to match the style exactly, but you need to write code that will render each block at least in a logical and consistent way. Note that blocks can include other blocks recursively.
+
+IMPORTANT: YOU WILL AT NO CIRCUMSTANCE SKIP THE TASK OF RENDERING BLOCKS RECURSIVELY. BLOCKS CAN CONTAIN OTHER BLOCKS AT AN ARBITRARY DEPTH.
+
+YOU WILL RENDER ALL BLOCK TYPES THAT JSON-DOC SUPPORTS.
+
+For your test, you will be making sure that /schema/page/ex1_success.json is rendered correctly with this new React component.
+
+Look at README and CLAUDE.md files for more information. The Python implementation is the single source of truth for the JSON-DOC format. The TypeScript implementation was generated from the Python implementation, so it might contain some errors. If you encounter any errors or inconsistencies, fix them.
+
+TAKING SHORTCUTS WILL BE PENALIZED HEAVILY.
\ No newline at end of file