From 6bc827715047243adeff0efe1fb4cb056a84786a Mon Sep 17 00:00:00 2001 From: Dag Brattli Date: Thu, 18 Dec 2025 21:51:41 +0100 Subject: [PATCH 1/2] feat: Add Json static class with Fable-aware serialization MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Refactor JSON serialization to use a static `Json` class with method overloads instead of standalone functions. This provides a cleaner API with: - `Json.dumps(obj)` - basic serialization with fableDefault - `Json.dumps(obj, indent)` - with indentation - `Json.dumps(obj, separators, ensureAscii)` - with custom formatting - `Json.dump(obj, fp)` - file serialization - `Json.loads(s)` / `Json.load(fp)` - deserialization (returns native Python types) The fableDefault handler automatically converts Fable numeric types (Int8-64, UInt8-64, Float32/64), unions, and records to JSON-serializable Python types. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- src/stdlib/Json.fs | 51 ++++++++++++++++++++++++------ test/TestJson.fs | 77 +++++++++++++++++++++++++++++++++++----------- 2 files changed, 101 insertions(+), 27 deletions(-) diff --git a/src/stdlib/Json.fs b/src/stdlib/Json.fs index 39e1268..79886ec 100644 --- a/src/stdlib/Json.fs +++ b/src/stdlib/Json.fs @@ -23,6 +23,16 @@ type IExports = /// See https://docs.python.org/3/library/json.html#json.dumps [] abstract dumps: obj: obj * indent: int * ``default``: (obj -> obj) -> string + /// Serialize obj to a JSON formatted string with separators, ensure_ascii, and custom default + /// See https://docs.python.org/3/library/json.html#json.dumps + [] + abstract dumps: + obj: obj * separators: string array * ensure_ascii: bool * ``default``: (obj -> obj) -> string + /// Serialize obj to a JSON formatted string with indent, separators, ensure_ascii, and custom default + /// See https://docs.python.org/3/library/json.html#json.dumps + [] + abstract dumps: + obj: obj * indent: int * separators: string array * ensure_ascii: bool * ``default``: (obj -> obj) -> string /// Deserialize a JSON document from a string to a Python object /// See https://docs.python.org/3/library/json.html#json.loads abstract loads: s: string -> obj @@ -106,15 +116,38 @@ let fableDefault (o: obj) : obj = else raiseTypeError o -/// Serialize obj to JSON, automatically handling Fable types -let dumps (obj: obj) : string = json.dumps (obj, ``default`` = fableDefault) +/// Fable-aware JSON serialization with proper overloads. +/// Automatically handles Fable types (Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64, Float32, Float64, unions, records). +[] +type Json = + /// Serialize obj to JSON, automatically handling Fable types + static member inline dumps(obj: obj) : string = + json.dumps (obj, ``default`` = fableDefault) + + /// Serialize obj to JSON with indentation, automatically handling Fable types + static member inline dumps(obj: obj, indent: int) : string = + json.dumps (obj, indent, ``default`` = fableDefault) -/// Serialize obj to JSON with indentation, automatically handling Fable types -let dumpsIndented (obj: obj) (indent: int) : string = json.dumps (obj, indent, ``default`` = fableDefault) + /// Serialize obj to JSON with custom separators and ensure_ascii, automatically handling Fable types + static member inline dumps(obj: obj, separators: string array, ensureAscii: bool) : string = + json.dumps (obj, separators = separators, ensure_ascii = ensureAscii, ``default`` = fableDefault) -/// Serialize obj as JSON stream to file, automatically handling Fable types -let dump (obj: obj) (fp: TextIOWrapper) : unit = json.dump (obj, fp, ``default`` = fableDefault) + /// Serialize obj to JSON with indentation, custom separators, and ensure_ascii, automatically handling Fable types + static member inline dumps(obj: obj, indent: int, separators: string array, ensureAscii: bool) : string = + json.dumps (obj, indent = indent, separators = separators, ensure_ascii = ensureAscii, ``default`` = fableDefault) -/// Serialize obj as JSON stream to file with indentation, automatically handling Fable types -let dumpIndented (obj: obj) (fp: TextIOWrapper) (indent: int) : unit = - json.dump (obj, fp, indent, ``default`` = fableDefault) + /// Serialize obj as JSON stream to file, automatically handling Fable types + static member inline dump(obj: obj, fp: TextIOWrapper) : unit = + json.dump (obj, fp, ``default`` = fableDefault) + + /// Serialize obj as JSON stream to file with indentation, automatically handling Fable types + static member inline dump(obj: obj, fp: TextIOWrapper, indent: int) : unit = + json.dump (obj, fp, indent, ``default`` = fableDefault) + + /// Deserialize a JSON document from a string to a Python object + static member inline loads(s: string) : obj = + json.loads s + + /// Deserialize a JSON document from a file-like object to a Python object + static member inline load(fp: TextIOWrapper) : obj = + json.load fp diff --git a/test/TestJson.fs b/test/TestJson.fs index eaffe3f..28a380a 100644 --- a/test/TestJson.fs +++ b/test/TestJson.fs @@ -3,53 +3,94 @@ module Fable.Python.Tests.Json open Util.Testing open Fable.Python.Json -[] -let ``test works`` () = - let result = true - result |> equal true +// Test types for union and record serialization +type SimpleUnion = + | CaseA + | CaseB of int + | CaseC of string * int + +type SimpleRecord = { Name: string; Age: int } [] -let ``test json dumps works`` () = +let ``test Json.dumps with anonymous record works`` () = let object = {| A = 10; B = 20 |} - let result = dumps object + let result = Json.dumps object result |> equal """{"A": 10, "B": 20}""" [] -let ``test json loads works`` () = +let ``test Json.loads works`` () = let input = """{"Foo": 10, "Bar": "test"}""" let object = {| Foo = 10; Bar = "test" |} - let result: {| Foo: int; Bar: string |} = unbox (json.loads input) + let result: {| Foo: int; Bar: string |} = unbox (Json.loads input) result |> equal object [] -let ``test json.dumps with nativeint works`` () = +let ``test Json.dumps with int works`` () = + let value: int = 42 + let result = Json.dumps value + result |> equal "42" + +[] +let ``test Json.dumps with nativeint works`` () = let value: nativeint = 42n - let result = json.dumps value + let result = Json.dumps value result |> equal "42" [] -let ``test json.dumps with ResizeArray of nativeint works`` () = +let ``test Json.dumps with ResizeArray works`` () = let values = ResizeArray([ 1n; 2n; 3n ]) - let result = json.dumps values + let result = Json.dumps values + result |> equal "[1, 2, 3]" + +[] +let ``test Json.dumps with ResizeArray of int works`` () = + let values = ResizeArray([ 1; 2; 3 ]) + let result = Json.dumps values result |> equal "[1, 2, 3]" [] -let ``test json.dumps with nested object works`` () = +let ``test Json.dumps with nested object works`` () = let obj = {| Name = "test" Values = ResizeArray([ 1n; 2n; 3n ]) |} - let result = dumps obj + let result = Json.dumps obj result |> equal """{"Name": "test", "Values": [1, 2, 3]}""" [] -let ``test json.loads with array works`` () = +let ``test Json.loads with array works`` () = let input = "[1, 2, 3]" - let result: int array = unbox (json.loads input) + let result: int array = unbox (Json.loads input) result.Length |> equal 3 [] -let ``test json.dumps with indent works`` () = +let ``test Json.dumps with indent works`` () = let obj = {| A = 1n |} - let result = dumpsIndented obj 2 + let result = Json.dumps(obj, indent = 2) result.Contains("\n") |> equal true + +[] +let ``test Json.dumps with record works`` () = + let record = { Name = "Alice"; Age = 30 } + let result = Json.dumps record + // Note: Fable records use lowercase slot names + result |> equal """{"name": "Alice", "age": 30}""" + +[] +let ``test Json.dumps with simple union case works`` () = + let union = CaseA + let result = Json.dumps union + // Note: Union cases without fields serialize as just the case name string + result |> equal "\"CaseA\"" + +[] +let ``test Json.dumps with union case with single field works`` () = + let union = CaseB 42 + let result = Json.dumps union + result |> equal """["CaseB", 42]""" + +[] +let ``test Json.dumps with union case with multiple fields works`` () = + let union = CaseC("hello", 123) + let result = Json.dumps union + result |> equal """["CaseC", "hello", 123]""" From 6410af829aeacb0fa19a28bddbaab01477817dad Mon Sep 17 00:00:00 2001 From: Dag Brattli Date: Thu, 18 Dec 2025 21:55:04 +0100 Subject: [PATCH 2/2] chore: update fable-library to 5.0.0a21 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- uv.lock | 122 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 61 insertions(+), 61 deletions(-) diff --git a/uv.lock b/uv.lock index 3aa7797..478e303 100644 --- a/uv.lock +++ b/uv.lock @@ -97,66 +97,66 @@ wheels = [ [[package]] name = "fable-library" -version = "5.0.0a20" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7d/71/d3c1e17e0fea982c3ef8b9ceb7aa5b6749db9124d3b555f73ab511c21284/fable_library-5.0.0a20.tar.gz", hash = "sha256:3bba05805c33b1ba4929ba069db4fb3522f1d2614230eeb838b28020107d49d1", size = 200300, upload-time = "2025-12-08T14:18:05.1Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1d/bf/4a66121fe2289870d0c537ca06fdc1200138e268857cdaffbd6f88b14c3e/fable_library-5.0.0a20-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:317cb9e1cf19af4850bfd549a4e4dd1318b4f8edff67edbc9bf7dc44293d1752", size = 1677386, upload-time = "2025-12-08T14:17:17.585Z" }, - { url = "https://files.pythonhosted.org/packages/e5/27/59cd313a3c5cc0b66d8ee335d5a73dd86354d8658093e852603b6c9129f0/fable_library-5.0.0a20-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:773932351766f4181a4b8389fd10cb7c3d3beb310b482eb4cfd1cfb47ab281ea", size = 1595217, upload-time = "2025-12-08T14:17:13.002Z" }, - { url = "https://files.pythonhosted.org/packages/8e/73/22bb6794b2f154aa63bb4273d3725ab388d30de6cdb66335cb5e0824d71e/fable_library-5.0.0a20-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8861a20ac8a08996dc904e022ed5405d3a64d8bed0f5706170d2a4fd71f7abb3", size = 1712084, upload-time = "2025-12-08T14:16:10.728Z" }, - { url = "https://files.pythonhosted.org/packages/97/ee/ebccb63b8a7d0a50656748433aad9c6876df9fa777aad829ba8b5268d38f/fable_library-5.0.0a20-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:795b889fde722badfa5e258f58a3b615b2a659b456c8c4a5235f41082b46dbe9", size = 1673111, upload-time = "2025-12-08T14:16:21.859Z" }, - { url = "https://files.pythonhosted.org/packages/8b/2d/43d7de5990cd8c98b1db5f924c9970de321c7716a536a097f4ab8b246cb4/fable_library-5.0.0a20-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:614a5e3d2b86be680f1806da964d1b724d428a59dc6f34e7192d07ecae825e52", size = 1887006, upload-time = "2025-12-08T14:16:32.673Z" }, - { url = "https://files.pythonhosted.org/packages/f1/5a/873267e136ebc96e1e54dcc02019c5f926822c157828c15d69010104017d/fable_library-5.0.0a20-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1a4507fbf7bc9fe1ca1f7f357cb77f77019f243c1e485d5754e654073b79c819", size = 1809038, upload-time = "2025-12-08T14:16:44.587Z" }, - { url = "https://files.pythonhosted.org/packages/9e/9a/d5de1a70c236c143b8fd437d60c8ec680f5f4cb043acd0de1024950e77f7/fable_library-5.0.0a20-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04d8eb693b8599e688ac7d34c39939f5721aa7552401ef25d51322efe518857e", size = 1724428, upload-time = "2025-12-08T14:17:05.7Z" }, - { url = "https://files.pythonhosted.org/packages/b7/ee/0a0b6e63c1b7e4f98dae2b1eddb4dd3c5e72951f41580100c2eeee897050/fable_library-5.0.0a20-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c43061df7b866433854253ed5f1365888edb7db45d7c80163f7ccff010ad0a29", size = 1818458, upload-time = "2025-12-08T14:16:57.676Z" }, - { url = "https://files.pythonhosted.org/packages/33/c2/9e6aa0143257649a9b111ab79d8eca436c01d8d931dfb251d9d800da3a61/fable_library-5.0.0a20-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d0ac46820ee472acf143ed206bef4812cfbecf1129e70102b0d4d6755633a55a", size = 1893296, upload-time = "2025-12-08T14:17:23.758Z" }, - { url = "https://files.pythonhosted.org/packages/e0/bd/61acd361e50ce5f7b84c6a2a9e71416f58ba2a60ddfb842572fc74fd39ea/fable_library-5.0.0a20-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:dc33ecf874ff306e444e854d9e90cb5dc43399c3ff27298e2133886749292c63", size = 1937677, upload-time = "2025-12-08T14:17:34.064Z" }, - { url = "https://files.pythonhosted.org/packages/4e/9e/73860ac35ff750bd8e26e1332c5bdc5b053abf8fbcc7f7016dbb1744468b/fable_library-5.0.0a20-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:ae43aa046addc1c8d53f4d23164abbbffc9654ba0f6c892b619ac6273058c926", size = 1929893, upload-time = "2025-12-08T14:17:45.995Z" }, - { url = "https://files.pythonhosted.org/packages/27/93/a1789440603de315f6c1cbd0fc588cdeb5081d8aaec9df6ffad24a0c3171/fable_library-5.0.0a20-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5556b6333db2362d62e0a8f74a2dfeafba35ce452d6d630cd3518fd57b64ec3c", size = 1943482, upload-time = "2025-12-08T14:17:56.835Z" }, - { url = "https://files.pythonhosted.org/packages/94/a2/17384cdd6a94394be53ae80072a0d6a48b919b183b12d8efa58fbf7af26f/fable_library-5.0.0a20-cp312-cp312-win_amd64.whl", hash = "sha256:4955a8dbea5d49ccf45c375d094975a9b08a1da35b0539ebb14e3b71e3238d58", size = 1442787, upload-time = "2025-12-08T14:18:08.999Z" }, - { url = "https://files.pythonhosted.org/packages/ae/46/b1079a48a7bb7490c18aebf6231bd1e0ec14da4191d395de85666304e166/fable_library-5.0.0a20-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:36ae0df00867ac0c717657a5a66a3ea9dd443847f90bdd18da0a01b04e75aa64", size = 1677535, upload-time = "2025-12-08T14:17:18.762Z" }, - { url = "https://files.pythonhosted.org/packages/14/42/0d4be2261873b927282688e9fae24b03ff81e4ea3715d87eb711d2ac82dd/fable_library-5.0.0a20-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:834986ff156ceea94da2cfabe1e61dc0e290f0947c0f66f88bd76e66875bee75", size = 1595009, upload-time = "2025-12-08T14:17:14.144Z" }, - { url = "https://files.pythonhosted.org/packages/5b/a8/ca23cf445a71a537729b3d38ca3552e2abfd4240167f4fae78970cdbcb32/fable_library-5.0.0a20-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff8893b1d64f4d4d82d43d72d996b296e0e29818544f1cdb0662cc7ce1f89120", size = 1711478, upload-time = "2025-12-08T14:16:11.792Z" }, - { url = "https://files.pythonhosted.org/packages/2a/a0/c88aaa85903fa0715d4df924bfb391989bff045f2d695da492c47be40106/fable_library-5.0.0a20-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f9308ad690ddf7320ae069f788bdb8bd970865a04c07d1d34c905ef2eaabd539", size = 1672618, upload-time = "2025-12-08T14:16:23.321Z" }, - { url = "https://files.pythonhosted.org/packages/a5/62/4ae073d23e000fc4579a6a95fceae2e722a9f93363c2564e9ceb63083c15/fable_library-5.0.0a20-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e5700b673090c8aa4482e979fe3cbdb6e82ca01a178972f87db6c5c7f6498d8", size = 1885077, upload-time = "2025-12-08T14:16:33.789Z" }, - { url = "https://files.pythonhosted.org/packages/6e/73/475d999c04ba67b4dce77e721605d99487bf0b50135805418c5c516e672d/fable_library-5.0.0a20-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bc73e1921ccc76b77e43b4d2b44540e7d1690882b902a83451b3c2465fbb959e", size = 1809792, upload-time = "2025-12-08T14:16:45.693Z" }, - { url = "https://files.pythonhosted.org/packages/ca/34/bb8d82e532d9e917153171cf1ea69f22a54f3ba1fc9758fbfeb95683d2d0/fable_library-5.0.0a20-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a4b398735819a18a062200f131faa43c6e8614fda6029cc503d17564e6217d1", size = 1723476, upload-time = "2025-12-08T14:17:07.391Z" }, - { url = "https://files.pythonhosted.org/packages/a4/4a/77ae0d80c68014efe453f7e80177b9c32023b05430567dd43099c374ebb8/fable_library-5.0.0a20-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:30ad506b671fff2350676dee01877500b98be4eb6c41f6b79e5f160ec51615ef", size = 1818391, upload-time = "2025-12-08T14:16:58.967Z" }, - { url = "https://files.pythonhosted.org/packages/a1/ca/52f1122d6f9f2de8e16d2875884c3583e9937342c343fb737810d19e4d63/fable_library-5.0.0a20-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2d25bf0a1410b736de1dc86dc79e8e3f2a72d811c50b8f9f87f4635ff582752d", size = 1892284, upload-time = "2025-12-08T14:17:24.885Z" }, - { url = "https://files.pythonhosted.org/packages/90/58/c6a17f892c10e4dbc53f5556a38ec08178ec2675e44033dd7dddcfb60dc2/fable_library-5.0.0a20-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:9ef61908d167361848909af2bcb817705c88051059303aab1c5d485d5e5af7be", size = 1937425, upload-time = "2025-12-08T14:17:35.226Z" }, - { url = "https://files.pythonhosted.org/packages/75/d4/6f5435d04060fa7804eef148fdfc908ec51714837ed175624b274610bef7/fable_library-5.0.0a20-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:c713ceca5d565ad6d391c28f03492ee72f1dc7a6ebebf70d3324b980af29a24e", size = 1929446, upload-time = "2025-12-08T14:17:47.187Z" }, - { url = "https://files.pythonhosted.org/packages/1e/a0/65b167a2e7b8739696e20ba1cfedd143ad393630ee0f1b2bd8d4d555717a/fable_library-5.0.0a20-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d9b5e4b9a14cbafae16c4b88c5ed5c65e86ddcb430041ac3b59a7378e15bf3ad", size = 1942992, upload-time = "2025-12-08T14:17:58.024Z" }, - { url = "https://files.pythonhosted.org/packages/2e/6b/ef6e23223a76cfe127699e52edac17e3a5934c81803def4f42cb4e425089/fable_library-5.0.0a20-cp313-cp313-win_amd64.whl", hash = "sha256:f04c8eed205143c677e5beebea8d302aede692c4a815ea9cffdd44a6093a75ef", size = 1442837, upload-time = "2025-12-08T14:18:10.233Z" }, - { url = "https://files.pythonhosted.org/packages/af/a5/5bc8b1611d2a7589f02d92be7839c022d6c47c61d4d01b1f481762c2603c/fable_library-5.0.0a20-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12bab89825b61bedbf7d2a0d80a9ba5a5bab73e5c46d40b3affa32cffe522ebf", size = 1711567, upload-time = "2025-12-08T14:16:13.242Z" }, - { url = "https://files.pythonhosted.org/packages/25/8d/48b51e8033d0f71d0f25db4fc7ac31d853aec9e5aee9bb1369ae4194a17e/fable_library-5.0.0a20-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6f5377c6250f303463b2f2762243bc54209e9d4de24c12ed66caf6ba36315733", size = 1678665, upload-time = "2025-12-08T14:16:24.605Z" }, - { url = "https://files.pythonhosted.org/packages/7b/08/3ff3e4b6946e9e7e34a29058e7a175bb83182fb263c5f980449401ef71c3/fable_library-5.0.0a20-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2535035fded13ced47d3eed58ad5a18ea15267b12b3609eee4d158865cfaeb96", size = 1898217, upload-time = "2025-12-08T14:16:35.775Z" }, - { url = "https://files.pythonhosted.org/packages/e2/4b/62661e3152ee4d067a4ba7a9e88c2fe578fdbbce46012cfebdce93524a70/fable_library-5.0.0a20-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8bf87de72a6ea961891fac9e369dde56e49a622670dee427081aa30c6953bb6", size = 1807154, upload-time = "2025-12-08T14:16:47.513Z" }, - { url = "https://files.pythonhosted.org/packages/ce/64/b5aa1e0fd5372a70ad85f0e657ef744f2e619c48f7cb233057f91a84b16c/fable_library-5.0.0a20-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:17f9acdcd857c18b7502bb04188996364d61ada3b833796579fc42ef494c3196", size = 1891441, upload-time = "2025-12-08T14:17:26.496Z" }, - { url = "https://files.pythonhosted.org/packages/07/81/34e5b90b1d8bd3ca4dfe050bf8c2ae10c030fd79129da6bd79dee4f9ecce/fable_library-5.0.0a20-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:282ab309c19e0c5bc38a5ccf47c4f175792c89158b46e73d7bdb61f064b6c933", size = 1942045, upload-time = "2025-12-08T14:17:36.922Z" }, - { url = "https://files.pythonhosted.org/packages/d4/1d/56cc9c1fc8a426165ce16fd1a0c8269ae0c010b49e232137ecf26ed926a5/fable_library-5.0.0a20-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:caed2a670b4cac21d8056c066325963e0cc943af9c1506d8b025a963d7716349", size = 1935372, upload-time = "2025-12-08T14:17:48.404Z" }, - { url = "https://files.pythonhosted.org/packages/02/e2/1161b1ed6bb74712b1c5369f1b3093c89d9ed059109127ff0482196bbe92/fable_library-5.0.0a20-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:78026935b8126f051c98f74effb04c8b3d25317b0ea97b0b6eaee09d816e4cb4", size = 1947627, upload-time = "2025-12-08T14:17:59.374Z" }, - { url = "https://files.pythonhosted.org/packages/19/a3/5799ccb0be448ce473223dd686ff6a68e092b0de5bab30736af103f8d761/fable_library-5.0.0a20-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:0c6522d0465192276e8b8de1b1cf9419744535fc7237bd228907167106c62b3f", size = 1661135, upload-time = "2025-12-08T14:17:20.014Z" }, - { url = "https://files.pythonhosted.org/packages/67/d2/7c0c9adc74cca250ec1583fb34cd2da1a3871a54bd277a315052285271cb/fable_library-5.0.0a20-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:98c8665f6702d3550479d473fa43b96e283b5b226248a4a7154fca52eabd7b9a", size = 1588822, upload-time = "2025-12-08T14:17:15.31Z" }, - { url = "https://files.pythonhosted.org/packages/9d/d1/08a41f3044609e7bbea22d2c394b7630e7a20109c38f81e7068423e13eea/fable_library-5.0.0a20-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a721a2ece60069cfbcf814ce7356b3986c4ead23c76789263f7abc159b4c4107", size = 1706597, upload-time = "2025-12-08T14:16:14.637Z" }, - { url = "https://files.pythonhosted.org/packages/e3/42/f2c91c66cb83e19219a603f445b6482d7d8c38ce3c793f443d3425146e87/fable_library-5.0.0a20-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:70aa4f7f84e28c1e4247f1552a4ae66afbd1397bb3d301f6ad4914451f4cdca6", size = 1661074, upload-time = "2025-12-08T14:16:26.097Z" }, - { url = "https://files.pythonhosted.org/packages/ab/d4/ee641c8fa490c8ee363db0210d17727ce83b64cad6661bb3b1b6ae800d30/fable_library-5.0.0a20-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:490c332ca5b7075aa08de4efdac1807766713b392d431af2dad82242046bc193", size = 1887218, upload-time = "2025-12-08T14:16:38.352Z" }, - { url = "https://files.pythonhosted.org/packages/b7/ca/7139e4c11554d9e7b72515c140340adf6f6ebe65deaf5071a8272909e638/fable_library-5.0.0a20-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a909bc7fa5f8f0dccbdeb5a71d2fb1fd941905b6e18a6439c3a9198ff5485ad3", size = 1802009, upload-time = "2025-12-08T14:16:49.119Z" }, - { url = "https://files.pythonhosted.org/packages/08/d0/02cd919390bc16924e341f2182745da509a0355df061a66f3b9cd9e3cfd6/fable_library-5.0.0a20-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ae7ca54f20ccc8f8ccfef6938830c6ccdaa19262f55713d1244550e3175e4a0", size = 1708040, upload-time = "2025-12-08T14:17:08.557Z" }, - { url = "https://files.pythonhosted.org/packages/fa/b4/2c3425a07a577cfb85e3f7dba23efd4023bb797ff1119b67d38c8b6915d3/fable_library-5.0.0a20-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:90ee6c863d5e8fff8a659bbae8715d33a3eb387950926e04c89ec4650d1fb716", size = 1814233, upload-time = "2025-12-08T14:17:00.411Z" }, - { url = "https://files.pythonhosted.org/packages/1f/cb/5cce1721473c5fcaaefc70258cedc500243230cfa7d3ccefa2abfa3dc007/fable_library-5.0.0a20-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:cb04fd4a86d7b846f5577879d388156fd64495c8f2bc3c23f8ff1fa66d1416c3", size = 1886419, upload-time = "2025-12-08T14:17:27.698Z" }, - { url = "https://files.pythonhosted.org/packages/09/66/ce8c0ea5282eae7478ea53fe4581899c0da79aabc885ced640f896fac284/fable_library-5.0.0a20-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:af04e6581136ba5d1d87828d84a65a7f1f0b7d0f463e148a9a83af9fbc75b32b", size = 1928128, upload-time = "2025-12-08T14:17:38.183Z" }, - { url = "https://files.pythonhosted.org/packages/66/45/b2725a1179fc70ed961b1741f61851417ffdfc97002d8edbf0fa35a5d767/fable_library-5.0.0a20-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:b4fb050e549ae347b3198e204a52dc8533b64598f56fcc418aa43b8e86f2d6ee", size = 1925428, upload-time = "2025-12-08T14:17:49.853Z" }, - { url = "https://files.pythonhosted.org/packages/62/26/302ff5b84aa6ae1e2c2b3a4a5a5c04ebd8b97be145bfb357d7971311de91/fable_library-5.0.0a20-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c272da657429e0afc343e7045a596717f9a0e1c5d331e83793e45d61101f2ae1", size = 1930167, upload-time = "2025-12-08T14:18:00.538Z" }, - { url = "https://files.pythonhosted.org/packages/ee/16/fb0238c7b5707b4f51b1702a5840625c85d36a23f33b239edaded66d2b54/fable_library-5.0.0a20-cp314-cp314-win32.whl", hash = "sha256:f55c02d8bf2965936b308fe5760d39c77a71f03db8b89c8be31fc1cde79b9aa0", size = 1296393, upload-time = "2025-12-08T14:18:12.915Z" }, - { url = "https://files.pythonhosted.org/packages/f5/1b/12e33d3121e324eb6b009192c0b60200bf81064815e0d6d797e628f6d124/fable_library-5.0.0a20-cp314-cp314-win_amd64.whl", hash = "sha256:d03ec6bf28c858c2ad3b33df552b0248b9143c2d798ab88cb21076efc5d41f74", size = 1429532, upload-time = "2025-12-08T14:18:11.754Z" }, - { url = "https://files.pythonhosted.org/packages/f2/87/14aa99d1831dd03006daf7b3d534ca0065ee17d420419a659d3227a7076f/fable_library-5.0.0a20-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf970ea08a40470ad69e6481ff02806d55695ac37aca80cec415e37cc0b4dff8", size = 1714205, upload-time = "2025-12-08T14:16:16.019Z" }, - { url = "https://files.pythonhosted.org/packages/e2/37/6cfc6d504dc56ff9c02e22b072ff5f9b4bdb1a528905e33e5da365887762/fable_library-5.0.0a20-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e4a92ba7a3c69f00d31ab68e8144629c122f02d8c6a2a1d89c0498fc42ed68e4", size = 1679306, upload-time = "2025-12-08T14:16:27.281Z" }, - { url = "https://files.pythonhosted.org/packages/3a/b5/a443520cdfa9c3c66c957715239b519c6430e91d91ede4b8809843a35af1/fable_library-5.0.0a20-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9159b1450974f49cb4a53b6ac2b70c0fd5feacfb10daa1bb37fc3852bbef52a9", size = 1898090, upload-time = "2025-12-08T14:16:39.616Z" }, - { url = "https://files.pythonhosted.org/packages/93/17/a136966a847cdcfdfacf1d3abd385bf6ca008bae00a09505e5161e2f8efa/fable_library-5.0.0a20-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0a0b9db1a02cc9ac29949a35bd6420f41b9fe655d7738a413f862e68b211dc04", size = 1807667, upload-time = "2025-12-08T14:16:50.466Z" }, - { url = "https://files.pythonhosted.org/packages/5e/5f/43bc41b370ebf17a2f732267858685f751b05f1c7771549e3457da13e9ac/fable_library-5.0.0a20-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:6f72cb71a084a5b17a43491be56b75a794cc2f38c99d6d30f2d563e8c230b068", size = 1894424, upload-time = "2025-12-08T14:17:28.886Z" }, - { url = "https://files.pythonhosted.org/packages/d2/45/4ee0911f6ac6edb99b2db1faf2fcba59ce1a97314a7ccd2722623fca4ffb/fable_library-5.0.0a20-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:8a59776aaf1f656a11ae2b96444198a816bc7080a222cb9f9e8dd4cf96b70796", size = 1942243, upload-time = "2025-12-08T14:17:39.519Z" }, - { url = "https://files.pythonhosted.org/packages/b0/30/543414b7ea9a5ffcd88e694269a00cb4d3d387d04dc4a3afb065ef28d64c/fable_library-5.0.0a20-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:ced671ccdbbd4b4863334bf207dfc40a4fd44ae9c73e4ffcf92ec2e81a13f04f", size = 1936812, upload-time = "2025-12-08T14:17:51.26Z" }, - { url = "https://files.pythonhosted.org/packages/d2/c4/31cee9d7c8f72ffebe793d5aa6fd317152fbdc841666e5035bcfb2a6e03c/fable_library-5.0.0a20-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:987b6f9aeb729390979714c943fb56d2bbbbf19271d839c080c34ac9b6e9af8b", size = 1944870, upload-time = "2025-12-08T14:18:02.547Z" }, +version = "5.0.0a21" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/fc/7509b9fa5c2fb47861ffd1bd866969bc8c5b8a576d739d617db6a741dc7f/fable_library-5.0.0a21.tar.gz", hash = "sha256:00574343fcf4da48509e5028b7b7083d12c8714924cd22ad7affbbbf49f7e0c4", size = 201498, upload-time = "2025-12-15T16:57:15.629Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/ad/b50d5e2f52e78f5fc27300ab85634afd68bb9a1749a67060a5cd7f66603c/fable_library-5.0.0a21-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:5f86cef2e506b0cafab9f67cbaae4858fd2f3b2bc8860b56e31b48e1a83bcd1c", size = 1679220, upload-time = "2025-12-15T16:56:24.102Z" }, + { url = "https://files.pythonhosted.org/packages/f9/cb/af81782432d366eaa66e33dbbefa3f7c94fb2891ab4e73a7d7044a254220/fable_library-5.0.0a21-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:738dea9483156cbfcdf9786142d7bdf3745013ac57672d5f23650067b675c09d", size = 1598364, upload-time = "2025-12-15T16:56:19.104Z" }, + { url = "https://files.pythonhosted.org/packages/44/43/fcbf4266130009c024d95ce6a4daae4d54733fefeeb34fa97f38a1bd616b/fable_library-5.0.0a21-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d655ebe556df59dbf37796e544f4e4f1a18d7c7d7cd6ad3af60291556aeaf7c", size = 1680823, upload-time = "2025-12-15T16:55:17.149Z" }, + { url = "https://files.pythonhosted.org/packages/42/3b/9ad6c7db9167307ca56b21d11b7e329facd12860631aa865402a2ef17e4f/fable_library-5.0.0a21-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c29c4916e40bc506dda2ea8300c0f09307cbc1d1f8e276587a015a08981b6aa7", size = 1658897, upload-time = "2025-12-15T16:55:29.807Z" }, + { url = "https://files.pythonhosted.org/packages/e1/b3/53c7bc1e5247c799e4e660973088bdf2bc1968f11b7fdc684fb746cdcd03/fable_library-5.0.0a21-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:296a2310786a574ac5dc3e184ca3a896050640d19fe3f6f704b2cedf257d58c4", size = 1862006, upload-time = "2025-12-15T16:55:41.028Z" }, + { url = "https://files.pythonhosted.org/packages/e9/c4/f2a0121e07d095cc1ffd1b89cc134d9717d0d11c914347ebc214f532d235/fable_library-5.0.0a21-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca439be8d6bd8b26a9965dc8c68810e887c60fdcd70e90452d117b2d75cab4f1", size = 1797192, upload-time = "2025-12-15T16:55:52.136Z" }, + { url = "https://files.pythonhosted.org/packages/28/c8/63ed2633b16d52adfba0b4b1fcd3c4fe622f7678168135c92d4d1e759e10/fable_library-5.0.0a21-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0947a2ca5dbe04dfd1171ed02df33d24f32cf13cce90e704f90431c90bca876a", size = 1712419, upload-time = "2025-12-15T16:56:11.984Z" }, + { url = "https://files.pythonhosted.org/packages/d2/93/f99b204bead03773f1d60eb08a81b3e35f493e487560484d559a6645814d/fable_library-5.0.0a21-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a33ae7efbff7cbdd9eb4668493adf5a9e759a20cc7430006d75f3e61c28e5d15", size = 1806207, upload-time = "2025-12-15T16:56:03.539Z" }, + { url = "https://files.pythonhosted.org/packages/d6/73/d8dcf7d813cc0e370d01e6f032c6d02c68e0a1975fa6450ad63e22ea61f2/fable_library-5.0.0a21-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2b874d720199da165d82a6049ec3338ecb2727dd0233f120c6cf0c7f97c4420d", size = 1862511, upload-time = "2025-12-15T16:56:32.086Z" }, + { url = "https://files.pythonhosted.org/packages/08/54/5d4342174254805ebf671f6dd489fad9a5140d6bf00bc1d42407974e92cc/fable_library-5.0.0a21-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:a57fe6044df6bfbb8d421c6ac5f5b2a53ef7193b138212db2881eda2b7b08faf", size = 1927949, upload-time = "2025-12-15T16:56:44Z" }, + { url = "https://files.pythonhosted.org/packages/8e/d3/e1ba2f4fdc2109eaca12cda870e2782192b3067e2c5b7d619dec6204097e/fable_library-5.0.0a21-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:80c5c884c83536e94e429ce7d07f995bbe05153eea629f512308dd8043d8661b", size = 1957284, upload-time = "2025-12-15T16:56:55.04Z" }, + { url = "https://files.pythonhosted.org/packages/37/f6/60c87687cff9634edbbb238c21c3b257ca4da03b2288873c7e391e93e145/fable_library-5.0.0a21-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:997858c7d665f05f8bd121fb55ee5632644ccc084aec01b5af8a594fcd71c40c", size = 1972240, upload-time = "2025-12-15T16:57:06.871Z" }, + { url = "https://files.pythonhosted.org/packages/60/23/1dea8151e9994154d61ef54c770ccc0c952e149ae95c0c7e859162b2e001/fable_library-5.0.0a21-cp312-cp312-win_amd64.whl", hash = "sha256:75b1df34665861c7f89fccd7c1718cf741df01777bcd3c90c850fe0926f753d0", size = 1443854, upload-time = "2025-12-15T16:57:20.389Z" }, + { url = "https://files.pythonhosted.org/packages/d3/c7/fb25e513e49f5d284b70f994fbd5b5090f87448253ea9ac43185146d46d9/fable_library-5.0.0a21-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:4acc923cf88d46966db1989297cf838903cad766b41588d0c62295cca5bd6494", size = 1679493, upload-time = "2025-12-15T16:56:25.422Z" }, + { url = "https://files.pythonhosted.org/packages/71/1d/12626882347ac9bd861b63a78abb14d8a611c5a1d02c509e5ccb3fadcbfd/fable_library-5.0.0a21-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bfcb8dff2e2de20f650f6f310a8a8bb082a94de21c0c1d33862b801576450c3a", size = 1598225, upload-time = "2025-12-15T16:56:20.282Z" }, + { url = "https://files.pythonhosted.org/packages/e5/28/fe6480ae476b7199fbe51d3562cbd085c5e98d88cfdaa4ce28d9f6b4b325/fable_library-5.0.0a21-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce0d7c07ee30dedca6c49ef9d6a445e09bd6a054e9c1768ad8cc5b6e04719df2", size = 1680402, upload-time = "2025-12-15T16:55:18.555Z" }, + { url = "https://files.pythonhosted.org/packages/40/66/b8414db09e81406de30b9c5c924149266cb104f06d434cdcb945f48319c4/fable_library-5.0.0a21-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:903a47e2d15a142228868598570eec0e3602b49d3751262b55ac812202a8bb3c", size = 1658601, upload-time = "2025-12-15T16:55:31.045Z" }, + { url = "https://files.pythonhosted.org/packages/b9/a0/e136056406cc02f45a93c8ba69abcf00d58235f929b0bf1a3bae7ca586af/fable_library-5.0.0a21-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1968a47644fd3a04bb1610fe8737ede16dcdabe2abea62b9687049752c91008f", size = 1862517, upload-time = "2025-12-15T16:55:42.279Z" }, + { url = "https://files.pythonhosted.org/packages/a8/03/98b5a57befc61b1215dfdab81d847e686ed3b8395e8d3e0f218c584871ed/fable_library-5.0.0a21-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:840e1b13ae04dfa7ec18d451bcb2c851ef5fd0d35bfec9fa7c7ae5a9e78c96be", size = 1797276, upload-time = "2025-12-15T16:55:53.472Z" }, + { url = "https://files.pythonhosted.org/packages/6c/74/ee7491896256d527e1dd688af683584feff8f7c532f235acdb3974fba3f2/fable_library-5.0.0a21-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e8e3a6d3858975b68566fd90a1c64f07759bd3fc0739693e57946618b576721", size = 1711971, upload-time = "2025-12-15T16:56:13.525Z" }, + { url = "https://files.pythonhosted.org/packages/c7/44/0ece2d09ee2cc6ea86c92992fa26c1f74be57ca3250eb0221107b0d8e4e7/fable_library-5.0.0a21-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1f16bc2094308697b06b396f058eda9e539af286692ffd98b690c27b06196349", size = 1806448, upload-time = "2025-12-15T16:56:04.865Z" }, + { url = "https://files.pythonhosted.org/packages/b5/a0/2698843c377af853cecf0bb69b9fcbaf793a5be7aa9021cf8b8018319f5b/fable_library-5.0.0a21-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9c5f1129068691dfafaafd67cc322f973c3c4f41d30e4a3e532bb109709d76e2", size = 1861794, upload-time = "2025-12-15T16:56:33.525Z" }, + { url = "https://files.pythonhosted.org/packages/af/c0/e7d07367ca501fc93d6ba485a5e76b038c670b247218daca591bf52d1275/fable_library-5.0.0a21-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:9ca3aab9844a5461f46d0f4d6bf7d2a0ab9f87b28518f2fafd1c004cd954a35e", size = 1927853, upload-time = "2025-12-15T16:56:45.447Z" }, + { url = "https://files.pythonhosted.org/packages/08/41/ea5f4ab6b419b634f6faa9888863052169f05004f8f277d39f6ae75996d9/fable_library-5.0.0a21-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:c3de19fa46a023ca040783aa464203b8d8f400d8de93b585685bd8ed1e5cf566", size = 1957231, upload-time = "2025-12-15T16:56:56.698Z" }, + { url = "https://files.pythonhosted.org/packages/88/85/0bac67d68532b6564ac69b6b17ac92704782b4268dd0fd66f8b4c968d155/fable_library-5.0.0a21-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1d46c2697274b52ebfedbdc9f153aa7129ed4388bbb2ba2aa99c9bc1cafccd64", size = 1971099, upload-time = "2025-12-15T16:57:08.194Z" }, + { url = "https://files.pythonhosted.org/packages/db/b9/e8b3ec9dc034c85469d7986221f78046aaddd941e1ff01568cc5d415a8bc/fable_library-5.0.0a21-cp313-cp313-win_amd64.whl", hash = "sha256:03b6c65e4dcf945f2e5b8a74b2df7e7f8208bfef05616b257b450cae6044f12b", size = 1443910, upload-time = "2025-12-15T16:57:22.194Z" }, + { url = "https://files.pythonhosted.org/packages/a2/64/23200e89f196b5e24a6c60187ea4954125a08c9e30709788d0258076084a/fable_library-5.0.0a21-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:228558397179770ad02557a1bdaf104bddbbb730663d50f69ab8f66a469ee18a", size = 1685726, upload-time = "2025-12-15T16:55:19.881Z" }, + { url = "https://files.pythonhosted.org/packages/a3/e1/9cc21c3db431cae3452369be399938df2d860a7253a8a5cae762e265dfcf/fable_library-5.0.0a21-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bba9401c1a77df69b5013a773f020b10f7838fec9263647e165e29d017dcea17", size = 1662100, upload-time = "2025-12-15T16:55:32.343Z" }, + { url = "https://files.pythonhosted.org/packages/94/0e/1190547424b120788ac10d665455446209035766e96eed6186d30eb2e8de/fable_library-5.0.0a21-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:25f93beef3cbb8db1f6a97793465cef1f789e83e751084ad671120d8a666b71a", size = 1880044, upload-time = "2025-12-15T16:55:43.777Z" }, + { url = "https://files.pythonhosted.org/packages/95/ea/9acc3ece8dc82589cd4f4b02df2be7f57e419c9d68fa9d6ece9ca43b6ac4/fable_library-5.0.0a21-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f664ec1cdc558a6bf8e5647356b22cc0a914de0db73e9cb7235a16d231593349", size = 1803261, upload-time = "2025-12-15T16:55:55.28Z" }, + { url = "https://files.pythonhosted.org/packages/25/60/862dfadcb7cd8598eb3bce85fd3c88bac96d3636f447ee67fefa53804dbc/fable_library-5.0.0a21-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a3535290e9a23dcb1c13c16d2801398438116d72eae2d2979ec84cfb74c1d7f9", size = 1865832, upload-time = "2025-12-15T16:56:34.875Z" }, + { url = "https://files.pythonhosted.org/packages/ea/2f/ee16defe639f9317f0865d7a75e79fc7ac6779751e6ab15e1b4395c73e44/fable_library-5.0.0a21-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:571b07c6f88c7fc510de6f02c21bb2722b675b1121f53a193fc089c4f4806d94", size = 1934819, upload-time = "2025-12-15T16:56:46.798Z" }, + { url = "https://files.pythonhosted.org/packages/24/7f/1d028d3819fd14408326383a7a4b6f72b21d232e4969f11ecb67615d1148/fable_library-5.0.0a21-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:ff60f1fe56c838a97b0f98762ba2fb6603f84db55ae2a66487e188c20127e774", size = 1964022, upload-time = "2025-12-15T16:56:58.247Z" }, + { url = "https://files.pythonhosted.org/packages/1a/0c/39a66b15c22d6f0953e4f86bd9152feccffc472be623e92a90369b6f2737/fable_library-5.0.0a21-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8a1288a2a2dbfe1708c0f76dc882cc69590495d140723c3f2b4bf030dab60f16", size = 1975565, upload-time = "2025-12-15T16:57:09.474Z" }, + { url = "https://files.pythonhosted.org/packages/33/dd/f1e70daef771d24298cb89b0b61bd6d880dc4e259c4f58eb99eec92205a4/fable_library-5.0.0a21-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:accc2f6316c8930139aa670a0ac23f87b2bcafb87c8b541ad6384b4c028836c1", size = 1663860, upload-time = "2025-12-15T16:56:26.947Z" }, + { url = "https://files.pythonhosted.org/packages/41/e4/2d318dd6f36c03e40a1d14a61c7583fa96682a515ae56a2d2bff5a27f30a/fable_library-5.0.0a21-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:f3ee5298a93143ce4ade9ecbf81abf46aac620378ae8233a14d832a956aca82e", size = 1590274, upload-time = "2025-12-15T16:56:21.54Z" }, + { url = "https://files.pythonhosted.org/packages/4e/5c/c2d53d8e864d1113ee48ad50e5260fbc0643d1d3e0ed41306479892d2f07/fable_library-5.0.0a21-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:215b9db35b91a424de668e5654f0293418e2158137b969bf472f5a7d4d67d71f", size = 1678348, upload-time = "2025-12-15T16:55:21.599Z" }, + { url = "https://files.pythonhosted.org/packages/37/ee/227759372e728c0aaf121a421ead522ba26d3a01141d9f50245d7a674135/fable_library-5.0.0a21-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7c3e4efa2167363af0d6e4e9466ea239b249bd51646c03eca5c9ed5e49915994", size = 1643919, upload-time = "2025-12-15T16:55:33.635Z" }, + { url = "https://files.pythonhosted.org/packages/5b/78/3910761940fa34cd8bf13a1fda7ca1509949661b0d06968f1bf53307fb81/fable_library-5.0.0a21-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d92f886c089ce2326e46af7b28b1df9b117b19316ae02c9b5f963971d0f6091b", size = 1865150, upload-time = "2025-12-15T16:55:45.138Z" }, + { url = "https://files.pythonhosted.org/packages/12/6b/f1753f2d8ee8ce8b81208e4eb0699cb4f4a61984a1bf5b7a46dc89c63cf5/fable_library-5.0.0a21-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:836c8006897fa244461a94f04c4767d785a69f1b326399ce1fa479180c452fa3", size = 1786522, upload-time = "2025-12-15T16:55:56.611Z" }, + { url = "https://files.pythonhosted.org/packages/8a/a3/7d9939c82f216f0b6a2ebfee8a7b4df918c4d2b0fb95608501c1a8e994e5/fable_library-5.0.0a21-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b951bbe9397546d65bf9b1360c912d083105405ceaa2e885189bdf19ee75f0b", size = 1701704, upload-time = "2025-12-15T16:56:14.862Z" }, + { url = "https://files.pythonhosted.org/packages/99/77/521ee201047fe4b98b29f944eb691a731943b417790951d95124fc91bf0e/fable_library-5.0.0a21-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e45e95f60c9bca40af58384c0617065bde8e65708e77f7193c87d77e4596d883", size = 1796899, upload-time = "2025-12-15T16:56:06.143Z" }, + { url = "https://files.pythonhosted.org/packages/52/8d/a77654fcbaedc31449d1ac7d5fed6a510a05958b17c4de7f111add0bb2f8/fable_library-5.0.0a21-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fe04a27c1423df748c3b25025412b88e181f9fc2bc5237608baf7ad63e7833ba", size = 1859116, upload-time = "2025-12-15T16:56:36.099Z" }, + { url = "https://files.pythonhosted.org/packages/a2/fa/65b515c333a1d2f788deadda45d96c85879784f6d583b6358a7a8f478bb5/fable_library-5.0.0a21-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:124b6545eaf5a11a227b6119d4cb9af84b7d0438c5ce08237eca843496577359", size = 1912104, upload-time = "2025-12-15T16:56:48.081Z" }, + { url = "https://files.pythonhosted.org/packages/46/bc/5e5b81d335e237c0bd5acd222c7735ce96dc018576df3962be2a2b7f034c/fable_library-5.0.0a21-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:011218cbbee08aa48dd2f756e764f3225ea9b3b33a0c1b6ff6c1c7195f05f174", size = 1947890, upload-time = "2025-12-15T16:56:59.494Z" }, + { url = "https://files.pythonhosted.org/packages/66/6e/c9cb74aa05ab002b7a4ea08cc779806f751e11cc1a051e91725850fb4354/fable_library-5.0.0a21-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ef6db0292ff1908a28f439f0daf980b32731b83506f35a68ed2a83aa0fc33b34", size = 1960308, upload-time = "2025-12-15T16:57:11.115Z" }, + { url = "https://files.pythonhosted.org/packages/b1/65/e30cd470316c7e3761d9e71de8b6cefe9b8b92cf176a7e2cc9aae3831554/fable_library-5.0.0a21-cp314-cp314-win32.whl", hash = "sha256:e2ed7dfd4d1a7bcb6725910e98a41603210bd7cb882ac8765c996a1e596b641c", size = 1296054, upload-time = "2025-12-15T16:57:24.756Z" }, + { url = "https://files.pythonhosted.org/packages/38/22/9a2f671451fc8543071b82f61ca17e587257aead8ac4f09a079904eabd53/fable_library-5.0.0a21-cp314-cp314-win_amd64.whl", hash = "sha256:699a3e52a07c0a1499eee5d263f1378f217eea660f98446e1691c536b600e40c", size = 1430173, upload-time = "2025-12-15T16:57:23.448Z" }, + { url = "https://files.pythonhosted.org/packages/6b/09/ce3523dec497043b0e9a0441d5c6ff6e63f04bacccb13cd1dab6d77fb75f/fable_library-5.0.0a21-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63040652d4f85962959aa9a19be84c8252ebbff5346f5da6c467a5205e6938a6", size = 1686402, upload-time = "2025-12-15T16:55:23.381Z" }, + { url = "https://files.pythonhosted.org/packages/61/a1/0e867a6626660746c626524cd1d9d36bf88877f42472f424b4dabded8e0f/fable_library-5.0.0a21-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5577775317cb2b65c75fdc78d85bdbf3ffc233bbbb87010bb5e2ccb4c3ed20eb", size = 1663136, upload-time = "2025-12-15T16:55:35.126Z" }, + { url = "https://files.pythonhosted.org/packages/9c/3f/e8bc08090c0bc880f36511c7f0f22ef2114f2e17fe789df5d9c39eb27b78/fable_library-5.0.0a21-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26bfd067f4047e08de1a8611aef3db8a3faf60e8c5d3cfbe39c98ab84ce842f4", size = 1878910, upload-time = "2025-12-15T16:55:46.369Z" }, + { url = "https://files.pythonhosted.org/packages/a6/aa/5122ce7e4d37d6b21ff281701cf2eca9bba5b9c3858c13d11854102355f7/fable_library-5.0.0a21-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fc9ed260c6d55d4030f51794e4488535cd262bb43e758b6cdd2c6b0247ce5cff", size = 1804657, upload-time = "2025-12-15T16:55:57.912Z" }, + { url = "https://files.pythonhosted.org/packages/5b/cf/0d19a7f1480eb1f92b348eae0391484529d3ee1aa4d0d437536bcdf3ff9c/fable_library-5.0.0a21-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7ce7de39cb95cc206fd08329a3201a9901580df702ab74389033f42a6cf7a87b", size = 1866832, upload-time = "2025-12-15T16:56:37.735Z" }, + { url = "https://files.pythonhosted.org/packages/45/d8/e157856b165bfe92a82f667ca3023c82b99325cbe9ee400eed07f2cb0d69/fable_library-5.0.0a21-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:7f3d7471b9968f6d96a861b8e303f6ef2f3d026fc43fc6e3fea405e4621f5c82", size = 1935055, upload-time = "2025-12-15T16:56:49.427Z" }, + { url = "https://files.pythonhosted.org/packages/e6/41/079e5961ec12cb4b6eb65fb81fd115b94c7b4ef4ff01c558070c76e08982/fable_library-5.0.0a21-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:f926ba42a34c30eb2ab049bea4c7a16c1b37258a7be0b4c9dd7eb9674d19784c", size = 1964439, upload-time = "2025-12-15T16:57:00.791Z" }, + { url = "https://files.pythonhosted.org/packages/97/a3/e7e892a9ee688e808c4940dd912f108620e3fb791777345df6c63fd06de0/fable_library-5.0.0a21-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:72b34f003778d7952c896aa20eae5bdd575e983d71633c6a44e35753d002c4d2", size = 1976265, upload-time = "2025-12-15T16:57:12.646Z" }, ] [[package]] @@ -195,7 +195,7 @@ flask = [ ] [package.metadata] -requires-dist = [{ name = "fable-library", specifier = "==5.0.0a20" }] +requires-dist = [{ name = "fable-library", specifier = "==5.0.0a21" }] [package.metadata.requires-dev] dev = [