llguidance 0.7.16__tar.gz → 0.7.17__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. {llguidance-0.7.16 → llguidance-0.7.17}/CHANGELOG.md +5 -0
  2. {llguidance-0.7.16 → llguidance-0.7.17}/Cargo.lock +5 -5
  3. {llguidance-0.7.16 → llguidance-0.7.17}/PKG-INFO +1 -1
  4. {llguidance-0.7.16 → llguidance-0.7.17}/docs/json_schema.md +13 -5
  5. {llguidance-0.7.16 → llguidance-0.7.17}/json_stats/expected_maskbench.json +171 -317
  6. {llguidance-0.7.16 → llguidance-0.7.17}/json_stats/src/json_stats.rs +7 -3
  7. {llguidance-0.7.16 → llguidance-0.7.17}/parser/Cargo.toml +1 -1
  8. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/earley/parser.rs +82 -56
  9. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/json/compiler.rs +125 -16
  10. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/json/schema.rs +94 -99
  11. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/tokenparser.rs +1 -1
  12. {llguidance-0.7.16 → llguidance-0.7.17}/pyproject.toml +1 -1
  13. {llguidance-0.7.16 → llguidance-0.7.17}/python_ext/Cargo.toml +1 -1
  14. {llguidance-0.7.16 → llguidance-0.7.17}/sample_parser/tests/test_lark.rs +299 -0
  15. {llguidance-0.7.16 → llguidance-0.7.17}/sample_parser/tests/test_ll.rs +15 -0
  16. {llguidance-0.7.16 → llguidance-0.7.17}/scripts/test-guidance.sh +1 -1
  17. {llguidance-0.7.16 → llguidance-0.7.17}/toktrie/Cargo.toml +1 -1
  18. {llguidance-0.7.16 → llguidance-0.7.17}/toktrie_hf_downloader/Cargo.toml +1 -1
  19. {llguidance-0.7.16 → llguidance-0.7.17}/toktrie_hf_tokenizers/Cargo.toml +1 -1
  20. {llguidance-0.7.16 → llguidance-0.7.17}/.github/workflows/rust.yml +0 -0
  21. {llguidance-0.7.16 → llguidance-0.7.17}/.github/workflows/wheels.yml +0 -0
  22. {llguidance-0.7.16 → llguidance-0.7.17}/.gitignore +0 -0
  23. {llguidance-0.7.16 → llguidance-0.7.17}/CODE_OF_CONDUCT.md +0 -0
  24. {llguidance-0.7.16 → llguidance-0.7.17}/Cargo.toml +0 -0
  25. {llguidance-0.7.16 → llguidance-0.7.17}/LICENSE +0 -0
  26. {llguidance-0.7.16 → llguidance-0.7.17}/README.md +0 -0
  27. {llguidance-0.7.16 → llguidance-0.7.17}/SECURITY.md +0 -0
  28. {llguidance-0.7.16 → llguidance-0.7.17}/SUPPORT.md +0 -0
  29. {llguidance-0.7.16 → llguidance-0.7.17}/c_sample/Makefile +0 -0
  30. {llguidance-0.7.16 → llguidance-0.7.17}/c_sample/README.md +0 -0
  31. {llguidance-0.7.16 → llguidance-0.7.17}/c_sample/c_sample.cpp +0 -0
  32. {llguidance-0.7.16 → llguidance-0.7.17}/docs/fast_forward.md +0 -0
  33. {llguidance-0.7.16 → llguidance-0.7.17}/docs/mask_plot.png +0 -0
  34. {llguidance-0.7.16 → llguidance-0.7.17}/docs/optimizations.md +0 -0
  35. {llguidance-0.7.16 → llguidance-0.7.17}/docs/special_tokens.md +0 -0
  36. {llguidance-0.7.16 → llguidance-0.7.17}/docs/syntax.md +0 -0
  37. {llguidance-0.7.16 → llguidance-0.7.17}/docs/toktrie.md +0 -0
  38. {llguidance-0.7.16 → llguidance-0.7.17}/json_stats/Cargo.toml +0 -0
  39. {llguidance-0.7.16 → llguidance-0.7.17}/json_stats/jstats.sh +0 -0
  40. {llguidance-0.7.16 → llguidance-0.7.17}/json_stats/scripts/split-stats.sh +0 -0
  41. {llguidance-0.7.16 → llguidance-0.7.17}/json_stats/scripts/split_plot.py +0 -0
  42. {llguidance-0.7.16 → llguidance-0.7.17}/json_stats/src/lib.rs +0 -0
  43. {llguidance-0.7.16 → llguidance-0.7.17}/json_stats/src/stats.rs +0 -0
  44. {llguidance-0.7.16 → llguidance-0.7.17}/parser/LICENSE +0 -0
  45. {llguidance-0.7.16 → llguidance-0.7.17}/parser/README.md +0 -0
  46. {llguidance-0.7.16 → llguidance-0.7.17}/parser/build.rs +0 -0
  47. {llguidance-0.7.16 → llguidance-0.7.17}/parser/cbindgen.toml +0 -0
  48. {llguidance-0.7.16 → llguidance-0.7.17}/parser/grammars/character.json +0 -0
  49. {llguidance-0.7.16 → llguidance-0.7.17}/parser/grammars/json.json +0 -0
  50. {llguidance-0.7.16 → llguidance-0.7.17}/parser/llguidance.h +0 -0
  51. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/api.rs +0 -0
  52. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/constraint.rs +0 -0
  53. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/earley/from_guidance.rs +0 -0
  54. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/earley/grammar.rs +0 -0
  55. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/earley/lexer.rs +0 -0
  56. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/earley/lexerspec.rs +0 -0
  57. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/earley/mod.rs +0 -0
  58. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/earley/perf.rs +0 -0
  59. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/earley/regexvec.rs +0 -0
  60. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/earley/slicer.rs +0 -0
  61. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/factory.rs +0 -0
  62. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/ffi.rs +0 -0
  63. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/ffi_par.rs +0 -0
  64. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/grammar_builder.rs +0 -0
  65. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/json/README.md +0 -0
  66. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/json/context_ref.rs +0 -0
  67. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/json/context_simple/context.rs +0 -0
  68. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/json/context_simple/draft.rs +0 -0
  69. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/json/context_simple/mod.rs +0 -0
  70. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/json/formats.rs +0 -0
  71. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/json/mod.rs +0 -0
  72. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/json/numeric.rs +0 -0
  73. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/json/shared_context.rs +0 -0
  74. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/json_validation.rs +0 -0
  75. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/lark/README.md +0 -0
  76. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/lark/ast.rs +0 -0
  77. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/lark/common.rs +0 -0
  78. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/lark/compiler.rs +0 -0
  79. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/lark/lexer.rs +0 -0
  80. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/lark/mod.rs +0 -0
  81. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/lark/parser.rs +0 -0
  82. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/lib.rs +0 -0
  83. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/logging.rs +0 -0
  84. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/matcher.rs +0 -0
  85. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/output.rs +0 -0
  86. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/panic_utils.rs +0 -0
  87. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/regex_rewrite.rs +0 -0
  88. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/stop_controller.rs +0 -0
  89. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/substring.rs +0 -0
  90. {llguidance-0.7.16 → llguidance-0.7.17}/parser/src/tokenizer_json.rs +0 -0
  91. {llguidance-0.7.16 → llguidance-0.7.17}/plan.md +0 -0
  92. {llguidance-0.7.16 → llguidance-0.7.17}/python/llguidance/__init__.py +0 -0
  93. {llguidance-0.7.16 → llguidance-0.7.17}/python/llguidance/_grammar_from.py +0 -0
  94. {llguidance-0.7.16 → llguidance-0.7.17}/python/llguidance/_lib.pyi +0 -0
  95. {llguidance-0.7.16 → llguidance-0.7.17}/python/llguidance/_struct_tag.py +0 -0
  96. {llguidance-0.7.16 → llguidance-0.7.17}/python/llguidance/_tokenizer.py +0 -0
  97. {llguidance-0.7.16 → llguidance-0.7.17}/python/llguidance/_util.py +0 -0
  98. {llguidance-0.7.16 → llguidance-0.7.17}/python/llguidance/cli.py +0 -0
  99. {llguidance-0.7.16 → llguidance-0.7.17}/python/llguidance/gbnf_to_lark.py +0 -0
  100. {llguidance-0.7.16 → llguidance-0.7.17}/python/llguidance/hf.py +0 -0
  101. {llguidance-0.7.16 → llguidance-0.7.17}/python/llguidance/mlx.py +0 -0
  102. {llguidance-0.7.16 → llguidance-0.7.17}/python/llguidance/numpy.py +0 -0
  103. {llguidance-0.7.16 → llguidance-0.7.17}/python/llguidance/py.typed +0 -0
  104. {llguidance-0.7.16 → llguidance-0.7.17}/python/llguidance/torch.py +0 -0
  105. {llguidance-0.7.16 → llguidance-0.7.17}/python/mypy.ini +0 -0
  106. {llguidance-0.7.16 → llguidance-0.7.17}/python/torch_tests/__init__.py +0 -0
  107. {llguidance-0.7.16 → llguidance-0.7.17}/python/torch_tests/test_bitmask.py +0 -0
  108. {llguidance-0.7.16 → llguidance-0.7.17}/python/torch_tests/test_hf.py +0 -0
  109. {llguidance-0.7.16 → llguidance-0.7.17}/python/torch_tests/test_matcher.py +0 -0
  110. {llguidance-0.7.16 → llguidance-0.7.17}/python_ext/src/lib.rs +0 -0
  111. {llguidance-0.7.16 → llguidance-0.7.17}/python_ext/src/llinterpreter.rs +0 -0
  112. {llguidance-0.7.16 → llguidance-0.7.17}/python_ext/src/llmatcher.rs +0 -0
  113. {llguidance-0.7.16 → llguidance-0.7.17}/python_ext/src/parserlimits.rs +0 -0
  114. {llguidance-0.7.16 → llguidance-0.7.17}/python_ext/src/py.rs +0 -0
  115. {llguidance-0.7.16 → llguidance-0.7.17}/python_ext/src/pyjson.rs +0 -0
  116. {llguidance-0.7.16 → llguidance-0.7.17}/sample_parser/Cargo.toml +0 -0
  117. {llguidance-0.7.16 → llguidance-0.7.17}/sample_parser/README.md +0 -0
  118. {llguidance-0.7.16 → llguidance-0.7.17}/sample_parser/cli.sh +0 -0
  119. {llguidance-0.7.16 → llguidance-0.7.17}/sample_parser/data/blog.sample.json +0 -0
  120. {llguidance-0.7.16 → llguidance-0.7.17}/sample_parser/data/blog.schema.json +0 -0
  121. {llguidance-0.7.16 → llguidance-0.7.17}/sample_parser/data/blog.schema.ll.json +0 -0
  122. {llguidance-0.7.16 → llguidance-0.7.17}/sample_parser/data/from-llama.cpp/README.md +0 -0
  123. {llguidance-0.7.16 → llguidance-0.7.17}/sample_parser/data/from-llama.cpp/arithmetic.gbnf +0 -0
  124. {llguidance-0.7.16 → llguidance-0.7.17}/sample_parser/data/from-llama.cpp/c.gbnf +0 -0
  125. {llguidance-0.7.16 → llguidance-0.7.17}/sample_parser/data/from-llama.cpp/chess.gbnf +0 -0
  126. {llguidance-0.7.16 → llguidance-0.7.17}/sample_parser/data/from-llama.cpp/english.gbnf +0 -0
  127. {llguidance-0.7.16 → llguidance-0.7.17}/sample_parser/data/from-llama.cpp/japanese.gbnf +0 -0
  128. {llguidance-0.7.16 → llguidance-0.7.17}/sample_parser/data/from-llama.cpp/json.gbnf +0 -0
  129. {llguidance-0.7.16 → llguidance-0.7.17}/sample_parser/data/from-llama.cpp/json_arr.gbnf +0 -0
  130. {llguidance-0.7.16 → llguidance-0.7.17}/sample_parser/data/from-llama.cpp/list.gbnf +0 -0
  131. {llguidance-0.7.16 → llguidance-0.7.17}/sample_parser/data/from-llama.cpp/vllm-sql.gbnf +0 -0
  132. {llguidance-0.7.16 → llguidance-0.7.17}/sample_parser/data/lark.lark +0 -0
  133. {llguidance-0.7.16 → llguidance-0.7.17}/sample_parser/data/rfc.lark +0 -0
  134. {llguidance-0.7.16 → llguidance-0.7.17}/sample_parser/data/rfc.xml +0 -0
  135. {llguidance-0.7.16 → llguidance-0.7.17}/sample_parser/data/ulysses.md +0 -0
  136. {llguidance-0.7.16 → llguidance-0.7.17}/sample_parser/gtest.sh +0 -0
  137. {llguidance-0.7.16 → llguidance-0.7.17}/sample_parser/lark.sh +0 -0
  138. {llguidance-0.7.16 → llguidance-0.7.17}/sample_parser/run.sh +0 -0
  139. {llguidance-0.7.16 → llguidance-0.7.17}/sample_parser/src/lib.rs +0 -0
  140. {llguidance-0.7.16 → llguidance-0.7.17}/sample_parser/src/minimal.rs +0 -0
  141. {llguidance-0.7.16 → llguidance-0.7.17}/sample_parser/src/sample_parser.rs +0 -0
  142. {llguidance-0.7.16 → llguidance-0.7.17}/sample_parser/tests/test_raw_parser.rs +0 -0
  143. {llguidance-0.7.16 → llguidance-0.7.17}/sample_parser/tests/test_stop.rs +0 -0
  144. {llguidance-0.7.16 → llguidance-0.7.17}/scripts/annotate_asm.js +0 -0
  145. {llguidance-0.7.16 → llguidance-0.7.17}/scripts/bump.py +0 -0
  146. {llguidance-0.7.16 → llguidance-0.7.17}/scripts/cbindgen.sh +0 -0
  147. {llguidance-0.7.16 → llguidance-0.7.17}/scripts/checklinks.py +0 -0
  148. {llguidance-0.7.16 → llguidance-0.7.17}/scripts/checklinks.sh +0 -0
  149. {llguidance-0.7.16 → llguidance-0.7.17}/scripts/ci-publish.py +0 -0
  150. {llguidance-0.7.16 → llguidance-0.7.17}/scripts/disasm.sh +0 -0
  151. {llguidance-0.7.16 → llguidance-0.7.17}/scripts/gbnf_to_lark.py +0 -0
  152. {llguidance-0.7.16 → llguidance-0.7.17}/scripts/gen-testcase.py +0 -0
  153. {llguidance-0.7.16 → llguidance-0.7.17}/scripts/git-version.sh +0 -0
  154. {llguidance-0.7.16 → llguidance-0.7.17}/scripts/install-deps.sh +0 -0
  155. {llguidance-0.7.16 → llguidance-0.7.17}/scripts/jsonschema-stats.js +0 -0
  156. {llguidance-0.7.16 → llguidance-0.7.17}/scripts/remote-guidance-test.sh +0 -0
  157. {llguidance-0.7.16 → llguidance-0.7.17}/scripts/rust-size.js +0 -0
  158. {llguidance-0.7.16 → llguidance-0.7.17}/scripts/rust_size.py +0 -0
  159. {llguidance-0.7.16 → llguidance-0.7.17}/scripts/tokenizer_test.py +0 -0
  160. {llguidance-0.7.16 → llguidance-0.7.17}/scripts/update-git.py +0 -0
  161. {llguidance-0.7.16 → llguidance-0.7.17}/toktrie/LICENSE +0 -0
  162. {llguidance-0.7.16 → llguidance-0.7.17}/toktrie/README.md +0 -0
  163. {llguidance-0.7.16 → llguidance-0.7.17}/toktrie/src/bytes.rs +0 -0
  164. {llguidance-0.7.16 → llguidance-0.7.17}/toktrie/src/lib.rs +0 -0
  165. {llguidance-0.7.16 → llguidance-0.7.17}/toktrie/src/recognizer.rs +0 -0
  166. {llguidance-0.7.16 → llguidance-0.7.17}/toktrie/src/rng.rs +0 -0
  167. {llguidance-0.7.16 → llguidance-0.7.17}/toktrie/src/svob.rs +0 -0
  168. {llguidance-0.7.16 → llguidance-0.7.17}/toktrie/src/tokenv.rs +0 -0
  169. {llguidance-0.7.16 → llguidance-0.7.17}/toktrie/src/toktree.rs +0 -0
  170. {llguidance-0.7.16 → llguidance-0.7.17}/toktrie/tests/test_svob.rs +0 -0
  171. {llguidance-0.7.16 → llguidance-0.7.17}/toktrie_hf_downloader/LICENSE +0 -0
  172. {llguidance-0.7.16 → llguidance-0.7.17}/toktrie_hf_downloader/src/lib.rs +0 -0
  173. {llguidance-0.7.16 → llguidance-0.7.17}/toktrie_hf_tokenizers/LICENSE +0 -0
  174. {llguidance-0.7.16 → llguidance-0.7.17}/toktrie_hf_tokenizers/src/lib.rs +0 -0
