slack / hack-json-schema
该软件包的最新版本(v4.102.15)没有可用的许可信息。
Hack JSON Schema 生成器
v4.102.15
2024-02-23 20:14 UTC
Requires
- facebook/hack-codegen: ^4.1.0
- hhvm/hsl: ^4.0.1
- hhvm/type-assert: ^4.1.0
Requires (Dev)
- facebook/fbexpect: ^2.3.0
- hhvm/hacktest: ^1.3|^2.0
- hhvm/hhast: ^4.0.5
- dev-master
- v4.102.15
- v4.102.14
- v4.102.13
- v4.102.12
- v4.102.11
- v4.102.10
- v4.102.9
- v4.102.8
- v4.102.7
- v4.102.6
- v4.102.5
- v4.102.4
- v4.102.3
- v4.102.2
- v4.102.1
- 4.102.0
- 4.80.0
- v4.56.5
- v4.56.4
- v4.56.3
- v4.56.2
- v4.56.1
- v4.27.1
- v4.27.0
- v4.0.0
- dev-ih_coerce_refs
- dev-fix-cyclic-ref
- dev-scobb-hack-generated-enum
- dev-ih_fix_empty_objects
- dev-ih_optimized_any_of_unions
- dev-ih_shape_unions_1
- dev-ih_shape_unions
- dev-ih_fix_ci
- dev-ih_nonnull_unions
- dev-number-max-constraint
- dev-ih_oneof
- dev-ih_fix_discard_additional_properties
- dev-ih_allow_disabling_type_inference
- dev-ih_bugfix_merged_shapes
- dev-ih_improve_UntypedBuilder_type_inference
- dev-ih_use_null_type
- dev-ih_untyped_coerce_default
- dev-ih_top_level_ref_aliases
- dev-ih_more_refactor
- dev-ih_handle_hackEnum_refs
- dev-ih_support_unique_hackEnum
- dev-ih_format
- dev-ih_bump_hhvm_version
- dev-ih_update_hhconfig
- dev-ih_hackEnum_constraint
- dev-ih_upgrade_hhvm
- dev-ih_schema_extension_v2
- dev-ih_allow_toplevel_refs
- dev-ignore-additional-properties
- dev-ssandler_function_reference_syntax
- dev-mwildehahn-patch-1
- dev-Roach-CLA-assistant-test
This package is auto-updated.
Last update: 2024-09-04 22:03:12 UTC
README
Hack JSON Schema 是一个用于在 Hack 中使用 JSON 模式验证 JSON 输入的库。
给定一个 JSON 模式文件,您可以使用 Hack 生成一个验证器来验证传入的 JSON 是否与该模式相符。如果 JSON 符合模式,验证器将返回类型化输出。
生成有以下好处
- 我们不必在运行时解析 JSON 模式来验证传入的对象。
- 我们可以输出从 JSON 模式生成的类型化形状,从而提高下游代码的类型安全性。
用法
Codegen::forPath
使用此库最基本的方法是从 JSON 模式文件生成一个验证器
use type Slack\Hack\JsonSchema\Codegen\Codegen; Codegen::forPath('/path/to/json-schema.json', shape( 'validator' => shape( 'file' => '/path/to/MyJsonSchemaValidator.php', 'class' => 'MyJsonSchemaValidator', ), ))->build();
/path/to/MyJsonSchemaValidator.php
现在存在一个类
final class MyJsonSchemaValidator extends BaseValidator { ... class contents }
每个验证器都有一个 validate
方法,它接受一个解码后的 JSON 对象
$json = json_decode($args['json_input'], true); $validator = new MyJsonSchemaValidator($json); $validator->validate(); if (!$validator->isValid()) { print_r("invalid_json", $validator->getErrors()); return; } // JSON is valid, get typed object: $validated = $validator->getValidatedInput();
Codegen::forPaths
如果您有多个利用 $ref
属性的 JSON 模式,您应该优先使用 Codegen::forPaths
而不是 Codegen::forPath
。
Codegen::forPath
的工作流程是
- 给定一个 JSON 模式,"取消引用"该模式。取消引用是解析所有
$ref
路径及其实际模式的过程。这创建了一个单一取消引用的方案。 - 使用取消引用的方案,生成一个验证器。
如果您只有一个主要方案,这效果很好,但如果您有多个方案,每个方案都有共同的引用,您将开始生成大量的重复代码。
在这些情况下,您可以使用 Codegen::forPaths
。
use type Slack\Hack\JsonSchema\Codegen\Codegen; $schemas = vec['/path/to/json-schema-1.json', '/path/to/json-schema-2.json', '/path/to/json-schema-3.json']; Codegen::forPaths($schemas, shape( 'validator' => shape( 'refs' => shape( 'unique' => shape( 'source_root' => '/path/to', 'output_root' => '/path/gen' ) ) ), ))->build();
通过定义 source_root
和 output_root
,我们可以为每个遇到的 $ref
生成唯一的验证器。然后,我们可以重用这些验证器来生成其他验证器。
开发
安装依赖项
我们通过 Docker 处理所有依赖项。这很简单
make install
运行测试
make test
相关库
此库受到了以下相关库中想法的启发
许可
Hack JSON Schema 是 MIT 许可的。