@@ -4,6 +4,11 @@ All notable changes to this project will be documented in this file. Dates are d
4
4
 
5
5
  If a release doesn't introduce any interesting changes (build fixes etc.), it's skipped.
6
6
 
7
+ #### [0.7.17](https://github.com/guidance-ai/llguidance/compare/v0.7.16...0.7.17) 2025-04-22
8
+
9
+ - support for min/maxProperties in JSON Schema [`#168`](https://github.com/guidance-ai/llguidance/issues/168)
10
+ - give priority to <[123]> over "foo" in grammar [`3e9f3b5`](https://github.com/guidance-ai/llguidance/commit/3e9f3b5e8c1cac92daab6e9709f01ebccc20342b)
11
+
7
12
  #### [0.7.16](https://github.com/guidance-ai/llguidance/compare/v0.7.15...0.7.16) 2025-04-17
8
13
 
9
14
  - fix special token tokenization [`ae7870f`](https://github.com/guidance-ai/llguidance/commit/ae7870f05ca0de68599088607ba742b7071f92ad)
@@ -1178,7 +1178,7 @@ checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856"
1178
1178
 
1179
1179
  [[package]]
1180
1180
  name = "llguidance"
1181
- version = "0.7.16"
1181
+ version = "0.7.17"
1182
1182
  dependencies = [
1183
1183
  "anyhow",
1184
1184
  "derivre",
@@ -1197,7 +1197,7 @@ dependencies = [
1197
1197
 
1198
1198
  [[package]]
1199
1199
  name = "llguidance_py"
1200
- version = "0.7.16"
1200
+ version = "0.7.17"
1201
1201
  dependencies = [
1202
1202
  "anyhow",
1203
1203
  "bytemuck",
@@ -2362,7 +2362,7 @@ dependencies = [
2362
2362
 
2363
2363
  [[package]]
2364
2364
  name = "toktrie"
2365
- version = "0.7.16"
2365
+ version = "0.7.17"
2366
2366
  dependencies = [
2367
2367
  "anyhow",
2368
2368
  "bytemuck",
@@ -2373,7 +2373,7 @@ dependencies = [
2373
2373
 
2374
2374
  [[package]]
2375
2375
  name = "toktrie_hf_downloader"
2376
- version = "0.7.16"
2376
+ version = "0.7.17"
2377
2377
  dependencies = [
2378
2378
  "anyhow",
2379
2379
  "hf-hub",
@@ -2384,7 +2384,7 @@ dependencies = [
2384
2384
 
2385
2385
  [[package]]
2386
2386
  name = "toktrie_hf_tokenizers"
2387
- version = "0.7.16"
2387
+ version = "0.7.17"
2388
2388
  dependencies = [
2389
2389
  "anyhow",
2390
2390
  "log",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: llguidance
3
- Version: 0.7.16
3
+ Version: 0.7.17
4
4
  License-File: LICENSE
5
5
  Summary: Bindings for the Low-level Guidance (llguidance) Rust library for use within Guidance
6
6
  Author: Michal Moskal
@@ -8,6 +8,9 @@ but [see below](#departures-from-json-schema-semantics) for some known differenc
8
8
  There are various limits on the size of the input schema and the resulting grammar.
9
9
  However, we've successfully processed schemas up to 4 MB in size.
10
10
 
11
+ For features that are not fully supported, we provide percentages of support among
12
+ the 11k [maskbench](https://github.com/guidance-ai/jsonschemabench/tree/main/maskbench) schemas.
13
+
11
14
  ## Supported JSON schema features
12
15
 
13
16
  Following JSON schema features are supported.
@@ -15,8 +18,8 @@ Following JSON schema features are supported.
15
18
  Core features:
16
19
 
17
20
  - `anyOf`
18
- - `oneOf` - converted to `anyOf` only when provably equivalent
19
- - `allOf` - intersection of certain schemas is not supported right now
21
+ - `oneOf` (68%) - converted to `anyOf` only when provably equivalent
22
+ - `allOf` (98%) - intersection of certain schemas is not supported right now
20
23
  - `$ref` - external/remote refs unsupported
21
24
  - `const`
22
25
  - `enum`
@@ -34,15 +37,20 @@ Object features:
34
37
 
35
38
  - `properties` - order of properties is fixed to the order in schema
36
39
  - `additionalProperties`
37
- - `patternProperties` - they have to be disjoint
40
+ - `patternProperties` (98%) - they have to be disjoint
38
41
  - `required`
42
+ - `minProperties` and `maxProperties` (90%) - only supported when everything defined in `properties`
43
+ is `required` (i.e., it only limits `additionalProperties` or `patternProperties`) - this covers
44
+ case of an object used as a map with upper/lower bounds on the number of keys;
45
+ there is also some special handling for either/both being `0` or `1` -
46
+ mostly for the case of at-least-one-property-required
39
47
 
40
48
  String features:
41
49
 
42
50
  - `minLength`
43
51
  - `maxLength`
44
- - `pattern`
45
- - `format`, with the following formats: `date-time`, `time`, `date`, `duration`, `email`, `hostname`, `ipv4`, `ipv6`, `uuid`,
52
+ - `pattern` (99%) - lookarounds not supported
53
+ - `format` (74%), with the following formats: `date-time`, `time`, `date`, `duration`, `email`, `hostname`, `ipv4`, `ipv6`, `uuid`,
46
54
 
47
55
  Number features (for both integer and number):
48
56